MySQL如何實(shí)現(xiàn)多表查詢?MySQL多表查詢的語(yǔ)句

本篇文章給大家?guī)?lái)的內(nèi)容是介紹mysql如何實(shí)現(xiàn)多表查詢?mysql多表查詢的語(yǔ)句。有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你們有所幫助。

創(chuàng)建表

# 創(chuàng)建表 create table department(id int,name varchar(20)); create table employee1( id int primary key auto_increment, name varchar(20), sex enum('male','female') not null default 'male', age int, dep_id int ); # 插入數(shù)據(jù) insert into department values(200,'技術(shù)'),(201,'人力資源'),(202,'銷售'),(203,'運(yùn)營(yíng)');  insert into employee1(name,sex,age,dep_id) values('egon','male',18,200),('alex','female',48,201),('tom','male',38,201),('yuanhao','female',28,202),('lidawei','male',18,200),('jinkezhou','female',18,204);  # 查看表 mysql> select * from employee1; +----+-----------+--------+------+--------+ | id | name      | sex    | age  | dep_id | +----+-----------+--------+------+--------+ |  1 | egon      | male   |   18 |    200 | |  2 | alex      | female |   48 |    201 | |  3 | tom       | male   |   38 |    201 | |  4 | yuanhao   | female |   28 |    202 | |  5 | lidawei   | male   |   18 |    200 | |  6 | jinkezhou | female |   18 |    204 | +----+-----------+--------+------+--------+ 6 rows in set (0.00 sec) mysql> select * from department; +------+--------------+ | id   | name         | +------+--------------+ |  200 | 技術(shù)       | |  201 | 人力資源   | |  202 | 銷售       | |  203 | 運(yùn)營(yíng)       | +------+--------------+ 4 rows in set (0.00 sec)

多表連接查詢

交叉連接

交叉連接:不適用任何匹配條件。生成笛卡爾積

mysql> select * from employee1 ,department;

內(nèi)連接

內(nèi)連接:找兩張表共有的部分,相當(dāng)于利用條件從笛卡爾積結(jié)果中篩選出了正確的結(jié)果。(只連接匹配的行)

# 找兩張表共有的部分,相當(dāng)于利用條件從笛卡爾積結(jié)果中篩選出了正確的結(jié)果 #department沒(méi)有204這個(gè)部門,因而employee表中關(guān)于204這條員工信息沒(méi)有匹配出來(lái) mysql> select * from employee1,department where employee1.dep_id=department.id;  #上面用where表示的可以用下面的內(nèi)連接表示,建議使用下面的那種方法 mysql> select * from employee1 inner join department on employee1.dep_id=department.id;  # 也可以這樣表示哈 mysql> select employee1.id,employee1.name,employee1.age,employee1.sex,department.name from employee1,department where employee1.dep_id=department.id;

左連接left

優(yōu)先顯示左表全部記錄。

#左鏈接:在按照on的條件取到兩張表共同部分的基礎(chǔ)上,保留左表的記錄 mysql> select * from employee1 left join department on department.id=employee1.dep_id;  mysql> select * from department left join  employee1 on department.id=employee1.dep_id;

右連接right

優(yōu)先顯示右表全部記錄。

#右鏈接:在按照on的條件取到兩張表共同部分的基礎(chǔ)上,保留右表的記錄 mysql> select * from employee1 right join department on department.id=employee1.dep_id; mysql> select * from department right join employee1 on department.id=employee1.dep_id;

全部連接join

mysql> select * from department full join employee1;

符合條件多表查詢

示例1:以內(nèi)連接的方式查詢employee和department表,并且employee表中的age字段值必須大于25,
即找出公司所有部門中年齡大于25歲的員工

mysql> select * from employee1 inner join department on employee1.dep_id=department.id and age>25;

示例2:以內(nèi)連接的方式查詢employee和department表,并且以age字段的升序方式顯示

mysql> select * from employee1 inner join department on employee1.dep_id=department.id and age>25 and age>25 order by age asc;

子查詢

#1:子查詢是將一個(gè)查詢語(yǔ)句嵌套在另一個(gè)查詢語(yǔ)句中。 #2:內(nèi)層查詢語(yǔ)句的查詢結(jié)果,可以為外層查詢語(yǔ)句提供查詢條件。 #3:子查詢中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等關(guān)鍵字 #4:還可以包含比較運(yùn)算符:= 、 !=、> 、<等

?示例:

# 查詢平均年齡在25歲以上的部門名 mysql> select name from department where id in ( select dep_id from employee1 group by dep_id having avg(age) > 25 );  # 查看技術(shù)部員工姓名 mysql> select name from employee1 where dep_id = (select id from department where name='技術(shù)');  # 查看小于2人的部門名 mysql> select name from department where id in (select dep_id from employee1 group by dep_id having count(id) < 2) union select name from department where id not in (select distinct dep_id from employee1); # 提取空部門                               #有人的部門 mysql> select * from department where id not in (select distinct dep_id from employee1);

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊5 分享