日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL之数据查询(多表查询)

發布時間:2023/12/14 数据库 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL之数据查询(多表查询) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、FROM子句

SELECT的查詢對象由FROM子句指定。

語法格式:FROM 表名1 [ [ AS ] 別名1] [,表名2 [ [ AS ] 別名2 ]?] | JOIN子句

? ? ? ? FROM子句可以用兩種方式引用一個表,第一種方式是使用USE語句讓一個數據庫成為當前數據庫,在該情況下,若在FROM子句中指定表名,則該表應該屬于當前數據庫。第二種方式是指定的時候在表名前帶上表所屬數據庫的名字。

例如,假設當前數據庫是db1,現在要顯示數據庫db2里的表tb的內容,則使用語句:

SELECT * FROM db2.tb;

? ? ? ? 在SELECT關鍵字后指定列名的時候也可以在列名前帶上所屬數據庫和表的名字,但是一般來說,若選擇的字段在各表中是唯一的,就沒有必要去特別指定。

例:從Members表中檢索出所有客戶的信息,并使用表別名Users

SELECT * FROM Members AS Users

?2、多表連接

? ? ? ? 若要在不同表中查詢數據,則必須在FROM子句中指定多個表。將不同列的數據組合到一個表中叫做表的連接。例如,在Bookstore數據庫中需要查找訂購了“網頁程序設計”圖書的會員的姓名和訂購數量,就需要將Book、Members和Sell這3個表進行連接,才能找到結果

?2.1、全連接

? ? ? ? 全連接是指將每個表的每行都與其他表中的每行交叉以產生所有可能的組合,列包含了所有表中出現的列,也就是笛卡爾積。例如,表1有3行,表2有2行,則他們全連接后的表3有3x2=6行。

2.2、內連接

? ? ? ? 全連接得到的表產生數量非常多的行,其得到的行數為每個表中行數之積,而且全連接產生的表中數據在大多數情況下都沒有意義。在這樣的情形下,通常要設定條件來將結果集減少且有意義的表,這樣的連接即為內連接。若設定的條件是等值條件,也叫等值連接。?

?2.3、外連接

? ? ? ? 外連接包括左外連接(LEFT OUTER JOIN)和右外連接(RIGHT OUTER JOIN)兩種

????????左外連接:結果表中除了匹配行外,還包括左表有的但右表中不匹配的行,對于這樣的行,從右表被選擇的列設置為NULL。

????????右外連接:結果表中除了匹配行外,還包括右表有的但左表中不匹配的行,對于這樣的行,從左表被選擇的列設置為NULL。

?若FROM子句中將各表用逗號分隔,就指定了全連接,全連接得到的表產生數量非常多的行

例:查找Bookstore數據庫中客戶訂購的圖書書名、訂購冊數和訂購時間

SELECT Book.書名,Sell.訂購冊數,Sell.訂購時間 FROM Book,Sell WHERE Book.圖書編號=Sell.圖書編號;

3、 JOIN連接

使用JOIN關鍵字建立多表連接時,JOIN子句定義了如何使用JOIN關鍵字連接表

語法格式:

表名1 INNER JOIN 表名2

| 表名1 {LEFT | RIGHT} [ OUTER ] JOIN 表名2

ON 連接條件 | USING(列名)

?指定INNER關鍵字的連接是內連接。內連接是在FROM子句產生的中間結果中應用ON條件后得到的結果。內連接是系統默認的,可以省略INNER關鍵字。使用內連接后,FROM子句中ON條件主要是用來連接表,其他并不屬于連接表的條件可以使用WHERE子句來指定。

?例:查找Bookstore數據庫中客戶訂購的圖書書名、訂購冊數和訂購時間

SELECT Book.書名,Sell.訂購冊數,Sell.訂購時間 FROM Book INNER JOIN Sell ON(Book.圖書編號=Sell.圖書編號);

?例:查找購買了“網頁程序設計”且訂購數量大于5本的圖書信息

SELECT 書名,訂購冊數 FROM Book JOIN Sell ON Book.圖書編號=Sell.圖書編號 WHERE 書名='網頁程序設計' AND 訂購冊數>5;

例:查找購買了“網頁程序設計”且訂購數量大于5本的圖書、會員姓名和訂購冊數?

SELECT Book.圖書編號,會員姓名,書名,訂購冊數 FROM Sell JOIN Book ON Book.圖書編號=Sell.圖書編號 JOIN Members ON Sell.身份證號=Members.身份證號 WHERE 書名='網頁程序設計' AND 訂購冊數>5;

? ? ? ? 作為特例,可以將一個表與其自身進行連接,稱為自連接。若要在一個表中查找具有相同列值的行,則可以使用自連接。使用自連接時需為表指定兩個別名,且對所有列的引用均要用別名限定。

例:查找Bookstore數據庫的Sell表中訂單不同、圖書編號相同的圖書的訂單號、圖書編號和訂購冊數?

SELECT a.訂單號,a.圖書編號,a.訂購冊數 FROM Sell AS a JOIN Sell AS b ON a.圖書編號=b.圖書編號 AND a.訂單號!=b.訂單號;

?若要連接的表中有列名相同,并且連接的條件就是列名相等,則ON條件也可以換成USING子句。USING(column_list)子句用于為一系列的列進行命名。這些列必須同時在兩個表中存在。其中column_list為兩表中相同的列名。

?指定OUTER關鍵字的連接為外連接。

例:查找所有圖書的圖書編號、數量及訂購了圖書的會員身份證號,若從未訂購過,也要包括其情況。

SELECT Book.圖書編號,Book.數量,身份證號 FROM Book LEFT OUTER JOIN Sell ON Book.圖書編號=Sell.圖書編號;

?若不使用LEFT OUTER JOIN,則結果中不會包括未訂購過的圖書信息。使用了左外連接后,結果中返回的行中有未訂購過的圖書信息,相應行的身份證號字段值為NULL。

4、子查詢

? ? ? ? 在查詢條件中,可以使用另一個查詢的結果作為條件的一部分。例如,判定列值是否與某個查詢的結果集中的值相等,作為查詢條件一部分的查詢稱為子查詢。SQL標準允許SELECT多層嵌套使用,用來表示復雜的查詢。子查詢除了可以用在SELECT語句中,還可以用在INSERT、UPDATE及DELETE語句中。子查詢通常與IN、EXIST謂詞及比較運算符結合使用。?

?4.1、IN子查詢

IN子查詢用于進行一個給定值是否在子查詢結果集中的判斷。

語法格式:表達式 [ NOT ] IN (子查詢)

?例:查找在Bookstore數據庫中張三的訂單信息

思路:含有訂單信息的Sell表不包含客戶的姓名,只有客戶的身份證號。要查找張三的訂單信息,先要知道張三的身份證號。因此先要在Members表中查找張三的身份證號,再根據身份證號查詢訂單信息。

SELECT * FROM Sell WHERE 身份證號 IN (SELECT 身份證號 FROM Members WHERE 會員姓名='張三');

4.2、比較子查詢

該子查詢可以認為是IN子查詢的擴展,其使表達式的值與子查詢的結果的結果進行比較運算

語法格式:表達式{< | <= | = | > | >= | != | <>}{ALL | SOME | ANY}(子查詢)?

????????若子查詢的結果集只返回一行數據時,可以通過比較運算符直接比較。若子查詢的結果集返回多行數據時,需要用{ALL | SOME | ANY}來限定

? ? ? ? ALL指定表達式要與子查詢結果集中的每個值都進行比較,當表達式的每個值都滿足比較關系時,才返回true,否則返回false

? ? ? ? SOME與ANY是同義詞,表示表達式只要與子查詢結果集中的某個值滿足比較關系時,就返回true,否則返回false

?例:查找購買了圖書編號為“IS-01”的圖書的會員信息

SELECT * FROM Members WHERE 身份證號=ANY (SELECT 身份證號 FROM Sell WHERE 圖書編號='IS-01');

?4.3、EXISTS子查詢

? ? ? ? EXISTS謂詞用于測試子查詢的結果是否為空表,若子查詢的結果集不為空,則EXISTS返回true,否則返回false。EXISTS還可與NOT結合使用,即NOT EXISTS,其返回值與EXISTS剛好相反。

語法格式:[ NOT ]EXISTS (子查詢)

例:查找每次訂購10本以上圖書的會員姓名?

SELECT 會員姓名 FROM Members WHERE EXISTS (SELECT * FROM Sell WHERE 身份證號=Members.身份證號 and 訂購冊數>10);

總結

以上是生活随笔為你收集整理的MySQL之数据查询(多表查询)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。