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

MySQL多表關(guān)聯(lián)查詢相關(guān)練習(xí)題

 更新時(shí)間:2023年10月31日 11:32:11   作者:程序員丶星霖  
這篇文章主要給大家介紹了關(guān)于MySQL多表關(guān)聯(lián)查詢的相關(guān)資料,在MySQL中JOIN語(yǔ)句是實(shí)現(xiàn)多表關(guān)聯(lián)查詢的關(guān)鍵,它可以將多個(gè)表格中符合條件的數(shù)據(jù)連接在一起,從而提供一個(gè)完整的查詢結(jié)果,需要的朋友可以參考下

一、多表關(guān)聯(lián)查詢

多表關(guān)聯(lián)查詢是使用一條SQL語(yǔ)句,將關(guān)聯(lián)的多張表的數(shù)據(jù)查詢出來(lái)。

1.1 交叉查詢

交叉查詢就是將多張表的數(shù)據(jù)沒(méi)有條件地連接在一起進(jìn)行展示。

1.1.1 語(yǔ)法

使用交叉查詢類別和商品

-- 目標(biāo):查詢所有分類,以及每個(gè)分類下的所有商品信息
SELECT tc.*,tp.* FROM t_category tc,t_product tp;

SELECT * FROM t_category,t_product;
-- 這個(gè)語(yǔ)句查詢出來(lái)是一個(gè)笛卡爾積,里面有很多錯(cuò)誤的數(shù)據(jù),所以不用,這種查詢叫做交叉查詢

通過(guò)查詢結(jié)果可以看到,交叉查詢其實(shí)是一種錯(cuò)誤的做法,在查詢到的結(jié)果集中有大量的錯(cuò)誤數(shù)據(jù),稱交叉查詢到的結(jié)果集是笛卡爾積。

1.2 內(nèi)連接查詢

通常要查詢的多個(gè)表之間都存在關(guān)聯(lián)關(guān)系,通過(guò)關(guān)聯(lián)關(guān)系(主外鍵關(guān)系)去除笛卡爾積。這種通過(guò)條件過(guò)濾去除笛卡爾積的查詢,稱之為連接查詢。

連接查詢又分為內(nèi)連接查詢外連接查詢。

1.2.1 隱式內(nèi)連接

-- 1. 內(nèi)連接查詢:滿足連接條件的數(shù)據(jù)才能查詢出來(lái),不滿足連接條件的數(shù)據(jù)無(wú)法查詢出來(lái)
-- 1.1 隱式內(nèi)連接查詢:
-- select 要查詢的字段 from 主表,從表 where 從表的外鍵 = 主表的主鍵
SELECT tc.*,tp.* FROM t_category tc,t_product tp WHERE tp.cno = tc.cid;

1.2.2 顯式內(nèi)連接

-- 1.2 顯式內(nèi)連接查詢:
-- select 要查詢的字段 from 主表 [inner] join 從表 on 從表的外鍵 = 主表的主鍵
SELECT * FROM t_product tp INNER JOIN t_category tc ON tp.cno = tc.cid;
-- 查詢手機(jī)數(shù)碼分類下的所有商品的信息以及分類信息
SELECT * FROM t_product tp INNER JOIN t_category tc ON tp.cno = tc.cid WHERE tc.cname='手機(jī)數(shù)碼';

1.2.3 內(nèi)連接查詢的特點(diǎn)

主表和從表的數(shù)據(jù)都是滿足連接條件則能夠查詢出來(lái),不滿足連接條件則不會(huì)查詢出來(lái)。

1.3 外連接查詢

如果要保證查詢出某張表的全部數(shù)據(jù)情況下進(jìn)行連接查詢,急需要使用外連接查詢。

外連接查詢分為左外連接和右外連接。

1.3.1 左外連接查詢

以join左邊的表為主表,展示主表的所有數(shù)據(jù),根據(jù)條件查詢連接右邊表的數(shù)據(jù),若滿足條件則展示,若不滿足則以null顯示。

可以理解為:在內(nèi)連接的基礎(chǔ)上保證左邊表的數(shù)據(jù)全部顯示。

-- 2. 外連接查詢:會(huì)查詢出主表的所有數(shù)據(jù),從表的數(shù)據(jù)滿足條件則能查詢出來(lái),不滿足則查詢不出來(lái)
-- 2.1 左外連接查詢:以join左邊的表作為主表,能查詢出左邊的表的所有數(shù)據(jù)
SELECT * FROM t_product tp LEFT OUTER JOIN t_category tc ON tp.cno = tc.cid;

1.3.2 右外連接查詢

以join右邊的表為主表,展示右邊表的所有數(shù)據(jù),根據(jù)條件查詢join左邊表的數(shù)據(jù),若滿足則展示,若不滿足則以null顯示。

可以理解為:在內(nèi)連接的基礎(chǔ)上保證右邊表的數(shù)據(jù)全部顯示。

-- 2.2 右外連接查詢:以join右邊的表作為主表,能查詢出右邊的表的所有數(shù)據(jù)
SELECT * FROM t_product tp RIGHT OUTER JOIN t_category tc ON tp.cno = tc.cid;

1.4 union聯(lián)合查詢

聯(lián)合查詢并不是多表連接查詢的一種方式。

聯(lián)合查詢是將多條查詢語(yǔ)句的查詢結(jié)果合并成一個(gè)結(jié)果并去掉重復(fù)數(shù)據(jù)。

全外連接查詢的意思就是將左表和右表的數(shù)據(jù)都查詢出來(lái),然后按照連接條件連接。

-- 全外連接,使用union聯(lián)合查詢做全外連接
-- union是將多個(gè)select語(yǔ)句查詢到的結(jié)果進(jìn)行合并,合并成一個(gè)結(jié)果,要求多個(gè)select語(yǔ)句查詢到的結(jié)果的格式是一樣的
SELECT * FROM t_product tp LEFT OUTER JOIN t_category tc ON tp.cno = tc.cid
UNION
SELECT * FROM t_product tp RIGHT OUTER JOIN t_category tc ON tp.cno = tc.cid

1.5 自連接查詢

自連接查詢是一種特殊的多表連接查詢,因?yàn)閮蓚€(gè)關(guān)聯(lián)查詢的表是同一張表,通過(guò)取別名的方式來(lái)虛擬成兩張表,然后進(jìn)行兩張表的連接查詢。

-- 員工表
CREATE TABLE emp (
  id INT PRIMARY KEY, -- 員工id
  ename VARCHAR(50), -- 員工姓名
  mgr INT , -- 上級(jí)領(lǐng)導(dǎo)
  joindate DATE, -- 入職日期
  salary DECIMAL(7,2) -- 工資
);
-- 添加員工
INSERT INTO emp(id,ename,mgr,joindate,salary) VALUES 
(1001,'孫悟空',1004,'2000-12-17','8000.00'),
(1002,'盧俊義',1006,'2001-02-20','16000.00'),
(1003,'林沖',1006,'2001-02-22','12500.00'),
(1004,'唐僧',1009,'2001-04-02','29750.00'),
(1005,'李逵',1006,'2001-09-28','12500.00'),
(1006,'宋江',1009,'2001-05-01','28500.00'),
(1007,'劉備',1009,'2001-09-01','24500.00'),
(1008,'豬八戒',1004,'2007-04-19','30000.00'),
(1009,'羅貫中',NULL,'2001-11-17','50000.00'),
(1010,'吳用',1006,'2001-09-08','15000.00'),
(1011,'沙僧',1004,'2007-05-23','11000.00'),
(1012,'李逵',1006,'2001-12-03','9500.00'),
(1013,'小白龍',1004,'2001-12-03','30000.00'),
(1014,'關(guān)羽',1007,'2002-01-23','13000.00');


-- 自連接查詢:表中的一個(gè)字段作為外鍵指向本表的主鍵
SELECT employee.*,manager.ename FROM emp employee,emp manager WHERE employee.mgr=manager.id AND employee.ename='孫悟空'

二、子查詢

如果一個(gè)查詢語(yǔ)句嵌套在另一個(gè)查詢語(yǔ)句里面,那么這個(gè)查詢語(yǔ)句就稱之為子查詢。

根據(jù)位置不同,可以分為where型、from型、exists型。

2.1 where型

  • 子查詢是單值結(jié)果,那么可以對(duì)其使用(=,>等比較運(yùn)算符)
  • 子查詢是多值結(jié)果,那么可對(duì)其使用([not] in (子查詢結(jié)果),或>all(子查詢結(jié)果),或>=all(子查詢結(jié)果),<all(子查詢結(jié)果),<=all(子查詢結(jié)果),或>any(子查詢結(jié)果),或>=any(子查詢結(jié)果),<any(子查詢結(jié)果),<=any(子查詢結(jié)果))
-- where型子查詢,是將子查詢語(yǔ)句放在where后面
-- 需求:查詢emp表中的薪資最高的那個(gè)員工的信息
-- where后面的條件中不能使用聚合函數(shù)
-- 第一步:查詢出最高的薪資
SELECT MAX(salary) FROM emp   -- 50000

-- 第二步:根據(jù)上一步查詢出來(lái)的最高薪資,查詢具體的員工信息
SELECT * FROM emp WHERE salary = 50000

-- 兩步合成一步
SELECT * FROM emp WHERE salary = (SELECT MIN(salary) FROM emp)

-- 需求:查詢出手機(jī)數(shù)碼和食物分類下的所有商品信息
SELECT * FROM t_product WHERE cno IN(SELECT cid FROM t_category WHERE cname IN('手機(jī)數(shù)碼','食物'))

-- 需求:查詢出價(jià)格最高的商品信息
-- 思路一:匹配最高的價(jià)格
SELECT * FROM t_product WHERE price = (SELECT MAX(price) FROM t_product)

-- 思路二:按照價(jià)格的降序排列,取第一個(gè)
SELECT * FROM t_product ORDER BY price DESC LIMIT 0,1

-- 思路三:查詢價(jià)格大于所有商品的商品
SELECT * FROM t_product WHERE price>=ALL(SELECT price FROM t_product)

2.2 from型

子查詢的結(jié)果是多行多列的結(jié)果,類似于一張表格。

必須給子查詢?nèi)e名,即臨時(shí)表名,表的別名不要加""和空格。

-- from型的子查詢,這個(gè)針對(duì)的是子查詢的結(jié)果是多行、多列數(shù)據(jù)
-- 需求:查詢每個(gè)分類下的分類名、商品總數(shù)
-- 思路一:使用連接查詢
-- 使用外連接,查詢出分類表的所有數(shù)據(jù)
SELECT tc.cname,COUNT(tp.pid) FROM t_category tc LEFT OUTER JOIN t_product tp ON tp.cno=tc.cid GROUP BY tc.cname

-- 思路二:使用子查詢
-- 第一步:對(duì)t_product根據(jù)cno進(jìn)行分組查詢,統(tǒng)計(jì)每個(gè)分類的商品數(shù)量
SELECT cno,COUNT(pid) FROM t_product GROUP BY cno
-- 第二步:用t_category表去連接第一步查詢出來(lái)的結(jié)果,進(jìn)行連接查詢,此時(shí)要求查詢出所有分類
SELECT tc.cname '商品名稱',IFNULL(tn.total,0) '總數(shù)量' FROM t_category tc LEFT OUTER JOIN (SELECT cno,COUNT(pid) total FROM t_product GROUP BY cno) tn ON tn.cno=tc.cid

2.3 exists型

-- exists型子查詢
-- 需求:查詢那些有商品的分類
-- 連接分類表和商品表進(jìn)行查詢
-- exists是如果子查詢語(yǔ)句能夠至少查詢到一條數(shù)據(jù),就返回TRUE,否則就返回FALSE
SELECT cid,cname FROM t_category tc WHERE EXISTS (SELECT * FROM t_product tp WHERE tp.cno = tc.cid)

總結(jié) 

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

相關(guān)文章

  • 從零開(kāi)始搭建MySQL MMM架構(gòu)

    從零開(kāi)始搭建MySQL MMM架構(gòu)

    這篇文章主要介紹了從零開(kāi)始搭建MySQL MMM架構(gòu),本文講解了配置MySQL Relication、新建同步數(shù)據(jù)庫(kù)需要的用戶、同步主從數(shù)據(jù)庫(kù)、安裝MMM、配置MMM、啟動(dòng)MMM等問(wèn)題,需要的朋友可以參考下
    2015-04-04
  • SQL語(yǔ)句中SUM與COUNT的區(qū)別深入分析

    SQL語(yǔ)句中SUM與COUNT的區(qū)別深入分析

    本篇文章是對(duì)SQL語(yǔ)句中SUM與COUNT的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 分享MySql8.0.19 安裝采坑記錄

    分享MySql8.0.19 安裝采坑記錄

    這篇文章主要介紹了MySql8.0.19 安裝采坑記錄,內(nèi)容雖然不長(zhǎng),但是都是朋友經(jīng)常遇到的問(wèn)題,小編特此分享到腳本之家平臺(tái),需要的朋友可以參考下
    2020-02-02
  • MySQL8.0修改密碼的正確姿勢(shì)分享

    MySQL8.0修改密碼的正確姿勢(shì)分享

    如果當(dāng)初設(shè)置了一個(gè)很復(fù)雜的數(shù)據(jù)庫(kù)密碼,是很可能忘記的,下面這篇文章主要給大家介紹了關(guān)于MySQL8.0修改密碼的正確姿勢(shì),需要的朋友可以參考下
    2022-03-03
  • 淺談mysqldump使用方法(MySQL數(shù)據(jù)庫(kù)的備份與恢復(fù))

    淺談mysqldump使用方法(MySQL數(shù)據(jù)庫(kù)的備份與恢復(fù))

    下面小編就為大家?guī)?lái)一篇淺談mysqldump使用方法(MySQL數(shù)據(jù)庫(kù)的備份與恢復(fù))。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • win10下mysql5.7.21安裝詳細(xì)過(guò)程

    win10下mysql5.7.21安裝詳細(xì)過(guò)程

    這篇文章主要為大家詳細(xì)介紹了win10下mysql5.7.21安裝的詳細(xì)過(guò)程,以及安裝Mysql 5.7.21遇到的問(wèn)題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • MySQL中的數(shù)據(jù)加密解密安全技術(shù)教程

    MySQL中的數(shù)據(jù)加密解密安全技術(shù)教程

    在數(shù)據(jù)庫(kù)應(yīng)用程序中,數(shù)據(jù)的安全性是至關(guān)重要的,MySQL作為一種常用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),也提供了一些數(shù)據(jù)加密和解密的技巧來(lái)保護(hù)敏感數(shù)據(jù)的安全性,為了保護(hù)敏感數(shù)據(jù)免受未經(jīng)授權(quán)的訪問(wèn),我們可以使用加密和解密技術(shù)
    2024-01-01
  • mysql分頁(yè)原理和高效率的mysql分頁(yè)查詢語(yǔ)句

    mysql分頁(yè)原理和高效率的mysql分頁(yè)查詢語(yǔ)句

    這篇文章主要介紹了mysql分頁(yè)原理和高效率的mysql分頁(yè)查詢語(yǔ)句,大家參考使用吧
    2014-01-01
  • mysql缺少my.ini文件的最佳解決方法

    mysql缺少my.ini文件的最佳解決方法

    my.ini是MySQL數(shù)據(jù)庫(kù)中使用的配置文件,修改這個(gè)文件可以達(dá)到更新配置的目的,下面這篇文章主要給大家介紹了關(guān)于mysql缺少my.ini文件的最佳解決方法,需要的朋友可以參考下
    2024-01-01
  • Mysql單庫(kù)遷移的操作方法

    Mysql單庫(kù)遷移的操作方法

    這篇文章主要介紹了Mysql單庫(kù)遷移的相關(guān)知識(shí),包括導(dǎo)出數(shù)據(jù)庫(kù)文件,上傳至目標(biāo)機(jī)器的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05

最新評(píng)論