當前位置:首頁 » 編程語言 » sql多表查詢as

sql多表查詢as

發布時間: 2023-04-30 01:49:36

sql多表查詢詳解


本教程為大家介紹SQL中的多表查詢,下面我們來看看具體實例吧。
新建兩張表:
表1:student 截圖如下:
表2:course 截圖如下:
(此時這豎轎派樣建表只是為了演示連接SQL語句,當然實際開發中我們不會這樣建表,實際開發中這兩個表會有自己不同的主鍵。)
一、外連接
外連接可分為:左連接、右連接、完全外連接。
1、左連接 left join 或 left outer join
SQL語句:select * from student left join course on student.ID=course.ID
執行結果:
左外連接包含left join左表所有行,如果左表中某行在右表沒有匹配,則結果中對應行右表的部分全部為空(NULL).
註:此時我們不能說結果的行數等於左表數據的行數。當然此處查詢結果的行數等於左表數據的行數,因為左右兩表此時為一對一關系。
2、右連接 right join 或 right outer join
SQL語句:select * from student right join course on student.ID=course.ID
執行結果:
右外連接包含right join右表所有行,如果左表中某行在右表沒有匹配,則結果中對應左表的部分全部為空(NULL)。
註:同樣此時我們不能說結果的行數等於右表的行數。當然此處查詢結果的行數等於左表數據的行數,因為左右兩表此時為一對一關系。
3、完全外連接 full join 或 full outer join
SQL語句:select * from student full join course on student.ID=course.ID
執行結果:
完全外連接包含full join左右兩表中所有的行,如余賀果右表中某行在左表中帆衡沒有匹配,則結果中對應行右表的部分全部為空(NULL),如果左表中某行在右表中沒有匹配,則結果中對應行左表的部分全部為空(NULL)。
二、內連接 join 或 inner join
SQL語句:select * from student inner join course on student.ID=course.ID
執行結果:
inner join 是比較運算符,只返回符合條件的行。
此時相當於:select * from student,course where student.ID=course.ID
三、交叉連接 cross join
1.概念:沒有 WHERE 子句的交叉聯接將產生連接所涉及的表的笛卡爾積。第一個表的行數乘以第二個表的行數等於笛卡爾積結果集的大小。
SQL語句:select * from student cross join course
執行結果:
如果我們在此時給這條SQL加上WHERE子句的時候比如SQL:select * from student cross join course where student.ID=course.ID
此時將返回符合條件的結果集,結果和inner join所示執行結果一樣。
四、兩表關系為一對多,多對一或多對多時的連接語句
當然上面兩表為一對一關系,那麼如果表A和表B為一對多、多對一或多對多的時候,我們又該如何寫連接SQL語句呢?
其實兩表一對多的SQL語句和一對一的SQL語句的寫法都差不多,只是查詢的結果不一樣,當然兩表也要略有改動。
比如表1的列可以改為:
Sno Name Cno
表2的列可以改為:
Cno CName
這樣兩表就可以寫一對多和多對一的SQL語句了,寫法和上面的一對一SQL語句一樣。
下面介紹一下當兩表為多對多的時候我們該如何建表以及些SQL語句。
新建三表:
表A: student 截圖如下:
表B: course 截圖如下:
表C: student_course 截圖如下:
一個學生可以選擇多門課程,一門課程可以被多個學生選擇,因此學生表student和課程表course之間是多對多的關系。
當兩表為多對多關系的時候,我們需要建立一個中間表student_course,中間表至少要有兩表的主鍵,當然還可以有別的內容。
SQL語句:select s.Name,C.Cname from student_course as sc left join student as s on s.Sno=sc.Sno left join course as c on c.Cno=sc.Cno
執行結果:
此條SQL執行的結果是學生選課的情況。

Ⅱ sql多表聯合查詢步驟是什麼

select
a.noas學生ID
,a.nameas學生名字
,c.subnameas科目名稱
,b.scoreas學生成績
fromAaleftjoinBbona.no=b.noleftjoinConb.subid=c.subid
  1. 結構化查詢語言(StructuredQueryLanguage)簡稱SQL,是一種特殊目的的編程語言,是一種數據羨豎漏庫查詢和程序設計語言,用於兄爛存取數據以及查詢、更新和管理關系資料庫系統;同時也是資料庫腳本文件的擴展名。

  2. 結構化查詢語言是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統,可以使用相同的結構化查詢語言作為數據輸入與管理的介面。

  3. 結構化查詢語言語句可以嵌套,這使它具纖拍有極大的靈活性和強大的功能。

Ⅲ sql語句多表聯查時怎麼用as出的欄位進行查詢

as 加在前面磨粗 select planname as planname from、、、、
但是你這個語句有問題空野,多表聯查不是這么查詢的,並且你沒有斗游喊鏈接語句呀

Ⅳ 多表聯合查詢SQL語句

1,Cab.scoreleftc;as科目名稱.subname&nbsp.nob;b;asfromas=&nbsp.nobleft學生名字。

2,a;joinB&nbsp,a;joinA&nbsp,onas&nbsp,c.name學生ID;=&nbspselect學生成績on&碰清轎nbsp.subida.no&笑肆nbsp。

Ⅳ sql資料庫多表查詢(sql資料庫多表查詢示例)

可以有兩種處理方法,1、兩表先合並,後求和

select日期,sum(數值)as數值from

(select日期,金額薯局祥as數值fromA表

unionall

select日期,數量as數值fromB表)

groupby日期

2、先求和後合並,再求和

select日期,sum(數值)as數值from

(select日期,sum(金額)as數值fromA表groupby日期

unionall

select日期,sum(數量)as數值fromB表groupby日期)

groupby日期

對於「如果要實現總和的相乘、相除,或者相減得話,應該怎麼寫呢?」,你得提出明確需求,那後才能設計。

如果數搏是相乘、相除,或者相減,得有條件,還像上面,用日期關聯,A表-B表,A表求和:select日期,sum(金額)as數值fromA表groupby日期

B表求和:select日期,sum(數量)as數值fromB表groupby日期

在執行A表-B表時,由於用日期關聯,則某一日期對應的記錄可能會產生三種情況:A表B表都有;A表有B表無;A表無B表有。

1、需要先找出所有日期,select日期fromA表

union

select日期fromB表

2、對於A表中所有數據以上表中日期為依據構造所有相關日期數據,如果有日期數據,則為原數臘橋據,否則為0。

selecta.日期as日期,casewhenb.數值isNULLthenb.數值else0endas數值

from

(select日期fromA表

union

select日期fromB表)a

leftjoin

(select日期,sum(金額)as數值fromA表groupby日期)b

ona.日期=b.日期

3、同樣對於B表也如此。

4、2表相減即得。

selecta3.日期as日期,a3.數值-b3.數值as數值

from

(

selecta1.日期as日期,casewhenb1.數值isNULLthenb1.數值else0endas數值

from

(select日期fromA表

union

select日期fromB表)a1

leftjoin

(select日期,sum(金額)as數值fromA表groupby日期)b1

ona1.日期=b1.日期

)a3,(

selecta2.日期as日期,casewhenb2.數值isNULLthenb2.數值else0endas數值

from

(select日期fromA表

union

select日期fromB表)a2

leftjoin

(select日期,sum(金額)as數值fromB表groupby日期)b2

ona2.日期=b2.日期

)b3

wherea3.日期=b3.日期

當然,以上只是一種方法,還有其他方法也可以實現,盡供參考。

Ⅵ SQL多表查詢

如果賬戶信閉卜息表賬戶名是唯一標識的話需要在別的消費信派態握息單里設置賬戶名欄位為外鍵,然後創建一個視圖,create or replace view 已繳費視圖 as select * 或 賬戶名 from 賬戶表,水費,車費 where 水費.繳費狀態 =』已繳費』 and 車費.繳費狀態=『已塵慶繳費』 and 水費.賬戶名=賬戶表.賬戶名 and 車費.賬戶名 = 賬戶表.賬戶名。創建完成之後,可以隨時查詢視圖來查看車費水費全都以繳費名單。

Ⅶ SQL多表鏈接查詢、嵌入SELECT語句的子查詢技術

高級查詢技術主要是涉及多個表的鏈接查詢技術 嵌入SELECT語句的子查詢技術 把多個查詢聯合起來的聯合技術等

連接查詢

需要同時從兩個或者連個以上的表中檢索數據 鏈接就是允許同時從兩個表或者兩個以上的表中檢索數據 指定這些表中的某個或者某些列作為連接條件 在SQL Server中 可以使用兩種連接語法的形式 一種是ANSI鏈接語法形式 這是連接條件出現在FROM子句中;另外一種SQL Server鏈接語法形式 這是連接條件出現在WHERE條件中

ANSI鏈接

鏈接錯做可以同時查詢兩個或者多個表中的數據 所生成的結果集包含多個表中的欄位 需要使用連個表 *** 同擁有的欄位以連接多個表

進行連接操作時 SQL一行一行地比較所指定的欄位 然後把比較後的結果和滿足條件的數據合並 並生成新的記錄

有三種連接方吵差式 內連接 外連接和交叉連接 在一個SELECT語句中 可以連接多個表;鏈接通過擴展SELECT語句的FROM字句 增加了兩個關鍵字 JOIN和ON

JOIN 指定要了鏈接的表

ON 指定這些表共同擁有的欄位

在表的主鍵和外部鍵的基礎上 指定連接條件

ANSI鏈接語法形式如下所示

SELECT table_name column_name table_name column_name ……

FROM { table_name[ join_type] JOIN table_name ON search_conditions}

WHERE[ search_conditions]

其中[ join_type ]可以為如下三個關鍵字形式

INNER(內連接) 鏈接查詢結果集中僅包含滿足條件的行 內連接是SQL Server預設的連接方式 可以把INNER JOIN簡寫成 JOIN;

OUTER(外連接) 鏈接查詢結果集中既包含哪些滿足條件的行 還包含其中某個表的全部行 有三種形式的外連接 左外連接 右外連接 全外連接

例如 已經選修了 號課程的同學信息的示例 該示例涉及到此枯了學生表和選修課

SELECT 學生表

FROM 學生表 JOIN 選課表 ON 學生表 學號 選課表 學號

WHERE 選課表 課程號=

SQL Server鏈接

多表連接 可以在FROM子句後直接指定多個表 語義上表示從這幾個表的笛卡爾積中檢索數據 可以用WHERE子句設定過濾條件

SQL Server鏈接語法形式如下

SELECT table_name column_name table_name column_name ……

FROM { table_name table_name ……}

WHERE table_name column_name join_operator table_name column_name

在此種語法形式中 FROM子句列出了連接時所使用到的全部表名 WHERE子句指定哪些行應該出現在結果集中 即用WHERE子句設定過濾條件 在WHERE子句中 在兩個連接的列中使用鏈接運算符

例如 檢索出至少已經有一門課程及格的同學的信息示例

SELECT DISTINCT 學生表 *

FROM 學生表 選課表

WHERE 學生表 學號=選課表 學號 AND 選課表 成績=

子查詢

子查詢是一系列SELECT語句 SELECT語句可以嵌套在其他許多語句中 例如SELECT INSERT UPDATE DELETE等 這些嵌套的SELECT語句就稱為子查詢 子查詢可以把一個復雜的查詢分解成一系列的邏輯步驟 這樣就可以用一個單個的語句解決一個復雜的查詢問題 當一個查詢依賴於另一個查詢的結果時 子查詢會很有用

升扒皮使用子查詢時 應注意

子查詢要用括弧起來

只需要一個值或一系列的值 就可以用子查詢代替一個表達式

子查詢中不能查詢包含數據類型是text或image的欄位

子查詢中也可以再包含子查詢 嵌套可以多至 層

把子查詢用作派生的表

可以用子查詢產生一個派生的表 用於代替FROM子句中的表 派生表示FROM子句中子查詢的一個特殊用法 用一個別名或用戶自定義的名字來引用這個派生表 FROM子句中的子查詢將返回一個結果集 這個結果集所形成的表將被外層SELECT語句使用

例如 內層查詢用子查詢產生了一個派生的表 外層查詢將使用內層查詢的結果集 在功能上 派生表本身就等同於一個完整的查詢

SLECT A *

FROM select 學號 姓名 年齡 from 學生表

Where 班級=『GZ 計 』 as a

把子查詢用作表達式

在T SQL中 所有使用表達式的地方 都可以用子查詢來代替 此時子查詢必須返回單個的值或某一個欄位的值 子查詢可以返回一系列的值來代替出現在WHERE子句中的IN關鍵字的表達式

例如 查詢GZ 計 班同學的平均年齡以及每個同學年齡與平均年齡的差

SELECT avg(年齡) FROM 學生表 as 平均年齡

其計算結果作為選擇列表中的一個輸出列 並作為算術表達式的一部分輸出

年齡 (SELECT avg(年齡) FROM 學生表) as 年齡差

相關子查詢

相關子查詢可被用作動態表達式 這個表達式的值相對於外層查詢的每一行而變化 查詢處理器為外層查詢的每一個記錄計運算元查詢的值 一次一行 而這個子查詢每次都會被作為一個表達式而被計算並返回給外層查詢 相關子查詢是動態執行的子查詢和外層查詢間的一個非常有效的聯合

使用相關子查詢時 內層子查詢被反復執行 外層查詢有多少記錄 內層查詢就被齒形多少次

例如 查詢已選修課程號的 且成績在 分以上的同學的學號及姓名

SELECT 學號 姓名

FROM 學生表

WHERE <=( SELECT 成績

FROM 選課表

WHERE 學生表 學號=選課表 學號 AND 課程號= )

使用EXISTS和NOT EXISTS操作符

在相關子查詢中可以使用EXISTS和NOT EXISTS操作符判斷某個值是否在一系列的值中 SQL Server處理帶有EXISTS和NOT EXISTS操作符的子查詢時

外層查詢測試子查詢返回的記錄是否存在

基於查詢所指定的條件 子查詢返回TRUE或FALSE

子查詢不產生任何數據

例如 同時選修了 號課程和 號課程的同學的信息

SELECT 學號 姓名 班級

FROM 學生表

WHERE EXISTS(SELECT * FROM 選課表

WHERE 學號=學生表 學號 AND 課程號= )

AND EXISTS(SELECT * FROM 選課表

WHERE 學號=學生表 學號 AND 課程號= )

① 找外層表「學生表」的第 行 根據其「學號」值處理內層查詢

② 用外層的「學號」與內層表「選課表」的「學號」比較 由此決定外層條件的真 假 如果為真 則此記錄為符合條件的結果 反之 則不輸出

③ 順序處理外層表「學生表」中的第 行

檢索出每一門選修課都幾個的同學信息

SELECT * FROM 學生表 WHERE

NOT EXISTS( SELECT * FROM 選課表

WHERE 學生表 學號=選課表 學號 AND 成績< )

AND EXISTS( SELECT * FROM 選課表

WHERE 學生表 學號=選課表 學號)

使用TOP限制結果集

在使用SELECT語句進行查詢時 有時我們希望列出前幾個結果 而不是全部結果 例如 競賽時 可能只取成績最高的前三名 這時就需要使用TOP關鍵字來選取輸出的結果

使用TOP的格式為

SELECT TOP n[ percent] [with ties] 查詢列表

其中

n 為非負整數

TOP n 表示取查詢結果的前n行

TOP n percent 表示取查詢結果的前n%行

With ties 表示包括並列的結果

例如 檢索出總分在前 位的同學的學號及其總分

SELECT TOP WITH TIES 學號 SUM(成績) AS 總分

FROM 選課表

GROUP BY 學號

ORDER BY 總分 DESC

使用TOP時 注意最好與ORDER BY子句一起使用 因為這樣的前幾名才有意義 但當使用WITH TIES時 要求必須使用ORDER BY子句

合並多個結果集

可以將兩個或多個查詢的結果組合為一個結果集 這就是合並多個屆國際的含義 使用UNION可以實現合並多個查詢結果集的目的 作用UNION的格式為

SELECT 語句

UNION

SELECT 語句

UNION [ALL]

……

SELECT 語句n

使用UNION 應注意幾點

在默認情況下 UNION運算符刪除全部空餘 如果使用ALL選項 那麼空餘行不刪除

所有查詢語句中的列數和列的順序必須相同

所有查詢語句中的對應列的數據類型必須兼容

如果在UNION語句中 包含一個ORDER BY子句 那麼整個結果集都要排序

在結果集中 列名來自第 個SELECT子句

例如 對GZ 計 班和GZ 計 班學生的查詢結果合並為一個結果集

SELECT * FROM 學生表 WHERE 班級=『GZ 計 』

UNION

lishixin/Article/program/MySQL/201311/29530

熱點內容
明日之後如何掃碼登伺服器 發布:2025-07-19 20:36:26 瀏覽:239
ftp搜索引擎工作原理 發布:2025-07-19 20:31:25 瀏覽:370
景物視頻腳本 發布:2025-07-19 20:30:33 瀏覽:178
hadoop查看文件夾 發布:2025-07-19 20:19:12 瀏覽:21
安卓手機的旁白在哪裡 發布:2025-07-19 20:09:40 瀏覽:740
身份證注冊借書卡的密碼是什麼 發布:2025-07-19 19:44:39 瀏覽:75
玩夢幻西遊哪個配置好 發布:2025-07-19 19:44:37 瀏覽:752
php數組大小排序 發布:2025-07-19 19:27:51 瀏覽:646
linux查找並刪除 發布:2025-07-19 19:25:14 瀏覽:935
linux實驗環境 發布:2025-07-19 19:15:09 瀏覽:411