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

詳解MySQL數(shù)據(jù)庫--多表查詢--內(nèi)連接,外連接,子查詢,相關(guān)子查詢

 更新時(shí)間:2019年04月12日 15:42:13   作者:Mis相遇  
這篇文章主要介紹了MySQL多表查詢,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

多表查詢

使用單個(gè)select 語句從多個(gè)表格中取出相關(guān)的查詢結(jié)果,多表連接通常是建立在有相互關(guān)系的父子表上;

1交叉連接

第一個(gè)表格的所有行 乘以 第二個(gè)表格中的所有行,也就是笛卡爾積
創(chuàng)建一個(gè)消費(fèi)者與顧客的表格:
代碼如下:

-- create table customers(
-- id int primary key auto_increment,
-- name VARCHAR(20)not null,
-- address VARCHAR(20)not NULL
-- );
-- CREATE table orders(
-- order_namre VARCHAR(20) primary key,
-- num char(20) not NULL,
-- price int not null,
-- customers_id int,
-- constraint cus_ord_fk FOREIGN key(customers_id) REFERENCES customers(id)
-- )
自己插入數(shù)據(jù)即可。
語法:

隱式語法(不使用關(guān)鍵字): select * from customers,orders;

運(yùn)行結(jié)果如下:

顯式語法(使用關(guān)鍵字):select * from customers c INNER JOIN orders o ON c.id=o.customer_id;

兩個(gè)運(yùn)行結(jié)果一樣,但是笛卡爾積有錯(cuò)誤,下面的方法進(jìn)行修正

2內(nèi)連接

因?yàn)榻徊孢B接獲得的結(jié)果集是錯(cuò)誤的。因此內(nèi)連接是在交叉連接的基礎(chǔ)上
只列出連接表中與連接條件相匹配的數(shù)據(jù)行,匹配不上的記錄不會(huì)被列出。

語法:

隱式語法:

select * from customers,orders where customers.id=orders.customers_id;

顯式語法:

select * from customers c INNER JOIN orders o ON c.id=o.customer_id;

運(yùn)行結(jié)果如下

我們還可以給程序起別名:
代碼如下:

select * from customers as c,orders o where c.id=o.customers_id;
SELECT * from customers as c inner join orders o on c.id=o.customers_id;

3外連接

內(nèi)連接只列出所有購買過商品的用戶的信息,不會(huì)列出沒有購買商品用戶。
而外鏈接是以一張表為基表,其他表信息進(jìn)行拼接,如果有就拼接上,如果沒有顯示null; 外鏈接分為左外連接和右下連接。
左外連接: 以關(guān)鍵字左邊的表格為基表進(jìn)行拼接

語法:

select * from customers c LEFT JOIN orders o ON c.id=o.customer_id;

右外連接: 以關(guān)鍵字右邊的表格為基表

語法:

select * from orders o RIGHT JOIN customers c ON c.id=o.customer_id;

4子查詢

某些情況下,當(dāng)進(jìn)行查詢的時(shí)候,需要的條件是另外一個(gè)select語句的結(jié)果,這個(gè)時(shí)候就會(huì)用到子查詢,為了給主查詢(外部查詢) 提供數(shù)據(jù)而首先執(zhí)行的查詢(內(nèi)部查詢)被叫做子查詢; 子查詢分為嵌套子查詢和相關(guān)子查詢。

嵌套子查詢:

內(nèi)部查詢的執(zhí)行獨(dú)立于外部查詢,內(nèi)部查詢僅執(zhí)行一次,執(zhí)行完畢后將結(jié)果作為外部查詢的條件使用(嵌套子查詢中的子查詢語句可以拿出來單獨(dú)運(yùn)行。)

語法及練習(xí): 查詢出id為1的老師教過的所有學(xué)生。

select * from students where id in(select s_id from teacher_student where t_id=1);

相關(guān)子查詢:

內(nèi)部查詢的執(zhí)行依賴于外部查詢的數(shù)據(jù),外部查詢每執(zhí)行一次,內(nèi)部查詢也會(huì)執(zhí)行一次。每一次都是外部查詢先執(zhí)行,取出外部查詢表中的一個(gè)元組,將當(dāng)前元組中的數(shù)據(jù)傳遞給內(nèi)部查詢,然后執(zhí)行內(nèi)部查詢。根據(jù)內(nèi)部查詢執(zhí)行的結(jié)果,判斷當(dāng)前元組是否滿足外部查詢中的where條件,若滿足則當(dāng)前元組是符合要求的記錄,否則不符合要求。然后,外部查詢繼續(xù)取出下一個(gè)元組數(shù)據(jù),執(zhí)行上述的操作,直到全部元組均被處理完畢。
創(chuàng)建三個(gè)表格
練習(xí)1. 查詢出id為1的老師教過的所有學(xué)生。
– 創(chuàng)建老師表

create table teacher1(
id int primary key auto_increment,
name char(20) not NULL,
subject char(20) not null
);

– 創(chuàng)建學(xué)生表

create table student1(
id int primary key auto_increment,
name char(20) unique not null,
age int null
);

– 創(chuàng)建第三個(gè)表格

create table tea_stu(
id int PRIMARY KEY,
name char(20),
t_id int,
s_id int,
score int not null,
constraint teacher1_id_fk foreign key(t_id) references teacher1(id),
constraint student_id_fk foreign key(s_id) references student1(id)
);

練習(xí)1. 查詢出id為1的老師教過的所有學(xué)生。

做法1 用分開的方法寫出來:

select s_id from tea_stu where t_id=1;
select * from student1 where id in(2,3);

做法2:

select * from student1 where id in(select s_id from tea_stu where t_id=1);

相關(guān)子查詢:

內(nèi)部查詢的執(zhí)行依賴于外部查詢的數(shù)據(jù),外部查詢每執(zhí)行一次,內(nèi)部查詢也會(huì)執(zhí)行一次。每一次都是外部查詢先執(zhí)行,取出外部查詢表中的一個(gè)元組,將當(dāng)前元組中的數(shù)據(jù)傳遞給內(nèi)部查詢,然后執(zhí)行內(nèi)部查詢。根據(jù)內(nèi)部查詢執(zhí)行的結(jié)果,判斷當(dāng)前元組是否滿足外部查詢中的where條件,若滿足則當(dāng)前元組是符合要求的記錄,否則不符合要求。然后,外部查詢繼續(xù)取出下一個(gè)元組數(shù)據(jù),執(zhí)行上述的操作,直到全部元組均被處理完畢。
求:每一科考試成績大于平均分的學(xué)生的分?jǐn)?shù)。

select * from tea_stu as a where a.score>(select avg(b.score) from tea_stu as b where a.s_id=b.s_id);

以上所述是小編給大家介紹的MySQL多表查詢詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Mysql排序的特性詳情

    Mysql排序的特性詳情

    這篇文章主要介紹Mysql排序的特性,新寫了一個(gè)功能,自測和測試環(huán)境測試都沒問題,但在生產(chǎn)環(huán)境會(huì)出現(xiàn)偶發(fā)問題。于是,加班到12點(diǎn)一直排查問題,終于定位了的問題原因:Mysql Limit查詢優(yōu)化導(dǎo)致?,F(xiàn)抽象出問題模型及解決方案,分析給大家,避免大家踩坑,需要的朋友可以參考一下
    2021-10-10
  • Mysql字符串字段判斷是否包含某個(gè)字符串的2種方法

    Mysql字符串字段判斷是否包含某個(gè)字符串的2種方法

    這篇文章主要介紹了Mysql字符串字段判斷是否包含某個(gè)字符串的2種方法,本文使用Like和find_in_set兩種方法實(shí)現(xiàn),需要的朋友可以參考下
    2015-01-01
  • MySQL外鍵約束(FOREIGN KEY)的具體使用

    MySQL外鍵約束(FOREIGN KEY)的具體使用

    MySQL外鍵約束是表的一個(gè)特殊字段,經(jīng)常與主鍵約束一起使用,本文主要介紹了MySQL外鍵約束(FOREIGN KEY)的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • Mysql 模糊查詢和正則表達(dá)式實(shí)例詳解

    Mysql 模糊查詢和正則表達(dá)式實(shí)例詳解

    在MySQL中,可以使用LIKE運(yùn)算符進(jìn)行模糊查詢,LIKE運(yùn)算符用于匹配字符串模式,其中可以使用通配符來表示任意字符或字符序列,這篇文章主要介紹了Mysql 模糊查詢和正則表達(dá)式實(shí)例詳解,需要的朋友可以參考下
    2023-11-11
  • mysql備份腳本并保留7天

    mysql備份腳本并保留7天

    這篇文章主要介紹了mysql備份腳本并保留7天,需要的朋友可以參考下
    2019-09-09
  • MySQL中distinct語句的基本原理及其與group by的比較

    MySQL中distinct語句的基本原理及其與group by的比較

    這篇文章主要介紹了MySQL中distinct語句的基本原理及其與group by的比較,一般情況下來說group by和distinct的實(shí)現(xiàn)原理相近且性能稍好,需要的朋友可以參考下
    2016-01-01
  • MySQL數(shù)據(jù)庫防止人為誤操作的實(shí)例講解

    MySQL數(shù)據(jù)庫防止人為誤操作的實(shí)例講解

    這篇文章主要介紹了MySQL數(shù)據(jù)庫防止人為誤操作的方法,需要的朋友可以參考下
    2014-06-06
  • 通過兩種方式增加從庫——不停止mysql服務(wù)

    通過兩種方式增加從庫——不停止mysql服務(wù)

    現(xiàn)在生產(chǎn)環(huán)境MySQL數(shù)據(jù)庫是一主一從,由于業(yè)務(wù)量訪問不斷增大,故再增加一臺從庫。前提是不能影響線上業(yè)務(wù)使用,也就是說不能重啟MySQL服務(wù),為了避免出現(xiàn)其他情況,選擇在網(wǎng)站訪問量低峰期時(shí)間段操作
    2015-11-11
  • mysql忘記root密碼的解決辦法(針對不同mysql版本)

    mysql忘記root密碼的解決辦法(針對不同mysql版本)

    這篇文章主要介紹了mysql忘記root密碼的解決辦法(針對不同mysql版本),文章通過代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • MYSQL初學(xué)者命令行使用指南

    MYSQL初學(xué)者命令行使用指南

    其實(shí)MYSQL的對數(shù)據(jù)庫的操作與其它的SQL類數(shù)據(jù)庫大同小異,您最好找本將SQL的書看看。我在這里只介紹一些基本的,其實(shí)我也就只懂這些了,呵呵。最好的MYSQL教程還是“晏子“譯的“MYSQL中文參考手冊“不僅免費(fèi)每個(gè)相關(guān)網(wǎng)站都有下載,而且它是最權(quán)威的。
    2008-06-06

最新評論

靖西县| 砚山县| 河曲县| 潮安县| 翁源县| 库伦旗| 类乌齐县| 左权县| 晋州市| 灵寿县| 博罗县| 刚察县| 平阴县| 保山市| 盘锦市| 青岛市| 玛曲县| 佛学| 绥滨县| 岱山县| 上犹县| 泰州市| 襄汾县| 布尔津县| 东至县| 揭西县| 锡林郭勒盟| 溧水县| 朝阳区| 鲁山县| 沾化县| 洪雅县| 皋兰县| 上饶县| 汉中市| 华蓥市| 五常市| 南溪县| 兴隆县| 闽侯县| 梁山县|