MySQL--進(jìn)階六(二)-- sql99

#進(jìn)階六 sql99

/*

語(yǔ)法:

select 查詢列表

from 表1 別名 【連接類(lèi)型】

join 表2 別名

on 連接條件

【where 篩選條件】

【group by 分組】

【having 篩選條件】

【order by 排序列表】

分類(lèi):

內(nèi)連接:inner

外連接:左外 left? 【outer】

右外 right 【outer】

全外 full? 【outer】

交叉連接:cross

*/

#一.內(nèi)連接

/*

select 查詢列表

from 表1 別名

inner join 別名

on 連接條件

...

[GROUP BY]

[ORDER BY]

分類(lèi):

等值連接

非等值連接

自連接

特點(diǎn):

①添加排序、分組、篩選

②inner可以省略

③篩選條件放在where后面,連接條件放在on后面,提高分離性,便于閱讀

④inner join連接和sql92語(yǔ)法中的等值連接效果一樣,都是查詢多表的交集

*/

#1、等值連接

#案例1 查詢員工名,部門(mén)名

SELECT last_name,department_name

FROM `departments` d

INNER JOIN`employees` e

ON e.`department_id`=d.`department_id`;

#案例2:查詢名字中包含e的員工名和工種名(添加篩選)

SELECT `last_name`,`job_title`

FROM`employees` e

INNER JOIN `jobs` j

ON e.`job_id`=j.`job_id`

WHERE `last_name` LIKE '%e%';

#案例3:查詢部門(mén)個(gè)數(shù)>3的城市名和部門(mén)個(gè)數(shù)(添加分組+篩選)

#①篩選每個(gè)城市的部門(mén)個(gè)數(shù)

#②在①篩結(jié)果上篩選滿足條件的

SELECT city,COUNT(*) 部門(mén)個(gè)數(shù)

FROM `locations` l

INNER JOIN `departments` d

ON d.`location_id`=l.`location_id`

GROUP BY city

HAVING COUNT(*)>3;

#案例四.查詢哪個(gè)部門(mén)的部門(mén)員工個(gè)數(shù)>3的部門(mén)名,和員工個(gè)數(shù),并按個(gè)數(shù)進(jìn)行降序

SELECT `department_name`,COUNT(*)

FROM? `departments` d

INNER JOIN `employees` e

ON d.`department_id`=e.`department_id`

GROUP BY `department_name`

HAVING COUNT(*)>3

ORDER BY COUNT(*) DESC;

#案例5:查詢員工名、部門(mén)名、工種名,并按部門(mén)名降序(三表連接)

SELECT `last_name`,department_name,`job_title`

FROM `employees` e

INNER JOIN `departments` d ON e.`department_id`=d.`department_id`

INNER JOIN`jobs` j ON e.`job_id`=j.`job_id`

ORDER BY department_name DESC;

#二)非等值連接

#查詢員工的工資級(jí)別

SELECT salary,`grade_level`

FROM `employees` e

INNER JOIN `job_grades` g

ON e.salary BETWEEN g.`lowest_sal`? AND g.`highest_sal`;

#查詢工資的級(jí)別個(gè)數(shù)>20的個(gè)數(shù),并且按工資級(jí)別降序

SELECT salary,COUNT(*),`grade_level`

FROM `employees` e

INNER JOIN `job_grades` g

ON e.salary BETWEEN g.`lowest_sal`? AND g.`highest_sal`

GROUP BY grade_level

HAVING COUNT(*)>20

ORDER BY grade_level DESC;

#三)自連接?

#查詢姓名中包含字符‘k’的員工的名字,上級(jí)的名字

SELECT e.`last_name`,m.`last_name`

FROM `employees` e

INNER JOIN employees m

ON e.`manager_id`=m.`employee_id`

WHERE e.last_name LIKE '%k%';

#二.外連接

/*

應(yīng)用場(chǎng)景:用于查找一個(gè)表中有,另一個(gè)表中沒(méi)有的記錄

特點(diǎn):

1、外連接的查詢結(jié)果為主表中所有的記錄? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? n'n'n

? 如果從表中有和它匹配的,則顯示匹配的值

? 如果從表中沒(méi)有和它匹配的,則顯示null

? 外連接查詢結(jié)果=內(nèi)連接結(jié)果+主表中有而從表中沒(méi)有的記錄

2、左外連接:left jon左邊的是主表

? 右外連接:right join右邊的是主表

3、左外和右外交換兩個(gè)表的順序,可以實(shí)現(xiàn)同樣的效果

4、全外連接=內(nèi)連接結(jié)果+表1有但表2沒(méi)有+表2有但表1沒(méi)有

*/

#引入:查詢男朋友不在男神表的女神名

#左外連接

SELECT * FROM beauty;

SELECT * FROM boys;

SELECT b.name,bo.*

FROM beauty b

LEFT OUTER JOIN boys bo

ON b.`boyfriend_id`=bo.`id`

WHERE bo.`id` IS NULL;

SELECT b.name,bo.*

FROM boys bo

RIGHT OUTER JOIN beauty b

ON b.`boyfriend_id`=bo.`id`

WHERE bo.`id` IS NULL;

#案例1:查詢那個(gè)部門(mén)沒(méi)有員工

#左外

SELECT d.*,e.`employee_id`

FROM `departments` d

LEFT OUTER JOIN `employees` e

ON d.`department_id`=e.`department_id`

WHERE e.`employee_id` IS NULL

SELECT d.*,e.`employee_id`

FROM `employees` e

RIGHT OUTER JOIN `departments` d

ON d.`department_id`=e.`department_id`

WHERE e.`employee_id` IS NULL

#全外

USE girls;

SELECT b.*,bo.*

FROM beayty b

FULL OUTER JOIN boys bo

ON b.boyfriend_id =bo.id;

#交叉連接

SELECT b.*,bo.*

FROM beauty b

CROSS JOIN boys bo;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容