MySQL:多表查询和子查询

多表查询的分类

        内连接查询

        外连接查询

内连接查询

        隐式内连接:使用where条件消除无用数据

-- 查询所有员工信息和对应的部门信息
-- 使用两张表中相对应一致字段来过滤无用信息
SELECT 
	*
FROM 
     emp,dept
WHERE
     emp.`dept_id` = dept.`id`;

-- 查询员工表的名称、性别。部门表的名称。
SELECT 
     t1.`name`,t1.`gender`,t2.`name`
FROM 
     emp t1,
     dept t2
WHERE
     t1.`dept_id`=t1.`id`;

        显示内连接

语法:select
          字段列表
      from
          表名1 [inner] join 表名2
      on
            条件;

 

-- 查询所有员工信息和对应的部门信息(显式内连接)
SELECT	
	*
FROM
    emp INNER JOIN dept
ON
    emp.`dept_id` = dept.`id`;
    
-- 查询员工表的名称、性别。部门表的名称。(显式内连接)
SELECT
     emp.`name`,emp.`gender`,dept.`name`
FROM
    emp JOIN dept
ON
emp.`dept_id`= dept.`id`;

        内连接查询总结:

                从哪些儿表中查询数据

                条件是什么

                查询哪些字段

 外连接查询

        左外链接

select 
    字段列表 
from 
    表1 left [outer] join表2 
on 
    条件;

-- 查询所有员工信息,如果员工有部门,则查询部门名称,如果没有部门,则不显示部门名称(左外连接)。
SELECT
     t1.*,t2.`name`
FROM
    emp t1 LEFT JOIN dept t2
ON
   t1.`dept_id` = t2.`id`; 

                左外连接:查询左表所有的数据以及右表的交集部分

        

        右外连接

select 
    字段列表 
from 
    表1 right [outer] join表2 
on 
    条件;

                右外连接:查询右表所有数据以及左表的交集部分

子查询

        概念:查询中嵌套查询,称嵌套的查询为子查询, 且必须始终出现在圆括号内。

select         -- 外层查询
        字段列表
from    
        表名列表
where
        (查询子句); -- 子查询,内层查询
-- 查询员工表中,工资最高的员工信息
-- 1)查询最高的工资是多少:9000
select max(salary) from emp;

-- 2)查询员工信息,并且工资等于9000的
select * from emp where emp.`salary`=9000;

-- 一条sql完成这个操作。子查询
select * from emp where emp.`salary`= (SELECT MAX(salary) FROM emp);

结论:内层查询的结果,作为外层查询的条件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值