数据库系统概论 ---- 第三章 -- 关系数据库标准语言SQL( 3.4 数据查询 )(二)

简介: 数据库系统概论 ---- 第三章 -- 关系数据库标准语言SQL( 3.4 数据查询 )(二)
② 确定范围

谓词 BETWEEN…AND…NOT BETWEEN…AND…可以用来查找属性值在(或不在)指定范围内的元组,其中 BETWEEN后是范围的下限(即低值),AND后是范围的上限(即高值)。

查询的结果包含下限和上限

[ 例 3.25 ] 查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别、年龄

SELECT Sname, Sdept, Sage
FROM mydb.Student
WHERE Sage BETWEEN 20 AND 23;

[ 例 3.26 ] 查询年龄不在20~23岁(包括20岁和23岁)之间的学生的姓名、系别、年龄

SELECT Sname, Sdept, Sage
FROM mydb.Student
WHERE Sage NOT BETWEEN 20 AND 23;

③确定集合

谓词IN可以用来查找属性值数据指定集合的元组,NOT IN可以用于查找属性值不在指定集合的元组。

[ 例 3.27 ] 查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别

SELECT Sname, Ssex
FROM mydb.Student
WHERE Sdept IN ( 'IS', 'MA', 'CS' );

[ 例 3.28 ] 查询不是信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别

SELECT Sname, Ssex
FROM mydb.Student
WHERE Sdept NOT IN ( 'IS', 'MA', 'CS' );

④ 字符匹配

LIKE可以用于字符串匹配,可以进行完全匹配,也可以进行模糊匹配。

  • % 代表任意长度的字符串
  • _ 代表任意单个字符

例:查询学号为201215121的学生的详细情况

SELECT * FROM mydb.Student
WHERE Sno LIKE '201215121';
SELECT * FROM mydb.Student
WHERE Sno = '201215121';

如果LIKE后面的匹配串中不含通配符,可以使用=代替LIKE,使用!=<>代替NOT LIKE

例:查询所有姓刘学生的姓名、学号和性别

SELECT Sname, Sno, Ssex
FROM mydb.Student
WHERE Sname LIKE '刘%';

例:查询姓"欧阳"且全名为三个汉字的学生的姓名

SELECT Sname
FROM mydb.Student
WHERE Sname LIKE '欧阳_';

注意:数据库字符为ASCII,一个汉字需要两个_;如果为GBK只要一个

例:查询名字中第2个字为"阳"字的学生的姓名和学号

SELECT Sname, Sno
FROM mydb.Student
WHERE Sname LIKE '_阳%';

例:查询所有不姓刘的学生姓名

SELECT Sname
FROM mydb.Student
WHERE Sname NOT LIKE '刘%';

如果查询的字符串本身就有通配符%_,需要使用ESCAPE指定转义符号,默认为\

SELECT Sname
FROM mydb.Student
WHERE Sname LIKE '\_%';
SELECT Sname
FROM mydb.Student
WHERE Sname LIKE '$_%' ESCAPE '$';
⑤ 涉及空值的查询

例:某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号

SELECT Sno, Cno
FROM mydb.SC
WHERE Grade IS NULL;

注意 IS 不能用 = 进行代替

例:查所有有成绩的学生学号和课程号

SELECT Sno, Cno
FROM mydb.SC
WHERE Grade IS NOT NULL;

⑥ 多重条件查询

逻辑运算符 ANDOR 可以用来连接多个查询条件,AND的优先级高于OR

例:查询计算机系年龄在20岁以下的学生姓名

SELECT Sname
FROM mydb.Student
WHERE Sdept = 'CS' AND Sage<20;

IN谓词实际上是多个OR运算符的缩写

例:查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别

SELECT Sname, Ssex
FROM mydb.Student
WHERE Sdept = 'IS' OR Sdept = 'MA' OR Sdept = 'CS';
# 等价于
SELECT Sname, Ssex
FROM mydb.Student
WHERE Sdept IN ( 'IS', 'MA', 'CS' );

3. ORDER BY 子句

可以使用ORDER BY子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排序,默认为升序

例:查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列

SELECT Sno, Grade
FROM mydb.SC
WHERE Cno = '3'
ORDER BY Grade DESC ;

例:查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列

SELECT *
FROM mydb.Student
ORDER BY Sdept ASC , Sage DESC ;

对于空值,排序时显示的次序由具体系统实现来决定。 例如按升序排,含空值的元组最后显示;按降序排,空值的元组则最先显示。各个系统的实现可以不同,只要保持一致就行。

mysql中升序,空值最先显示;降序,空值最后显示。

在SC表中插入一条成绩为空的新数据

SELECT Sno, Grade
FROM SC
WHERE Cno = '3'
ORDER BY Grade ASC ;

SELECT Sno, Grade
FROM SC
WHERE Cno = '3'
ORDER BY Grade DESC ;


相关实践学习
MySQL数据库快速部署实践
本场景主要介绍如何在一台配置了CentOS 7.7版本的ECS实例(云服务器)上安装mysql,执行mysql的常用操作,学习基本的SQL语句。
相关文章
|
2月前
|
SQL 数据管理 关系型数据库
SQL 语言入门:开启数据管理的大门
在数字化时代,数据已成为核心资产,而 SQL 作为操作关系型数据库的标准语言,是数据从业者、程序员及办公人员必备技能。本文从基础概念讲起,详解 SQL 的核心用法,包括数据查询、插入、修改、删除及表结构操作,并通过实例演示帮助读者快速上手。掌握 SQL,不仅能提升数据处理效率,更为深入理解数据管理打下坚实基础。
|
1月前
|
SQL Oracle 关系型数据库
SQL语言小结
针对数据库、表单和数据行的增删改,没有涉及到sql真正的用途也就是查询,sql提供的查询语句的关键字占 sql 语言的一半之多,查询语句还是得单拿出来讲,不然太多了。 因为没有涉及到查询,所以sql的新增和修改都是很笼统的做法,drop、alter drop、delete这些很容易,逻辑性也不强,再次说明sql的真正精髓在于查询,不然为啥叫做结构化查询语言
259 0
|
1月前
|
SQL 关系型数据库 MySQL
(SQL)SQL语言中的查询语句整理
查询语句在sql中占了挺大一部分篇幅,因为在数据库中使用查询语句的次数远多于更新与删除命令。而查询语句比起其他语句要更加的复杂,可因为sql是数据库不可或缺的一部分,所以即使不懂,也必须得弄懂,以上。
197 0
|
8月前
|
SQL 存储 缓存
YashanDB SQL语言
YashanDB SQL语言
|
9月前
|
SQL 数据可视化 IDE
SQL做数据分析的困境,查询语言无法回答的真相
SQL 在简单数据分析任务中表现良好,但面对复杂需求时显得力不从心。例如,统计新用户第二天的留存率或连续活跃用户的计算,SQL 需要嵌套子查询和复杂关联,代码冗长难懂。Python 虽更灵活,但仍需变通思路,复杂度较高。相比之下,SPL(Structured Process Language)语法简洁、支持有序计算和分组子集保留,具备强大的交互性和调试功能,适合处理复杂的深度数据分析任务。SPL 已开源免费,是数据分析师的更好选择。
|
SQL Oracle 关系型数据库
SQL语言的主要标准及其应用技巧
SQL(Structured Query Language)是数据库领域的标准语言,广泛应用于各种数据库管理系统(DBMS)中,如MySQL、Oracle、SQL Server等
429 9
|
SQL 关系型数据库 MySQL
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
262 11
|
SQL 关系型数据库 MySQL
|
SQL 数据库 开发者
|
2月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
126 3

热门文章

最新文章