投影运算:
SQL查询语句:
1.SELECT 第三步
2.FROM 第一步
3.WHERE 第二步
消除重复列:
SELECT DISTINCT 列名
FROM 表名
选择所有列 SELECT*
给某列取新的名字:
SELECT institute (AS) 所属学院
SELECT lower(courseName)课程名,courseHour/16 周课时
选择运算:
1.比较运算:
2集合查询:(NOT)IN
3.空值查询:IS null
4.字符匹配查询:LIKE
5.逻辑查询:AND,OR,NOT
6.范围查询:(NOT)BETWEEN....AND...
WHERE year(getdate())-year(birthday)>=19
WHERE courseNo IN('001','005','003')
WHERE className LIKE '%会计%'
WHERE studentName LIKE '王_ _'
例如:会计08_01班 要用转义字符:
WHERE className LIKE '08\_%' ESCAPE '\'
#也行
排序运算
ORDER BY native DESC(降序)
ORDER BY classNo,month(birthday) DESC
默认ASC升序
FROM(SELECT*FROM Student WHERE sex='女')a
或FROM(SELECT*FROM Student WHERE sex='女')AS a
连接查询
1.等值连接(=)
WHERE Student.classNo=Class.classNo
简化:
FROM Student AS a,Class AS b
WHERE a.classNo=b.classNo
不同表的同属性名,要加上表名区分,否则不用。
自然连接:在等值连接的基础上,消除重复列
2.非等值连接
自表连接
例子:搜和“张三”一个班的所有同学生日
SELECT a.birthday
FROM Student a,Student b
WHERE b.studentName='张三' AND a.classNo=b.classNo
外连接(没有满足的,也显示出来)
FROM子句中,写在左边的表叫左关系,右边的叫右关系
1.左外连接
FROM Class a LEFT OUTER JOIN Student b ON a.classNo=b.classNo
2.右外连接
RIGHT OUTER JOIN
3.全外连接
FULL OUTER JOIN
聚合查询
聚合函数:
1.count
SELECT count(*)学生人数
FROM Student
SELECT count( DISTINCT studentNo)学生人数
FROM Score
2.sum
3.avg
4.max
5.min
分组聚合
1.GROUP BY
2.HAVING(不可单独用)
GROUP BY studentNo
HAVING avg(score)>=80
不对:WHERE score=max(score)
改正:WHERE score=(SELECT max(score) FROM Score)
嵌套子查询
1.相关子查询
2.非相关子查询(子查询的结果不依赖于上层查询)
使用IN:
从成绩表中筛选学生:
WHERE Student.studentNo IN(SELECT Score.studentNo FROM Score)
使用比较运算符:
1.>ANY <ANY <>ANY !=ANY 某
2.>ALL <ALL <>ALL !=ALL
=ANY等价IN
!=ALL等价 NOT IN
ANY可以用SOME替代
使用EXISTS:
集合运算
并UNION
交INTERSECT(不支持)
差EXCEPT(不支持)
要求列数一样,对应列的数据类型一致