MySql學習筆記二

来源:https://www.cnblogs.com/ys1109/archive/2019/08/23/11400525.html
-Advertisement-
Play Games

MySql學習筆記二 3.6.連接查詢 又稱多表查詢,當查詢的欄位來自於多個表時,就會用到連接查詢 連接查詢分類標準: 按年代分類:sql92標準(僅支持內連接), sql99標準(支持內連接,外連接中的左外連接和右外連接,交叉連接) sql99語法 按功能分類: ​ 內連接:等值連接,非等值連接, ...


MySql學習筆記二

3.6.連接查詢

又稱多表查詢,當查詢的欄位來自於多個表時,就會用到連接查詢

連接查詢分類標準:

按年代分類:sql92標準(僅支持內連接), sql99標準(支持內連接,外連接中的左外連接和右外連接,交叉連接)

sql99語法

Select 查詢列表
from 表一(別名) 連接類型
join 表二(別名)
on 連接條件
(where 篩選條件)
(group by 分組)
(having 篩選條件)
(order by 排序列表)

按功能分類:

​ 內連接:等值連接,非等值連接,自連接

​ 外連接:左外連接,右外連接,全外連接

​ 交叉連接

表一

A B C
A1 B1 C1
A2 B2 C2
A3 B3 C3

表二

A D E
A2 D2 E2
A3 D3 E3
A4 D4 E4

3.6.1.內連接

在sql99中內連接為 inner

內連接中的示例語法都是sql92語法

笛卡爾連接
A B C A D E
A1 B1 C1 A2 D2 E2
A1 B1 C1 A3 D3 E3
A1 B1 C1 A4 D4 E4
A2 B2 C2 A2 D2 E2
A2 B2 C2 A3 D3 E3
A2 B2 C2 A4 D4 E4
A3 B3 C3 A2 D2 E2
A3 B3 C3 A3 D3 E3
A3 B3 C3 A4 D4 E4
3.6.1.1.等值連接

Select 查詢列表 from 表1, 表2.... where 連接條件 AND 篩選條件

這裡的連接條件是A表的欄位和B表的欄位相等的條件

先經過笛卡爾連接,再把符合連接條件的條目篩選出來

如果根據兩個表中的A位篩選條件的話,結果如下:

1.A B C 2.A D E
A2 B2 C2 A2 D2 E2
A3 B3 C3 A3 D3 E3
3.6.1.2.非等值連接

Select 查詢列表 from 表1, 表2.... where 連接條件 AND 篩選條件

這裡的連接條件是A表的欄位和B表的除了相等外的別的條件,比如說>, < 等

3.6.1.3.內連接

就是上面表一和表二換成兩張相同的表,然後進行笛卡爾連接

再根據連接條件篩選出來合適的條目

3.6.2.外連接

一般用於查詢一個表中有,而另一個表中沒有的數據

3.6.2.1.左外連接

以一個表為基準,然後基準表中的每一條數據去匹配另一張表中的每一條數據。

當基準表的一條數據與另一張表的一條數據符合連接條件時,保存下來,之後接著向下匹配另一張表的數據。

如果沒有找到像匹配的數據,則該條數據連接後的另一張表的欄位值都為空。

連接類型:left (outer)

表一 left jion 表二 on 1.A = 2.A

1.A B C 2.A B C
A1 B1 C1 NULL NULL NULL
A2 B2 C2 A2 D2 E2
A3 B3 C3 A3 D3 E3
3.6.2.2.右外連接

原理跟左外連接相似

連接類型:right (outer)

表一 rightjion 表二 on 1.A = 2.A

1.A B C 2.A B C
A2 B2 C2 A2 D2 E2
A3 B3 C3 A3 D3 E3
NULL NULL NULL A4 D4 E4
3.6.2.3.全外連接

mysql語言不支持 FULL (outer)

兩個表相互用映射,然後可以把兩個表沒有匹配到的數據都輸出出來,相當於左連接加右連接

具體效果如下表:

1.A B C 2.A B C
A1 B1 C1 NULL NULL NULL
A2 B2 C2 A2 D2 E2
A3 B3 C3 A3 D3 E3
NULL NULL NULL A4 D4 E4

3.6.3.交叉連接

Cross Join 相當於使用sql99標準實現笛卡爾連接


3.7.子查詢

出現在其他語句中的select語句,稱為子查詢或內查詢,外部的查詢語句成為外查詢或主查詢

出現位置:select後,from後,where或having後,exists後(相關子查詢)

按結果集的行數不同分為:標量子查詢(結果只有一列一行),列子查詢(結果集只有一列多行),

行子查詢(結果集有一行多列) 表子查詢(結果集一般為多行多列)

3.7.1.where或having後

  1. 標量子查詢(單行子查詢)
  2. 列子查詢(多行子查詢)
  3. 行子查詢(多列多行)

特點:

  1. 子查詢放在小括弧內
  2. 子查詢一般放在條件的右側
  3. 標量子查詢一般搭配著單行操作符使用:> < >= <= = <>
  4. 列子查詢一般搭配著多行操作符使用 IN, NOT IN, ANY/SOME, ALL
  5. 子查詢的執行優先於主查詢執行,主查詢的條件用到了子查詢的結果

標量子查詢部分示例

where (或 having) (判斷條件 AND) 與子查詢比較的篩選內容   單行操作符 (標量子查詢) 

列自查詢部分示例

where (或 having) (判斷條件 AND) 與子查詢比較的篩選內容   多行操作符 (標量子查詢) 

行子查詢部分示例

where (或 having) (判斷條件 AND) 
(與子查詢比較的篩選內容1, 與子查詢比較的篩選內容2, ...) 操作符 
    (Select 與子查詢比較的篩選內容1, 與子查詢比較的篩選內容2, ...
        from ......
        where .....
    )

3.7.2.Select後

select 後面的子查詢只返回一個欄位一條數據,結果具有唯一性,即標量子查詢

示例

select 查詢列表, (標量子查詢)......

這裡的標量子查詢將的結果將添加在主查詢的每行數據中

其中標量子查詢可以用於解決:聚合函數無法和分組後沒有出現的欄位一起使用的問題

3.7.3.From後

From後面可以放各種類型的結果集,但是要符合題意的要求,在這裡就是把結果集當成一張新表進行查詢

示例

select 查詢列表 from (子查詢) ......

3.7.4.exists後

exists又叫相關子查詢,它不關心後面子查詢的類型,只關心子查詢是否存在內容,如果存在返回1,不存在返回0

示例

exists(完整子查詢語句)

相關子查詢先查詢外查詢再執行子查詢


3.8.分頁查詢

當顯示的數據,一頁顯示不全,需要分頁提交sql請求

語法

Select 查詢列表
from 表名 (連接查詢....)
(where 篩選條件)
(group by 分組欄位)
(having 篩選條件)
(order by 排序的欄位)
limit (offset,) size

offset:要顯示條目的起始索引 ,這裡的索引是從0開始

size:表示要顯示的條目個數

limit是放在查詢語句的最後,實際應用傳參時一般是 limit (page - 1) * size, size


3.9.聯合查詢

union 聯合,合併:將多條查詢語句的結果合併成一個結果

通常用於要查詢的內容來自多個表,並且表之間沒有直接的連接關係,但查詢的信息一致

查詢語句1
union
查詢語句2
union
查詢語句3
....
查詢語句n;

等價於

select 查詢列表 from 表名 where 篩選條件1 or 篩選條件2 .... 篩選條件n

各個查詢語句的結果中,列數必須相同,列名與第一條查詢語句設置的列名相同

聯合查詢會去掉重覆的數據,如果不想去重可以用 union all 來保留重覆項


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

-Advertisement-
Play Games
更多相關文章
  • 一般來說著名的linux系統基本上分兩大類: RedHat系列:Redhat、Centos、Fedora等 Debian系列:Debian、Ubuntu等 RedHat 系列 常見的安裝包格式 rpm包,安裝rpm包的命令是“rpm -參數” 包管理工具 yum 支持tar包 Debian系列 yu ...
  • Vmware啟動ubuntu 出現錯誤“以獨占方式鎖定此配置文件失敗。 可能其它正在運行VMware進程在使用此配置文件”。 在網上查找了很多方法,法(1)試過在啟動任務管理器中“結束與VMware有關的進程”, 法(2)刪除擴展名為.lck的臨時文件和文件夾,等等。以失敗告終。 之後又出現新的錯誤 ...
  • 剛入職實習,第四天了,昨晚老大安排我在公司機器上裝個JProfiler看一情況。 然後網上都是什麼跟tomcat一起使用的,所以折騰了很久才搞出來。 我這裡沒用什麼伺服器,因為公司用的是Play!框架。 1.JProfirler 這個就不多介紹了,網上有,本篇文章主要是記錄安裝使用的過程。 2.Wi ...
  • 下載Nginx wget http://nginx.org/download/nginx-1.12.2.tar.gz 一、安裝nginx時必須先安裝相應的編譯工具 [root@xuegod63 ~]#yum -y install gcc gcc-c++ autoconf automake gcc c ...
  • WEB監控手段: 1、埠 本地: ss 、 netstat 、lsof ss -ntlp|grep 80|wc -l (大於等於1) netstat -natlp |grep 80|wc -l (大於等於1) lsof -i:80 |wc -l (大於等於1) 遠程: telnet、 nmap、  ...
  • Linux 基礎學習 [TOC] 用戶登錄 root用戶 是一個特殊的管理賬號,也可以成為超級管理員 root用戶對系統有完全控制的許可權 對系統的損害會無限大 在工作中,如果沒有特殊的必要,儘量不要使用root 普通用戶 許可權有限 對系統的損害會小 終端 分類 設備終端 物理終端 虛擬終端 ctrl ...
  • 在linux中每個用戶必須屬於一個組,不能獨立於組外。在linux中每個文件有所有者、所在組、其它組的概念。 文件/目錄的所有者:一般為文件的創建者,誰創建了該文件,就自然成為該文件的所有者 查看文件的所有者:ls -ahl 修改文件所有者:chown 用戶名 文件名 文件/目錄的所在組: 組的創建 ...
  • 我們一般通過表達式$sum來計算總和。因為MongoDB的文檔有數組欄位,所以可以簡單的將計算總和分成兩種:1,統計符合條件的所有文檔的某個欄位的總和;2,統計每個文檔的數組欄位裡面的各個數據值的和。這兩種情況都可以通過$sum表達式來完成。以上兩種情況的聚合統計,分別對應與聚合框架中的 $grou ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...