SQL数据处理之多表查询

多表查询 :当我们查询的多个字段不在同一张表中时就需要用到多表查询

    连接条件:
        自连接 vs 非自连接
        等值连接 vs 非等值连接
        内连接 vs 外连接
    语法:sql92语法和sql99语法(主要使用sql99语法)
        sql92语法
            非自连接:连接的表不是同一张表
            等值连接: 连接条件使用的是等号
            内连接: 只查询两张表中匹配的内容
            需求:查询员工的姓名和员工所在部门的名称
            SELECT first_name,department_name
            FROM employees JOIN departments
            ON employees.department_id=departments.department_id;


            非等值连接
            需求:查询员工的姓名,薪水及薪水的等级
            SELECT e.`first_name`,e.`salary`,j.`GRADE`
            FROM employees e JOIN job_grades j
            on e.`salary` >= j.`LOWEST_SAL` and e.`salary` <= j.`HIGHEST_SAL`;
            ON e.`salary` BETWEEN j.`LOWEST_SAL` AND j.`HIGHEST_SAL`;


            自连接:
            需求:查询员的姓名及管理者的姓名
            SELECT e1.`first_name` 员工的姓名,e2.`first_name` 管理者的姓名
            FROM employees e1 JOIN employees e2 e1:员工表  e2:管理者表
            ON e1.`manager_id`=e2.`employee_id`;


            左外连接:查找所有的员工及员工所在的部门名称
            SELECT e.`first_name`,d.`department_name`
            FROM employees e LEFT JOIN departments d
            ON e.`department_id`=d.`department_id`;

            右外连接: 查找所有的部门及部门中所有的员工
            SELECT e.`first_name`,d.`department_name`
            FROM employees e RIGHT JOIN  departments d
            ON e.`department_id` = d.`department_id`;

            满外连接:查找所有的员工及所有的部门
        
        mysql不支持。
        SELECT 字段名1,字段名2,...
        FROM 表名1 full JOIN  表名2
        ON 连接条件;


        untion:将两张表的结果进行合并(去重)
        untion all : 将两张表的结果进行合并(不去重)
        左外连接
        union
        右外连接
        
            SELECT e.`first_name`,d.`department_name`
            FROM employees e LEFT JOIN departments d
            ON e.`department_id`=d.`department_id`
            UNION
            SELECT e.`first_name`,d.`department_name`
            FROM employees e RIGHT JOIN  departments d
            ON e.`department_id` = d.`department_id`;

    补充
        飘号 : ``
        作用 :用来区分关键字和字段名

你可能感兴趣的:(多表查询,SQL数据处理,sql,数据库)