sql連接查詢

来源:http://www.cnblogs.com/gaofei-1/archive/2017/11/13/7828584.html
-Advertisement-
Play Games

簡述 簡單回顧並總結下不同的表連接語句有什麼異同之處以及一些概念。 建庫語句如下 由上代碼可知,分別創建了部門表和雇員表,雇員表和部門表是多對一的關係,技術部沒有雇員。 內連接 語法:inner join ... on ... inner可以省略。 概念:內連接查詢的結果是從兩個或兩個以上的表的組合 ...


簡述

    簡單回顧並總結下不同的表連接語句有什麼異同之處以及一些概念。

    建庫語句如下

 1 DROP DATABASE IF EXISTS `demo`;
 2 CREATE DATABASE `demo`;
 3 USE `demo`;
 4 /*部門表*/
 5 CREATE TABLE department (
 6     `id` INT PRIMARY KEY AUTO_INCREMENT,
 7     `name` VARCHAR(50)
 8 );
 9 INSERT INTO department VALUES(DEFAULT, '財務'),(DEFAULT, '客服'),(DEFAULT, '技術');
10 /*雇員表*/
11 CREATE TABLE employee (
12     `id` INT PRIMARY KEY AUTO_INCREMENT,
13     `name` VARCHAR(50),
14     `department_id` INT,
15     CONSTRAINT fk_employee_department FOREIGN KEY (id) REFERENCES department(id)
16 );
17 INSERT INTO employee VALUES(DEFAULT, '張三', 1),(DEFAULT, '李四', 2),(DEFAULT, '王五', 2);

     由上代碼可知,分別創建了部門表和雇員表,雇員表和部門表是多對一的關係,技術部沒有雇員。


內連接

    語法:inner join ... on ... inner可以省略。

    概念:內連接查詢的結果是從兩個或兩個以上的表的組合中挑選出符合連接條件的數據,如果數據無法滿足連接條件則將其忽略。在內連接查詢中,參與連接的表的地位是平等的

    例:現在要查詢員工和其所在的部門,sql語句如下

1 SELECT e.id, e.`name`, d.`name` '部門' FROM employee e JOIN department d ON e.`department_id`=d.`id`

 

    結果如下:

    

    可以看出,部門一列只是將有員工的部門查詢了出來,而沒有員工的技術部則沒有查詢出來。

外連接

    概念:上文提到:在內連接查詢中,參與連接的表的地位是平等的。而在外連接中參與連接的表有主從之分。以主表的每行數據匹配從表的數據列,將符合連接條件的數據直接返回到結果集中;對那些不符合連接條件的列,將被填上空值後再返回到結果集中。

左外連接

    語法:left  outer join ... on ... outer可以省略。

    概念:左外連接查詢的結果集包括左表中的所有行,而不僅僅是連接匹配的行。若左表的某行在右表中沒有匹配行,則在相關聯的結果集中右表的所有選擇列均為空值。

    例一:將上面內連接的語句改成左外連接

SELECT e.id, e.`name`, d.`name` '部門' FROM department d LEFT JOIN employee e ON e.`department_id`=d.`id`

 

    查詢結果如下圖

    

    可以看出,沒有員工的部門也被查詢了出來,並且員工的id和姓名列被填上了空值。

    例二:查詢所有部門包含的員工數,沒有員工的部門也要被查詢出來。sql語句如下

1 SELECT d.`name`,COUNT(e.`id`) '部門人數' FROM department d LEFT JOIN employee e ON e.`department_id`=d.`id` GROUP BY e.`department_id`

 

    結果如下

    

    可以看出,沒有員工的技術部也被查詢了出來,統計人數為0(ps:這個0和之前自動填充的null值不衝突,因為這裡使用了聚合函數count(),結果集先填充了null,再進行count統計的)。

右外連接 

    語法:right  outer join ... on ... outer可以省略。

    概念:右外連接和左外連接類似,只是位置變了一下。結果集必須包含右表中的所有行,若右表中有的項在左表中沒有,則以null值填充。

    例一:將上面左外連接的語句改成右外連接,sql語句如下

1 SELECT d.`name`,COUNT(e.`id`) '部門人數' FROM employee e RIGHT JOIN department d ON e.`department_id`=d.`id` GROUP BY e.`department_id`

    結果如下

    

 


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

-Advertisement-
Play Games
更多相關文章
  • Runtime是什麼?見名知意,其概念無非就是“因為 Objective-C 是一門動態語言,所以它需要一個運行時系統……這就是 Runtime 系統”云云。對博主這種菜鳥而言,Runtime 在實際開發中,其實就是一組C語言的函數。胡適說:“多研究些問題,少談些主義”,雲山霧罩的概念聽多了總是容易 ...
  • 我們知道,在微信或者QQ聊天的時候,會出現至少兩種佈局,即收到的消息和自己發送的消息,這種效果可以用listView來實現。類似於下麵這樣的界面。 主要在Adapter的getView()裡面下筆。 通過 @Override public int getItemViewType(int positi ...
  • Android studio安裝與配置 1、首先下載Android studio安裝包,可以從http://www.android-studio.org/下載最新版本,這裡採用3.0版本進行演示,對應安裝包為android-studio-ide-171.4408382-windows.exe,安裝包 ...
  • 我的有一篇博客上講瞭如何基於CXF搭建webservice,service層的介面會被部署到tomcat上,這一篇我就講一下如何在安卓中調用這些介面傳遞參數。 1.在lib中放入ksoap2的jar包並導入 2.在xml 配置文件中加入: 3.接下來就要通過代碼調用藉口了 4.若webservice ...
  • 如果鍵盤彈出覆蓋了原有的試圖,這種效果並不好,所以我們就要在鍵盤彈出的時候,監聽鍵盤的位置來改變我們一些試圖的位置,例如tableView列表等;在這裡推薦一個大牛ibireme寫的YYKeyboardManager,Git地址:https://github.com/ibireme/YYKeyboa ...
  • 1.NSPredicate驗證(謂詞匹配) 2.rangeOfString:option:直接查找 3.使用正則表達式類 4.常用正則表達式 一、校驗數字的表達式 1 數字:^[0-9]*$ 2 n位的數字:^\d{n}$ 3 至少n位的數字:^\d{n,}$ 4 m-n位的數字:^\d{m,n}$ ...
  • 這兩天主要就去做百度地圖去了,剛開始一頭霧水,什麼遮蓋物什麼興趣點..... 所以這篇文章先來介紹些基礎知識吧,遮蓋物,就是遮蓋在地圖上的東西,比如說 興趣點,就是圓圈圈的地點,包括什麼餐飲大廈之類之類的 好,然後說說地圖,首先你一定要去搞個KEY,因為沒有這個東西,你地圖都載入不出來...我就偷懶 ...
  • 打開資料庫(sqlite) 事務 多線程事務 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...