MySQL之多表查詢

2021-08-31 18:41:10 字數 2073 閱讀 5901

1合併結果集,使用關鍵字union和union all,其區別是union會去掉合併中重複的部分而union all不會去掉重複的列。使用這個關鍵字的要求結果姐的列和型別必須相同。

定義兩個表如下所示:a和b,兩個表分別有乙個整型的id和乙個字串的name。

1.1使用union all

1.2使用union

2內連線

2.1這個是帶有方言的方式,在oracle可能不適合

select * from emp,dept where emp.deptno=dept.deptno;
2.2這個是最標準的內連線的書寫方式,建議用這個

select * from emp e inner join dept d on e.deptno=d.deptno;
2.3 natural join不需要on他自動根據兩個表相同的字段自動匹配

select * from emp natural  join dept d ;
3外鏈結

外鏈結分為左外連線,和右外連線。mysql不支援全外連線。

3.1左外連線,是指以左表為主,當兩個表進行連線的時候,右邊的表的值沒有時,會以左邊的表為主,即會把左邊所有的值都列出來,右表沒有的補null。

3.2右外連線和左外連線相反,他是以右表為主,當兩個表進行連線的時候,左邊的表沒有值的時候,會以右表為準,即會把右表所有的值都列出來,左表沒有的補null。

3.3全外連線,mysql不支援全外連線,但是可以通過將左外連線和右外連線結合起來,即union,即可得到全外連線。

4子查詢

可以通過檢視select關鍵字的個數來作為判斷

4.1. 出現的位置:

where後作為條件存在(一般是多行單列)

from後作為表存在(多行多列)

4.2. 條件

單行單列:select * from 表1 別名1 where 列1 [=、>、=、<=、!=] (select 列 from 表2 別名2 where 條件)

多行單列:select * from 表1 別名1 where 列1 [in, all, any] (select 列 from 表2 別名2 where 條件)

單行多列:select * from 表1 別名1 where (列1,列2) in (select 列1, 列2 from 表2 別名2 where 條件)

多行多列:select * from 表1 別名1 , (select ....) 別名2 where 條件

5mysql的關鍵字查詢的順序

MySql之多表查詢

select e.empname,d.deptname from emp e,dept d where e.deptno d.deptno select e.empname d.deptname from emp e inner join dept d on e.deptno d.deptno se...

MySQL之多表查詢

準備資料 user info表 create table user info id int 2 primary key,user name varchar 12 unique,password varchar 15 not null,real name varchar 8 not null,age ...

MySQL之多表查詢

現在有兩個表,分別為department表和employee表,他們之間是沒有外來鍵關係的。兩個表分別有以下資料。我們可以通過笛卡爾積得到乙個新的虛擬的表。我們得到這個表之後,就可以用這錶取我們想要的資料。比如拿到技術部門的員工名字 其實鍊錶查詢和笛卡爾積差不多,只是笛卡爾積的鍊錶和查詢放在了一起,...