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


相关实践学习
体验RDS通用云盘核心能力
本次实验任务是创建一个云数据库RDS MySQL(通用云盘),并通过云服务器ECS对RDS MySQL实例进行压测,体验IO加速和IO突发带来的性能提升;并通过DMS执行DDL,将数据归档到OSS,再结合云盘缩容,体验数据归档带来的成本优势。
相关文章
|
23天前
|
SQL 存储 缓存
YashanDB SQL语言
YashanDB SQL语言
|
2月前
|
SQL 数据可视化 IDE
SQL做数据分析的困境,查询语言无法回答的真相
SQL 在简单数据分析任务中表现良好,但面对复杂需求时显得力不从心。例如,统计新用户第二天的留存率或连续活跃用户的计算,SQL 需要嵌套子查询和复杂关联,代码冗长难懂。Python 虽更灵活,但仍需变通思路,复杂度较高。相比之下,SPL(Structured Process Language)语法简洁、支持有序计算和分组子集保留,具备强大的交互性和调试功能,适合处理复杂的深度数据分析任务。SPL 已开源免费,是数据分析师的更好选择。
|
6月前
|
SQL Oracle 关系型数据库
SQL语言的主要标准及其应用技巧
SQL(Structured Query Language)是数据库领域的标准语言,广泛应用于各种数据库管理系统(DBMS)中,如MySQL、Oracle、SQL Server等
238 9
|
6月前
|
SQL 关系型数据库 MySQL
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
165 11
|
8月前
|
SQL 关系型数据库 MySQL
|
8月前
|
SQL 数据库 开发者
|
8月前
|
SQL 存储 大数据
SQL 语言发展史简直太震撼啦!从诞生到现代数据处理,见证一场奇妙的演变之旅,快来感受!
【8月更文挑战第31天】SQL(结构化查询语言)自20世纪70年代由IBM研究员E.F. Codd提出以来,已成为现代数据处理不可或缺的一部分。它最初简化了层次和网状模型中复杂的存储与检索问题,通过基本的SELECT、FROM和WHERE关键字实现了数据查询。80年代,SQL在商业数据库中广泛应用,引入了GROUP BY、HAVING和ORDER BY等功能,增强了数据分析能力。90年代,互联网和企业信息化推动了SQL的进一步优化与扩展,支持分布式数据库和数据仓库等技术。
202 0
|
8月前
|
SQL 存储 NoSQL
从SQL到NoSQL:理解不同数据库类型的选择与应用——深入比较数据模型、扩展性、查询语言、一致性和适用场景,为数据存储提供全面决策指南
【8月更文挑战第31天】在信息技术飞速发展的今天,数据库的选择至关重要。传统的SQL数据库因其稳定的事务性和强大的查询能力被广泛应用,而NoSQL数据库则凭借其灵活性和水平扩展性受到关注。本文对比了两种数据库类型的特点,帮助开发者根据应用场景做出合理选择。SQL数据库遵循关系模型,适合处理结构化数据和复杂查询;NoSQL数据库支持多种数据模型,适用于非结构化或半结构化数据。SQL数据库在一致性方面表现优异,但扩展性较差;NoSQL数据库则设计之初便考虑了水平扩展性。SQL使用成熟的SQL语言,NoSQL的查询语言更为灵活。
183 0
|
7月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
9月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
252 13

热门文章

最新文章