mySQL数据库子查询总结及多表查询规律

什么是多表查询?同时查询多张表获取到需要的数据 什么是子查询?一条SELECT语句结果作为另一条SELECT语法一部分(比如是查询条件,查询结果,表)

子查询总结:

子查询需要放在()中
子查询结果的三种情况:

 1. 子查询的结果是一个值的时候  
 2. 子查询结果是单例多行的时候  
 3. 子查询的结果是多行多列

说明:子查询结果只要是单列,肯定在WHERE后面作为条件。子查询结果只要是多列,肯定在FROM后面作为表。

1.子查询结果只要是单列,肯定在WHERE后面作为条件

子查询结果只要是单列,肯定在WHERE后面作为条件
SELECT 查询字段 FROM 表 WHERE 字段=(子查询);

2.子查询结果是单列多行,结果集类似于一个数组,父查询使用IN运算符

`SELECT 查询字段 FROM 表 WHERE 字段 IN (子查询);`

3.子查询结果只要是多列,肯定在FROM后面作为表

SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件;

多表查询规律

不管我们查询几张表,表连接查询会产出笛卡尔积,我们需要消除笛卡尔积,拿到正确的数据。
我们需要找到表与表之间通过哪个字段关联起来的(通常是外键=主键)
消除笛卡尔积规律:2张表需要1个条件,3张表需要2个条件,4张表需要3个条件。(条件数量=表的数量-1)
每张表都要参与进来多表连接查询步骤:

1. 确定要查询哪些表
2. 确定表连接条件
3. 确定查询字段

数据准备

在这里插入图片描述

演示:
查询所有员工信息。显示员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级

  1. 确定要查询哪些表,emp e, job j, dept d, salarygrade s
 SELECT * FROM emp e INNER JOIN job j INNER JOIN dept d INNER JOIN salarygrade s;
  1. 确定表连接条件 e.job_id=j.id and e.dept_id=d.id and e.salary between s.losalary and hisalary
SELECT * FROM emp e INNER JOIN job j INNER JOIN dept d INNER JOIN salarygrade s ON e.job_id=j.id AND e.dept_id=d.id AND e.salary BETWEEN s.losalary AND hisalary;
  1. 确定查询字段:员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级
   SELECT e.`ename`, e.`salary`, j.`jname`, j.`description`, d.`dname`, d.`loc`, s.`grade` FROM emp e INNER JOIN job j INNER JOIN dept d INNER JOIN salarygrade s ON e.job_id=j.id AND e.dept_id=d.id AND e.salary BETWEEN s.losalary AND hisalary;

在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值