MySQL-- 多表查詢的分類,SQL92與SQL99,7種JOIN的實現,SQL99語法的新特性

目錄

一,多表查詢的分類

角度1:等值連接 ?vs ?非等值連接

角度2:自連接 ?vs ?非自連接

角度3:內連接 ?vs ?外連接

二,SQL92語法實現內連接:見上,略SQL92語法實現外連接:使用 + ?----------MySQL不支持SQL92語法中外連接的寫法!

三,SQL99語法如何實現多表的查詢。

1,SQL99語法實現內連接:

2,SQL99語法實現外連接:

3,UNION ?和 UNION ALL的使用

四,7種JOIN的實現:

1.中圖:內連接

2.左上圖:左外連接

3.右上圖:右外連接

4.左中圖:

5.右中圖:

6.左下圖:滿外連接

方式1:左上圖 UNION ALL 右中圖

方式2:左中圖 UNION ALL 右上圖

7.右下圖:左中圖 ?UNION ALL 右中圖

五,SQL99語法的新特性

1:自然連接

2:USING


一,多表查詢的分類

角度1:等值連接 ?vs ?非等值連接

#非等值連接的例子:
SELECT *
FROM job_grades;SELECT e.last_name,e.salary,j.grade_level
FROM employees e,job_grades j
#where e.`salary` between j.`lowest_sal` and j.`highest_sal`;
WHERE e.`salary` >= j.`lowest_sal` AND e.`salary` <= j.`highest_sal`;

員工無法與等級相等,使用between and連接

角度2:自連接 ?vs ?非自連接


SELECT * FROM employees;#自連接的例子
#練習:查詢員工id,員工姓名及其管理者的id和姓名SELECT emp.employee_id,emp.last_name,mgr.employee_id,mgr.last_name
FROM employees emp ,employees mgr
WHERE emp.`manager_id` = mgr.`employee_id`;

員工和管理者不在一個表中,是非自鏈接

角度3:內連接 ?vs ?外連接

內連接:合并具有同一列的兩個以上的表的行, 結果集中不包含一個表與另一個表不匹配的行

SELECT employee_id,department_name
FROM employees e,departments d
WHERE e.`department_id` = d.department_id; ?#只有106條記錄

外連接:合并具有同一列的兩個以上的表的行, 結果集中除了包含一個表與另一個表匹配的行之外,還查詢到了左表 或 右表中不匹配的行。

?外連接的分類:左外連接、右外連接、滿外連接

左外連接:兩個表在連接過程中除了返回滿足連接條件的行以外還返回左表中不滿足條件的行,這種連接稱為左外連接。


右外連接:兩個表在連接過程中除了返回滿足連接條件的行以外還返回右表中不滿足條件的行,這種連接稱為右外連接。

#練習:查詢所有的員工的last_name,department_name信息?SELECT employee_id,department_name
FROM employees e,departments d
WHERE e.`department_id` = d.department_id; ? # 需要使用左外連接

二,SQL92語法實現內連接:見上,略
SQL92語法實現外連接:使用 + ?----------MySQL不支持SQL92語法中外連接的寫法!

#不支持:
SELECT employee_id,department_name
FROM employees e,departments d
WHERE e.`department_id` = d.department_id(+);

SQL99語法中使用 JOIN ...ON 的方式實現多表的查詢。這種方式也能解決外連接的問題。MySQL是支持此種方式的。

三,SQL99語法如何實現多表的查詢。

1,SQL99語法實現內連接:

SELECT last_name,department_name
FROM employees e INNER JOIN departments d
ON e.`department_id` = d.`department_id`;SELECT last_name,department_name,city
FROM employees e JOIN departments d
ON e.`department_id` = d.`department_id`
JOIN locations l
ON d.`location_id` = l.`location_id`;

2,SQL99語法實現外連接:

#練習:查詢所有的員工的last_name,department_name信息?
# 左外連接:
SELECT last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`;#右外連接:
SELECT last_name,department_name
FROM employees e RIGHT OUTER JOIN departments d
ON e.`department_id` = d.`department_id`;#滿外連接:mysql不支持FULL OUTER JOIN
SELECT last_name,department_name
FROM employees e FULL OUTER JOIN departments d
ON e.`department_id` = d.`department_id`;

3,UNION ?和 UNION ALL的使用

UNION:會執行去重操作
UNION ALL:不會執行去重操作
結論:如果明確知道合并數據后的結果數據不存在重復數據,或者不需要去除重復的數據,則盡量使用UNION ALL語句,以提高數據查詢的效率。

四,7種JOIN的實現:

1.中圖:內連接

SELECT employee_id,department_name
FROM employees e JOIN departments d
ON e.`department_id` = d.`department_id`;

2.左上圖:左外連接

SELECT employee_id,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`;

3.右上圖:右外連接

SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`;

4.左中圖:

SELECT employee_id,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL;

5.右中圖:

SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE e.`department_id` IS NULL;


6.左下圖:滿外連接


方式1:左上圖 UNION ALL 右中圖

SELECT employee_id,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
UNION ALL
SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE e.`department_id` IS NULL;


方式2:左中圖 UNION ALL 右上圖

SELECT employee_id,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
UNION ALL
SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`;

7.右下圖:左中圖 ?UNION ALL 右中圖

SELECT employee_id,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
UNION ALL
SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE e.`department_id` IS NULL;

五,SQL99語法的新特性

1:自然連接:自動查詢等值數據,自動連接,但不靈活,全部連接

SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d
ON e.`department_id` = d.`department_id`
AND e.`manager_id` = d.`manager_id`;# NATURAL JOIN : 它會幫你自動查詢兩張連接表中`所有相同的字段`,然后進行`等值連接`。
SELECT employee_id,last_name,department_name
FROM employees e NATURAL JOIN departments d;


2:USING:用于替換等值連接,但不適用于非等值連接和自連接

SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id;SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d
USING (department_id);#拓展:
SELECT last_name,job_title,department_name?
FROM employees INNER JOIN departments INNER JOIN jobs?
ON employees.department_id = departments.department_id?
AND employees.job_id = jobs.job_id;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/75238.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75238.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/75238.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

時間輪算法:原理、演進與應用實踐指南

目錄 1. 時間輪算法基礎 1.1 什么是時間輪算法&#xff1f; 1.2 核心組成部分 2. 基本時間輪的實現機制 2.1 時間輪的構成要素 2.2 工作原理詳解 3. 基本時間輪的局限性 3.1 時間范圍限制問題 3.2 簡單解決方案及其缺陷 4. 時間輪算法的演進 4.1 Round機制&#xff…

Unity 常見報錯 定位和查找方法

1.控制臺 直接看報錯信息 2.打log 例子&#xff1a; for(int i 0;i < 8;i) {Debug.Log(i);//這是打的log,看看到底i是幾的時候出問題gameObject.name strs[i];} 3.斷點調試 &#xff08;1&#xff09;在你想打斷點的行&#xff0c;左邊空白處點擊可以打斷點&#xff…

第十八章:Python實戰專題:北京市水資源數據可視化與圖書館書籍管理應用開發

今天我要和大家分享兩個非常有趣的Python實戰項目&#xff1a;一個是北京市2001-2017年水資源數據的可視化分析&#xff0c;另一個是圖書館書籍管理應用程序的開發。這兩個項目都使用了Python的主流庫&#xff0c;比如Pandas、Matplotlib和Tkinter&#xff0c;非常適合初學者學…

音視頻基礎(音視頻的錄制和播放原理)

文章目錄 一、錄制原理**1. 音視頻數據解析****2. 音頻處理流程****3. 視頻處理流程****4. 同步控制****5. 關鍵技術點****總結** 二、播放原理**1. 音視頻數據解析****2. 音頻處理流程****3. 視頻處理流程****4. 同步控制****5. 關鍵技術點****總結** 一、錄制原理 這張圖展示…

Nginx多域名HTTPS配置全攻略:從證書生成到客戶端安裝

一、業務背景 在現代Web開發中&#xff0c;HTTPS已成為保障數據傳輸安全的標準協議。特別是對于地圖類API服務&#xff08;如高德地圖&#xff09;&#xff0c;往往需要同時支持多個子域名&#xff08;如webapi.amap.com、restapi.amap.com等&#xff09;的HTTPS訪問。傳統方式…

Redis原理:rename命令

RENAME key newkey 將一個key重命名為新key&#xff0c;如果key不存在&#xff0c;則會返回異常。如果newKey已經存在&#xff0c;則會被覆蓋&#xff0c;其實newKey會被顯示的刪除&#xff0c;所以如果newKey是一個大key&#xff0c;則會引起延遲。 源碼 void renameCommand…

k8s污點與容忍

k8s污點與容忍 k8s污點管理常用命令effect標記值查看污點添加污點刪除污點 node污點與容忍污點容忍yaml示例容忍放大基于污點的驅逐驅逐時排除指定服務 設置master調度設置master盡量不調度允許master節點調度pod恢復Master Only狀態將node標記為不可調度狀態(節點警戒)設置nod…

(BFS)題解:P9425 [藍橋杯 2023 國 B] AB 路線

題解&#xff1a;P9425 [藍橋杯 2023 國 B] AB 路線 題目傳送門 P9425 [藍橋杯 2023 國 B] AB 路線 一、題目描述 給定一個NM的迷宮&#xff0c;每個格子標記為A或B。從左上角(1,1)出發&#xff0c;需要移動到右下角(N,M)。移動規則是&#xff1a;必須交替走K個A格子和K個B…

python-leetcode 62.搜索插入位置

題目&#xff1a; 給定一個排序數組和一個目標值&#xff0c;在數組中找到目標值&#xff0c;并返回其索引。如果目標值不存在于數組中&#xff0c;返回它將會被按順序插入的位置 方法一&#xff1a;二分查找 假設題意是在排序數組中尋找是否存在一個目標值&#xff0c;則可以…

【計網速通】計算機網絡核心知識點和高頻考點——數據鏈路層(一)

數據鏈路層核心知識點&#xff08;一&#xff09; 一、數據鏈路層概述 1.1 基本概念 數據鏈路層位于OSI模型的第二層&#xff0c;介于物理層和網絡層之間&#xff0c;主要負責在相鄰節點之間傳輸和識別數據幀。 1.2 主要功能 幀同步&#xff1a;識別幀的開始和結束差錯控制…

模型部署與調用

目錄 部署 ollama下載 模型版本選擇 ?編輯 對照表 控制臺執行 調用 部署 大模型部署我使用的是Ollama&#xff0c;點擊跳轉 接下來我將在本地使用ollama就行模型部署的演示 ollama下載 模型版本選擇 對照表 大家可以根據自己的顯卡配置選擇對應的模型版本 控制臺執…

Rstudio如何使用Conda環境配置的R

前言 Rstudio作為一款流行的R語言集成開發環境&#xff08;IDE&#xff09;&#xff0c;為用戶提供了便捷的編程體驗。然而&#xff0c;不同項目可能需要不同版本的R&#xff0c;這就需要我們靈活切換R版本。除了在之前文章中提到的使用 Docker 部署不同版本的 R 的方法之外&am…

C++---RAII模式

一、RAII模式概述 1. 定義 RAII&#xff08;Resource Acquisition Is Initialization&#xff09;即資源獲取即初始化&#xff0c;是C中用于管理資源生命周期的一種重要編程模式。其核心在于將資源的獲取和釋放操作與對象的生命周期緊密綁定。當對象被創建時&#xff0c;資源…

【功能開發】DSP F2837x 檢測中斷所有函數運行一次的時間

要查看 DSP F28377 的 CPU 在 50 微秒一次的中斷內所有程序運行完總共占用了中斷多長時間&#xff0c;可以采用硬件定時器測量和軟件計時兩種常見方法。 方法一&#xff1a;使用硬件定時器測量 原理 利用 DSP 內部的高精度硬件定時器&#xff0c;在中斷開始時記錄定時器的值…

MAC環境給docker換源

2025-03-28 MAC環境給docker換源 在官網下載docker ,dmg 文件 參考&#xff1a; https://blog.csdn.net/qq_73162098/article/details/145014490 {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},&q…

Vulnhub-zico2靶機打靶記錄

本篇文章旨在為網絡安全滲透測試靶機教學。通過閱讀本文&#xff0c;讀者將能夠對滲透Vulnhub系列zico2靶機有一定的了解 一、信息收集階段 靶機下載地址&#xff1a;https://download.vulnhub.com/zico/zico2.ova 因為靶機為本地部署虛擬機網段&#xff0c;查看dhcp地址池設…

【LeetCode 熱題100】347:前 K 個高頻元素(詳細解析)(Go語言版)

&#x1f680; 力扣熱題 347&#xff1a;前 K 個高頻元素&#xff08;詳細解析&#xff09; &#x1f4cc; 題目描述 力扣 347. 前 K 個高頻元素 給你一個整數數組 nums 和一個整數 k&#xff0c;請你返回其中出現頻率 前 k 高的元素。你可以按 任意順序 返回答案。 &#x1f…

Java 大視界 -- Java 大數據機器學習模型在金融衍生品定價中的創新方法與實踐(166)

&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎來到 青云交的博客&#xff01;能與諸位在此相逢&#xff0c;我倍感榮幸。在這飛速更迭的時代&#xff0c;我們都渴望一方心靈凈土&#xff0c;而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識&#xff0c;也…

深度學習入門:從神經網絡基礎到簡單實現

深度學習作為人工智能領域最令人興奮的技術之一,已經在圖像識別、自然語言處理、語音識別等多個領域取得了突破性進展。本文將深入淺出地介紹深度學習的基本概念,并通過Python代碼實現一個簡單的神經網絡模型,幫助讀者建立直觀理解并邁出實踐第一步。 神經網絡的基本原理 …

第2.6節 iOS生成全量和增量報告

2.6.1 簡介 在采集了覆蓋率數據后&#xff0c;就需要生成對應需求的全量和增量覆蓋率報告&#xff0c;以便對測試進行查漏補缺。IOS系統有兩種開發語言&#xff0c;所以生成報告的方式也不相同&#xff0c;下面就分別介紹一下Object C和Swift語言如何生成覆蓋率報告。 2.6.2 O…