背景引入
Mysql
中有许多JOIN
操作,JOIN操作的基本作用就是将两张及以上的表进行连接并返回结果集,今天学习到的CROSS JOIN
的作用呢,就是返回两个表的笛卡尔积结果,诶,那么先解释是什么是笛卡尔积。
笛卡尔积
使用A×B来表示集合A与集合B的笛卡尔积操作,其符号化表达:A×B={(x,y)|x∈A^y∈B},也就是将两个集合中的元素一一组合并返回组合结果。
假设两个集合A、B,A={‘张三’,‘李四’,‘王五’},B={‘语文成绩’,’数学成绩’}
使用A×B来表示集合A与集合B的笛卡尔积操作,那么两个集合进行笛卡尔积后的结果是什么样的呢?
A×B={(‘张三’,’语文成绩’),(‘张三’,’数学成绩’),(‘李四’,’语文成绩’),(‘李四’,’数学成绩’),(‘王五’,’语文成绩’),(‘王五’,’数学成绩’)}
mysql中使用cross join实现两表笛卡尔积
2024-9-2更新
今天在做题的时候,看题解的时候突然发现,原来Mysql默认select xx from table1,table2
就是返回table1和table2 的笛卡尔积结果
现在有两张表
Students table: +------------+--------------+ | student_id | student_name | +------------+--------------+ | 1 | Alice | | 2 | Bob | | 13 | John | | 6 | Alex | +------------+--------------+ Subjects table: +--------------+ | subject_name | +--------------+ | Math | | Physics | | Programming | +--------------+
使用以下SQL就可以将两表进行笛卡尔积
select t1.student_id,t1.student_name,t2.subject_name
from Students t1 cross join Subjects t2
select t1.student_id,t1.student_name,t2.subject_name
from Students t1,Subject t2
查看结果:
| student_id | student_name | subject_name |
| ---------- | ------------ | ------------ |
| 1 | Alice | Programming |
| 1 | Alice | Physics |
| 1 | Alice | Math |
| 2 | Bob | Programming |
| 2 | Bob | Physics |
| 2 | Bob | Math |
| 13 | John | Programming |
| 13 | John | Physics |
| 13 | John | Math |
| 6 | Alex | Programming |
| 6 | Alex | Physics |
| 6 | Alex | Math |