zoukankan      html  css  js  c++  java
  • MySQL内连接、外连接、交叉连接

    外连接:

    左连接:left join 或 left outer join

    以左边的表为基准,如果左表有数据,而右表没有数据,左表的数据正常显示,右表数据显示为空。


    创建user表,用于记录用户

    user_idusername
    1 王一
    2 李二
    3 张三

    创建log表,用于记录用户的消费情况

    user_idlogging
    1 100
    2 200

    分析用户的消费情况,每一个用户不一定都有消费,就要用到左连接,把每个用户的消费情况查出来,包括那些没有消费的用户。没有消费的显示为NULL。

    select * from user left outer join log on user.user_id=log.user_id;
    select * from user left join log on user.user_id=log.user_id;

    查询结果:

    user_idusernameuser_id1logging
    1 王一 1 100
    2 李二 2 200
    3 张三 NULL NULL

    右连接:right join 或 right outer join

    以右边的表为基准,如果右表有数据,而左表没有数据,右表的数据正常显示,左表显示为空,定义完全和左连接相反。

    select * from user right join log on user.user_id=log.user_id;
    select * from user right outer join log on user.user_id=log.user_id;

    查询结果:

    user_idusernameuser_id1logging
    1 王一 1 100
    2 李二 2 200

    右表中只有两条数据对应着左表中的两条数据,因为是右连接,以右面的为基础,右面没有的,左面有的就会被舍弃。


    全连接:

    注:MySQL并不支持full join,不过可以通过union 关键字来合并 left join 与 right join来模拟full join.

    创建course表:

    idcourse_namestu_id
    1 数学 1
    2 语文 2
    3 英语 4
    4 生物 3

    创建student表:

    stu_idstu_name
    1 王一
    2 李二
    3 张三
    5 李四

    执行下面语句:

    select * from student left join course on student.stu_id=course.stu_id
    union 
    select * from student right join course on student.stu_id=course.stu_id;

    查询结果:

    stu_idstu_nameidcourse_namestu_id1
    1 王一 1 数学 1
    2 李二 2 语文 2
    3 张三 4 生物 3
    5 李四 NULL NULL NULL
    NULL NULL 3 英语 4

    交叉连接 cross join:

    交叉连接得到的是两个表的乘积,也叫笛卡儿积

    还是上面的表执行sql语句:

    select * from student cross join course;

    得到结果如下:

    stu_idstu_nameidcourse_namestu_id1
    1 王一 1 数学 1
    2 李二 1 数学 1
    3 张三 1 数学 1
    5 李四 1 数学 1
    1 王一 2 语文 2
    2 李二 2 语文 2
    3 张三 2 语文 2
    5 李四 2 语文 2
    1 王一 3 英语 4
    2 李二 3 英语 4
    3 张三 3 英语 4
    5 李四 3 英语 4
    1 王一 4 生物 3
    2 李二 4 生物 3
    3 张三 4 生物 3
    5 李四 4 生物 3

    注:如果不写连接条件,默认也是得到表的笛卡儿积,下面的sql语句中两个表只用了,隔开,得到的结果和上面的一样

    select * from student,course;

    内连接(等值连接): inner join ,=,>=,<=,<,>

    注意内连接不分左表和右表,只是把两个表相对应的数据查出来,自动忽略不对应的数据。

    user表,用于记录用户

    user_idusername
    1 王一
    2 李二
    3 张三

    log表,用于记录用户的消费情况

    user_idlogging
    1 100
    2 200

    执行下面的语句

    select * from user inner join log on user.user_id=log.user_id;
    select * from user,log where user.user_id=log.user_id;

    查询结果:

    user_idusernameuser_id1logging
    1 王一 1 100
    2 李二 2 200
  • 相关阅读:
    Java+7入门经典 -1 简介
    优化算法动画演示Alec Radford's animations for optimization algorithms
    如何写科技论文How to write a technical paper
    开始学习深度学习和循环神经网络Some starting points for deep learning and RNNs
    用500行Julia代码开始深度学习之旅 Beginning deep learning with 500 lines of Julia
    用10张图来看机器学习Machine learning in 10 pictures
    ICLR 2013 International Conference on Learning Representations深度学习论文papers
    ICLR 2014 International Conference on Learning Representations深度学习论文papers
    卷积神经网络CNN(Convolutional Neural Networks)没有原理只有实现
    卷积神经网络Convolutional Neural Networks
  • 原文地址:https://www.cnblogs.com/zquan/p/9722473.html
Copyright © 2011-2022 走看看