[DB] SQL 复习1

--
--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--

原文地址:https://www.cnblogs.com/robbychan/p/3787104.html