一.分组查询
1.语法:group by 分组字段1[,分组字段2,.........] [having 分组后的筛选条件]
2.注意:分组字段应该与select后的查询字段一致,否则查询结果无意义
3.分组查询经常会与聚合函数一起使用
例:(1)先建一张商品表(以此表为例进行分组查询)

Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

(2)插入记录

Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

(3)查询:
#1.计算每一种商品单价的平均价格

Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

查询结果:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计
#2.计算日用品种类的平均价格
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

查询结果:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计
二.连接查询
1.等值连接
语法:select 字段1,字段2,........ from 表A,表B,....... where 连接条件 [其他过滤条件];
2.内连接
语法:select 字段1,字段2,.........from 表A inner join 表B on 连接条件 [其他过滤条件];
3.外连接
左外连接:
语法:select 字段1,字段2,.........from 表A left join 表B on 连接条件;
注意:左外连接的查询结果是,除了返回表中符合条件的记录外还要加上左表中剩下的全部记录。
右外连接:

语法:select 字段1,字段2,..........from 表A right join 表B on 连接条件;
注意:右外连接的查询结果是,除了返回表中符合条件的记录外还要加上右表中剩下的全部记录。
例:(1)先创建表
创建学校表(父表)
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计
创建学生表(子表)

Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

(2)添加数据:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计
(3)查询学生的姓名,成绩与所在的学校的历史
等值连接:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计
查询结果:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计
内连接:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

查询结果:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

(4)使用左外连接查询学生表与学校表的相关记录,学校为左表。
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

查询结果:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

(5)使用右外连接查询学生表说学校表的相关记录,学校表为右表
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

查询结果:

Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

三.子查询(嵌套查询)
1.子查询是指在外部查询语句中嵌套着一个内部查询(子查询),子查询的查询结果一般是作为外部查询的条件,子查询要用括号括起来。
2.子查询常用的关键字:
in:判断某个(些)字段值是否在指定的子查询结果集中
all:判断某个字段值是否能满足指定操作符对子查询结果集所有记录的筛选
any:判断某个字段值是否满足指定操作符对子查询结果集中的任何一个值
例:(查询案例)
(1)建表
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

(2)添加数据

Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

(3)查询
#1.查询与SCOTT同一部门员工
如果只有一个SCOTT:
查询语句:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

查询结果:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计
如果至少一个SCOTT(向表中添加在加入一SCOTT:INSERT INTO emp VALUES(9527,'SCOTT','ANALYST',7566,'1987-05-19',1000,NULL,10);):
查询语句:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

查询结果:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计
#2.工资高于JONES的员工
如果只有一个JONES:
查询语句:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

查询结果:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计
如果至少一个JONES(添加一个JONES:INSERT INTO emp VALUES(9999,'JONES','MANAGER',7839,'1981-04-02',2000,NULL,20);):
查询语句:

Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计
查询结果:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计
#3.工资高于30号部门所有员工的员工信息
方式一:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

查询结果:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计
方式二:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

查询结果:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计
方式三:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

查询结果:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计
#4。查询工作与工资与’MARTIN’(马丁)完全相同的员工信息
只有一个员工叫‘MARTIN’时:
查询语句:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

查询结果:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计
至少有一个‘MARTIN’时(手动添加一个’MARTIN’:INSERT INTO emp VALUES(8888,'MARTIN','CLERK',7698,'1982-09-28',1100,1400,30);):
查询语句(方式一):
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

查询结果:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计
#5.查询佣金不为null的员工信息:
查询语句:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

查询结果:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

#6.在emp表中查询,要求查询每个员工的姓名以及他所对应的上司的名字:
查询语句:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

查询结果:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

四.外键(foreign key)
1.外键的定义:
[ constraint 约束名称 ] foreign key (作为外键的字段名) references 父表名称 (父表主键)
2.外键的作用:用来约束子表中的记录,使之与父表的记录相对应
例(超市表与员工表,其中超市表为父表,员工表为子表):
创建超市表并显示表结构(父表):
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

创建员工表并显示表结构(子表):
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计
设置外键部分SQL语句:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计
五.一对多关系表的设计,多对多关系表的设计
1.通过在表上设置外键的方式,关联父表的主键,这样父表的一条记录就可以关联子表的多条记录了。
%不再举例,上文所提到的学校表与学生表以及超市表与员工表均是一对多的关系%
2..多对多关系表的设计:
(1)通过设置中间表的方式实现“多对多”关系表的设计
(2)中间表至少有两个外键字段,分别关联于两张“多”表的主键
(3)而且这两个外键字段的组合值不能重复(一种方式是通过将这两个字段设置为联合主键,以确保他们的组合值不重复)
例(以学生以及课程为例,设计多对多关系表):
创建学生表:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

创建课程表:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

创建中间表:

Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

添加数据:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

查询:
#1.学号为2的学生选择了那些课程
查询语句:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

查询结果:
Java学习总结(十六)——MySQL数据库(2)分组,嵌套,连接查询及外键与关系表设计

【本次总结完毕】