如何用SQL语句检测temp表是否已经创建?
DROP TABLE IF EXISTS temp;
CREATE TABLE temp (
… … #省略建表语句
) ;
EXISTS子查询的语法:
select…from 表名 where exists(子查询);
子查询有返回结果: EXISTS子查询结果为TRUE
子查询无返回结果: EXISTS子查询结果为FALSE,
外层查询不执行
子查询注意事项:
1:任何允许使用表达式的地方都可以使用子查询
2:
嵌套在父查询SELECT语句的子查询可包括
①
SELECT子句
②FROM子句
③WHERE子句
④GROUP BY子句
⑤HAVING子句
3:只出现在子查询中而没有出现在父查询中的列不能包含在输出列中
掌握GROUP BY子句实现分组查询:
SELECT …… FROM <表名>
WHERE ……
GROUP BY ……
SELECT subjectNo
,AVG(studentResult
) AS 课程平均成绩
FROM result
GROUP BY subjectNo
;
SELECT列表中只能包含:
1.被分组的列
2.为每个分组返回一个值的表达式,如聚合函数
内连接(INNER JOIN)
内连接使用比较运算符根据每个表的通用列中的值匹配两个表中的行
SELECT ……
FROM 表1
INNER JOIN 表2
ON ……
SELECT student
.studentName
,result
.subjectNo
,result
.studentResult
FROM student
,result
外连接
:
左外连接 (LEFT JOIN):
SELECT S.studentName,R.subjectNo,R.studentResult
FROM student AS S
LEFT JOIN result AS R
ON S.studentNo = R.studentNo;
右外连接 (RIGHT JOIN)
右外连接的原理与左外连接相同
右表逐条去匹配记录;否则NULL填充
SELECT 图书编号,图书名称,出版社名称
FROM 图书表
RIGHT JOIN 出版社表
ON 图书表.出版社编号 = 出版社表.出版社编号;
三表内连接:
SELECT S.studentName AS 姓名,SU.subjectName AS 课程,R.studentResult AS 成绩
FROM student AS S
INNER JOIN result
AS R ON (S.studentNo
= R.studentNo
)
INNER JOIN subject
AS SU ON (SU.subjectNo=R.subjectNo);
总结