當前位置:首頁 » 編程語言 » 中間表查詢實例sql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

中間表查詢實例sql

發布時間: 2023-06-09 10:05:42

『壹』 sql聯合查詢語句(兩張表)

sql聯合查詢語句(兩張表)是:

select A.ID,A.VALUE,A.TYPE,A.NAME,B.KEY,B.ID,B.VALUE,B.NAME
min(VALUE),max(VALUE) from A left join B on A.ID = B.ID
where B.NAME="你輸入的名字"
and B.VALUE > (select min(VALUE) from B where NAME="你輸入的名字"))
and B.VALUE < (select min(VALUE) from B where NAME="你輸入的名字"));

『貳』 如何sql三張表關聯查詢

三張表關聯查詢
使用場景:A\B\C 三張表,現在要查詢並展示A表和C表中的某些欄位,但是A、C兩表沒有相同欄位,無法關聯,此時有B表恰好有兩個欄位,一個欄位和A表一個欄位相同,一個欄位和C表一個欄位相同,我們稱B表為「中間表」,因此通過B表把A、C表關聯起來
SELECT A1,A2,C1,C2 --展示A表中的A1\A2欄位和C表中的C1\C2
FROM B --中間表
INNER JOIN A ON A.A1 = B.B1 --A表中的與B表中相同的欄位
INNER JOIN C ON C.C1 = B.B1 --C表中的與B表中相同的欄位
where xxxxx ---條件你自己按照需求來加,沒有條件就不寫where了

『叄』 SQL實戰新手入門:N路INNER JOIN

N路INNER JOIN

當兩個表之間不存在直接的關系時該怎麼聯接這兩個表呢?在這種情況下 聯接操作需要涉及更多的表!在上一小節INNER JOIN的練習中已經演示了一個實際的例子

例如 有時我們需要列出所有的圖書以及各圖書相應的作者 請注意 在資料庫中一本圖書並不知道它的作者信息在哪裡(即在BOOKS表的數據行中並沒有關於該圖書作者的信息) 而作者信息的記錄同樣也不知道該作者編寫的圖書的信息在什麼地方 但是 在資料庫中有一個BOOKS_AUTHORS表 它包含了這樣的知識 哪一本圖書是哪一個作者編寫的 以及哪一個作者編寫了哪些圖書 BOOKS_AUTHORS表中的每一行都包含了一個BOOKS表的外鍵和一個AUTHORS表的外鍵 如果一本圖書是由多個作者編寫的 那麼該BOOKS_AUTHORS表中就具有多行記錄 每一行包含了相同的圖書ID和不同的作者ID 反之亦然(對於任何一個編寫了多本圖書的作者)

由於BOOKS表中的數據行沒有對於AUTHORS表的外鍵 AUTHORS表的數據行也沒有對於BOOKS表的外鍵 因此沒有辦法直接將這兩個表聯接起來 但是可以將這兩個表聯接到BOOKS_AUTHORS表

SELECT

books bk_title AS Book

authors au_last_name AS Author

FROM books INNERJOIN books_authors

ON books bk_id = books_authors bk_id

INNER JOIN authors

ON authors au_id = books_authors au_id;

聯接的結果如表 所示 正如我們所期望的 如果一本書的作者超過一位 那麼有多少個作者 在列表中就會列出多少條記錄

表 列出圖書及其相應的作者

在結果集中可能會出現重復的圖書名稱 也可能會出現重復的作者名字 但是圖書名稱與作者名字的每一個組合在結果集中僅僅只會出現一次

接下來分析一下該查詢返回的數據集背後的邏輯 下面是該查詢的第一部分 SELECT欄位列表

SELECT

books bk_title AS Book

authors au_last_name AS Author

該欄位列表並沒有什麼神奇 它告訴查詢引擎我們感興趣的欄位 並為欄位列表中的列定義一個比默認名稱更加可愛的列名(別名) 注意 雖然查詢了多個表 但並非一定要從每一個表中都獲取數據 在本例中 只需要一些來自BOOKS表的欄位和一些來自AUTHORS表的欄位 而並不需要獲取BOOKS_AUTHORS表中的欄位

FROM books INNER JOIN books_authors

ON books bk_id = books_authors bk_id

上面的子句定義了第一個INNER JOIN 指定了要聯接哪兩個表 以及如何聯接這兩個表 在本例中 聯接條件是BOOKS表中的BK_ID列的值必須與BOOKS_AUTHORS表中BK_ID列的值相等(兩個表中的列名不一定要相同 但是相同的列名使用起來會比較方便)

INNER JOIN authors ON authors au_id = books_authors au_id

上面的子句定義了第二個INNER JOIN 請注意它與第一個INNER JOIN子句的不同 在第一個INNER JOIN子句中指定了兩個表 books INNER JOIN books_authors 但在第二個INNERJOIN中僅僅指定了一個表 INNER JOIN authors 這里並不需要指定其他的表 它已經被綁定到之前指定的兩個表中的一個 並且行匹配規則將指定它與哪一個表進行聯接(在本例中 行匹配規則是 AUTHORS表中AU_ID列的值與BOOKS_AUTHORS表中AU_ID列的值相等)

運行該查詢後 如果BOOKS表中包含在BOOKS_AUTHORS表中沒有記錄的圖書 則結果集中不會包含這樣的圖書 如果AUTHORS表中的任何作者在BOOKS_AUTHORS表中並不存在 則結果集中也不會包含這樣的作者

試一試使用四路聯接

如何查詢位於書櫃的頂層書架中名稱以SQL開頭的圖書以及圖書的作者呢?當然 這需要聯接LOCATION表 BOOKS表和AUTHORS表 由於在圖書與圖書的作者之間是一個多對多關系 因此必須包含BOOKS_AUTHORS表作為中間表 以解決多對多關系的復雜性問題 下面將使用Microsoft SQL Server來演示聯接的功能 在本書所討論的其他任何一種RDBMS中 下面的腳本無須修改都能正常運行 下面讓我們來實踐一下吧

( ) 打開Microsoft SQL Server Management Studio 使用Windows身份驗證連接到資料庫

( ) 單擊左上角的New Query按鈕 輸入下面的SQL查詢

SELECT

au_last_name AS author

bk_title AS title

FROM books bk INNER JOIN books_authors ba

ON bk bk_id = ba bk_id

INNER JOIN authors au

ON ba au_id = au au_id

INNER JOIN location loc

ON bk bk_id = loc fk_bk_loc

WHERE loc loc_shelf =

AND bk bk_title LIKE SQL%

( ) 單擊工具欄上的Execute按鈕 觀察返回的結果

author title

Kriegel SQL Bible

Trukhnov SQL Bible

Kriegel SQL Functions: Programmers Reference

Jones SQL Functions: Programmers Reference

Stephens SQL Functions: Programmers Reference

Plew SQL Functions: Programmers Reference

Garrett SQL Functions: Programmers Reference

( row(s) affected)

示例說明

在之前的例子中 聯接的價值在於盡量減少選取的記錄 直到數據集完全符合指定的篩選標准 在本例中 資料庫引擎將從按照JOIN語句聯接的所有表對中匹配記錄(即BOOKS/BOOKS_AUTHORS BOOKS_AUTHORS/AUTHORS和BOOKS/LOCATION表對) 最後再應用篩選條件 減小數據集 僅僅返回滿足條件LOC_SHELF = 和BK_TITLE以SQL開頭的記錄(請回憶一下帶有LIKE謂詞的匹配模式)

返回目錄 SQL實戰新手入門

編輯推薦

Oracle索引技術

高性能MySQL

lishixin/Article/program/SQL/201311/16472

『肆』 sql語句中間表建立(要有詳細的sql語句哦)

--- 如果id有字母可以換成varchar類型
create table 學生表 (學生id int ,姓名 varchar(200))
create table 課程表 (課程id int ,課程名稱 varchar(500))
create table 中間表 (學生id int ,課程id int ,成績 int )