多表連接查詢

来源:http://www.cnblogs.com/tonghun/archive/2017/06/30/7098233.html
-Advertisement-
Play Games

一 概述 1 背景 理論上將全部數據放到同一張表中很難實現,實際上即使實現了,表也很龐大,很冗雜,不便於查詢與維護,因此將不同的數據存放到不同的表中,需要時連接各表進行查詢。 2 執行過程 兩張表進行連接查詢時,將其中一張表中的每一行數據與另外一張表的全部數據進行對比,如果滿足給定的條件,則將這兩行 ...


 

一 概述

1 背景

理論上將全部數據放到同一張表中很難實現,實際上即使實現了,表也很龐大,很冗雜,不便於查詢與維護,因此將不同的數據存放到不同的表中,需要時連接各表進行查詢。

2 執行過程

兩張表進行連接查詢時,將其中一張表中的每一行數據與另外一張表的全部數據進行對比,如果滿足給定的條件,則將這兩行數據合併為一行,否則捨棄,繼續對比剩餘行。

3 笛卡爾現象

如果表連接時未設置連接條件,那麼返回的查詢結果數目是兩個表行數的乘積,這種現象被叫做笛卡爾現象。

二 表連接查詢的幾種方式

1.內連接

兩張表進行連接查詢,如果只顯示匹配數據,那麼採用內連接的方式。
格式:

select t1.columnName01,t2.columnName02 from tbName01 t1(inner)join tbName02 t2 on 連接條件;

為了指明欄位所屬的表,為每一張參與連接的表指定別名,通過別名調用其中的欄位。

2.外連接

外連接將連接指向的一張表中的數據全部返回,另一種表對應欄位無匹配數據時用null填充。
格式:

select t1.columnName01,t2.columnName02 from tbName01 t1 right/left (outer) join tbName02 t2 on 連接條件;

在外連接中使用left,左邊表的數據被全部取出;使用right,右邊表的數據被全部取出。

三 n>=3張表的連接查詢

一張表A與多張表連接查詢,表A與其他表分別進行連接查詢,最終的結果是各個獨立連接查詢結果中相同A表欄位數據的組合,即將某一個連接查詢結果中某一行A表全部欄位取出,如果其他連接查詢結果都具有該A欄位,則所有具有該欄位的行合併為一行。

下麵以多對多關聯關係進行演示。

學生表tb_student:

課程表tb_course:

中間表tb_mid(採用聯合主鍵,每個主鍵欄位又是一個外鍵欄位,分別指向對應的學生表或者課程表的主鍵):

任務:查詢學生“李四”所選的全部課程。

分析:學生表與課程表之間沒有直接關係,而學生表與中間表、課程表與中間表都有關係,因此採用中間表作為主表,分別與學生表、課程表進行連接查詢。

中間表與學生表連接查詢,將查詢結果記作A表:

select s.id,s.name,m.course_id,m.student_id from tb_student s join tb_mid m on s.id=m.student_id;

 

中間表與課程表連接查詢,將查詢結果記作B表: 

select c.id,c.name,m.course_id,m.student_id from tb_course c join tb_mid m on c.id =m.course_id;

從A表中的某一行取出主表(tb_mid)的全部數據,與B表的所有行進行對比,如果主表對應欄位值相同,則合併為一行,以此迴圈,就形成了3張表連接查詢的結果:

以上就是如下3張表連接查詢的執行過程:

select s.id sid,s.name sname,c.id cid ,c.name cname,m.student_id,m.course_id 
     from 
       tb_mid m join tb_student s on m.student_id =s.id 
                join tb_course c on m.course_id=c.id;

在3張表連接查詢結果中添加一個過濾條件“where s.name='李四'”就獲得了最終結果。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ACID:資料庫事務正確執行所必須滿足的四個基本要素的縮寫: 原子性(atomicity,或叫不可分割性),一致性(consistency),隔離性(isolation,又稱獨立性),持久性(durability)。 四大特性 原子性:一個事務(transaction)中的所有操作,要麼全部完成,要 ...
  • 資料庫事務的隔離等級,英語叫做 Transaction Isolation Level。 最近在給客戶維護項目的時候,對一個表在兩個進程中同時做更新和查詢時碰到了死鎖(DeadLock),數據表裡有幾百萬上千萬條記錄,上面的處理當時是更新幾千條記錄, 查詢整張表。 這是前提,為了搞明白這個死鎖,大概 ...
  • 查詢的格式: select [distinct] *(所有)| 欄位名... from 表名 [where 條件過濾]查詢指定欄位信息pname priceselect pname,price from products; 查詢表中所有欄位select * from products; 去除金額重覆 ...
  • 導讀: 分類問題是機器學習應用中的常見問題,而二分類問題是其中的典型,例如垃圾郵件的識別。本文基於UCI機器學習資料庫中的銀行營銷數據集,從對數據集進行探索,數據預處理和特征工程,到學習模型的評估與選擇,較為完整的展示瞭解決分類問題的大致流程。文中包含了一些常見問題的處理方式,例如缺失值的處理、非數 ...
  • 1 Redis記憶體管理 Redis記憶體管理相關文件為zmalloc.c/zmalloc.h,其只是對C中記憶體管理函數做了簡單的封裝,屏蔽了底層平臺的差異,並增加了記憶體使用情況統計的功能。 void *zmalloc(size_t size) { // 多申請的一部分記憶體用於存儲當前分配了多少自己的內 ...
  • 本文用到的資料庫如下: CREATE DATABASE exam; / 創建部門表 / CREATE TABLE dept( deptno INT PRIMARY KEY, dname VARCHAR(50), loc VARCHAR(50) ); / 創建雇員表 / CREATE TABLE em ...
  • PostgreSQL在Update時使用Substring函數截取字元串並且加上CASE WHEN THEN條件判斷 ...
  • (一)執行sql遇到的錯誤如下: ### Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (38708097 > 4194304). You can change this value on the ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...