-- --2011.06.26. -- --单表查询-- -- 1, 查询指定列 SELECT Sno, Sname FROM Student -- 2, 查询全部列 SELECT * FROM Student --3, 查询经过计算的列 SELECT Sno, 2011-Sage FROM Student --3, 使用列别名 SELECT Sno, 'Year of Birthday: ', 2011-Sage Birthday --ISLOWER(Sdept) FROM Student --查询选修了课的学生 SELECT Sno -- 默认 SELECT ALL Sno FROM SC SELECT DISTINCT Sno FROM SC --查询满足条件的元组-- --1, 比较大小 SELECT Sname, Sage FROM Student WHERE Sage < 20 SELECT Sname, Sage FROM STUDENT WHERE NOT Sage >= 20 --2, 确定范围 SELECT * FROM Student WHERE Sage BETWEEN 20 AND 30 SELECT * FROM Student WHERE NOT Sage BETWEEN 20 AND 30 --3, 确定集合 SELECT Sno, Sname, Sdept FROM Student WHERE Sdept IN ('IS', 'CS') --4, 字符串匹配 -- (1) 匹配模板为固定字符串 SELECT Sno, Sname FROM Student WHERE Sno LIKE '10002' SELECT Sno, Sname FROM Student WHERE Sno = '10002' -- (2) 匹配模板为含有通配符的字符串 SELECT Sno, Sname FROM Student WHERE Sname LIKE '李%' SELECT Sno, Sname FROM Student WHERE Sname LIKE '李_' SELECT Sno, Sname FROM Student WHERE Sname LIKE '_四' SELECT Sno, Sname FROM Student WHERE Sname LIKE '_四%' --(3), 使用换码字符将通配符转义为普通字符 SELECT Sno, Sname FROM Student WHERE Sname LIKE '\_四' SELECT Cno, Cname FROM Course WHERE Cname LIKE 'JA%序__' --5, 涉及空值的查询 SELECT Sno, Cno FROM SC WHERE Grade IS NULL --判断是不是空 就是这样规定的 用 IS SELECT Sno, Cno FROM SC WHERE Grade IS NOT NULL --6, 多重条件查询 --AND的优先级高于OR SELECT Sno, Sname FROM Student WHERE Sdept = 'CS' AND Sage < 20 SELECT Sno, Sname FROM Student WHERE Sdept IN ('CS') AND Sage < 20 ---IN <值表> SELECT Sno, Sname, Ssex FROM Student WHERE Sdept = 'CS' OR Sdept = 'IS' OR Sdept = 'MA' SELECT Sname, Sdept, SageFROM Student WHERE Sage BETWEEN 20 AND 23 --可改写为: SELECT Sname, Sdept, Sage FROM Student WHERE Sage>=20 AND Sage<=23 --7, 对查询结果排序 --升序:ASC;降序:DESC SELECT * FROM SC ORDER BY Grade SELECT * FROM SC WHERE Cno = 'c08' ORDER BY Grade ASC SELECT * FROM SC ORDER BY Grade DESC SELECT Sdept, Sage FROM Student ORDER BY Sdept, Sage DESC --8, 使用集函数 SELECT COUNT(*) FROM Student SELECT COUNT(DISTINCT Sno) FROM SC --2011-06-23-15:26 -- 2011-06-23-17:46-- SELECT AVG(Grade) FROM SC WHERE Cno = 'c02' SELECT MAX(Grade) FROM SC WHERE Cno = 'c01' SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno --GROUP BY 分组:按指定的一列或多列值分组,值相等的为一组 SELECT Sno, COUNT(*) FROM SC WHERE Grade >= 90 GROUP BY Sno HAVING COUNT(*)>=3 --HAVING短语作用于组,从中选择满足条件的组。 -- 3.3.3 连接查询-- --(1), 广义笛卡尔积-- SELECT Student.* , SC.* FROM Student, SC --(2), 等值与非等值连接查询 --等值连接-- SELECT Student.*, sc.* FROM Student, SC WHERE Student.Sno = SC.Sno --自然连接-- SELECT Student.Sno,Sname,Ssex,Sage, Sdept,Cno,Grade FROM Student, SC WHERE Student.Sno = SC.Sno --非等值连接--(略) --(3), 自身连接 --每一门课的间接先修课 SELECT FI.Cno, SEC.Cpno FROM Course FI, Course SEC WHERE FI.Cpno = SEC.Cno --AND SEC.Cpno IS NOT NULL --(4), 外连接 /* SELECT Student.Sno,Sname,Ssex,Sage, Sdept,Cno,Grade FROM Student, SC WHERE Student.Sno = SC.Sno(*) --???*/ --(5), 复合条件连接 SELECT Student.Sno, Sage, Ssex, Sname FROM Student, SC WHERE Student.Sno = SC.Sno AND SC.Cno = 'c02' AND SC.Grade > 70 --(6), 多表连接 SELECT Student. Sno, Sname, Cname, Grade FROM Student, SC, Course WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno --2011-06-23-20:22--