MySQL之DQL詳解(多表)

上次窩瓜給大家帶來了,MySQL中對於單表的查詢,這次,就給小夥伴們詳細的說一下關於多表的查詢操作!

在我們實際的運用之中,肯定不是單純對一張表的查詢,對於一些數據量較大的複雜關係表示,我們就需要利用主外鍵之間的關係進行連接,這時候,就涉及到了我們的多表查詢!對於多表查詢,我們將其分爲四種類型,分別是:結果集的合併、內連接、外連接、子查詢~

下面我們就分塊來進行了解~

合併結果集

SELECT * FROM 表名
UNION ALL
SELECT * FROM表名;

合併結果集,總的來說,就是將兩張需要查詢的表格連接在一起,方便我們進行觀察!

內連接

SELECT * FROM 表名,表名;

上面的這種操作,就和我們的LIMIT查詢(分組查詢)一樣,用大家好理解的話來說,就是隻屬於MySQL的“方言”,也就是說,一旦我們使用的數據庫並不是MySQL的時候(比如Oracle),這條語句也就沒有用了。

SELECT * FROM 表名 INNER JOIN 表名 ON 條件;

這條命令,就是我們內連接最正規的語法了,ON關鍵字後邊的條件,主要是爲了去除我們不需要的笛卡爾積~

對於笛卡爾積,就是我們的元組在生成的時候,所產生的無用的垃圾數據,這裏我們是不需要的,所以我們需要用條件將其過濾。

外連接

外連接又分爲左外連接和右外連接(以下我們將之稱之爲左外和右外),左連接的實際含義就是查出左表的全部數據,要是右表中沒有對應的數據,就用null補齊;右連接反之!

左外
SELECT * FROM 表名 LEFT OUTER JOIN 表名 ON 條件;
右外
SELECT * FROM 表名 RIGHT OUTER JOIN 表名 ON 條件;
全外
SELECT * FROM 表名 FULL OUTER JOIN 表名 ON 條件;

對於以上的方式,在MySQL中是不支持的,那麼,在MySQL中我們要如何完成全外的連接方式呢?

其實很簡單,只需要我們將左外、右外、合併結果集用在一塊,就能解決了~

SELECT * FROM 表名 LEFT OUTER JOIN 表名 ON 條件
UNION ALL
SELECT * FROM 表名 RIGHT OUTER JOIN 表名 ON 條件;

子查詢

子查詢,用最簡單的話來說,就是查詢之中套查詢,有時候,當我們需要查詢的數據,是基於我們第一次所查詢出的結果集之上的時候,就需要用到子查詢,其沒有一個固定的基本語法。

總的來說,子查詢一般會以兩種形式出現:

  1. 放在FROM之後作爲一張新的表
  2. 放在WHERE之後,作爲條件

作爲表

SELECT * FROMSELECT * FROM 表名 WHERE 條件) WHERE 條件;

就像上面的這種形式,將內層SELECT語句作爲第一次查詢的結果,在此基礎上,再次進行查詢,這也是我們子查詢中比較簡單的一種~

作爲條件

子查詢作爲條件出現的時候,分爲三種情況,分別是:單行單列、單行多列、多行單列(還有一種多行多列的情況,實際上就是一個新表,在上面的窩瓜已經給大家給出),下面,我們就分別看看這三種情況分別對應的效果:

單行單列
SELECT * FROM 表名 WHERE 列名 [=><>=<=<>] (SELECT * FROM 表名 WHERE 條件);
單行多列
SELECT * FROM 表名 WHERE [INALLANY] (SELECT * FROM 表名 WHERE 條件);
多行單列
 SELECT * FROM 表名 WHERE (列名,列名) IN (SELECT * FROM 表名 WHERE 條件);

以上就是我們對於DQL多表的一下講解,到這裏,我們關於SQL的四大操作DDL、DML、DCL、DQL就全部給大家將完了!

要是有任何講的不對的地方,歡迎大家在評論給出指導,謝謝大家~

發佈了11 篇原創文章 · 獲贊 0 · 訪問量 7063
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章