MySQL多表联查
多表联查
1、创建表
- 
user表 CREATE TABLE user ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT , `username` varchar(10) DEFAULT 'xxx' , `sex` enum('w','m') DEFAULT 'w' , `age` tinyint(4) NULL DEFAULT 18 , `grade` varchar(10) DEFAULT 'python36' , PRIMARY KEY (`id`) );
- 
address表 CREATE TABLE address ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT , `uid` int(10) UNSIGNED NOT NULL , `address` varchar(255) DEFAULT NULL , PRIMARY KEY (`id`) );
2、隐式内连接
- 
主体结构 select * from 表名1,表名2... where 表名1.字段=表名2.字段 and ... 查询id为1的用户的 用户信息以及地址信息 select * from user where id=1; select * from address where uid=1; 
- 
实例 不起别名查询所有 SELECT * FROM USER, address WHERE `user`.id = address.uid AND `user`.id = 1;不起别名查询某个字段 SELECT `user`.id, `user`.username, address.address FROM USER, address WHERE `user`.id = address.uid AND `user`.id = 1;起别名查询某个字段 SELECT u.id, u.username, a.address FROM USER u, address a WHERE u.id = a.uid AND u.id = 1;
3、显示内连接 inner join
- 
主体结构 select * from 表1 inner join 表2 on 条件; 
- 
查询id为1的用户的 用户信息以及地址信息 不起别名 SELECT * FROM USER INNER JOIN address ON `user`.id = address.uid AND `user`.id = 1;起别名 select * from user u INNER JOIN address a on u.id=a.uid and u.id=1;
4、左连接 left join
- 
主体 select * from 表1 left join 表2 on 条件... 
- 
查询id为1的用户的 用户信息以及地址信息 不起别名 select * from user LEFT JOIN address on `user`.id=address.uid and `user`.id=1;起别名 select * from user u LEFT JOIN address a on u.id=a.uid and u.id=1;
5、右连接 right join
- 
主体 select * from 表1 rightjoin 表2 on 条件... 
- 
查询id为1的用户的 用户信息以及地址信息 不起别名 select * from user RIGHT JOIN address on `user`.id=address.uid and `user`.id=1;起别名 select * from user u RIGHT JOIN address a on u.id=a.uid and u.id=1;
6、注意
- 显示内连接和隐式内连接是相同的 只把关联的数据查询出来
- 左连接 会以左表为主表 右表为辅表 把主表的数据全部查询出来 辅表中如果没有关联的数据 则使用null来占位
- 右连接 会以右表为主表 左表为辅表 把主表的数据全部查询出来 辅表中如果没有关联的数据 则使用null来占位
- 建议使用隐式内连接
本文来自博客园,作者:寻月隐君,转载请注明原文链接:https://www.cnblogs.com/QiaoPengjun/p/16013026.html

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号