zoukankan      html  css  js  c++  java
  • SQL中笛卡尔积-cross join的用法

    在数学中,笛卡尔乘积是指两个集合XY的笛卡尓积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员

    假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

    MySQL中笛卡尔积相当于我们学习数学中集合的概念,数据库中运用此思想,产生了很多满足我们实际需要的SQL语句。

    语法:

    SELECT * FROM [TABLE 1] CROSS JOIN [TABLE 2]

    OR

    SELECT * FROM [TABLE 1], [TABLE 2]  //重点,平时写法要注意啊

     案例:

    数据库的数据有:

    TEST_A表:                TEST_B表

     

    select * from TEST_A a  CROSS JOIN  TEST_B b;

    或者

    select * from TEST_A a ,TEST_B b;

     

    两表直接笛卡尔积的结果数量是两表的数据量相乘(列相加,行相乘)

    带where条件id相等的笛卡尔积:

    select * from TEST_A a cross join TEST_B b where a.ID = b.ID;

     

    inner join:

    select * from TEST_A a inner join TEST_B b on a.ID = b.ID; 

     带where条件id相等的笛卡尔积和inner join结果相同,但是inner join效率快一点

    left join:

    select * from TEST_A a left join TEST_B b on a.ID = b.ID; 

    right join:

    select * from TEST_A a right join TEST_B b on a.ID = b.ID; 

    left join:TEST_A表的ID为空时拼接TEST_B表的内容为空,right join则相反

    full join:

     

    select * from TEST_A a full join TEST_B b on a.ID = b.ID;

    full join:等于left join和right join的并集

  • 相关阅读:
    古典问题-兔子生兔子
    order by 执行计划索引使用不同的坑
    MybatisPlus 通用枚举无法正确取值
    Arrays.asList 使用细节
    java 生成pdf文件(易上手版)
    Mysql-tinyint使用之实际采坑记
    mysql
    mysql -- froce index 使用
    java基础全套
    javaweb之servlet 全解
  • 原文地址:https://www.cnblogs.com/Williamls/p/10544986.html
Copyright © 2011-2022 走看看