欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)文章

  • docker下mysql 8.0.20 安裝配置方法圖文教程

    docker下mysql 8.0.20 安裝配置方法圖文教程

    這篇文章主要介紹了docker下mysql 8.0.20 安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • mysql binlog(二進(jìn)制日志)查看方法

    mysql binlog(二進(jìn)制日志)查看方法

    在本篇文章里小編給大家分享了關(guān)于mysql binlog(二進(jìn)制日志)查看方法,有需要的朋友們學(xué)習(xí)下。
    2019-01-01
  • MYSQL鎖表問題的解決方法

    MYSQL鎖表問題的解決方法

    這篇文章主要介紹了MYSQL鎖表問題的解決方法,結(jié)合實(shí)例形式分析了MySQL鎖表問題的常見情況與相應(yīng)解決方法,需要的朋友可以參考下
    2016-03-03
  • MySQL獲取行號(hào)的示例代碼

    MySQL獲取行號(hào)的示例代碼

    MySQL變量是一種用于存儲(chǔ)和操縱數(shù)據(jù)的數(shù)據(jù)類型,通過在SQL查詢中使用變量,我們可以創(chuàng)建一個(gè)MySQL查詢,用于獲取每行數(shù)據(jù)的行號(hào),這篇文章主要介紹了MySQL 如何獲取行號(hào),需要的朋友可以參考下
    2023-08-08
  • MySQL 多表關(guān)聯(lián)一對(duì)多查詢實(shí)現(xiàn)取最新一條數(shù)據(jù)的方法示例

    MySQL 多表關(guān)聯(lián)一對(duì)多查詢實(shí)現(xiàn)取最新一條數(shù)據(jù)的方法示例

    這篇文章主要介紹了MySQL 多表關(guān)聯(lián)一對(duì)多查詢實(shí)現(xiàn)取最新一條數(shù)據(jù)的方法,結(jié)合實(shí)例形式詳細(xì)分析了MySQL 多表關(guān)聯(lián)一對(duì)多查詢實(shí)現(xiàn)取最新一條數(shù)據(jù)相關(guān)原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • MySQL中主鍵默認(rèn)有索引嗎

    MySQL中主鍵默認(rèn)有索引嗎

    MySQL主鍵默認(rèn)是有索引的,在MySQL中,主鍵是用來唯一標(biāo)識(shí)表中每一行數(shù)據(jù)的字段或字段組合,主鍵的作用是保證數(shù)據(jù)的唯一性,并且可以提高數(shù)據(jù)的查詢效率,需要的朋友可以參考下
    2023-10-10
  • MySQL 索引知識(shí)匯總

    MySQL 索引知識(shí)匯總

    這篇文章主要介紹了MySQL 索引使用方法的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Mysql 行級(jí)鎖的使用及死鎖的預(yù)防方案

    Mysql 行級(jí)鎖的使用及死鎖的預(yù)防方案

    mysql的InnoDB,支持事務(wù)和行級(jí)鎖,可以使用行鎖來處理用戶提現(xiàn)等業(yè)務(wù)。使用mysql鎖的時(shí)候有時(shí)候會(huì)出現(xiàn)死鎖,要做好死鎖的預(yù)防。這篇文章通過實(shí)例應(yīng)用給大家講解
    2016-12-12
  • 如何使用mysql語句進(jìn)行多表聯(lián)查(以三個(gè)表為例)

    如何使用mysql語句進(jìn)行多表聯(lián)查(以三個(gè)表為例)

    這篇文章主要介紹了如何使用mysql語句進(jìn)行多表聯(lián)查(以三個(gè)表為例),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 將MySQL的表數(shù)據(jù)全量導(dǎo)入clichhouse庫中

    將MySQL的表數(shù)據(jù)全量導(dǎo)入clichhouse庫中

    這篇文章主要介紹了將MySQL的表數(shù)據(jù)全量導(dǎo)入clichhouse庫中,詳細(xì)介紹全量導(dǎo)出MySQL數(shù)據(jù)到clickhouse表的相關(guān)內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03

最新評(píng)論