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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习总结(十六)——MySQL数据库(中)分组,嵌套,连接查询及外键与关系表设计相关的知识,希望对你有一定的参考价值。

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

技术分享图片

(2)插入记录

技术分享图片

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

技术分享图片

查询结果:
技术分享图片
#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)先创建表
创建学校表(父表)
技术分享图片
创建学生表(子表)

技术分享图片

(2)添加数据:
技术分享图片

技术分享图片
(3)查询学生的姓名,成绩与所在的学校的历史
等值连接:
技术分享图片
查询结果:
技术分享图片
内连接:
技术分享图片

查询结果:
技术分享图片

(4)使用左外连接查询学生表与学校表的相关记录,学校为左表。
技术分享图片

查询结果:
技术分享图片

(5)使用右外连接查询学生表说学校表的相关记录,学校表为右表
技术分享图片

查询结果:

技术分享图片

三.子查询(嵌套查询)
1.子查询是指在外部查询语句中嵌套着一个内部查询(子查询),子查询的查询结果一般是作为外部查询的条件,子查询要用括号括起来。
2.子查询常用的关键字:
in:判断某个(些)字段值是否在指定的子查询结果集中
all:判断某个字段值是否能满足指定操作符对子查询结果集所有记录的筛选
any:判断某个字段值是否满足指定操作符对子查询结果集中的任何一个值
例:(查询案例)
(1)建表
技术分享图片

(2)添加数据

技术分享图片

(3)查询
#1.查询与SCOTT同一部门员工
如果只有一个SCOTT:
查询语句:
技术分享图片

查询结果:
技术分享图片
如果至少一个SCOTT(向表中添加在加入一SCOTT:INSERT INTO emp VALUES(9527,‘SCOTT‘,‘ANALYST‘,7566,‘1987-05-19‘,1000,NULL,10);):
查询语句:
技术分享图片

查询结果:
技术分享图片
#2.工资高于JONES的员工
如果只有一个JONES:
查询语句:
技术分享图片

查询结果:
技术分享图片
如果至少一个JONES(添加一个JONES:INSERT INTO emp VALUES(9999,‘JONES‘,‘MANAGER‘,7839,‘1981-04-02‘,2000,NULL,20);):
查询语句:

技术分享图片
查询结果:
技术分享图片
#3.工资高于30号部门所有员工的员工信息
方式一:
技术分享图片

查询结果:
技术分享图片
方式二:
技术分享图片

查询结果:
技术分享图片
方式三:
技术分享图片

查询结果:
技术分享图片
#4。查询工作与工资与’MARTIN’(马丁)完全相同的员工信息
只有一个员工叫‘MARTIN’时:
查询语句:
技术分享图片

查询结果:
技术分享图片
至少有一个‘MARTIN’时(手动添加一个’MARTIN’:INSERT INTO emp VALUES(8888,‘MARTIN‘,‘CLERK‘,7698,‘1982-09-28‘,1100,1400,30);):
查询语句(方式一):
技术分享图片

查询结果:
技术分享图片
#5.查询佣金不为null的员工信息:
查询语句:
技术分享图片

查询结果:
技术分享图片

#6.在emp表中查询,要求查询每个员工的姓名以及他所对应的上司的名字:
查询语句:
技术分享图片

查询结果:
技术分享图片

四.外键(foreign key)
1.外键的定义:
[ constraint 约束名称 ] foreign key (作为外键的字段名) references 父表名称 (父表主键)
2.外键的作用:用来约束子表中的记录,使之与父表的记录相对应
例(超市表与员工表,其中超市表为父表,员工表为子表):
创建超市表并显示表结构(父表):
技术分享图片

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

创建课程表:
技术分享图片

创建中间表:

技术分享图片

添加数据:
技术分享图片

查询:
#1.学号为2的学生选择了那些课程
查询语句:
技术分享图片

查询结果:
技术分享图片

【本次总结完毕】

以上是关于Java学习总结(十六)——MySQL数据库(中)分组,嵌套,连接查询及外键与关系表设计的主要内容,如果未能解决你的问题,请参考以下文章

201771010134杨其菊《面向对象程序设计(java)》第十六周学习总结

Java框架spring Boot学习笔记(十六):操作MySQL数据库

201771010135 杨蓉庆《面对对象程序设计(java)》第十六周学习总结

张季跃 201771010139《面向对象程序设计(java)》第十六周学习总结

李晓菁201771010114《面向对象程序设计Java》第十六周学习总结

冯志霞201771010107《面向对象程序设计(java)》第十六周学习总结