sql查询语言(2)单关系查询和集合查询-爱代码爱编程
分类
- 单个查询
- 连接查询
- 嵌套查询
演示数据库
单关系查询
投影查询
SELECT [Distinct]Sno,Sname 列/属性名
FORM student 关系
WHERE +选择条件
扩展投影查询
SELECT [Distinct] 表达式 FROM 关系名;
SELECT Sno, UPPER(Sname) FROM Student;
SELECT Sname, (2022 - Sage) AS bd FROM Student;
使用AS进行重命名操作
选择查询条件1
在实际操作中发现有一个元组不符合用户完整性约束,所以把他删除
delete from student where sage = -1;
选择查询条件2---LIKE语句
%:匹配任意字符
_:匹配单个字符
SELECT Sno, Sname FROM student WHERE Sname LIKE 'E%';
查询首字母为E的学生的姓名
SELECT Sno, Sname FROM Student WHERE Sname LIKE 'E___';
查询首字母为E并且是四个字节的学生的姓名
正则表达式
SELECT Sno, Sname FROM Student
WHERE Sname REGEXP '^[EF].*';
查询首字母为E或F的学生的姓名和学号
空值判断(IS和等于)
SELECT Sno FROM SC WHERE Grade IS NULL;
查询选了课但是没有成绩的学生
什么结果都会得到,因为NULL不是一个值。
逻辑运算返回值(真值表)
逻辑运算只能表示逻辑运算结果,不能作为布尔型属性的值
集合的操作
集合的并交差
功能 对查询的结果进行操作,对集合本身并没有影响
加上ALL集合并不去重
SELECT * FROM SC WHERE Cno = '1002' UNION ALL
SELECT * FROM SC WHERE Cno = '3006';
SELECT * FROM SC WHERE Cno = '1002' UNION
SELECT * FROM SC WHERE Cno = '3006';
观察CS001出现了几次
集合的排序
语法: 分为升序和降序
SELECT Sno, Sname FROM Student WHERE Sdept = 'CS'
ORDER BY Sno;
查出全体计算机系同学的姓名和学号,并且按学号的顺序排列,默认是升序
SELECT * FROM Student ORDER BY Sdept ASC, Sage DESC;
查询全体学生的信息,结果按所在的系升序排列,同一个系得学生按年龄得降序排列