MySQL基础加强

纲要:

    1、查询思路
    2、笛卡尔积
    3、内连接查询
    4、外连接查询
    5、子查询

MySQL 之基础操作强化之–多表查询

一:

1)思路:

    A.确定需要查询的表  select * FROM ....;
    B.查询的条件 WHERE  条件...  ---> 需要查看表结构(主外键) 大小...
    C.查询的结果 SELECT 结果...

    例:查询语法:
                select
                    列名列表
                from
                    表名列表
                where....


二:

笛卡尔积

    * 有两个集合A,B .取这两个集合的所有组成情况。
    * 要完成多表查询,需要消除无用的数据
    A.语法: 
        SELECT * FROM 表名称1,表名称2;
    B.查询出来的数据条目数:
        a.计算公式
            表名称1的条目数x表名称2的条目数 
        b.例如: 
            表1有4条,表2里面9条. 查询的结果是 4*9 = 36 条


三:

内连接查询

1)隐式内连接 语法(选择)

        A、SELECT * FROM 表1,表2 WHERE 表1.列1 = 表2.列2;  -- 标准写法
        B、SELECT * FROM 表1 别名1,表2 别名2 WHERE 别名1.列1 = 别名2.列2;  -- 别名的写法 

2)显式内连接 语法

        A、SELECT * FROM 表1 INNER JOIN 表2 ON 表1.列1 = 表2.列2; -- 完整格式
        B、SELECT * FROM 表1 JOIN 表2 ON  表1.列1 = 表2.列2; -- 省略INNER的格式

3)内连接查询的结果

        A、特点:
            两个表当中交集的部分.取数据多的。
            表1,有8条数据,6条数据在交集当中.
            表2,有20条数据,10条数据在交集当中.
            那么采用内连接查询的结果是 10 条数据。
        B、两个表内连接查询的时候,
            表1有10条数据,表2有5条数据.请问.最多有多少条数据,最少有多少条数据?
            最多10条,最少0条。
        C、内连接查询:
            从哪些表中查询数据
            条件是什么
            查询哪些字段


四:

外连接查询

1)左外连接

        a.语法格式
            SELECT * FROM 表1 LEFT OUTER JOIN 表2 ON 表1.列1 = 表2.列2; -- 完整格式
            SELECT * FROM 表1 LEFT JOIN 表2 ON  表1.列1 = 表2.列2; -- 省略OUTER的格式
        b.结果特点
            左表的全部内容+左右表的交集。(JOIN的左边就是左表,JOIN的右边就是右表) 

2)右外连接

        a.语法格式
            SELECT * FROM 表1 RIGHT OUTER JOIN 表2 ON 表1.列1 = 表2.列2; -- 完整格式
            SELECT * FROM 表1 RIGHT JOIN 表2 ON  表1.列1 = 表2.列2; -- 省略OUTER的格式
        b.结果特点
            右表的全部内容+左右表的交集。(JOIN的左边就是左表,JOIN的右边就是右表) 
    C.思考问题
        两个表左外连接查询的时候,
            表1有5条数据,表2有10条数据.请问.最多有多少条数据,最少有多少条数据?
            左表是 表1,右表是 表2
            最多14条,最少5条。

五:

子查询

1)概念

    子查询,也可以理解为"嵌套查询".一个查询语句的结果是下一个查询语句的条件.

2)子查询的分类

    A、单行单列,主要采用> < >= <= = <> 判断
        案例: 
        查询最高工资的员工信息
                原始做法:
                    SELECT MAX(gongzi) FROM yuangong;  -- 查询到最高的员工工资
                    SELECT * FROM yuangong WHERE gongzi = 查询到的结果;  -- 查询到的最高工资作为条件.再查询他信息
                子查询的情况  
                    SELECT * FROM yuangong WHERE gongzi = (SELECT MAX(gongzi) FROM yuangong);
    B、多行单列,主要采用的 IN(选项1,选项2,选项3)
        案例:
        查询财务部和市场部的员工信息
                原始做法:
                    SELECT id FROM yuangong WHERE name IN ('财务部','市场部'); -- 查询到财务部和市场部的ID
                    SELECT * FROM yuangong WHERE id = 查询到的id结果; -- 通过查询到的结果作为条件,查询满足条件的所有员工信息
                子查询的情况
                    SELECT * FROM yuangong WHERE id IN (SELECT id FROM yuangong WHERE name IN ('财务部','市场部')); 
    C、多行多列,作为虚拟表,进行的连接查询.
        案例:
        查询入职日期是2011-11-11日之后的员工信息和部门信息
                子查询的情况
                    SELECT * FROM bumen t1 ,(SELECT * FROM yuangong WHERE yuangong.join_date > '2011-11-11') t2 WHERE t1.id = t2.bumen_id;
                采用普通内连接
                    SELECT * FROM bumen t1 , yuangong t2  WHERE  t1.id = t2.bumen_id AND t2.join_date > '2011-11-11';

猜你喜欢

转载自blog.csdn.net/weixin_43095615/article/details/82532726