【ZZULI】数据库实验三
- 查询指定的列,查询表中用户感兴趣的部分属性列
- 查询经过计算的列、改变列标题
- 查询满足条件的元组,涉及空值的查询、多重条件查询
- 查询满足条件的元组
- 空值的查询
- 多重条件查询
前言本实验使用的语言是T-SQL,在开始查询前确保已经往表格中插入了一些数据。
查询指定的列,查询表中用户感兴趣的部分属性列
-
查询学生表中的姓名和学号字段:
use StudentManagementSystem -- 切换到学生管理系统数据库 SELECT Sno, Sname FROM Student -- 查询学生表中的学号和姓名字段
运行结果:
-
查询学生表中的姓名、学号和所在系。
use StudentManagementSystem -- 切换到学生管理系统数据库 SELECT Sname, Sno, Sdept FROM Student -- 查询学生表中的姓名学号和所在系
运行结果:
-
查询学生表中的全部列:
use StudentManagementSystem -- 切换到学生管理系统数据库 SELECT * FROM Student -- 查询学生表中的全部列
- 也可以把所有的列都写出来。
运行结果:
查询经过计算的列、改变列标题
1.查询经过计算的列,列出学生表中的姓名和出生年份:
use StudentManagementSystem -- 切换到学生管理系统数据库
SELECT Sname AS 姓名,2024 - Sage AS 出生年份 FROM Student --列出学生表中的姓名,和他们的出生年份
运行结果:
- 使用
AS
关键字跟在指定列或者经过计算的列后面可以给该列重命名。
-
除了给给指定列重命名,我们还可以增加常量列,做到同样效果:
use StudentManagementSystem -- 切换到学生管理系统数据库 SELECT Sname,'出生年份:', 2024-Sage FROM Student -- 额外增加常量列
运行结果:
查询满足条件的元组,涉及空值的查询、多重条件查询
查询满足条件的元组
-
查询计算机系全体学生的姓名:
use StudentManagementSystem -- 切换到学生管理系统数据库 SELECT Sname FROM Student WHERE Sdept = '计算机系' -- 查询系部为计算机系的全体学生的姓名
- 注意是英文单引号,不是双引号。
运行结果:
-
查询年龄在20岁以下的学生的姓名及年龄。
use StudentManagementSystem -- 切换到学生管理系统数据库 SELECT Sname, Sage FROM Student WHERE Sage < 20--查询年龄在20岁下的学生的姓名及其年龄
运行结果:
-
查询考试有不及格学生的学号。
use StudentManagementSystem -- 选择学生管理系统数据库 SELECT DISTINCT Sno,Grade,Cno FROM SC WHERE Grade < 60--查询考试成绩有不及格的学生的学号,成绩和课程编号
运行结果:
-
查询年龄在20~23岁之间的学生的姓名、所在系和年龄。
use StudentManagementSystem -- 选择学生管理系统数据库 SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN 20 AND 23 --查询年龄在20~23岁之间的学生的姓名、所在系和年龄。
运行结果:
-
查询年龄不在20~23之间的学生姓名、所在系和年龄。
use StudentManagementSystem -- 选择学生管理系统数据库 SELECT Sname, Sdept, Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23 --查询年龄不在20~23岁之间的学生的姓名、所在系和年龄。
运行结果:
-
查询体育系、数学系和计算机系学生的姓名和性别。
use StudentManagementSystem -- 选择学生管理系统数据库 SELECT Sname, Ssex FROM Student WHERE Sdept IN ('体育系', '数学系', '计算机系') --查询体育系、数学系和计算机系学生的姓名和性别。
运行结果:
IN
关键字用来查找属性值属于指定集合的元组。当列中的值与IN
集合的某个值相等,结果为true
。
-
查询既不是体育系、数学系,也不是计算机系学生的姓名和性别。
use StudentManagementSystem -- 选择学生管理系统数据库 SELECT Sname, Ssex FROM Student WHERE Sdept NOT IN ('体育系', '数学系', '计算机系') --查询既不是体育系、数学系,也不是计算机系学生的姓名和性别。
NOT IN
:当列中的值与IN
集合中的某个值相等,结果为False
,不满足条件,不会打印出该学生的列。
运行结果:
-
查询姓‘张’的学生的详细信息。
use StudentManagementSystem -- 选择学生管理系统数据库 SELECT * FROM Student WHERE Sname LIKE '张%' -- 查询姓张学生的全部信息
运行结果:
LIKE
关键字:LIKE
关键字在T-SQL
中用于在WHERE
子句中进行模式匹配,通常与通配符一起使用,以查找符合特定模式的数据。LIKE
关键字可以用于字符串类型的列,帮助你筛选出符合条件的记录。%
:匹配任意长度的任意字符(包括零个字符)
-
查询学生表中姓‘张’、‘李’和‘刘’的学生的情况:
use StudentManagementSystem -- 选择学生管理系统数据库 SELECT * FROM Student WHERE Sname LIKE '[张李刘]%' -- 查询学生表中姓‘张’、‘李’和‘刘’的学生的情况:
运行结果:
- 在
T-SQL
的LIKE
关键字中,方括号[]
用于指定一个字符集,表示匹配括号内的任意一个字符。这种方式在模式匹配中非常有用,特别是当你需要查找符合多个特定字符之一的字符串时。
- 在
-
查询名字中第2个字为‘三’或‘四’的学生的姓名和学号。
use StudentManagementSystem -- 选择学生管理系统数据库 SELECT Sname, Sno FROM Student WHERE Sname LIKE '_[三四]%' -- 查询名字第二个字为三或四的学生的学号和姓名
运行结果:
_
:匹配单个任意字符。
-
查询所有不姓“王”也不姓“张”的学生姓名。
use StudentManagementSystem -- 选择学生管理系统数据库 SELECT Sname FROM Student WHERE Sname LIKE '[^王张]%' -- 查询不姓王或者张学生的姓名
运行结果:
[^charlist]
或![charlist]
:匹配不在方括号内的任意一个字符。- 也可以使用
NOT LIKE
,它和LIKE
相反,查找不符合模式串要求的数据。
-
查询姓“王”或“张”且名字是2个字的学生姓名:
use StudentManagementSystem -- 选择学生管理系统数据库 SELECT Sname FROM Student WHERE Sname LIKE '[张王]_' -- 查询姓“王或者张”且名字是2个字的学生姓名。
运行结果:
空值的查询
- 查询没有考试成绩的学生的课程号和学号:
use StudentManagementSystem -- 选择学生管理系统数据库
SELECT Sno, Cno FROM SC
WHERE Grade IS NULL -- 查询没有考试成绩学生的学号和课程号
运行结果:
多重条件查询
- 查询计算机系且年龄在20的学生的姓名:
use StudentManagementSystem -- 选择学生管理系统数据库
SELECT Sname FROM Student WHERE Sdept = '计算机系' AND Sage < 20 -- 查询计算机系且年龄在20以下的学生姓名
运行结果:
-
查询计算系或者性别是女的同学的全部信息:
use StudentManagementSystem -- 选择学生管理系统数据库 SELECT * FROM Student WHERE Sdept = '计算机系' OR Ssex = '女' -- 查询计算机系或者性别为女的学生的全部信息
运行结果:
AND
连接的条件必须全部满足查询结果才会True,OR
连接的条件,只需满足其中一个条件查询结果就为True。
- 本人知识、能力有限,若有错漏,烦请指正,非常非常感谢!!!
- 转发或者引用需标明来源。