WHERE 列名 NOT LIKE '字符串' ESCAPE '\';
eg.在 Student 表中查找所有不姓刘的学生的 Sname
SELECT Sname
FROM Student
WHERE Sname NOT LIKE '刘%';
复制代码
(5)空值查询
WHERE 列名 IS NULL;
eg.在 SC表中查询缺少结果(Grade)的学生的姓名(Sname)
SELECT Sname
FROM SC
WHERE Grade IS NULL;
复制代码
WHERE 列名 IS NOT NULL;
eg.查询全部有结果(Grade)的学生的姓名(Sname)
SELECT Sname
FROM SC
WHERE Grade IS NOT NULL;
复制代码
(6)多重条件查询
WHERE 条件表达式 AND 条件表达式:
WHERE 条件表达式 OR 条件表达式;
可以用 AND 大概 OR将上述各类条件表达式组合在一起。其中,AND 的优先级大于 OR
3、GROUP BY 列名 HAVING 条件表达式
用于将查询结果按某一列或多列的值分组,值相等的为一组目的是细化聚集函数的作用对象,分组后聚集函数将作用于每一个组,每一组都有一个函数值
(1)GROUP BY 列名
eg.求 SC 表中,各个课程号(Cno)下相应的选课人数(Sno)
SELECT Cno, COUNT(Sno)
FROM SC
GROUP BY Cno; //表示具有相同 Cno 值的元组为一组,对每一组用 COUNT 进行计算,求得该组的人数
复制代码
(2)GROUP BY 列名 HAVING 筛选条件
与 WHERE 的区别:
HAVING 用于从组中选择满意条件的组
WHERE用于从根本表或视图中选择满意条件的元组(留意:WHERE 子句不可以接聚集函数)
eg.在 SC表中查询均匀结果(Grade)大于等于 90的学生学号(Sno)和均匀结果(Grade)
SELECT Sno, Grade
FROM SC
GROUP BY Sno
HAVING AVG(Grade)>=90;
复制代码
4、ORDER BY 序次
ORDER BY 列名 1 列名n ASC
对查询结果按照一个或多个属性列的升序排列(若不表明序次,默以为升序)
ORDER BY 列名 1 列名n DESC
对查询结果按照一个或多个属性列的降序排列
eg.查序 SC 表中 Cno 为3的学生的 Sno 和 Grade,结果按照 Grade 的降序排列
查询块:SELECT-FROM-WHERE
嵌套査询:将一个查询块嵌套在另一个查询块的 WHERE 子句大概 HAVING 子句其中,上层的查询块称为外层查询/父查询;下层的查询块称为内层查询/子查询
留意:子査询的 SELECT 语句中不能使用 ORDER BY 子句,ORDER BY 子句只能对最终查询结果排序
1、IN-子查询
父查询与子查询之间用 IN 毗连
WHERE 列名 IN(子查询);
eg.查找与刘晨同一个专业的同砚
SELECT Sdept
FROM Student
WHERE Sname='刘晨;
复制代码
查找结果为刘晨在 CS 专业,之后再査找 CS 专业的学生
SELECT Sno, Sname, Sdept
FROM Student
WHERE Sdept='Cs';
复制代码
SELECT Sno, Sname, Sdept
FROM Student
WHERE Sdept IN
(SELECT Sdept
FROM Student
WHERE Sname='刘晨”);//本例的子查询条件不依赖于父査询,这类子査询称为不相关子查询比较
复制代码
2、运算符-子查询
父查询与子查询之间用比较运算符毗连
WHERE 列名 比较运算符(子查询);//当用户能确切知道内层査询返回的是单个值时,可用比较运算符毗连
eg.在 SC表中,找出每个学生(Sno)超过他自己选修课程均匀结果(Grade)的课程号(Cno)
SELECT Sno, Cno
FROM SC x //x 是表 SC 的别名,又称为元组变量,可以用来表示 SC 的一个元组
WHERE Grade >=
(SELECT AVG(Grade)
FROM SC y
WHERE y.Sno=x.Sno);/*本例的子查询条件依赖于父查询,这类子查询称为相关子查询,整个查询称为相关嵌套查询*/
复制代码
3、ANY/ALL-子查询
WHERE 列名 比较运算符 ANY/ALL (子查询); //有的体系中 ANY用 SOME 取代