MySQL學習3--聯表查詢

来源:https://www.cnblogs.com/y15136702274/archive/2023/06/30/17517857.html
-Advertisement-
Play Games

1、常規聯表查詢 創建兩張資料庫表如下: mysql> select * from dept; + + + | id | deptName | + + + | 3 | 教學部 | + + + 1 row in set (0.00 sec) mysql> select * from employee; ...


1、常規聯表查詢

創建兩張資料庫表如下:

mysql> select * from dept;
+----+-----------+
| id | deptName  |
+----+-----------+
|  3 | 教學部    |
+----+-----------+
1 row in set (0.00 sec)

mysql> select * from employee;
+----+---------+--------+---------------------+
| id | empName | deptId | regTime             |
+----+---------+--------+---------------------+
|  1 | 老邢    |      3 | 2023-06-29 16:28:09 |
|  4 | 老萬    |      3 | 2023-06-29 16:28:47 |
|  5 | 小磊    |      3 | 2023-06-29 16:28:48 |
+----+---------+--------+---------------------+

聯表查詢  老邢屬於哪個部門?

mysql> select employee.id, employee.empName, dept.deptName  #查什麼
    ->from  employee,dept #從哪查   多張表使用逗號隔開
    ->where  employee.deptId = dept.id and employee.empName = "老邢";#約束的條件一定要帶
+----+---------+-----------+
| id | empName | deptName  |
+----+---------+-----------+
|  1 | 老邢    | 教學部    |
+----+---------+-----------+

聯表查詢的時候對欄位可以起別名

mysql> select e.id, e.empName, d.deptName
    -> from employee e, dept d
    -> where e.deptId = d.id;
+----+---------+-----------+
| id | empName | deptName  |
+----+---------+-----------+
|  1 | 老邢    | 教學部    |
|  4 | 老萬    | 教學部    |
|  5 | 小磊    | 教學部    |
+----+---------+-----------+

mysql> select e.id as "編號", e.empName as "名字", d.deptName as "部門"
    -> from employee e, dept d
    -> where e.deptId = d.id;
+--------+--------+-----------+
| 編號   | 名字   | 部門      |
+--------+--------+-----------+
|      1 | 老邢   | 教學部    |
|      4 | 老萬   | 教學部    |
|      5 | 小磊   | 教學部    |
+--------+--------+-----------+

2、內連接和外連接

join 用於根據兩個或多個表中的列之間的關係,從這些表中查詢數據。

2.1、內連接  inner join

語法格式:

select 欄位
from 表1
inner join 表2
on 約束關係

例1:#查教學部有多少人

mysql> select d.deptName, e.empName
    -> from dept d
    -> inner join employee e
    -> on d.id = e.deptId;
+-----------+---------+
| deptName  | empName |
+-----------+---------+
| 教學部    | 老邢    |
| 教學部    | 老萬    |
| 教學部    | 小磊    |
+-----------+---------+

例2:查看老邢屬於哪個部門

mysql> select e.empName, d.deptName
    -> from employee e
    -> inner join dept d
    -> on e.deptId = d.id
    -> where e.empName = "老邢";
+---------+-----------+
| empName | deptName  |
+---------+-----------+
| 老邢    | 教學部    |
+---------+-----------+

2.2、外連接

a、左外連接

left join關鍵字會從左表 (table_name1) 那裡返回所有的行,即使在右表 (table_name2) 中沒有匹配的行。也要展示。

語法格式:

select 欄位 from 左表1 left outer join 右表2 on 約束條件

左邊表全部顯示,右邊表去匹左邊表,如果沒有匹配上就顯示null  例:

mysql> select d.deptName, e.empName
    -> from dept d
    -> left outer join employee e
    -> on d.id = e.deptId;
+-----------+---------+
| deptName  | empName |
+-----------+---------+
| 教學部    | 老邢    |
| 教學部    | 老萬    |
| 教學部    | 小磊    |
| 技術部    | NULL    |
+-----------+---------+
b、右外連接

語法格式:

select 欄位  from 左表1  right outer join 右表2 on  約束條件

以右邊表為主右邊表要全部顯示,左邊如果沒有匹配到就顯示為null  例:

mysql> select *
    -> from employee e
    -> right outer join dept d
    -> on e.deptId = d.id;
+------+---------+--------+---------------------+----+-----------+
| id   | empName | deptId | regTime             | id | deptName  |
+------+---------+--------+---------------------+----+-----------+
|    1 | 老邢    |      1 | 2022-04-25 10:08:04 |  1 | 教學部    |
|    2 | 雪珂    |      2 | 2022-04-25 10:08:17 |  2 | 行政部    |
|    3 | 凱旗    |      3 | 2022-04-25 10:08:30 |  3 | 技術部    |
|    4 | 小磊    |      1 | 2022-04-25 10:08:43 |  1 | 教學部    |
|    5 | 帥棟    |      1 | 2022-04-25 10:08:56 |  1 | 教學部    |
| NULL | NULL    |   NULL | NULL                |  4 | 後勤部    |
+------+---------+--------+---------------------+----+-----------+

2.3、一對一、一對多查詢

例:現有學生表和老師表

一個老師對應著多個學生(一對多)     一個學生對應著咱們的一個老師(一對一)

a、一對一查詢(使用內連接)

查詢邱博的老師?   一對一

select ts.s_name, tt.t_name
from t_student ts
inner joint_teacher tt
on ts.teacher_id = tt.t_id
where ts.s_name = "邱博"
b、一對多查詢(使用內連接)

查詢老邢所帶的學生

select tt.t_name, ts.s_name
from t_teacher tt
inner join t_student ts
on tt.t_id = ts.teacher_id
where tt.t_name = "老邢"
c、一對多查詢(不使用內連接)
select tt.t_name, ts.s_name
from t_student ts, t_teacher tt
where ts.teacher_id = tt.t_id and tt.t_name = '老邢'

2.4、多對多查詢

例:

學生和課程的關係
學生選課,
一個學生對應著多個課程
一個課程要被多個學生選擇
一個課程對應著多個學生

創建學生表、課程表、學生_課程關聯表,三表聯查 兩個inner join

#看所有學生選擇了哪些的課程
select ts.s_name, tc.c_name
from t_stu ts
inner join stu_course sc
on ts.s_id = sc.stu_id
inner join t_course tc
on sc.course_id = tc.c_id
#查看狗蛋選擇了哪些課程
select ts.s_name, tc.c_name
from t_stu ts
inner join stu_course sc
on ts.s_id = sc.stu_id
inner join t_course tc
on sc.course_id = tc.c_id
where ts.s_name = "狗蛋"

#Java被哪些學生選擇了
先寫課程表
select *
from t_course tc
inner join stu_course sc
on tc.c_id = sc.course_id
inner join t_stu ts
on sc.stu_id = ts.s_id
where tc.c_name = "Java"

 


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

-Advertisement-
Play Games
更多相關文章
  • # Avalonia開發Markdown編輯器 今天熟悉Avalonia UI,做一個Markdown的文本編輯器。 代碼我上傳了Github,地址: [https://github.com/raokun/AvaloniaMarkdown.git](https://github.com/raokun ...
  • # 個人博客-添加RSS訂閱功能 # 前言 個人博客系列已經完成了 - [x] 留言板 - [x] 文章歸檔 - [x] 推薦文章優化 - [x] 推薦文章排序 博客地址:https://pljzy.top 然後博客開源的原作者也是百忙之中添加了一個名為**RSS訂閱**的功能,那麼我就來簡述一下這 ...
  • .NET本身就是一個基於中間件(middleware)的框架,它通過一系列的中間件組件來處理HTTP請求和響應。在之前的文章[《.NET源碼解讀kestrel伺服器及創建HttpContext對象流程》](https://www.cnblogs.com/Z7TS/p/17459777.html)中, ...
  • ## 一:背景 ### 1. 講故事 經常有朋友跟我反饋,說看你的文章就像看天書一樣,有沒有一些簡單入手的dump 讓我們先找找感覺,哈哈,今天就給大家帶來一篇入門級的案例,這裡的入門是從 WinDbg 的角度來闡述的,這個問題如果你通過 記日誌,分析代碼 的方式,可能真的無法解決,不信的話繼續往下 ...
  • 我們接觸一個新事物的時候,如果一個事物能夠給我們帶來非常直觀的感官認識,那麼我們就很容易接受,反之可能需要很長時間的潛移默化的瞭解認識才能接受。萬物化繁為簡,透過本質看表象,往往也是一個認知迭代深入的過程。在我介紹很多篇隨筆《SqlSugar開發框架》,能夠看完的肯定不會是一開始就學習的人員,畢竟技... ...
  • 繼上篇:Taurus .Net Core 微服務開源框架:Admin 插件【3】 - 指標統計管理,本篇繼續介紹下一個內容:系統配置節點:App - Config 界面... ...
  • 本文分享自天翼雲開發者社區《雲存儲環境下的容災關鍵技術》,作者:王兆龍 雲存儲的出現解決了現有容災系統的幾個顯著問題:一是面對大量的備份數據,管理系統不夠完善的問題;二是面對大規模的數據容災靈活性和效率不高的問題;三是在數據加密保護方面依然存在的安全隱患問題。那麼,雲存儲解決這些問題主要依靠的技術原 ...
  • 在研究Quark-n的時候,利用Windows自帶的遠程桌面連接,實現了在Windows上看到Linux的GUI,但是很快就發現了好多問題,比如想用Tab補全命令的時候,它不靈,只能Shitf+Tab,有悖於傳統操作按鍵,而且GUI有延時,拖動終端時有拖影,圖形操作體驗很差。為瞭解決這個問題,便在網 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...