一. 关联查询的基础、高级关联查询、约束
1.分组查询:
当统计一张表或者按照表内的某字段进行分组的总记录数,or最大值,最小值,平均值,总和等
一定会与分组函数连用:count(),min(),max(),avg(),avg(ifnull(comm,0))
2.概念:
当在查询时,我们所需要的数据不在一张表中,可能在两张表或多张表中。此时我们需要同时操作这些表。即关联查询。
3.等值连接:
在做多张表查询时,这些表中应该存在着有关联的两个字段。
我们使用某一张表中的一条记录与另外一张表通过相关联的两个字段进行匹配,组合成一条记录。
4.笛卡儿积:
在做多张表查询时,我们使用某一张表中的每一条记录都与
另外一张表的所有记录进行组合。比如表A有x条,表B有y条件,最终组合数为x*y,这个值就是笛卡尔积,通常没有意义。
5.内链接:
只要使用join on,就是内连接。连接效果与等值连接一样。
用法:
表A join 表2 on 关联条件
6.外连接:
在做多张表查询的时候,我们所需的数据,除了满足关联条件的数据外,还有不满足管理条件的数据。此时需要使用外连接。会涉及到两个概念:
驱动表(主表):除了显示满足条件的数据,还需要显示不满足条件的 数据的表
从表:只显示满足关联条件的数据的表
外连接分三种情况:
- 左外连接:表A left [outer] join 表B on 关联条件
表A时驱动表,表B是从表
- 右外连接:表A right [outer] join 表B on 关联条件
表B时驱动表,表A是从表
- 全外连接:两张表的数据不管满不满足条件,都做显示。
表A full [outer] join 表B on 关联条件
Ps:mysql 不支持全外连接
- 自连接:在多张表进行关联查询时,这些表的表名相同。即,自连接。
- 高级关联查询:
有的时候,我们要查询的数据, 一个简单的查询语句满足不了,并且我们使用的数据,表中不能直观体现出来。而是预先经过一次查询才会有所体现。那么先执行的查询,我们称之子查询。被子查询嵌入的查询语句称之为父查询。
比如需求:查询工资大于员工JONES工资的员工的信息。
子查询返回的数据特点:
(1) 可能是单行单列的数据。
(2) 可能是多行单列的数据
(3) 可能是单行多列的数据
(4) 可能是多行多列的数据
1)子查询可以在where子句中
2)子查询可以在from子句中
3)子查询可以在having子句中
4)子查询可以在select字句中,相当于外连接的另外一种写法。
7.约束Constraint:对插入表中的数据起到一定的条件限制.
约束有五种:
主键约束:primary key 要求作为主键的字段值 非空且唯一
非空约束:not null
唯一性约束:unique (null与null不相等)
检查性约束:gender enum(’f’,’m’) 其他数据库:check(条件) check(gender in(’f’, ’m’))
外键约束:foreign key
要求:有外键约束的字段A必须依赖于另外一个字段,字段B要有主键约束。字段A的值是null,要么必须是字段B里的值。