最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql多表查詢的幾種分類詳細(xì)

 更新時(shí)間:2022年02月21日 15:12:28   作者:兮動(dòng)人  
本文主要介紹了mysql多表查詢的幾種分類詳細(xì),主要包括3大分類,等值連接 vs 非等值連接,自連接 vs 非自連接,內(nèi)連接 vs 外連接,文章介紹的非常詳細(xì),感興趣的可以了解一下

多表查詢分類

分類1:等值連接 vs 非等值連接

1. 等值連接

在這里插入圖片描述

SELECT employees.employee_id, employees.last_name, 
       employees.department_id, departments.department_id,
       departments.location_id
FROM   employees, departments
WHERE  employees.department_id = departments.department_id;

在這里插入圖片描述

拓展1:多個(gè)連接條件與 AND 操作符

在這里插入圖片描述

拓展2:區(qū)分重復(fù)的列名

  • 多個(gè)表中有相同列時(shí),必須在列名之前加上表名前綴。
  • 在不同表中具有相同列名的列可以用表名加以區(qū)分。
SELECT employees.last_name, departments.department_name,employees.department_id
FROM employees, departments
WHERE employees.department_id = departments.department_id;

拓展3:表的別名

  • 使用別名可以簡化查詢。
  • 列名前使用表名前綴可以提高查詢效率。
SELECT e.employee_id, e.last_name, e.department_id,
       d.department_id, d.location_id
FROM   employees e , departments d
WHERE  e.department_id = d.department_id;

需要注意的是,如果我們使用了表的別名,在查詢字段中、過濾條件中就只能使用別名進(jìn)行代替,不能使用原有的表名,否則就會(huì)報(bào)錯(cuò)。

阿里開發(fā)規(guī)范

強(qiáng)制】對(duì)于數(shù)據(jù)庫中表記錄的查詢和變更,只要涉及多個(gè)表,都需要在列名前加表的別名(或 表名)進(jìn)行限定。

說明:對(duì)多表進(jìn)行查詢記錄、更新記錄、刪除記錄時(shí),如果對(duì)操作列沒有限定表的別名(或表名),并且操作列在多個(gè)表中存在時(shí),就會(huì)拋異常。

正例:select t1.name from table_first as t1 , table_second as t2 where t1.id=t2.id;

反例:在某業(yè)務(wù)中,由于多表關(guān)聯(lián)查詢語句沒有加表的別名(或表名)的限制,正常運(yùn)行兩年后,最近在 某個(gè)表中增加一個(gè)同名字段,在預(yù)發(fā)布環(huán)境做數(shù)據(jù)庫變更后,線上查詢語句出現(xiàn)出 1052 異常:Column ‘name’ in field list is ambiguous。

拓展4:連接多個(gè)表

在這里插入圖片描述

總結(jié):連接 n個(gè)表,至少需要n-1個(gè)連接條件。 比如,連接三個(gè)表,至少需要兩個(gè)連接條件。

練習(xí):查詢出公司員工的 last_name,department_name, city

SELECT e.last_name,d.department_name,l.city
FROM employees e,departments d,locations l
WHERE e.department_id = d.department_id
AND d.location_id = l.location_id

在這里插入圖片描述

2. 非等值連接

在這里插入圖片描述

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;

在這里插入圖片描述

在這里插入圖片描述

分類2:自連接 vs 非自連接

在這里插入圖片描述

當(dāng)table1table2本質(zhì)上是同一張表,只是用取別名的方式虛擬成兩張表以代表不同的意義。然后兩個(gè)表再進(jìn)行內(nèi)連接,外連接等查詢。

題目:查詢employees表,返回“Xxx works for Xxx”

SELECT CONCAT(worker.last_name ,' works for ' 
       , manager.last_name)
FROM   employees worker, employees manager
WHERE  worker.manager_id = manager.employee_id ;

在這里插入圖片描述

自連接的例子:
查詢員工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:內(nèi)連接 vs 外連接

除了查詢滿足條件的記錄以外,外連接還可以查詢某一方不滿足條件的記錄。

在這里插入圖片描述

內(nèi)連接:合并具有同一列的兩個(gè)以上的表的行, 結(jié)果集中不包含一個(gè)表與另一個(gè)表不匹配的行

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

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

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

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

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

總結(jié):

內(nèi)連接: 合并具有同一列的兩個(gè)以上的表的行, 結(jié)果集中不包含一個(gè)表與另一個(gè)表不匹配的行。

外連接: 兩個(gè)表在連接過程中除了返回滿足連接條件的行以外還返回左(或右)表中不滿足條件的行 ,這種連接稱為左(或右) 外連接。沒有匹配的行時(shí), 結(jié)果表中相應(yīng)的列為空(NULL)。

如果是左外連接,則連接條件中左邊的表也稱為主表,右邊的表稱為從表。

如果是右外連接,則連接條件中右邊的表也稱為主表,左邊的表稱為從表

到此這篇關(guān)于mysql多表查詢的幾種分類詳細(xì)的文章就介紹到這了,更多相關(guān)mysql多表查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL創(chuàng)建和刪除表操作命令實(shí)例講解

    MySQL創(chuàng)建和刪除表操作命令實(shí)例講解

    這篇文章主要介紹了MySQL創(chuàng)建和刪除表操作命令實(shí)例講解,本文講解了創(chuàng)建表、創(chuàng)建臨時(shí)表、查看已經(jīng)創(chuàng)建的mysql表等內(nèi)容,需要的朋友可以參考下
    2014-12-12
  • mysql中find_in_set()函數(shù)用法及自定義增強(qiáng)函數(shù)詳解

    mysql中find_in_set()函數(shù)用法及自定義增強(qiáng)函數(shù)詳解

    這篇文章主要給大家介紹了關(guān)于mysql中find_in_set()函數(shù)用法及自定義增強(qiáng)函數(shù)的相關(guān)資料,在MySQL 數(shù)據(jù)庫中進(jìn)行復(fù)雜的查詢語句,例如對(duì)多個(gè)字段進(jìn)行篩選和排序,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • MySql安裝與卸載的詳細(xì)教程

    MySql安裝與卸載的詳細(xì)教程

    這篇文章主要為大家介紹了MySql安裝與卸載的詳細(xì)教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • mysql 獲取當(dāng)前日期函數(shù)及時(shí)間格式化參數(shù)詳解

    mysql 獲取當(dāng)前日期函數(shù)及時(shí)間格式化參數(shù)詳解

    這篇文章主要介紹了mysql 獲取當(dāng)前日期函數(shù)now()及時(shí)間格式化DATE_FROMAT函數(shù)以及參數(shù)詳細(xì)介紹,需要的朋友可以參考下
    2014-08-08
  • Mysql分析設(shè)計(jì)表主鍵為何不用uuid

    Mysql分析設(shè)計(jì)表主鍵為何不用uuid

    在mysql中設(shè)計(jì)表的時(shí)候,mysql官方推薦不要使用uuid或者不連續(xù)不重復(fù)的雪花id(long形且唯一),而是推薦連續(xù)自增的主鍵id,官方的推薦是auto_increment,那么為什么不建議采用uuid,使用uuid究竟有什么壞處?本篇博客我們就來分析這個(gè)問題,探討一下內(nèi)部的原因
    2022-03-03
  • mysql5.5中文亂碼問題解決的有用方法

    mysql5.5中文亂碼問題解決的有用方法

    在使用MYSQL時(shí)遇到中文亂碼的問題,表現(xiàn)為插入數(shù)據(jù)后查詢時(shí)輸出為??(亂碼),下面這篇文章主要給大家介紹了關(guān)于mysql5.5中文亂碼問題解決的有用方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • MySQL查詢結(jié)果復(fù)制到新表的方法(更新、插入)

    MySQL查詢結(jié)果復(fù)制到新表的方法(更新、插入)

    下面小編就為大家?guī)硪黄狹ySQL查詢結(jié)果復(fù)制到新表的方法(更新、插入)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • MySQL中having和where的區(qū)別及應(yīng)用詳解

    MySQL中having和where的區(qū)別及應(yīng)用詳解

    這篇文章主要給大家詳細(xì)介紹了MySQL中having和where的區(qū)別以及他們的使用方法,文中有相關(guān)的代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-06-06
  • 檢查MySQL中的列是否為空或Null的常用方法

    檢查MySQL中的列是否為空或Null的常用方法

    在MySQL數(shù)據(jù)庫中,我們經(jīng)常需要檢查某個(gè)列是否為空或Null,空值表示該列沒有被賦值,而Null表示該列的值是未知的或不存在的,在本文中,我們將討論如何在MySQL中檢查列是否為空或Null,并探討不同的方法和案例,需要的朋友可以參考下
    2023-11-11
  • 聊聊MySQL中的參數(shù)

    聊聊MySQL中的參數(shù)

    這篇文章主要介紹了MySQL中的參數(shù)是什么,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-09-09

最新評(píng)論

威宁| 贵定县| 虎林市| 梨树县| 白山市| 通化县| 视频| 尼勒克县| 东光县| 南京市| 巩留县| 南通市| 大竹县| 阿荣旗| 宝山区| 文成县| 北京市| 延安市| 栖霞市| 金阳县| 当雄县| 绵阳市| 甘德县| 航空| 巴马| 共和县| 诸暨市| 广河县| 双鸭山市| 雷波县| 都昌县| 五常市| 会同县| 淳安县| 都兰县| 读书| 新绛县| 田阳县| 五大连池市| 绍兴市| 铁力市|