#======================================
#平臺:windows7
#MYsql版本:mysql-5.5.62-winx64(安裝版)
#MYsql工具:SQLyog - 64 bit、Navicat Premium 12
工具包地址:https://pan.baidu.com/s/17SOAmwcgOw9hYtTzDb9-Tw
#======================================
多表查詢中,一般不使用連接查詢,因爲操作效率低。
#多表查詢語法
select 字段1,字段2... from 表1,表2... [where 條件]
示例1:SELECT e.eid,e.ename,d.dname FROM emp e,dept d WHERE e.eid==d.did;
笛卡爾乘積
如果不加條件直接進行查詢得到的結果。
如:select * from person,dept
笛卡爾乘積公式 : A表中數據條數 * B表中數據條數 = 笛卡爾乘積。(查詢效率低)
#多表連接查詢語法
SELECT 字段列表
FROM 表1 INNER|LEFT|RIGHT JOIN 表2
ON 表1.字段 = 表2.字段;
子查詢
又稱嵌套查詢: 查多次, 多個select
注意: 第一次的查詢結果可以作爲第二次的查詢的 條件 或者 表名 使用.
子查詢中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等關鍵字. 還可以包含比較運算符:= 、 !=、> 、<等。
語法:select * from (select * from person) as 表名;
注意: 一條語句中可以有多個這樣的子查詢,在執行時,最裏層括號(sql語句) 具有優先執行權.<br>注意: as 後面的表名稱不能加引號('')
示例:select name,salary from person where salary >(select avg(salary) from person);
l 單行單列子查詢;
示例:SELECT *FROM t_employee WHERE sal>(SELECT sal FROM t_employee WHERE ename='SMITH');
l 單行多列子查詢(較少使用);
示例:SELECT ename,sal,job FROM t_employee WHERE (sal,job)=(SELECT sal,job FROM t_employee WHERE ename='SMITH');
l 多行單列子查詢;
IN:SELECT *FROM t_employee WHERE deptno IN (SELECT deptno FROM t_dept);
ANY:
=ANY:其功能與關鍵字IN一樣;
>ANY(>=ANY):比子查詢中返回數據記錄中最小的還要大於(大於等於)數據記錄;
<ANY(<=ANY):比子查詢中返回數據記錄中最大的還要小於(小於等於)數據記錄。
示例:SELECT ename,sal FROM t_employee WHERE sal>ANY(SELECT sal FROM t_employee WHERE job='MANAGER');
ALL:
關鍵字ALL用來表示主查詢的條件爲滿足子查詢返回查詢結果中所有數據記錄,該關鍵字有兩種匹配方式,分別爲:
>ALL(>=ALL):比子查詢中返回數據記錄中最大的還要大於(大於等於)數據記錄;
<ALL(<=ALL):比子查詢中返回數據記錄中最小的還要小於(大於等於)數據記錄。
SELECT ename,sal FROM t_employee WHERE sal>ALL(SELECT sal FROM t_employee WHERE job='MANAGER');
EXISTS:
SELECT * FROM t_dept c WHERE EXISTS(SELECT * FROM t_employee WHERE deptno=c.deptno);