开发者

SQL join中on和where的区别解析

目录
  • 0.结论
  • 1.数据准备
  • 2.测试
    • 2.1.普通
      • 2.1.1.class单表
      • 2.1.2.student单表
      • 2.1.3.笛卡尔积
      • 2.1.4. 内连接
      • 2.2.5.普通外连
    • 2.2.重点来啦-外连接
      • 2.2.1.一
      • 2.2.2.二
      • 2.2.3.三
      • 2.2.4.四
  • 3.参考资料

    0.结论

    • 两个表在,joandroidin时,首先做一个笛卡尔积,on后面的条件是对这个笛卡尔积做一个过滤形成一张临时表,如果没有where就直接返回结果,如果有where就对上一步的临时表再进行过滤。
      • 先on,再join,再where
      • 在使用left join时,on和where条件的区别如下:
    • 1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
    • 2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉

    1.数据准备

    DROP TABLE IF EXISTS `class`;
    CREATE TABLE `class`
    (
        `c_id`   int          DEFAULT NULL COMMENT '班级ID',
        `c_name` varchar(50) DEFAULT NULL COMMENT '班级名'
    );
    DROP TABLE IF EXISTS `student`;
    CREATE TABLE `student`
    (
        `s_id`   int          DEFAULT NULL COMMENT '学生ID'android,
        `s_name` varchar(50) DEFAULT NULL COMMENT '学生名',
        `c_id`   int          DEFAULTandroid NULL COMMENT '班级ID'
    );
    INSERT INTO `class` (`c_id`, `c_name`)
    VALUES (1, '一班'),
           (2, '二班'),
           (3, '三班');
    INSERT INTO `student` (`s_id`, `s_name`, `c_id`)
    VALUES (1, '张三', 1),
           (2, '李四', 2),
           (3, '王五', 4);

    2.测试

    -- 单表
    select * from class c;
    select * from student s;
    -- 笛卡尔积
    select * from class c inner join student s 										order by c.c_id, s.s_id;
    -- 内连
    select * from class c inner join student s on c.c_id = s.c_id order by c.c_id, s.s_id;
    -- 左外连(先on,再join,再where)
    select * from class c left  join student s on c.c_id = s.c_id 									order by c.c_id, s.s_id;
    select * from classhttp://www.devze.com c left  join student s on c.c_id = s.c_id and   c.c_id <> 2	order by c.c_id, s.s_id;
    select * from class c left  join student s on c.c_id = s.c_id where c.c_id <> 2	order by c.c_id, s.s_id;
    select * from class c left  join student s on c.c_id = s.c_id and编程客栈   s.c_id <> 2	order by c.c_id, s.s_id;
    select * from class c left  join student s on c.c_id = s.c_id where s.c_id <> 2	order by c.c_id, s.s_id;

    2.1.普通

    2.1.1.class单表

    SQL join中on和where的区别解析

    2.1.2.student单表

    SQL join中on和where的区别解析

    2.1.3.笛卡尔积

    SQL join中on和where的区别解析

    2.1.4. 内连接

    SQL join中on和where的区别解析

    2.2.5.普通外连

    SQL join中on和where的区别解析

    2.2.重点来啦-外连接

    2.2.1.一

    SQL join中on和where的区别解析

    2.2.2.二

    SQL join中on和where的区别解析

    2.2.3.三

    SQL join中on和where的区别解析

    2.2.4.四

    SQL join中on和where的区别解析

    3.参考资料

    SQL语句中LEFT JOIN的ON和WHERE有什么区别

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新数据库

    数据库排行榜