MySQL 连接查询的原理和应用连接查询的原理和应用
概述概述
MySQL最强大的功能之一就是能在数据检索的执行中连接(join)表。大部分的单表数据查询并不能满足我们的需求,这时候我
们就需要连接一个或者多个表,并通过一些条件过滤筛选出我们需要的数据。
了解MySQL连接查询之前我们先来理解下笛卡尔积的原理。
数据准备数据准备
依旧使用上节的表数据(包含classes 班级表和students 学生表):
mysql> select * from classes;
+---------+-----------+
| classid | classname |
+---------+-----------+
| 1 | 初三一班 |
| 2 | 初三二班 |
| 3 | 初三三班 |
| 4 | 初三四班 |
+---------+-----------+
4 rows in set
mysql> select * from students;
+-----------+-------------+-------+---------+
| studentid | studentname | score | classid |
+-----------+-------------+-------+---------+
| 1 | brand | 97.5 | 1 |
| 2 | helen | 96.5 | 1 |
| 3 | lyn | 96 | 1 |
| 4 | sol | 97 | 1 |
| 7 | b1 | 81 | 2 |
| 8 | b2 | 82 | 2 |
| 13 | c1 | 71 | 3 |
| 14 | c2 | 72.5 | 3 |
| 19 | lala | 51 | 0 |
+-----------+-------------+-------+---------+
9 rows in set
笛卡尔积笛卡尔积
笛卡尔积:也就是笛卡尔乘积,假设两个集合A和B,笛卡尔积表示A集合中的元素和B集合中的元素任意相互关联产生的所有可能
的结果。
比如A中有m个元素,B中有n个元素,A、B笛卡尔积产生的结果有m*n个结果,相当于循环遍历两个集合中的元素,任意组合。
笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join)。所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一
个概念,表示两个表中的每一行数据任意组合。
所以上面的表就是 4(班级表)* 9(学生表) = 36条数据;
笛卡尔积语法格式:
select cname1,cname2,... from tname1,tname2,...;
or
select cname from tname1 join tname2 [join tname...];
图例表示: