日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【MySQL】多表查询策略(多表联查子查询)

發(fā)布時間:2023/12/14 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【MySQL】多表查询策略(多表联查子查询) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

一、MySQL多表查詢

二、準備工作

1.運行環(huán)境

2.創(chuàng)建公司表

3.創(chuàng)建員工表

三、多表查詢

(一)多表聯(lián)查—同時查詢多張表

1.聯(lián)結(jié)

2.左連接

3.右連接

4.右連接

(二)子查詢

1.SELECT子查詢

2.WHERE子查詢

3.FROM子查詢

總結(jié)


一、MySQL多表查詢

MySQL語句學習的難點和重點就在于多表查詢,同時MySQL也有諸多方法供大家選擇,不論是多表聯(lián)查(聯(lián)結(jié)表、左連接、右連接……)還是子查詢(SELECT子查詢、WHERE子查詢、FROM子查詢),掌握一種方法達到目的即可,當然其他方法也需要理解,本文將闡述完整的多表查詢方法。

首先分享下學習鏈接,大家可以在看完本文后選擇以下鏈接鞏固學習成果,我相信如果都給掌握的話,MySQL語句中80%的問題都將迎刃而解!!

視頻學習鏈接:SQL學習之道_嗶哩嗶哩_bilibili

在線編程鏈接:SQL必知必會__牛客在線編程

二、準備工作

1.運行環(huán)境

本文在MySQL在線運行網(wǎng)址操作,模擬MySQL運行,若大家有條件也可在MySQL或navicat中操作運行

2.創(chuàng)建公司表

以下是創(chuàng)建數(shù)據(jù)表、新增數(shù)據(jù)等基礎(chǔ)操作,這些語句都是固定的,這是創(chuàng)建的第一個表(company表),id為主鍵。

#創(chuàng)建數(shù)據(jù)庫,可忽略,一般用不到 CREATE DATABASE test; use test; #創(chuàng)建數(shù)據(jù)表company CREATE TABLE company (id INT PRIMARY KEY,name VARCHAR(255) NOT NULL ); #新增數(shù)據(jù) INSERT INTO company VALUES(1,'IBM'); INSERT INTO company VALUES(2,'HP'); #單表查詢數(shù)據(jù) SELECT * FROM company;

運行結(jié)果:

3.創(chuàng)建員工表

創(chuàng)建第二個表(menber表),增刪改查基礎(chǔ)操作都在下邊了,希望能幫助大家加深對于基礎(chǔ)操作的理解,id為主鍵。

#創(chuàng)建數(shù)據(jù)表menber CREATE TABLE menber(id INT PRIMARY KEY,name VARCHAR(255) NOT NULL,sal DOUBLE(10,2),comid INT ); #新增數(shù)據(jù) INSERT INTO menber VALUES(101,'小李',3000,1); INSERT INTO menber VALUES(102,'小王',4000,1); INSERT INTO menber VALUES(103,'小劉',5000,2); INSERT INTO menber VALUES(104,'小孫',5000,2); INSERT INTO menber VALUES(105,'小明',7000,3); #刪除數(shù)據(jù) DELETE FROM menber WHERE comid = 3; #修改數(shù)據(jù) UPDATE menber SET sal=6000 WHERE id=104; #單表查詢數(shù)據(jù) SELECT * FROM menber;

運行結(jié)果:

?注:company表和menber表中的id、name不是一回事,id和conmid是公共列

三、多表查詢

創(chuàng)建完公司表和員工表后就具備進行多表查詢的條件了,主要分為多表聯(lián)查和子查詢兩部分,也是本文的重點。

(一)多表聯(lián)查—同時查詢多張表

本人常用的是聯(lián)結(jié),左右連接、內(nèi)連接一般都能解決問題,只需要添加WHERE條件即可。

1.聯(lián)結(jié)

若查詢n張表,必須查詢指定n-1個公共列的條件

SELECT c.name 公司名, m.name 員工名,m.sal, company公司信息 FROM company c, menber m WHERE c.id = m.comid;

應用:查詢IBM的員工信息

SELECT m.* FROM company c, menber m WHERE c.id = m.comid AND c.name = ‘IBM’

運行結(jié)果:

拓展:笛卡爾積(A表有m條記錄,B表有n條記錄,結(jié)果m*n條)

SELECT * FROM company, menber

運行結(jié)果:

2.左連接

左表是主表、左表中滿足條件的記錄會查詢出來、左表中【不滿足】條件的也會查出來,運行結(jié)果也以左表為主。

SELECT * FROM company c LEFT JOIN menber m ON c.id = m.comid

運行結(jié)果:

3.右連接

右表是主表、右表中所有的記錄會查詢出來,運行結(jié)果以右表為主。

SELECT * FROM menber m RIGHT JOIN company c ON c.id = m.comid

運行結(jié)果:

4.右連接

查詢的是滿足條件的記錄

SELECT * FROM menber m INNER JOIN company c ON c.id = m.comid

運行結(jié)果:

(二)子查詢

把一個查詢的結(jié)果當作另一個查詢的條件,可以說是一步步解決問題,較符合邏輯。

應用:查詢小劉的公司名? #HP

1.SELECT子查詢

SELECT (SELECT name from company WHERE id =conid) FROM menber WHERE name = '小劉'

邏輯:先取menber表這一列包含小劉的數(shù)據(jù),再對該行數(shù)據(jù)進行聯(lián)結(jié)

?左:menber表,右:company表

運行結(jié)果:

2.WHERE子查詢

SELECT name FROM company WHERE id = (SELECT comid FROM menber WHERE name = '小劉')

WHERE子查詢相比前一個邏輯更為簡單,先在menber表中找出小劉的comid,由于menber表的comid和company的id是公共列,可直接用于company表的查詢。

運行結(jié)果:

3.FROM子查詢

用于3張表以上的連接查詢較多,有A、B、C三張表,先查詢A和B兩張表、再用查詢結(jié)果和c表連接查詢,select子查詢和where子查詢是把子查詢的結(jié)果當成【數(shù)據(jù)】,from子查詢是把查詢結(jié)果當成【表】

SELECT c.name FROM (SELECT * FROM menber WHERE name = '小劉') t1,company c WHERE t1.comid = c.id

運行結(jié)果:


總結(jié)

大家如果有疑問都可以評論提出,有不足之處請大家批評指正,希望能多結(jié)識這方面的朋友,共同學習、共同進步。

總結(jié)

以上是生活随笔為你收集整理的【MySQL】多表查询策略(多表联查子查询)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。