| 1.SELECT子句的规定 (1)SELECT子句的形式 SELECT [ALL | DISTINCT] <列名或列表达式序列> | * (2)具体规定 DISTINCT选项保证重复的行将从结果中去除;而ALL选项是默认的,将保证重复的行留在结果中,一般就不必写出 星号(*)是对于在FROM子句中命名表的所有列的简写 列表达式是对于一个单列求聚合值的表达式 允许表达式中出现包含+、-、*和/以及列名、常数的算术表达式 (3)查询选修了课程C1或C2的学号 SELECT Sno FROM Sc WHERE Cno='C1' OR Cno='C2' SELECT DISTINCT Sno FROM Sc WHERE Cno='C1' OR Cno='C2' DISTINCT与ALL(默认)对应 (4)查询全体学生的出生年份 SELECT Sname, 2007-Age FROM Student (5)以小写字母显示系名 SELECT Sn,LOWER(Dept) FROM Student | 2.列和基本表的改名操作 (1)说明 也可以要求输出的列名与基本表中列名不一致,可在SELECT子句用“旧名 AS 新名” 形式改名 区分多次调用的基本表,标上不同的名字 (2)查询全体学生的出生年份,并使用别名 SELECT Sname as Name, 2007-Age Birthday FROM Student (3)查询所有与“吴二”同龄的姓名 SELECT X.Sname,X.Age FROM Student X, Student Y WHERE X.Age=Y.Age AND Y.Sname='吴二' | 3.集合的并、交、差操作 (1)概述 标准SQL中有集合并(UNION)的操作 但没有直接提供集合的差(MINUS或EXCEPT)和交(INTERSECT)操作 差和交可以用其他方法实现 (2)查询选修了C2或C3课程的学生(并) SELECT Sno,Cno FROM Sc WHERE Cno='C2' SELECT Sno,Cno FROM Sc WHERE Cno='C3' SELECT Sno,Cno FROM Sc WHERE Cno='C2' UNION SELECT Sno,Cno FROM Sc WHERE Cno='C3' SELECT Sno FROM Sc WHERE Cno='C2' UNION SELECT Sno FROM Sc WHERE Cno='C3' SELECT Sno,Cno FROM Sc WHERE Cno='C2' OR Cno='C3' (3)将Student和Student1两表合并 SELECT Sno,Sn,Sex FROM Student UNION SELECT Sno,Sn,Sex FROM Student1 (4)查询至少选修了C2和C3的学生(交) SELECT Sno FROM Sc WHERE Cno='C2' AND Sno IN (SELECT Sno FROM Sc WHERE Cno='C3') (5)查询选修了C2但没有选修C3的学生(差) SELECT Sno FROM Sc WHERE Cno='C2' AND Sno NOT IN (SELECT Sno FROM Sc WHERE Cno='C3') | |