数据库系统概论 ---- 第三章 -- 关系数据库标准语言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 ;


相关文章
|
2天前
|
SQL 存储 关系型数据库
sql数据库的相关概念与底层介绍
sql数据库的相关概念与底层介绍
25 0
|
13天前
|
SQL 安全 关系型数据库
MySQL技能完整学习列表3、SQL语言基础——3、SQL运算符和函数
MySQL技能完整学习列表3、SQL语言基础——3、SQL运算符和函数
22 0
|
13天前
|
SQL 关系型数据库 MySQL
MySQL技能完整学习列表3、SQL语言基础——1、SQL(Structured Query Language)简介——2、基本SQL语句:SELECT、INSERT、UPDATE、DELETE
MySQL技能完整学习列表3、SQL语言基础——1、SQL(Structured Query Language)简介——2、基本SQL语句:SELECT、INSERT、UPDATE、DELETE
31 0
|
18天前
|
SQL 人工智能 运维
数据库基础入门 — SQL排序与分页
数据库基础入门 — SQL排序与分页
15 0
|
18天前
|
SQL 人工智能 运维
数据库基础入门 — SQL运算符
数据库基础入门 — SQL运算符
15 0
|
18天前
|
SQL 人工智能 运维
数据库基础入门 — SQL
数据库基础入门 — SQL
26 0
|
19天前
|
SQL 存储 数据库
【数据库SQL server】自学终极笔记
【数据库SQL server】自学终极笔记
72 0
|
19天前
|
SQL 算法 数据库
【数据库SQL server】关系数据库标准语言SQL之数据更新
【数据库SQL server】关系数据库标准语言SQL之数据更新
20 0
|
19天前
|
SQL 算法 数据库
【数据库SQL server】关系数据库标准语言SQL之数据查询
【数据库SQL server】关系数据库标准语言SQL之数据查询
44 0
|
19天前
|
SQL 数据库 数据库管理
【数据库SQL server】关系数据库标准语言SQL的基本知识
【数据库SQL server】关系数据库标准语言SQL的基本知识
33 0