MySQL查询进阶操作从函数到表连接的使用


当前第2页 返回上一页

嵌套的子SQL只会返回一行一列的结果

-- 查询员工id为100的员工的部门id
select department_id from employees where employee_id=100

-- 子查询::查询员工id为100的员工所在的部门信息
select * from departments 
where department_id=(select department_id from employees where employee_id=100)
  • 优先执行内层SQL,再执行外层SQL
  • 子SQL需写入小括号

1.2、多值子查询 嵌套的子SQL会返回多个结果

--查询firstname中包含s的员工所在的部门信息
select * from departments 
where department_id in(select department_id from employees where first_name like '%s%')

2、from子查询

将子SQL的查询结果临时看做一张表进行后续操作

-- 获取薪资最高的前十个员工的平均薪资
-- 先获取薪资最高的前十名员工的薪资
select salary from employees ORDER BY salary desc LIMIT 10
-- 子查询:再根据子SQL的查询结果临时通过别名构建一张数据表进行查询
select avg(salary) from (select salary from employees ORDER BY salary desc LIMIT 10) as e

五、表连接

  • 当查询结果需要从多张表中获取时,则需要将多张表连接起来进行查新操作

表连接的前提:

  • 多张表之间必须存在关联关系(外键)
  • 外键通常连接的是另一张表的主键
  • 在进行表连接时作为连接条件使用

1、内连接

语法:

select 表1.列名,表2.列名,... 
from 表1 inner join 表2
on 连接条件
  • 特点:对两张表同时进行约束,只有当所有表都符合连接条件,才会显示信息
  • 使用:inner可省

2、(左)外连接

语法:

select 表1.列名,表2.列名,... 
from 表1(左表) left outer join 表2(右表)
on 连接条件
  • 特点:只对右表做约束,左表中的数据都会显示,右表中只有符合连接条件的才会显示
  • 使用:outer可省
  • 左外连接和右外连接就是leftright的不同,位置不同,通常用左外连接
  • 使用:
-- 查询所有的员工信息及符合连接条件的部门信息
select e.*,d.*
from employees e LEFT JOIN departments d
ON e.department_id=d.department_id

全外连接:

  • 将两个查询结果进行合并显示

查询语句1 union 查询语句2

  • 使用:
-- 内连接
select e.*,d.*  
from employees e inner join departments d
on  e.department_id=d.department_id

union -- 对内连接和左连接的查询结果进行合并

-- 左连接
select e.*,d.*
from employees e LEFT JOIN departments d
ON e.department_id=d.department_id
  • union会对合并结果进行去重
  • union all不会对结果去重
  • 特点:合并双方都不做约束
  • 合并双方的查询结果字段的个数、顺序必须一致

实际开发中,使用频率较高的是内连接和左外连接

3、自连接

  • 概念:是特殊的表连接,参与连接的是同一张表

具体使用:

表中的某两个字段之间存在关联关系

-- 查询:员工id、员工姓名-firstname、直接领导的id、直接领导的姓名
select e1.employee_id 员工id,e1.first_name 员工姓名,e2.employee_id 领导id,e2.first_name 领导姓名
from employees e1 LEFT JOIN employees e2-- e1代表获取员工信息的表,e2代表获取领导信息的表
ON e1.manager_id=e2.employee_id -- 把两个有关联关系的字段作为连接条件

判断同一字段,作为连接条件

-- 查询工资相同的员工信息
select e1.employee_id 员工1的id,e1.salary 员工1的工资,e2.employee_id 员工2的id,e2.salary 员工2的工资
from employees e1 LEFT JOIN employees e2
on e1.salary=e2.salary -- 连接条件
where e1.employee_id<e2.employee_id -- 防止判断的双方是同一个人,并去重

到此这篇关于MySQL查询进阶从函数到表连接的使用的文章就介绍到这了,更多相关MySQL函数表连接内容请搜索

更多相关Mysql内容来自木庄网络博客


标签:Mysql

返回前面的内容

相关阅读 >>

介绍 mysql 中的四种引擎

mysql 无法成功启动服务怎么办

mysql 的10大经典优化案例场景实战

mysql数据库之信息函数与加密函数

mysql中如何获取当前日期?日期函数有哪些?

mysql连接时出现1449与1045异常解决办法详解

mysql 8.0 可以操作 json 了

mysql数据库update语句使用详解

mysql 存储引擎和索引相关知识总结

认识 mysql物理文件

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...