高级查询

EXISTS子查询
如何用SQL语句检测temp表是否已经创建?
DROP TABLE IF EXISTS temp;
CREATE TABLE temp (
    … … #省略建表语句
) ;


EXISTS子查询的语法
SELECT …… FROM 表名 WHERE EXISTS(子查询);

子查询有返回结果: EXISTS子查询结果为TRUE
子查询无返回结果: EXISTS子查询结果为FALSE,
                                     外层查询不执行

 

 

 

子查询注意事项
任何允许使用表达式的地方都可以使用子查询
嵌套在父查询SELECT语句的子查询可包括
SELECT子句
FROM子句
WHERE子句
GROUP BY子句
HAVING子句
只出现在子查询中而没有出现在父查询中的列不能包含在输出列中

 

分组查询用法
掌握GROUP BY子句实现分组查询
SELECT …… FROM  <表名>  
WHERE  ……
GROUP BY ……

SELECT列表中只能包含:
1.被分组的列
2.为每个分组返回一个值的表达式,如聚合函数


分组筛选
SELECT …… FROM  <表名>
WHERE ……
GROUP BY ……
HAVING……


WHERE与HAVING对比
WHERE子句
   用来筛选 FROM 子句中指定的操作所产生的行 
GROUP BY子句
   用来分组 WHERE 子句的输出 
HAVING子句
   用来从分组的结果中筛选行 

 


常用的多表连接查询
内连接(INNER JOIN)
外连接
  左外连接   (LEFT JOIN)
  右外连接   (RIGHT JOIN)


内连接
SELECT     …… 
FROM     表1
INNER JOIN  表2
ON     ……

SELECT  …… 
FROM     表1,表2
WHERE …… 

SELECT `student`.`studentName`,`result`.`subjectNo`,`result`.`studentResult`
FROM     `student`,`result`
WHERE  `student`.`studentNo` = `result`.`studentNo`;

SELECT     S.`studentName`,R.`subjectNo`,R.`studentResult`
FROM     `student`  AS S
INNER JOIN `result` AS R ON  (S.`studentNo` = R.`studentNo`);


三表内连接
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);


左外连接
主表(左表)student中数据逐条匹配表result中的数据
1.匹配,返回到结果集
2.无匹配,NULL值返回到结果集

SELECT     S.studentName,R.subjectNo,R.studentResult
FROM     student AS S
LEFT JOIN result AS R
ON S.studentNo = R.studentNo;


右外连接
右外连接的原理与左外连接相同
右表逐条去匹配记录;否则NULL填充


CREATE TEMPORARY TABLE 表名(查询语句);
临时表只在当前连接可见,连接关闭自动删除,修改临时表数据不影响原表数据

 

联合查询  union

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值