MySQL复合查询

目录

测试表

基本查询

多表查询

 自连接

 子查询

单行子查询

多行子查询

多列子查询

在from子句中使用子查询

 合并查询


测试表

测试表:有员工,部门,薪水等级三个表

 各个表内容:

部门表

MySQL复合查询_第1张图片

 包含部门号,部门名称,部门所在地。

员工表:

MySQL复合查询_第2张图片

 有员工编号,员工姓名,职位,雇员领导编号,入职时间,薪水,奖金,部门号。

薪水等级

MySQL复合查询_第3张图片

 等级,该等级最高与最低工资

基本查询

查询工资高于500或岗位为MANAGER的员工,同时要求员工姓名的首字母为大写的J

MySQL复合查询_第4张图片

 查询员工信息,按年薪降序显示

MySQL复合查询_第5张图片

  查询工资最高的员工的姓名和岗位

MySQL复合查询_第6张图片

 查询工资高于平均工资的员工信息

MySQL复合查询_第7张图片

 查询平均工资低于2000的部门号和它的平均工资

MySQL复合查询_第8张图片

 查询每种岗位的雇员总数和平均工资

 MySQL复合查询_第9张图片

多表查询

概念:将多张表关联起来进行查询,将多张表的表名依次放到from子句之后,MySQL将会对给定的这多张表取笛卡尔积,后面对数据进行筛选。

例如:

MySQL复合查询_第10张图片

 里面的数据有些是无关联的,需要进一步筛选。

补充: 进行笛卡尔积的多张表中可能会存在相同的列名,这时在选中列名时需要通过表名.列名的方式进行指明。

显示部门号为10的部门名、员工名和员工工资

MySQL复合查询_第11张图片

 显示各个员工的姓名、工资和工资级别

MySQL复合查询_第12张图片

 自连接

概念:若一张表中的某个字段能够将表中的多条记录关联起来,也可以对一张表进行连接查询。

显示员工SCOTT的上级领导的编号和姓名

 可以运用子查询,先把SCOTT的上级领导的编号找出,再进行编号和姓名的查找。

 自连接

 补充:由于自连接是对同一张表取笛卡尔积,因此在自连接时至少需要给一张表取别名,否则无法区分这两张表中的列。

 子查询

是指查询语句可以嵌套在其他SQL语句中,也叫嵌套查寻,也分为单行子查询、多行子查询、多列子查询,以及在from子句中使用的子查询。

单行子查询

显示SMITH同一部门的员工

MySQL复合查询_第13张图片

多行子查询

显示和10号部门的工作岗位相同的员工的名字、岗位、工资和部门号,但是不包含10号部门的员工

 1.先查询10号部门的工作岗位有哪些

2.以上面为子查询,用in关键字判断是否符合工作岗位。

MySQL复合查询_第14张图片

 显示工资比30号部门的所有员工的工资高的员工的姓名、工资和部门号

MySQL复合查询_第15张图片

 或则使用all关键字

MySQL复合查询_第16张图片

 补充:all表示所有,与所有作比较,any表示与任意一个比较。

多列子查询

显示和SMITH部门和岗位完全相同的员工,不包含SMITH本人

1.先查询SMITH部门和岗位。

2.以上面为子查询结果,进行赛选。

MySQL复合查询_第17张图片

 注意:

  • 多列子查询得到的结果是多列数据,在比较多列数据时需要将待比较的多个列用圆括号括起来。
  • 多列子查询返回的如果是多行数据,在筛选数据时也可以使用in、all和any关键字。

在from子句中使用子查询

显示每个高于自己部门平均工资的员工的姓名、部门、工资和部门的平均工资。

1.先查询所有部门的平均工资。

MySQL复合查询_第18张图片

 2.同时使用员工表和上述的查询结果进行多表查询

MySQL复合查询_第19张图片

补充:在from子句中使用子查询时,必须给子查询得到的临时表取一个别名,否则查询将会出错。 

显示每个部门工资最高的员工的姓名、工资、部门和部门的最高工资

与上面的例子类似。

MySQL复合查询_第20张图片

MySQL复合查询_第21张图片

 显示每个部门的部门名、部门编号、所在地址和人员数量

MySQL复合查询_第22张图片

 除了上述子查询+多表查询的方式外,也可以使用多表查询。

MySQL复合查询_第23张图片

 先对员工表和部门表取笛卡尔积。

在where子句中指明筛选条件为员工的部门号等于部门的编号,筛选出有意义的记录。

在order by子句中指明按照部门号(select的条件)进行分组,分别统计出每个部门的人数。

 合并查询

是指将多个查询结果进行合并,可使用的操作符有union(去重)和union all(不去重)。

MySQL复合查询_第24张图片

补充:

  • 待合并的两个查询结果的列的数量必须一致,否则无法合并。
  • 待合并的两个查询结果对应的列属性可以不一样,但不建议这样做。

你可能感兴趣的:(MySQL,mysql,数据库)