MySql从入门到入坟

MySQL-7:多表查询

2019-04-03  本文已影响0人  Deque

今日内容

1.多表查询

2.事务

3.DCL

多表查询:

    select 
        列名列表
    from
        表名列表
    where....
-- 查询员工表的名称,性别。部门表的名称

-- 正规写法 方便添加注释(符合企业sql规范)
SELECT
   t1.name, -- 员工表的姓名
   t1.gender, -- 员工表的性别
   t2.name -- 部门表的名称
FROM
   emp t1,
   dept t2
WHERE
   t1.dept_id=t2.id;

(2)显式内链接

-- 查询员工表的名称,性别。部门表的名称(使用显式内链接) 
SELECT * FROM emp [INNER] JOIN dept ON emp.dept_id = dept.id;

-- INNER 是可选操作,可以直接使用 JOIN ON 如下:
SELECT * FROM emp JOIN dept ON emp.dept_id = dept.id;

(3)内链接查询注意事项:

2.外链接查询:
(1)左外连接:

 -- 左外连接 (LEFT JOIN ON)
 SELECT
    t1.*,
    t2.name
 FROM
    emp t1
LEFT JOIN
    dept t2
 ON
    t1.dept_id = t2.id;

(2)右外连接:

 -- 右外连接 (RIGHT JOIN ON)
SELECT
    t1.*,
    t2.name
FROM
    dept t2
RIGHT JOIN
    emp t1
 ON
    t1.dept_id = t2.id;

3.子查询:

     -- 子查询
     -- 查询工资最高的员工的信息

     -- 1、查询最高的工资是多少?
     SELECT MAX(salary) FROM emp;

    -- 查询的结果是 9000

     -- 2.查询员工信息,并且工资等于最高的
     SELECT * FROM emp WHERE emp.salary=9000;
     
     -- 一条SQL就能完成
    SELECT * FROM emp WHERE emp.salary=(
        SELECT MAX(salary) FROM emp
        );

-- 查询员工工资小于平均工资的人
SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);

2、子查询的结果是多行单列的:

-- 查询‘财务部’和'市场部'所有的员工信息
-- 1、先查询财务部的id
SELECT id FROM dept WHERE name='财务部' OR name='市场部';
-- 2、再根据ID查询信息
SELECT * FROM emp WHERE dept_id = 3 OR dept_id=2;

-- 其中第二条语句可以改写成如下:(相当与上面这条 )
SELECT * FROM emp WHERE dept_id IN(3,2);

-- 子查询
SELECT * FROM emp WHERE dept_id IN(SELECT id FROM dept WHERE name='财务部' OR name='市场部');

3、子查询的结果是多行多列的:

-- 多行多列
-- 例:查询员工入职日期是2015年-11-11之后的员工信息和部门信息(子查询)
-- 括号里的叫做虚拟表
SELECT * FROM dept t1,(SELECT * FROM emp WHERE emp.join_date > '2015-11-11') t2
WHERE t1.id = t2.dept_id;

-- 例:查询员工入职日期是2015年-11-11之后的员工信息和部门信息(普通内链接查询)
SELECT * FROM emp t1, dept t2 
WHERE t1.dept_id = t2.id AND t1.join_date > '2015-11-11';

事务

DCL

上一篇下一篇

猜你喜欢

热点阅读