大家好,我是我是深圳分院第十期java学员,一枚正直纯洁善良的Java程序员。今天给大家分享一下,修真院官网java任务一mysql的多表查询。
1.背景介绍
查询语句回顾
where 条件查询
in 关键字查询
between and 范围查询
like 模糊查询
order by 排序
2.知识剖析
多表查询:
多表查询 ,也叫连接查询。如果一个查询需要对多个表进行操作就称为连接查询,连接查询的结果集或结果称为表之间的连接.
连接查询实际上是通过各个表之间共同列的关联性来查询数据的,它是关系数据库查询最主要的特征.
select 表1.字段名1,表2.字段名2,..from 表1,表2
多表查询分类:
1.自连接查询,对同一个表进行连接操作
2.内连接查询,又分为:自然连接、等值连接、不等值连接三种
3外连接查询,又分为:左外连接、右外连接、全外连接三种
4交叉连接查询,也作无条件查询。
5联合查询。
自连接查询:
一个表自己与自己建立连接称为自连接或自身连接。
进行自连接就如同两个分开的表一样,可以把一个表的某一行与同一表中的另一行连接起来。
内连接(INNER JOIN)
1、等值连接:
2,不等值连接
外连接(OUTER JOIN):
与内连接不同的是,外连接不只列出与连接条件相匹配的行,
而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)
中所有符合搜索条件的数据行。
外连接是对内连接的扩充,除了将两个数据集合中重叠部分以内的那些数据行连接起来之外,
还可以根据要求返回左侧或右侧数据集合中非匹配的数据或全部的数据.
左外连接:(LEFT OUTER JOIN或LEFT JOIN)
语法:select 列
from 表1 left outer join 表2 on 表1.列=表2.列
右外连接(RIGHT OUTER JOIN或RIGHT JOIN)
三表查询
3.常见问题
关注表之间的约束关系
5.编码实战
6.扩展思考
子查询
注意事项:
子查询要包含在括号内。
将子查询放在比较条件的右侧。
单行操作符对应单行子查询,多行操作符对应多行子查询。
GROUP BY,顾名思义:根据...分组,在SQL中常根据指定字段分组
(指定字段内容相同是为一组),然后针对组进行相关操作.
group by的常规用法是配合聚合函数,利用分组信息进行统计,
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,
条件中经常包含聚组函数,使用having 条件过滤出特定的组,
也可以使用多个分组标准进行分组。
7.参考文献
百度,博客
8.更多讨论
提问一,MySQL中如何使用全外链接?
mysql中是不支持全连接的,MySQL中实现全连接的方式是使用UNION关键词联合左右连接来实现
提问二,查询过多的话多表怎么去重?
要注意多加限制语句,数据库设计要规范
提问三,遇到Column 'name' in where clause is ambiguous问题
是在输入查询语句的时候存在多表的变量相同导致数据库不知道你要的name是哪一个
,在前面加上user.就好了,就是加上某个表