MySQL:多表連接查詢(2)

3. sql99標(biāo)準(zhǔn)

語法

select 查詢列表
from 表1 別名 【連接類型】
join 表2 別名
on 連接條件(內(nèi)連接 inner鹿鳖,左外連接 left outer,右外連接 right outer,全外連接 full outer晒衩,交叉連接 cross)
【where 篩選條件】
【group by 分組條件】
【having 篩選條件】
【order by 排序列表】


內(nèi)連接 - 等值連接

  • 案例:查詢員工名和對應(yīng)的部門名
SELECT 
  `last_name`,
  `department_name` 
FROM
  `departments` AS d 
  INNER JOIN `employees` AS e 
    ON e.`department_id` = d.`department_id` ;
  • 案例:查詢名字中包含e的員工名和工種名
SELECT 
  `last_name`,
  `job_title` 
FROM
  `jobs` AS j 
  INNER JOIN `employees` AS e 
    ON e.`job_id` = j.`job_id` 
WHERE `last_name` LIKE "%e%" ;
  • 案例:查詢部門個數(shù)大于3的城市名和部門個數(shù)
SELECT 
  `city`,
  COUNT(*) 
FROM
  `departments` AS d 
  INNER JOIN `locations` AS l 
    ON d.`location_id` = l.`location_id` 
GROUP BY `city` 
HAVING COUNT(*) > 3 ;
  • 案例:查詢員工個數(shù)大于3的部門名和員工個數(shù)涌攻,并按照個數(shù)降序排序
SELECT 
  `department_name`,
  COUNT(*) 
FROM
  `departments` AS d 
  INNER JOIN `employees` AS e 
    ON d.`department_id` = e.`department_id` 
GROUP BY `department_name` 
HAVING COUNT(*) > 3 
ORDER BY COUNT(*) DESC 
  • 案例:查詢員工名,部門名,工種名倔韭,并按部門名降序
SELECT 
  `last_name`,
  `department_name`,
  `job_title` 
FROM
  `employees` AS e 
  INNER JOIN `departments` AS d 
    ON d.`department_id` = e.`department_id` 
  INNER JOIN `jobs` AS j 
    ON e.`job_id` = j.`job_id` 
ORDER BY `department_name` DESC ;

總結(jié):

  1. 可以添加排序术浪,分組,篩選
  2. inner可以省略
  3. 篩選條件放在where后面寿酌,連接條件放在on后面胰苏,提高分離性,便于閱讀
  4. inner join連接和sql92語法中的等值連接效果是一樣的醇疼,都是查詢多表的交集

內(nèi)連接 - 非等值連接

  • 案例:查詢員工的工資和工資級別
SELECT 
  `last_name`,
  `salary`,
  `grade_level` 
FROM
  `employees` AS e 
  INNER JOIN `job_grades` AS jd 
    ON `salary` BETWEEN `lowest_sal` 
    AND `highest_sal` 
  • 案例:查詢工資級別的員工個數(shù)大于20的硕并,按照工資級別降序系列
SELECT 
  `grade_level`,
  COUNT(*) 
FROM
  `employees` AS e 
  INNER JOIN `job_grades` AS jd 
    ON `salary` BETWEEN `lowest_sal` 
    AND `highest_sal` 
GROUP BY `grade_level` 
HAVING COUNT(*) > 20 
ORDER BY `grade_level` DESC 

內(nèi)連接 - 自連接

  • 案例:查詢員工名以及上級的名稱
SELECT 
  e.`employee_id`,
  e.`last_name`,
  e.`manager_id`,
  m.`last_name` 
FROM
  `employees` AS e 
  INNER JOIN `employees` AS m 
    ON e.`manager_id` = m.`employee_id` 
WHERE e.`last_name` LIKE "%k%" 

外連接

  • 案例:查詢男朋友不在男神表的女神名
-- 左外連接
SELECT 
  g.`name` 
FROM
  `beauty` AS g 
  LEFT OUTER JOIN `boys` AS b 
    ON g.`boyfriend_id` = b.`id` 
WHERE b.`id` IS NULL 
-- 右外連接
SELECT 
  g.`name` 
FROM
  `boys` AS b 
  RIGHT OUTER JOIN `beauty` AS g 
    ON g.`boyfriend_id` = b.`id` 
WHERE b.`id` IS NULL 
  • 案例:查詢沒有員工的部門
SELECT DISTINCT 
  d.`department_id` 
FROM
  `departments` AS d 
  LEFT OUTER JOIN `employees` AS e 
    ON d.`department_id` = e.`department_id` 
WHERE e.`employee_id` IS NULL 

總結(jié):

  1. 用于查詢一個表中有,另一個表中沒有的數(shù)據(jù)
  2. 左外連接中秧荆,左側(cè)為主表倔毙;右外連接,右側(cè)為主表辰如;左外和右外交換表的順序可以實現(xiàn)同樣的效果
  3. 外連接的查詢結(jié)果為主表中的所有數(shù)據(jù)普监,如果從表中有與之匹配的,就顯示匹配記錄琉兜,否則顯示null
  4. 全外連接會將左外連接和右外連接的結(jié)果組合在一起

交叉連接

  • 含義即為兩表的笛卡爾乘積
SELECT 
  * 
FROM
  `beauty` 
  CROSS JOIN `boys` 

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凯正,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子豌蟋,更是在濱河造成了極大的恐慌廊散,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梧疲,死亡現(xiàn)場離奇詭異允睹,居然都是意外死亡,警方通過查閱死者的電腦和手機幌氮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門缭受,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人该互,你說我怎么就攤上這事米者。” “怎么了宇智?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵蔓搞,是天一觀的道長。 經(jīng)常有香客問我随橘,道長喂分,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任机蔗,我火速辦了婚禮蒲祈,結(jié)果婚禮上甘萧,老公的妹妹穿的比我還像新娘。我一直安慰自己讳嘱,他們只是感情好幔嗦,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沥潭,像睡著了一般邀泉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钝鸽,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天汇恤,我揣著相機與錄音,去河邊找鬼拔恰。 笑死因谎,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的颜懊。 我是一名探鬼主播财岔,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼河爹!你這毒婦竟也來了匠璧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤咸这,失蹤者是張志新(化名)和其女友劉穎夷恍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體媳维,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡酿雪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了侄刽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片指黎。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖州丹,靈堂內(nèi)的尸體忽然破棺而出醋安,到底是詐尸還是另有隱情,我是刑警寧澤当叭,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站盖灸,受9級特大地震影響蚁鳖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赁炎,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一醉箕、第九天 我趴在偏房一處隱蔽的房頂上張望钾腺。 院中可真熱鬧,春花似錦讥裤、人聲如沸放棒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽间螟。三九已至,卻和暖如春损肛,著一層夾襖步出監(jiān)牢的瞬間厢破,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工治拿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留摩泪,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓劫谅,卻偏偏與公主長得像见坑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子捏检,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355