• 10.2


    今天学了一些多表查询的操作:* 多表查询的分类:
            1. 内连接查询:
                1. 隐式内连接:使用where条件消除无用数据
                    * 例子:
                    -- 查询所有员工信息和对应的部门信息

                    SELECT * FROM emp,dept WHERE emp.`dept_id` = dept.`id`;
                    
                    -- 查询员工表的名称,性别。部门表的名称
                    SELECT emp.name,emp.gender,dept.name 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` = t2.`id`;

        
                2. 显式内连接:
                    * 语法: select 字段列表 from 表名1 [inner] join 表名2 on 条件
                    * 例如:
                        * SELECT * FROM emp INNER JOIN dept ON emp.`dept_id` = dept.`id`;    
                        * SELECT * FROM emp JOIN dept ON emp.`dept_id` = dept.`id`;    

                3. 内连接查询:
                    1. 从哪些表中查询数据
                    2. 条件是什么
                    3. 查询哪些字段
            2. 外链接查询:
                1. 左外连接:
                    * 语法: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`;
                2. 右外连接:
                    * 语法:select 字段列表 from 表1 right [outer] join 表2 on 条件;
                    * 查询的是右表所有数据以及其交集部分。
                    * 例子:
                        SELECT     * FROM dept t2 RIGHT JOIN emp t1 ON t1.`dept_id` = t2.`id`;
            3. 子查询:
                * 概念:查询中嵌套查询,称嵌套查询为子查询。
                    -- 查询工资最高的员工信息
                    -- 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);

                * 子查询不同情况
                    1. 子查询的结果是单行单列的:
                        * 子查询可以作为条件,使用运算符去判断。 运算符: > >= < <= =
                        *
                        -- 查询员工工资小于平均工资的人
                        SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);
                    2. 子查询的结果是多行单列的:
                        * 子查询可以作为条件,使用运算符in来判断
                        -- 查询'财务部'和'市场部'所有的员工信息
                        SELECT id FROM dept WHERE NAME = '财务部' OR NAME = '市场部';
                        SELECT * FROM emp WHERE dept_id = 3 OR dept_id = 2;
                        -- 子查询
                        SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME = '财务部' OR NAME = '市场部');

                    3. 子查询的结果是多行多列的:
                        * 子查询可以作为一张虚拟表参与查询
                        -- 查询员工入职日期是2011-11-11日之后的员工信息和部门信息
                        -- 子查询
                        SELECT * FROM dept t1 ,(SELECT * FROM emp WHERE emp.`join_date` > '2011-11-11') t2
                        WHERE t1.id = t2.dept_id;
                        
                        -- 普通内连接
                        SELECT * FROM emp t1,dept t2 WHERE t1.`dept_id` = t2.`id` AND t1.`join_date` >  '2011-11-11'

  • 相关阅读:
    494. Target Sum 添加标点符号求和
    636. Exclusive Time of Functions 进程的执行时间
    714. Best Time to Buy and Sell Stock with Transaction Fee有交易费的买卖股票
    377. Combination Sum IV 返回符合目标和的组数
    325. Maximum Size Subarray Sum Equals k 和等于k的最长子数组
    275. H-Index II 递增排序后的论文引用量
    274. H-Index论文引用量
    RabbitMQ学习之HelloWorld(1)
    java之struts2的数据处理
    java之struts2的action的创建方式
  • 原文地址:https://www.cnblogs.com/zhaoyids/p/14117489.html
Copyright © 2020-2023  润新知