sql語句實戰--錶鏈接 (多表查詢)sql
標準SQL語句格式有如下4種:ide
ü 表內鏈接spa
Select col1,col2...from tab1,tab2 where tab1.col3=tab2.col3;3d
Col1 列名 tab1表名 where tab1.col3=tab2.col3 鏈接條件blog
ü 表外鏈接(分兩種)rem
左鏈接it
Select col1,col2... from tab1 left join tab2 on tab1.col3=tab2.col3;innodb
右鏈接table
Select col1,col2... from tab1 right join tab2 on tab1.col3=tab2.col3;class
ü 子查詢
Select *from tab1 where col[in]|[=](select *from tab2 where col ...);
實戰場景:新建兩個表,並插入規定的數據,利用這兩個表,練習表的鏈接(內,左,右,子)
1) 新建表A:
Create table A
(id smallint(5) unsigned auto_increment,
Name varchar(50) not null,
Primary key (id)
) engine=innodb default charset=utf8;
Desc A;
執行結果:
可見有id和name兩個字段。
2) 新建表B:
Create table B
(id smallint(5) unsigned auto_increment,
Address varchar(50) not null,
A_id smallint(5) unsigned,
Primary key (id)
) engine=innodb default charset=utf8;
Desc B;
解釋:A_id表示和A關聯的ID
執行結果:
可見有id、address、A_id三個字段
3) 往A表裏插數據:
Insert into A(name)
Values('張'),('李'),('王');
執行結果:
4) 往B表裏插數據:
Insert into B(address,A_id)
Values('北京',1),('上海',3),('天津',10);
執行結果:
5) 執行內鏈接語句(首推此語句)
Select A.name, B.address from A,B where A.id = B.A_id;
解釋:查找A表裏的name字段和B表裏的address字段,條件是A表裏的id字段和B表裏的A_id字段作鏈接。
執行結果:
6) 執行左鏈接語句
Select A.name, B.address from A left join B on A.id = B.A_id;
解釋:左鏈接是以左側的列爲主,右側的列去匹配左側的,若是匹配不上,則爲空;
執行結果:
從結果能夠看出,右側的第三行address沒有匹配上,因此爲空。
7) 執行右鏈接語句
Select A.name, B.address from A right join B on A.id = B.A_id;
解釋:右鏈接是以右側的列爲主,左側的列去匹配右側的,若是匹配不上,則爲空;
執行結果:
從結果能夠看出,左側的第三行name沒有匹配上,因此爲空。
8) 子查詢語句
Select * from A where id in (select A_id from B where address = ‘北京’);
解釋:括號裏的意思是從B表裏找address是北京的對應的A_id,
而後再和A表的id去匹配。