以示例方式展现经常使用的多表查询方式web
准备user表和product表 为后续的查询练习作准备sql
-- 用户表(user) create table `user` ( `id` int auto_increment primary key, `username` varchar(50) -- 用户姓名 ); -- 订单表(orders) create table `orders` ( `id` int auto_increment primary key, `price` double, `user_id` int ); -- 给订单表添加外键约束 alter table orders add constraint user_fk foreign key (user_id) references user(id); -- 向user表中添加数据 insert into user values(3,'张三'); insert into user values(4,'李四'); insert into user values(5,'王五'); insert into user values(6,'赵六'); -- 向orders 表中插入数据 insert into orders values(1,1314,3); insert into orders values(2,1314,3); insert into orders values(3,15,4); insert into orders values(4,315,5); insert into orders values(5,1014,null);
多张表无条件联合查询,开发中通常不会使用,可是经常使用的查询都是在此基础上添加条件获得的。svg
select a.*,b.* form a,b;
select a.*,b.* from a [inner] join b on ab的链接条件
select a.*,b.* from a,b where ab的链接条件;
select user.*,orders.* from user join orders on user.id=orders.user_id;
select user.*,orders.* from user,orders where user.id = orders.user_id;
select a.*,b.* from a left [outer] join b on 链接条件;
--user在左 select user.*,orders.* from user left join orders on user.id = orders.user_id;
select a.*,b.* from b right [outer] join a on 链接条件;
-- orders在右 select orders.*,user.* from user right join orders on user.id = orders.user_id;
select orders.*,user.* from orders left join user on user.id = orders.user_id;
select id from user where name = '张三'; select * from orders where user_id = ?;
select * from orders where user_id = (select id from user where name = '张三');
select user_id from orders where totalprice>300; select * from user where id in(?,?);--由于这样的id显然比不止一个
select * from user where id in(select user_id from orders where totalprice>300);
select orders.*,user.* from orders,user where user.id = orders.user_id and orders.totalprice>300;
select * from orders where totalprice>300; select tmp.*,user.* from tmp,user where user.id = tmp.user_id;
select tmp.*,user.* from user, (select * from orders where totalprice>300) as tmp where user.id = tmp.user_id;