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去匹配。