個(gè)人簡(jiǎn)介:Java領(lǐng)域新星創(chuàng)作者;阿里云技術(shù)博主、星級(jí)博主、專家博主;正在Java學(xué)習(xí)的路上摸爬滾打,記錄學(xué)習(xí)的過程~
個(gè)人主頁(yè):.29.的博客
學(xué)習(xí)社區(qū):進(jìn)去逛一逛~
⑧MySQL數(shù)據(jù)庫(kù)查詢
1. 多表關(guān)系
多表關(guān)系
:
-
一對(duì)一 :在
任意一方
加入外鍵,關(guān)聯(lián)另一方的主鍵,并設(shè)置外鍵為唯一(UNIQUE)。 -
一對(duì)多(多對(duì)一) :在
多
的一方建立外鍵,指向一
的一方的主鍵。 - 多對(duì)多 :建立第三張表作為中間表,中間表至少包含兩個(gè)外鍵,分別關(guān)聯(lián)雙方主鍵。
2. 多表查詢
多表查詢
:
- 在多張表中查詢數(shù)據(jù)。
-
笛卡爾積:兩個(gè)集合,集合A 與 集合B中元素的所有組合情況,在多表查詢時(shí)需要使用
WHERE關(guān)鍵字
或JOIN ON關(guān)鍵字
消除笛卡爾積。
??內(nèi)連接 —— INNER JOIN
連接查詢 —— 內(nèi)連接
:
-
內(nèi)連接:
-
-
①隱式內(nèi)連接
-
-
SELECT 字段列表 FROM 表1,表2 WHERE 連接條件...;
-
-
②顯示內(nèi)連接
-
-
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 連接條件...;
-
-
-
== 內(nèi)連接查詢的是兩張表交集的部分 ==
-
-
-
-- 演示: -- 查詢員工姓名,以及關(guān)聯(lián)的部門名稱(隱式內(nèi)連接) -- 表:?jiǎn)T工表emp、部門表dept SELECT emp.name,dept.name FROM emp,dept WHERE emp.dept_id = dept.id; -- 查詢員工姓名,以及關(guān)聯(lián)的部門名稱(顯示內(nèi)連接) -- 表:?jiǎn)T工表emp、部門表dept SELECT emp.name,dept.name FROM emp INNER JOIN dept ON emp.dept_id = dept.id;
-
??左外連接 —— LEFT OUTER JOIN
連接查詢 —— 左外連接
:
-
外連接 —— 左外連接:
-
-
①查詢表1所有數(shù)據(jù),包含表1和表2交集部分的數(shù)據(jù)。
-
-
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 連接條件...;
-
-
-- 演示: -- 查詢emp表所有數(shù)據(jù),以及對(duì)應(yīng)部門信息(dept表數(shù)據(jù)) -- 左外連接實(shí)現(xiàn) SELECT emp.*,dept.name FROM emp LEFT JOIN dept ON emp.`dept_id` = dept.`id`;
-
??右外連接 —— RIGHT OUTER JOIN
連接查詢 —— 右外連接
-
外連接 —— 右外連接:
-
-
①查詢表2所有數(shù)據(jù),包含表1和表2交集部分的數(shù)據(jù)。
-
-
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 連接條件...;
-
-
-
-
-- 演示: -- 查詢emp表所有數(shù)據(jù),以及對(duì)應(yīng)部門信息(dept表數(shù)據(jù)) -- 右外連接實(shí)現(xiàn) SELECT emp.*,dept.name FROM dept RIGHT JOIN emp ON emp.`dept_id` = dept.`id`;
??自連接 —— JOIN
連接查詢 —— 自連接
:
-
自連接:
-
-
①自連接查詢,可以是內(nèi)連接查詢,也可以是外連接查詢
-
-
SELECT 字段列表 FROM 表1 別名A JOIN 表1 別名B ON 連接條件...;
-
-
-- 演示 -- 查詢emp表員工 及其 所屬領(lǐng)導(dǎo)的名字 -- 使用內(nèi)連接 SELECT e1.`name` 員工,e2.`name` 領(lǐng)導(dǎo) FROM emp e1 JOIN emp e2 ON e1.`managerid` = e2.`id`; -- 查詢emp表員工 及其 所屬領(lǐng)導(dǎo)的名字,如果員工沒有領(lǐng)導(dǎo),也需要查詢出來 -- 使用外連接 SELECT e1.`name` 員工,e2.`name` 領(lǐng)導(dǎo) FROM emp e1 LEFT JOIN emp e2 ON e1.`managerid` = e2.`id`;
-
??聯(lián)合查詢 —— UNION、UNION ALL
聯(lián)合查詢
:
-
UNION查詢就是把多次查詢的結(jié)果合并,行程新的結(jié)果集
-
-
-- 使用UNION,對(duì)結(jié)果去重 -- 使用UNION ALL,不對(duì)結(jié)果去重 -- 要求聯(lián)合的多個(gè)查詢字段列表的 類型與數(shù)量 需要保持一致 SELECT 字段列表 FROM 表A ... UNION [ALL] SELECT 字段列表 FROM 表B ...;
-
-
-- 演示 -- 查詢薪資低于5000 以及 年齡大于50的員工 -- 使用UNION,對(duì)結(jié)果去重 -- 使用UNION ALL,不對(duì)結(jié)果去重 SELECT * FROM emp WHERE emp.`salary` < 5000 UNION SELECT * FROM emp WHERE emp.`age` > 50;
??子查詢(嵌套查詢)
子查詢
:
-
子查詢:
SQL語(yǔ)句
中嵌套SELECT語(yǔ)句,稱為嵌套查詢,又稱子查詢。 -
-
SELECT * FROM 表1 WHERE 字段1 = (SELECT 字段1 FROM 表2);
-
子查詢外部的語(yǔ)句可以是
INSERT / UPDATE / DELETE / SELECT
。
-
-
子查詢分類
(根據(jù)子查詢結(jié)果不同): -
-
①標(biāo)量子查詢(子查詢結(jié)果為單個(gè)值)
-
-
-- 演示 -- ①標(biāo)量子查詢 -- 1.查詢“銷售部”的所有員工信息 SELECT * FROM emp WHERE dept_id = (SELECT id FROM dept WHERE dept.`name` = '銷售部'); -- 2.查詢?cè)凇胺綎|白”之后入職的員工信息 SELECT * FROM emp WHERE entrydate > (SELECT entrydate FROM emp WHERE NAME = '方東白');
-
-
②列子查詢(子查詢結(jié)果為一列)
-
-
常見操作符:
-
-
IN
:在指定的集合范圍之內(nèi),多選一。 -
NOT IN
:不在指定的集合范圍之內(nèi)。 -
ANY
:子查詢返回列表內(nèi),有任意一個(gè)滿足即可。 -
SOME
:與ANY相同,使用SOME的地方都可以使用ANY。 -
ALL
:子查詢返回列表的所有值都必須滿足。
-
-
-- 演示 -- ②列子查詢 -- 1. 查詢“銷售部” 和 “市場(chǎng)部” 所有員工信息 SELECT * FROM emp WHERE emp.`dept_id` IN(SELECT id FROM dept WHERE NAME IN('銷售部','市場(chǎng)部')); -- 2. 查詢比財(cái)務(wù)部所有人工資都高的員工信息 SELECT * FROM emp WHERE emp.`salary` > ALL(SELECT salary FROM emp WHERE dept_id = (SELECT id FROM dept WHERE dept.`name` = '財(cái)務(wù)部')); -- 3. 查詢比財(cái)務(wù)部 任意一人 工資高的員工信息 SELECT * FROM emp WHERE emp.`salary` > ANY(SELECT salary FROM emp WHERE dept_id = (SELECT id FROM dept WHERE dept.`name` = '財(cái)務(wù)部'));
-
-
③行子查詢(子查詢結(jié)果為一行)
-
-
-- 演示 -- ③行子查詢 -- 查詢與“張無忌” 薪資 以及 直屬領(lǐng)導(dǎo) 相同的員工信息 SELECT * FROM emp WHERE (salary,managerid) = (SELECT salary,managerid FROM emp WHERE NAME = '張無忌');
-
-
④表子查詢(子查詢結(jié)果為多行多列)
-
-
-- 演示 -- ④表子查詢 -- 查詢?nèi)肼殨r(shí)間是“2006-01-01”之后入職的員工信息及其部門信息 SELECT e.*,dept.name FROM(SELECT * FROM emp WHERE emp.`entrydate` > '2006-01-01') e LEFT JOIN dept ON e.dept_id = dept.`id`;
-
-
文章來源:http://www.zghlxwxcb.cn/news/detail-751575.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-751575.html
到了這里,關(guān)于⑧【MySQL】數(shù)據(jù)庫(kù)查詢:內(nèi)連接、外連接、自連接、子查詢、多表查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!