结构化查询语言SQL
单表查询
首先,单表查询包括:谓词查询、聚集函数查询、分组查询。这些查询是SQL查询语句中最为基础的,但也是根本之源,需要大家完全精通。
谓词查询
SELECT *
FROM XXX
WHERE XXX;
注意:谓词查询后不跟聚集函数即WHERE后不跟AVG/MAX/MIN/COUNT/SUM等聚集函数
SQL语句的运行顺序是FROM->WHERE/GROUP BY XX HAVING->SELECT
聚集函数查询
AVG 平均;MAX 最大值;MIN 最小值;COUNT 总量;SUM 总数
其中COUNT和SUM是有区别的,例如一所学校里有学生,学生有各个学科的成绩,通过COUNT我们可以得到学生的总量而通过SUM我们可以得到学生各个学科的成绩总分
SELECT SNO,SNAME,AVG(GRADE)
FROM SC;
这条查询语句当中我运用了AVG聚集函数,目的在于从SC表中查询平均分数
分组函数查询
SELECT SNO,SNAME
FROM SC
GROUP BY SNO
HAVING AVG(GRADE)>90;
HAVING和WHERE的区别在于HAVING是在分组结束后对记录进行筛选,WHERE是在分组前对记录进行筛选。HAVING后是可以跟聚集函数的(如上例)而WHERE不行。
连接查询
连接查询包括:多表查询、自身连接查询、外连接查询,此类查询正如字面意思,多个数据表连接查询结果
多表查询
SELECT STU.sno,SC.sno
FROM STU,SC
WHERE STU.sno=SC.sno;
查询的属性前要附加表名
自身连接查询
自身查询是为了提取同表相同属性数据值时不报错
SELECT SNAME
FROM SC AS X,SC AS Y
WHERE X.SNO=Y.SNO
这里我将SC表分别取别名为X,Y,那么SQL语句会从X中提取sno与Y中提取sno
外连接
外连接包括:左连接、右连接。外连接是以指定表为主体,将主体表中缺少连接条件的的元组一并输出。
左连接:数据表STU为主体表,就算SC表中cno为空也能查询到sno
右连接:数据表SC为主题表,就算STU表中sdept为空也能查询到sno
SELECT STU.sno,sdept,cno
FROM STU
LEFT OUT JOIN SC ON (Student.sno=SC.sno);
嵌套查询
嵌套查询分为不相关子查询和相关子查询、带运算符的子查询
不相关子查询:子类和父类无关
SELECT SNO,SNAME
FROM S
WHERE SNO IN
(SELECT SNO
FROM SC
WHERE GRADE=95);
相关子查询:子类与父类相关
SELECT SNO,SNAME
FROM S
WHERE EXISTS
(SELECT * FROM SC
WHERE S.SNO=SC.SNO AND GRADE = 99);
带运算符的子查询:ANY/ALL
AGE>ALL(13,15,17)
表示年龄大于集合中所有数的即大于17
AGE>ANY(13,15,17)
表示年龄大于集合中任意数的即大于13
SELECT SNO,SNAME
FROM S
WHERE SNO=ALL
(SELECT SNO
FROM SC
WHERE GRADE=95);
SELECT SNO,SNAME
FROM S
WHERE SNO=ANY
(SELECT SNO
FROM SC
WHERE GRADE=95);
总结
单表查询是SQL查询语句的根本,而连接查询与嵌套查询是它的派生,我们都需要去熟悉掌握他们,并在接下来的实践中灵活运用它们。