1. 程式人生 > >008—多表查詢(重點)

008—多表查詢(重點)

#======================================

#平臺: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 條件]

示例1SELECT 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

 

注意第一次的查詢結果可以作為第二次的查詢的 條件 或者 表名 使用.

 

子查詢中可以包含:INNOT INANYALLEXISTS 和 NOT EXISTS等關鍵字還可以包含比較運算子:、 !=<等。

 

語法:select * from (select * from person) as 表名;

 

注意: 一條語句中可以有多個這樣的子查詢,在執行時,最裡層括號(sql語句) 具有優先執行權.<br>注意: as 後面的表名稱不能加引號('')

 

示例:select name,salary from person where salary >(select avg(salary) from person);

 

單行單列子查詢;

示例:SELECT *FROM t_employee WHERE sal>(SELECT sal FROM t_employee WHERE ename='SMITH');

 

單行多列子查詢(較少使用);

示例: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);