subquery
嵌套子查询
- where in 中嵌套 select 语句子句。
- 作为计算字段,放在 select 的查询字段中。(效率较低,每进行一次查询都进行一次子查询) 3.
子连接、 自连接(需要给表命别名)
连接通常要比子查询性能要好。
自然连接时对于列来说的,即查出的连接表的所有列不重复。对于不同的表,连接肯定是自然连接。对于自连接表,需要指明要查出的列排除重复列,才能构成自然连接。
jion 连接表
where 连接 select ..., from a, b where a.id = b.forgin_id;
where 这里作为连接条件而不是筛选条件,没有连接条件的 where 将返回两个表的笛卡尔积。
另一种表示方法是,join
select ..., from a inner join b on a.id = b.id;
join 能指定更多的连接类型,更加灵活。
连接表是一个比价耗时的工作,连接时间将以笛卡尔积的数量增长,连接的表越多,这种性能下降得越厉害。应当尽量避免不必要表的连接。同时尽量使用详细的 where 或 join 条件,放置查询出的数据过多引起内存占用的问题。
inner join outer join 存在两种形式的外部连接:左连接和右连接 left outer join right outer join
mysql 不支持简化字符 *=
和 =*
的使用,这两种操作符在其他DBMS职工很流行。
union 组合查询
UNIN 是对多条子查询语句查询出的数据进行并集。
(子句1) union (子句2) union .... [order by];
使用组合查询的机会并不会,这是因为它的特点所限制的,它要求查询的的结果列相似。此时,如果查询的是同一张表,可以合并成where条件的查询。而如果查询的是多张表,可能这种情况比较少。
- UNION 使用在 select语句之间
- UNION 每个查询必须包含相同的列、表达式或聚类函数(不过个格列不需要以相同的次序出现)。
- 类数据类型必须兼容,类型不必完全相同,但必须是DBMS隐含地转换的类型(例如不同数值类型或不同日期类型)。
union 自动去除了重复的行,如果需要,可以使用 union all 取消去重。
union 结果排序 order by
整个 union 只能在最后写一个 order by。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论