mysql子查詢

進階7:子查詢

/*
含義:
出現(xiàn)在其他語句中的select語句瘾腰,稱為子查詢或內(nèi)查詢
外部的查詢語句,稱為主查詢或外查詢

分類:
按子查詢出現(xiàn)的位置:
select后面:
僅僅支持標(biāo)量子查詢

from后面:
    支持表子查詢
where或having后面:★
    標(biāo)量子查詢(單行) √
    列子查詢  (多行) √
    
    行子查詢
    
exists后面(相關(guān)子查詢)
    表子查詢

按結(jié)果集的行列數(shù)不同:
標(biāo)量子查詢(結(jié)果集只有一行一列)
列子查詢(結(jié)果集只有一列多行)
行子查詢(結(jié)果集有一行多列)
表子查詢(結(jié)果集一般為多行多列)

*/

一醋火、where或having后面

/*
1、標(biāo)量子查詢(單行子查詢)
2、列子查詢(多行子查詢)

3、行子查詢(多列多行)

特點:
①子查詢放在小括號內(nèi)
②子查詢一般放在條件的右側(cè)
③標(biāo)量子查詢爷耀,一般搭配著單行操作符使用

< >= <= = <>

列子查詢,一般搭配著多行操作符使用
in拍皮、any/some、all

④子查詢的執(zhí)行優(yōu)先于主查詢執(zhí)行跑杭,主查詢的條件用到了子查詢的結(jié)果

*/

1.標(biāo)量子查詢★

案例1:誰的工資比 Abel 高?

①查詢Abel的工資

SELECT salary
FROM employees
WHERE last_name = 'Abel'

②查詢員工的信息铆帽,滿足 salary>①結(jié)果

SELECT *
FROM employees
WHERE salary>(

SELECT salary
FROM employees
WHERE last_name = 'Abel'

);

案例2:返回job_id與141號員工相同,salary比143號員工多的員工 姓名德谅,job_id 和工資

①查詢141號員工的job_id

SELECT job_id
FROM employees
WHERE employee_id = 141

②查詢143號員工的salary

SELECT salary
FROM employees
WHERE employee_id = 143

③查詢員工的姓名爹橱,job_id 和工資,要求job_id=①并且salary>②

SELECT last_name,job_id,salary
FROM employees
WHERE job_id = (
SELECT job_id
FROM employees
WHERE employee_id = 141
) AND salary>(
SELECT salary
FROM employees
WHERE employee_id = 143

);

案例3:返回公司工資最少的員工的last_name,job_id和salary

①查詢公司的 最低工資

SELECT MIN(salary)
FROM employees

②查詢last_name,job_id和salary窄做,要求salary=①

SELECT last_name,job_id,salary
FROM employees
WHERE salary=(
SELECT MIN(salary)
FROM employees
);

案例4:查詢最低工資大于50號部門最低工資的部門id和其最低工資

①查詢50號部門的最低工資

SELECT MIN(salary)
FROM employees
WHERE department_id = 50

②查詢每個部門的最低工資

SELECT MIN(salary),department_id
FROM employees
GROUP BY department_id

③ 在②基礎(chǔ)上篩選愧驱,滿足min(salary)>①

SELECT MIN(salary),department_id
FROM employees
GROUP BY department_id
HAVING MIN(salary)>(
SELECT MIN(salary)
FROM employees
WHERE department_id = 50

);

非法使用標(biāo)量子查詢

SELECT MIN(salary),department_id
FROM employees
GROUP BY department_id
HAVING MIN(salary)>(
SELECT salary
FROM employees
WHERE department_id = 250

);

2.列子查詢(多行子查詢)★

案例1:返回location_id是1400或1700的部門中的所有員工姓名

①查詢location_id是1400或1700的部門編號

SELECT DISTINCT department_id
FROM departments
WHERE location_id IN(1400,1700)

②查詢員工姓名,要求部門號是①列表中的某一個

SELECT last_name
FROM employees
WHERE department_id <>ALL(
SELECT DISTINCT department_id
FROM departments
WHERE location_id IN(1400,1700)

);

案例2:返回其它工種中比job_id為‘IT_PROG’工種任一工資低的員工的員工號椭盏、姓名组砚、job_id 以及salary

①查詢job_id為‘IT_PROG’部門任一工資

SELECT DISTINCT salary
FROM employees
WHERE job_id = 'IT_PROG'

②查詢員工號、姓名掏颊、job_id 以及salary糟红,salary<(①)的任意一個

SELECT last_name,employee_id,job_id,salary
FROM employees
WHERE salary<ANY(
SELECT DISTINCT salary
FROM employees
WHERE job_id = 'IT_PROG'

) AND job_id<>'IT_PROG';

SELECT last_name,employee_id,job_id,salary
FROM employees
WHERE salary<(
SELECT MAX(salary)
FROM employees
WHERE job_id = 'IT_PROG'

) AND job_id<>'IT_PROG';

案例3:返回其它部門中比job_id為‘IT_PROG’部門所有工資都低的員工 的員工號艾帐、姓名、job_id 以及salary

SELECT last_name,employee_id,job_id,salary
FROM employees
WHERE salary<ALL(
SELECT DISTINCT salary
FROM employees
WHERE job_id = 'IT_PROG'

) AND job_id<>'IT_PROG';

SELECT last_name,employee_id,job_id,salary
FROM employees
WHERE salary<(
SELECT MIN( salary)
FROM employees
WHERE job_id = 'IT_PROG'

) AND job_id<>'IT_PROG';

3盆偿、行子查詢(結(jié)果集一行多列或多行多列)

案例:查詢員工編號最小并且工資最高的員工信息

SELECT *
FROM employees
WHERE (employee_id,salary)=(
SELECT MIN(employee_id),MAX(salary)
FROM employees
);

①查詢最小的員工編號

SELECT MIN(employee_id)
FROM employees

②查詢最高工資

SELECT MAX(salary)
FROM employees

③查詢員工信息

SELECT *
FROM employees
WHERE employee_id=(
SELECT MIN(employee_id)
FROM employees

)AND salary=(
SELECT MAX(salary)
FROM employees

);

二柒爸、select后面

/*
僅僅支持標(biāo)量子查詢
*/

案例:查詢每個部門的員工個數(shù)

SELECT d.*,(

SELECT COUNT(*)
FROM employees e
WHERE e.department_id = d.`department_id`

) 個數(shù)
FROM departments d;

案例2:查詢員工號=102的部門名

SELECT (
SELECT department_name,e.department_id
FROM departments d
INNER JOIN employees e
ON d.department_id=e.department_id
WHERE e.employee_id=102

) 部門名;

三、from后面

/*
將子查詢結(jié)果充當(dāng)一張表事扭,要求必須起別名
*/

案例:查詢每個部門的平均工資的工資等級

①查詢每個部門的平均工資

SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id

SELECT * FROM job_grades;

②連接①的結(jié)果集和job_grades表捎稚,篩選條件平均工資 between lowest_sal and highest_sal

SELECT ag_dep.*,g.grade_level
FROM (
SELECT AVG(salary) ag,department_id
FROM employees
GROUP BY department_id
) ag_dep
INNER JOIN job_grades g
ON ag_dep.ag BETWEEN lowest_sal AND highest_sal;

四、exists后面(相關(guān)子查詢)

/*
語法:
exists(完整的查詢語句)
結(jié)果:
1或0

*/

SELECT EXISTS(SELECT employee_id FROM employees WHERE salary=300000);

案例1:查詢有員工的部門名

in

SELECT department_name
FROM departments d
WHERE d.department_id IN(
SELECT department_id
FROM employees

)

exists

SELECT department_name
FROM departments d
WHERE EXISTS(
SELECT *
FROM employees e
WHERE d.department_id=e.department_id

);

案例2:查詢沒有女朋友的男神信息

in

SELECT bo.*
FROM boys bo
WHERE bo.id NOT IN(
SELECT boyfriend_id
FROM beauty
)

exists

SELECT bo.*
FROM boys bo
WHERE NOT EXISTS(
SELECT boyfriend_id
FROM beauty b
WHERE bo.id=b.boyfriend_id

);

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末求橄,一起剝皮案震驚了整個濱河市阳藻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谈撒,老刑警劉巖腥泥,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異啃匿,居然都是意外死亡蛔外,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門溯乒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來夹厌,“玉大人,你說我怎么就攤上這事裆悄∶疲” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵光稼,是天一觀的道長或南。 經(jīng)常有香客問我,道長艾君,這世上最難降的妖魔是什么采够? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮冰垄,結(jié)果婚禮上蹬癌,老公的妹妹穿的比我還像新娘。我一直安慰自己虹茶,他們只是感情好逝薪,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蝴罪,像睡著了一般董济。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上洲炊,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天感局,我揣著相機與錄音尼啡,去河邊找鬼。 笑死询微,一個胖子當(dāng)著我的面吹牛崖瞭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播撑毛,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼书聚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了藻雌?” 一聲冷哼從身側(cè)響起雌续,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胯杭,沒想到半個月后驯杜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡做个,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年鸽心,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片居暖。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡顽频,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出太闺,到底是詐尸還是另有隱情糯景,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布省骂,位于F島的核電站蟀淮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏冀宴。R本人自食惡果不足惜灭贷,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望略贮。 院中可真熱鬧,春花似錦仗岖、人聲如沸逃延。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽揽祥。三九已至,卻和暖如春檩电,著一層夾襖步出監(jiān)牢的瞬間拄丰,已是汗流浹背府树。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留料按,地道東北人奄侠。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像载矿,于是被迫代替她去往敵國和親垄潮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 暹粒最后一天闷盔,有一個珠寶店要去逛逛弯洗,這次的出行讓我對旅行途中的購物店有了不一樣的感覺,原來的自己在走進購物店的時候...
    劉樂青閱讀 336評論 0 2
  • 圣誕假期孩子們選擇了去日本逢勾,北海道茫茫雪景牡整,印入眼簾,滿天飛舞的大雪迷人之極溺拱。 初次滑雪還須在專業(yè)人員的指引下進行...
    楊義8閱讀 213評論 0 0
  • 桃肉含有豐富的果糖逃贝、葡萄糖、有機酸盟迟、揮發(fā)油秋泳、蛋白質(zhì)、胡蘿卜素攒菠、維生素C迫皱、鈣、鐵辖众、鎂卓起、鉀、粗纖維等成分凹炸。 當(dāng)季的水果...
    喬德志閱讀 212評論 1 1