首页
/
每日頭條
/
生活
/
sql兩張表的聯合查詢語句
sql兩張表的聯合查詢語句
更新时间:2026-06-17 09:59:17

平時大多是執行單表查詢,通常你把索引建好,讓他盡可能走索引,性能都沒問題。但其實也有不少的多表關聯語句,因為有時查找目标數據,不得不借助多表關聯的語法,才能實現你想要但使用多表關聯的時候,你的SQL性能就可能會遇到一些問題。

最基礎的多表關聯查詢

select * from t1,t2 where t1.x1=xxx and t1.x2=t2.x2 and t2.x3=xxx

若在FROM字句後直接來兩個表名,就是要針對兩個表進行查詢,而且會把兩個表的數據給關聯,假設你未限定多表連接條件,可能會搞出一個笛卡爾積。所以通常都會在多表關聯語句中的WHERE子句裡引入一些關聯條件:where t1.x1=xxx and t1.x2=t2.x2 and t2.x3=xxx

  • t1.x1=xxx
  • 明确絕對不是多表關聯的連接條件,而是針對t1表的數據篩選條件,從t1篩選一波數據再和t2表關聯
  • 然後t2.x3=xxx,也不是關聯條件,他也是針對t2表的篩選條件
  • 真正的關聯條件 t1.x2=t2.x2
  • 必須要t1表裡的每條數據根據自己的x2字段值關聯t2 表裡的某條記錄,要求t1表裡這條數據的x2值==t2表裡的那條數據的x2字段值

假設:

  • t1表裡有1條數據x2=265
  • t2有2條數據x2=265
  • 就會把t1表裡的那條數據和t2表的2條數據分别關聯,最終返你兩條關聯後數據。

所以該SQL執行過程可能是:

  • 首先根據t1.x1=xxx篩選條件,去t1查出一批數據,此時可能是const、ref,也可能index或all,具體看你的索引如何建的
  • 假設從t1按t1.x1=xxx條件篩選出2條數據
  • 接着對這兩條數據,根據每條數據的x2字段值及t2.x3=xxx條件,去t2表裡找x2、x3字段值都匹配的數據。比如t1表第一條數據的x2=265,就根據t2.x2=265和t2.x3=xxx這倆條件,找出一波數據,比如找出來2條吧
  • 此時就把t1表裡x2=265的那個數據 和 t2表裡t2.x2=265和t2.x3=xxx的兩條數據關聯,t1表裡另外一條數據如法炮制

他可能是先從一個表裡查一波數據:驅動表

再根據這波數據去另外一個表裡查一波數據進行關聯,另外一個表叫:被驅動表

内連接

員工表包含id(主鍵)、name(姓名)、department(部門)

産品銷售業績表裡包含id(主鍵)、employee_id(員工id)、産品名稱(product_name)、銷售業績(saled_amount)。

現在要看每個員工對每個産品的銷售業績:

select e.name,e.department,ps.product_name,ps.saled_amount from employee e,product_saled pa where e.id=pa.employee_id

此時看到的數據:

sql兩張表的聯合查詢語句(多表關聯查詢的SQL執行原理)1

執行原理

全表掃描員工表,找出每個員工,然後針對每個員工的id去業績表找 employee_id 跟員工id相等的數據,可能每個員工的id在業績表裡都會找到多條數據,因為他可能有多個産品的銷售業績。

然後把每個員工數據跟他在業績表裡找到的所有業績數據都關聯,比如:

  • 張三關聯了業績表裡的三條數據
  • 李四關聯了業績表裡的兩條數據

内連接,inner join,要求兩個表裡的數據必須完全能關聯上,才能返回。

假設員工表裡有個人是新員工,入職到現在無銷售業績,此時還是希望能夠查出來該員工的數據,隻不過他的銷售業績那塊可以給個NULL,表示無業績。但若僅使用上述SQL語法,似乎搞不定,因為必須要兩個表能關聯上的數據才查得出來。

此時就需要

外連接

outer join,分為:

  • 左外連接
  • 在左側的表裡的某條數據,如果在右側的表裡關聯不到任何數據,也得把左側表這個數據給返回出來
  • 右外連接
  • 右外連接反之,在右側的表裡如果關聯不到左側表裡的任何數據,得把右側表的數據返回出來

還有個語法限制,如果你是内連接,那連接條件可以放在where語句,但外連接一般是把連接條件放在ON語句:

SELECT e.name, e.department, ps.product_name, ps.saled_amount FROM employee e LEFT OUTER JOIN product_saled pa ON e.id=pa.employee_id

一般寫多表關聯,主要就是内連接和外連接。

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
洗衣粉和洗衣液哪個好?能一起使用嗎?
洗衣粉和洗衣液哪個好?能一起使用嗎?
不同的洗滌劑,包括不同牌子和不同産品名稱,其洗滌劑的主要成分—表面活性劑的極性屬性不同。洗衣粉和洗衣液哪個好?洗衣粉和洗衣液能一起用嗎?洗衣粉和洗衣液哪個好一些人使用洗衣粉洗滌衣物,而有的人卻喜歡洗衣液,那麼洗衣粉和洗衣液哪個好?小編對洗衣粉和洗衣液進行對比分析,現在分享給大家。主要成分...
2026-06-17
疏通地漏的巧妙方法
疏通地漏的巧妙方法
疏通地漏的巧妙方法疏通地漏的巧妙方法1、圓木疏通法:先把一根直徑接近排水口的圓木插入水管中,并在水池中放入一定量的水,不間斷地迅速上下抽動圓木,在吸力和壓力的作用下,管道中的污物就會被沖走。2、蘇打加醋疏通法:先把半杯熟蘇打粉倒入下水道,再倒半杯醋,蘇打與醋中的酸發生反應後就能去除管道中黏附的油脂物...
2026-06-17
羽絨服120g充絨量厚嗎 羽絨服200克充絨量算厚還是薄
羽絨服120g充絨量厚嗎 羽絨服200克充絨量算厚還是薄
羽絨服在冬天是很受歡迎的服飾,很多人都會買羽絨服來進行保暖,不同地方可以購買不同厚度的羽絨服。那麼,羽絨服200克充絨量算厚還是薄?一起來看看作文庫知識百科帶來的介紹吧!全文目錄1、羽絨服120g充絨量厚嗎2、羽絨服200克充絨量算厚還是薄3、羽絨服可以機洗不羽絨服120g充絨量厚嗎根據羽絨服大小以...
2026-06-17
選對清潔布 櫥櫃多呵護
選對清潔布 櫥櫃多呵護
大廚房,小廚房,廚房的收納永遠不夠用,各種大大小小的櫥櫃相互拼接,讓廚房看起來更整潔。那櫥櫃的清潔保養呢?你真的懂嗎?或許用錯了清潔劑就會導緻櫃面受損。一起來看看櫥櫃台面清潔的竅門吧!選對清潔布櫥櫃多呵護每天下班回來下廚時,有沒發現櫥櫃上的油煙漬多了點呢?而且,清潔櫥櫃不是一天就能搞定的,多層污漬的...
2026-06-17
真絲與人造絲:如何區分真絲與人造絲
真絲與人造絲:如何區分真絲與人造絲
真絲縮水率較高,購買成品以選比實際需求大一檔的規格為宜,如果是布料,制作前應把布料放入清水中浸泡5個小時以上,讓布料完全吸收水分後晾幹,再浸泡第2次,這樣經過兩浸兩晾之後真絲才不會變形,做成衣服可以随意洗滌。不過,如果是選用真絲中高檔的貨色,最好拿去幹洗,這樣布料就不用事先經過浸泡處理。人造絲光澤明...
2026-06-17
Copyright 2023-2026 - www.tftnews.com All Rights Reserved