mysql及联合查询
SQL语句分类
- DDL 数据库定义语言 定义数据库对象 create alter truncate drop
- TPL 事务处理语言 rollback commit
- DCL 数据控制语言 由 GRANT 和 REVOKE 两个指令组成 授权和废除权限
- DML 数据操作语言 CRUD操作
DML
select语句
inner join 公共的部分
SELECT * FROM `user` u INNER JOIN user_role r ON u.userid=r.userid;
left join 左表中全取,右边表如果没数据,字段为null,如果有多条呢,就会多条显示
SELECT * FROM `user` u LEFT JOIN user_role r on r.userid=u.userid;
right join 基本和left join相似,以右表为基础,右边表全取、、、
full join 全连接
mysql中不支持 full join
mysql中使用 左右连接 加一个  union all来实现全连接
SELECT
	a.`user_name`,
	a.`over`,
	b.`over`
FROM
	user1 a
LEFT JOIN user2 b ON a.`user_name` = b.`user_name`
UNION ALL
	SELECT
		b.`user_name`,
		b.`over`,
		a.`over`
	FROM
		user1 a
	RIGHT JOIN user2 b ON a.`user_name` = b.`user_name`
cross join 交叉连接 笛卡尔连接
SELECT * FROM `user` CROSS JOIN user_role   #没有连接条件
update 语句
mysql不支持 update 过滤条件中包含自身表,如下不支持
UPDATE `user`
SET `name` = 'xxx'
WHERE
	userid = (
		SELECT
			userid
		FROM
			`user`
		WHERE
			userid=3
	)
update语句和join语句一起用可以解决上面这个问题
update user1 a inner join user2 b on a.user_name = b.user_name set a.over='齐天大圣';
子查询
工作中尽量少用子查询,因为查询会每次都会与子查询中的数据做匹配导致效率下降。
SELECT
	a.user_name,a.`over`,
	(
		SELECT
			over
		FROM
			user2 b
		WHERE
			a.user_name = b.user_name) AS over2
		FROM
			user2 a
优化后如下
SELECT
	a.user_name,a.`over`,
	b.over AS over2
FROM
	user1 a
LEFT JOIN user2 b ON a.user_name = b.user_name;

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