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

MySQL數(shù)據庫多表聯(lián)合查詢代碼示例

 更新時間:2024年01月20日 15:19:52   作者:小小惡斯法克  
所謂聯(lián)合就是把多個表的記錄往一起合并,一起進行查詢,也叫多表查詢,這篇文章主要給大家介紹了關于MySQL數(shù)據庫多表聯(lián)合查詢的相關資料,需要的朋友可以參考下

聯(lián)合查詢

union查詢,就是把多次查詢的結果合并起來,形成一個新的查詢結果集

主要代碼:

SELECT 字段列表	FROM	表 A ...
UNION [ ALL ]
SELECT 字段列表  FROM	表B	;

聯(lián)合查詢的多張表的列數(shù)必須保持一致,字段類型也需要保持一致。

union all 會將全部的數(shù)據直接合并在一起,并不會去重

union 會對合并之后的數(shù)據去重。

案例:將薪資低于 5000 的員工 , 和 年齡大于 50 歲的員工全部查詢出來.

思路:

1.直接使用多條件查詢,使用邏輯運算符 or 連接

2.通過union/union all來聯(lián)合查詢

select * from empcp where salary < 5000
union all
select * from empcp where age > 50; --聯(lián)合查詢的多張表的列數(shù)必須保持一致,字段類型也需要保持一致。

執(zhí)行:

第一部分

第二部分

聯(lián)合(即要薪資低于5000的員工,又要年齡大于50的員工,那么就意味著這兩條數(shù)據要合并,關鍵字union all)

我們發(fā)現(xiàn)union all查詢出來的結果,有一個員工k是重復的,k的薪資低于5000,年齡又大于50,所以查詢了兩次,數(shù)據直接合并,僅僅進行簡單的合并,并未去重。

select * from empcp where salary < 5000
union
select * from empcp where age > 50;

執(zhí)行:

我們發(fā)現(xiàn)union聯(lián)合查詢,會對查詢出來的結果進行去重處理。

注意:

如果多條查詢語句查詢出來的結果,字段數(shù)量不一致,在進行union/union all聯(lián)合查詢時,將會報錯。如:

子查詢

SQL語句中嵌套的SELECT語句,稱為嵌套查詢,又稱子查詢。

SELECT * FROM	t1	WHERE column1 = ( SELECT column1 FROM t2 ); 

注意!子查詢外部的語句可以是INSERT / UPDATE / DELETE / SELECT 的任何一個。

此時,子查詢因為存在嵌套關系,邏輯性較強,代碼是比較變通的,切不可死記硬背,根據邏輯去思考問題

根據子查詢結果不同,可分為:

1.標量子查詢(子查詢結果為單個值)

2.列子查詢(子查詢結果為一列)

3.行子查詢(子查詢結果為一行)

4.表子查詢(子查詢結果為多行多列)

根據子查詢位置,可分為:

1.WHERE之后

2.FROM之后

3.SELECT之后

標量子查詢

子查詢返回的結果是單個值(數(shù)字、字符串、日期等),最簡單的形式,這種子查詢稱為標量子查詢。  常用的操作符:= <>  >    >= <  <=

案例:

查詢 "銷售部" 的所有員工信息

思路:

拆解為兩步 (因為在員工表中是沒有存儲銷售部這個部門名稱的,僅僅只有部門id)

1.查詢"銷售部" 部門ID

select id from dept where name = '銷售部';

2.根據 "銷售部" 部門ID, 查詢員工信息,用*返回員工所有信息的字段

select * from empcp where dept_id = (select id from dept where name = '銷售部');
或者
select * from empcp where dept_id = 4 ;

執(zhí)行:

執(zhí)行:

查詢在 "e"這個員工 入職之后的員工信息

思路:

拆解為兩步

1.查詢 e 的入職日期

select entrydate from empcp where name = 'e';

2.查詢指定入職日期之后入職的員工信息

select * from empcp where entrydate > (select entrydate from empcp where name = 'e');
或者
select * from empcp where entrydate > 2004-9-7 ;

執(zhí)行:

執(zhí)行:

當然,我們需要了解entrydate是如何比較呢?

在SQL中,entrydate是一個字段名,通常表示一個日期或日期時間類型的數(shù)據。

要比較entrydate字段,你可以使用各種比較運算符,如=、<>、<=、>=、<>!=。

以下是一些示例,說明如何比較entrydate字段:

1.等于,大于,小于,小于等于,大于等于,不等于就不過多演示了,因為直接更改比較運算符即可

SELECT * FROM your_table WHERE entrydate = '2023-10-23';
-- =可以改為<,>,<>,<=,>=......

2.BETWEEN: 如果你想選擇一個日期范圍內的記錄,你可以使用BETWEEN:

SELECT * FROM your_table WHERE entrydate BETWEEN '2023-10-01' AND '2023-10-31';

這個查詢會返回所有entrydate在'2023-10-01'和'2023-10-31'之間的記錄。注意,BETWEEN運算符是包含邊界值的。


3. LIKE 和日期: 如果你想基于日期的部分部分進行比較,例如查找以特定年份開始的日期,你可以使用LIKE:

SELECT * FROM your_table WHERE entrydate LIKE '2023%';

這個查詢會返回所有以'2023'開頭的entrydate的記錄。LIKE運算符通常與通配符一起使用,如%表示任何數(shù)量的任何字符。


4. DATE() 函數(shù): 如果你只想比較日期部分而忽略時間部分,你可以使用DATE()函數(shù):

SELECT * FROM your_table WHERE DATE(entrydate) = '2023-10-23';

這個查詢只會比較日期部分,忽略時間部分。這對于只關心日期而不關心具體時間的情況很有用。

5. 時間間隔: 如果你想基于兩個日期之間的時間間隔進行比較,你可以使用減法:

SELECT * FROM your_table WHERE DATEDIFF(day, entrydate, '2023-10-23') > 5;

這個查詢會返回所有與'2023-10-23'相差超過5天的entrydate的記錄。DATEDIFF()函數(shù)根據指定的時間間隔返回兩個日期之間的差異。在這個例子中,我們使用天作為時間間隔單位。不同的數(shù)據庫系統(tǒng)可能有不同的函數(shù)來計算日期差異,所以請根據你使用的系統(tǒng)查閱相應的文檔。

列子查詢

子查詢返回的結果是一列(可以是多行),這種子查詢稱為列子查詢

常用的操作符:IN 、NOT IN 、 ANY 、SOME 、 ALL

操作符

描述

IN

在指定的集合范圍之內,多選一

NOT IN

不在指定的集合范圍之內

ANY

子查詢返回列表中,有任意一個滿足即可

SOME

與ANY等同,使用SOME的地方都可以使用ANY

ALL

子查詢返回列表的所有值都必須滿足

案例:

查詢 "銷售部" 和 "市場部" 的所有員工信息

思路:

分解為兩步

1.查詢 "銷售部" 和 "市場部" 的部門ID

select id from dept where name = '銷售部' or name = '市場部';

2.根據部門ID, 查詢員工信息  (由于是兩個元素,所以用到了in)

select * from empcp where dept_id in (select id from dept where name = '銷售部' or name = '市場部');
或者
select * from empcp where dept_id in(2,4) --2.4是上述語句查詢的結果,所以我們可以把2,4替換掉,讓上面的語句作為子查詢存在

而由于內部的sql查詢出來不再是一個單個值了,而是一列,多行。所以這種子查詢稱為列子查詢

執(zhí)行:

執(zhí)行:

查詢比 財務部 所有人工資都高的員工信息

思路:

分解為以下兩步

1.查詢所有 財務部 人員工資

select id from dept where name = '財務部'; 
 
select salary from empcp where dept_id = (select id from dept where name = '財務部');
或者
select salary from empcp where dept_id = 3;

2.比 財務部 所有人工資都高的員工信息 (這個salary要大于這三個工資的所有值,比其中任何一個大,此時就要大于這個列表中所有值,要加上all)

select * from empcp where salary > all ( select salary from empcp where dept_id =
(select id from dept where name = '財務部') );

執(zhí)行:

執(zhí)行:

查詢比 研發(fā)部 其中任意一人工資高的員工信息

思路:

分解為兩步

1.查詢研發(fā)部所有人工資

select salary from empcp where dept_id = (select id from dept where name = '研發(fā)部');

2.比研發(fā)部其中任意一人工資高的員工信息 (關鍵字any)

select * from empcp where salary > any ( select salary from empcp where dept_id =
(select id from dept where name = '研發(fā)部') );

執(zhí)行:

執(zhí)行:

行子查詢

子查詢返回的結果是一行(可以是多列),這種子查詢稱為行子查詢。

常用的操作符:= 、<> 、IN 、NOT IN

案例:

查詢與 "b" 的薪資及直屬領導相同的員工信息 ;

思路:行子查詢一般來說,左邊要給組合條件,右邊再給子查詢的結果,不能把條件分開,再給子查詢結果

拆解為兩步:

1.查詢 "b" 的薪資及直屬領導

select salary, managerid from empcp where name = 'b';

2.查詢與 "b" 的薪資及直屬領導相同的員工信息 ;

第三個代碼就是使用salary和managerid作為了一個組合條件,然后這個組合條件等于一個組合值

select * from empcp where (salary,managerid) = (select salary, managerid from empcp
where name = 'b');
或者
select * from empcp where salary = 12500 and managerid = 1 ;
或者
select * from empcp where (salary , managerid) =  (12500 ,1) ;

執(zhí)行:

執(zhí)行:

???表子查詢

子查詢返回的結果是多行多列,這種子查詢稱為表子查詢。(子查詢查詢返回的結果就類似于一張表)

常用的操作符:IN

表子查詢經常在from之后,把表子查詢返回的結果作為一張臨時表,再和其他表聯(lián)查操作

案例:1.查詢與 "k" , "p" 的職位和薪資相同的員工信息

拆解為兩步:

1.查詢與 "k" , "p" 的職位和薪資

select job, salary from empcp where name = 'k' or name = 'p';

2.查詢與 "k" , "p" 的職位和薪資相同的員工信息 (注意,這里where之后給的是組合條件。如果where之后條件如果是單行,那么我們之前在這一塊的寫法是(job,salary)= 子查詢的結果就ok了,但是現(xiàn)在查詢的不是一個單行數(shù)據,而是一個多行數(shù)據嗎,此時就不能等于了,這時候我們要使用的是in)

3.解讀,這一塊的含義指的是job和salary這個組合要么滿足上面的,要么滿足下面的,在這個列表里面多選一,只要能夠滿足一個這個員工的數(shù)據就可以查詢出來

select * from empcp where (job,salary) in ( select job, salary from empcp where name =
'k' or name = 'p' );

執(zhí)行:

執(zhí)行:

查詢入職日期是 "2006-01-01" 之后的員工信息 , 及其部門信息

思路:

分解為兩步

1.入職日期是 "2006-01-01" 之后的員工信息

select * from empcp where entrydate > '2006-01-01';

2.查詢這部分員工, 對應的部門信息;

3.要查詢部門的相關信息就要再去聯(lián)查另一個表,dept表

4.所以我們需要把第一次查詢的結果作為一張表,再去聯(lián)查dept表

?先暫時寫為*

select * from [剛剛查詢的一個結果作為一張表放進來,子查詢的結果作為一張臨時表存在,取一個別名e] ;

select * from (select * from empcp where entrydate > '2006-01-01') e ;

?接著查詢部門信息,有一個員工q,id為17的沒有部門信息,我們要不要查出來,也需要,所以要查全部數(shù)據我們要使用到左外連接,此時我們順便把dept表取名為d

select * from (select * from empcp where entrydate > '2006-01-01') e left join dept d on e.dept_id = d.id ;

執(zhí)行:

?總結:此時我們就在from之后用到了子查詢,它會把這個子查詢的結果作為一張表來與另一張表做

select e.*, d.* from (select * from empcp where entrydate > '2006-01-01') e left
join dept d on e.dept_id = d.id ;
或者
select * from (select * from empcp where entrydate > '2006-01-01') e left join dept d
on e.dept_id = d.id ;

執(zhí)行:

執(zhí)行:

總結 

到此這篇關于MySQL數(shù)據庫多表聯(lián)合查詢的文章就介紹到這了,更多相關MySQL多表聯(lián)合查詢內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL單表查詢常見操作實例總結

    MySQL單表查詢常見操作實例總結

    這篇文章主要介紹了MySQL單表查詢常見操作,結合實例形式總結分析了MySQL創(chuàng)建表以及條件查詢常見操作技巧,需要的朋友可以參考下
    2018-06-06
  • MySQL?JSON類型的功能與應用

    MySQL?JSON類型的功能與應用

    MySQL8的JSON數(shù)據類型為存儲和查詢JSON數(shù)據提供了強大的支持,本文主要介紹了MySQL?JSON類型的功能與應用,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • MySQL遷移中explicit_defaults_for_timestamp參數(shù)影響

    MySQL遷移中explicit_defaults_for_timestamp參數(shù)影響

    在MySQL數(shù)據庫遷移過程中,explicit_defaults_for_timestamp參數(shù)設置為off可能導致數(shù)據寫入行為變化,本文就來介紹一下explicit_defaults_for_timestamp參數(shù)影響,感興趣的可以了解一下
    2024-09-09
  • MacOS下mysql 8.0.18 安裝配置方法圖文教程

    MacOS下mysql 8.0.18 安裝配置方法圖文教程

    這篇文章主要介紹了MacOS下mysql 8.0.18 安裝配置方法圖文教程,并成功命令行操作,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • MySQL回表查詢的實現(xiàn)示例

    MySQL回表查詢的實現(xiàn)示例

    回表查詢是 MySQL 數(shù)據庫中一種常見的查詢操作,主要出現(xiàn)在使用索引進行查詢的場景中,本文就來介紹一下如何實現(xiàn),感興趣的可以了解一下
    2026-01-01
  • Mac?Homebrew安裝的MySQL無法遠程登錄的解決

    Mac?Homebrew安裝的MySQL無法遠程登錄的解決

    這篇文章主要介紹了Mac?Homebrew安裝的MySQL無法遠程登錄的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 三種常用的MySQL 數(shù)據類型

    三種常用的MySQL 數(shù)據類型

    這篇文章主要介紹了MySQL 的數(shù)據類型的的相關資料,文中講解非常細致,幫助大家更好的理解和學習MySQL,感興趣的朋友可以了解下
    2020-06-06
  • DBeaver連接MySQL提示"Public Key Retrieval is not allowed"問題解決方式

    DBeaver連接MySQL提示"Public Key Retrieval is

    dbeaver數(shù)據庫連接工具,可以支持幾乎所有的主流數(shù)據庫.mysql,oracle.sqlserver,db2 等等,這篇文章主要給大家介紹了關于DBeaver連接MySQL提示"Public Key Retrieval is not allowed"問題的解決方式,需要的朋友可以參考下
    2023-10-10
  • MySQL優(yōu)化案例系列-mysql分頁優(yōu)化

    MySQL優(yōu)化案例系列-mysql分頁優(yōu)化

    這篇文章主要介紹了MySQL優(yōu)化案例系列-mysql分頁優(yōu)化,需要的朋友可以參考下
    2016-08-08
  • Mysql語句快速復習教程(全)

    Mysql語句快速復習教程(全)

    這篇文章主要介紹了Mysql語句快速復習教程(全)的相關資料,需要的朋友可以參考下
    2016-04-04

最新評論

罗定市| 禄丰县| 平度市| 陵水| 合水县| 武安市| 延长县| 丰镇市| 丹寨县| 启东市| 克什克腾旗| 漯河市| 昌吉市| 鄂州市| 三门县| 沙田区| 马山县| 四子王旗| 北京市| 周口市| 湖口县| 平山县| 博湖县| 乐清市| 阿克苏市| 吉木萨尔县| 安溪县| 绥化市| 怀仁县| 和平县| 宜城市| 金山区| 娄底市| 靖宇县| 崇州市| 环江| 祁门县| 长丰县| 巫山县| 阿城市| 长春市|