02-子查询与表连接

语法格式:
	select 字段列表|* from 表名
	[join 表名或select语句 on 条件]
	[where 搜索条件]
	[group by 分组字段 [having 分组条件]]
	[order by 排序字段 排序规则]
	[limit 分页参数]

1、子查询

1.1、利用子查询进行过滤
将子查询的结果作为父查询的条件:
	select cust_name,cust_contact
	from customers
	where cust_id in (select cust_id
		from orders
		where order_num IN (select order_num
			from orderitems
			where prod_id = 'TNT2'));
1.2、子查询作为计算字段
	select cust_id,cust_name,
		(
		select count(*)
			from orders
			where orders.cust_id = customers.cust_id) as orders
		)
	from customers
	order by cust_name;

2、表连接

INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

在这里插入图片描述

注意

尽量使用表连接查询代替子查询,连接查询的性能优于子查询。

3、组合查询

 UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

语法格式:
	SELECT expression1, expression2, ... expression_n
	FROM tables
	[WHERE conditions]
	UNION [ALL | DISTINCT]
	SELECT expression1, expression2, ... expression_n
	FROM tables
	[WHERE conditions];

参数
	expression1, expression2, ... expression_n: 要检索的列。
	tables: 要检索的数据表。
	WHERE conditions: 可选, 检索条件。
	DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
	ALL: 可选,返回所有结果集,包含重复数据。

详情请参考MySQL教程|菜鸟教程

猜你喜欢

转载自blog.csdn.net/rookie__zhou/article/details/111084594
02-
今日推荐