文章目录
- 一、笛卡尔积(交叉连接) ---->cross join
- 1、概念
- 2. 语法
- 3.示例
- 二、内连接---->inner join
- 1、概念
- 2. 语法
- 3.示例
- 三、外链接---->outer join
- 1、概念
- 2. 语法
- 3.示例
- 四、联合连接---->union
- 1、概念
- 2.示例
一、笛卡尔积(交叉连接) ---->cross join
1、概念
笛卡尔积又称为“交叉连接”,将两个表中所有数据行。返回结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
(相当于合并两张表单为一张,表单中所有字段都保存展示)
例如,A={a,b},B={0,1,2} 则
AxB={<a,o>,<a,1>,<a,2>,<b,0>,<b,1>,<b,2>,}
BxA={<0,a>,<0,b>,<1,a>,<1,b>,<2,a>,<2,b>}
2. 语法
在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用’,’
SELECT * FROM table1 CROSS JOIN table2;
SELECT * FROM table1 JOIN table2;
SELECT * FROM table1 , table2;
3.示例
- 示例1、合并两个表内容(纯粹连接查询)
select * from employees,dept_emp;
二、内连接---->inner join
1、概念
在MySQL中把INNER JOIN叫做等值连接,即需要指定等值连接条件INNER JOIN被划分在一起。
(1)、必须有等值条件;
(2)、内连接可能会丢失信息;
(内连接是从结果表中删除与其他被连接表中没有匹配行的所有行)
(3)、重点:内连接,只查匹配行。
2. 语法
第一种:只使用where
SELECT * FROM table1 a,table2 b where a.id=b.id ;
第二种:join…on
SELECT * FROM table1 a JOIN table2 b on a.id=b.id;
第三种:inner join … on
SELECT * FROM table1 a inner join table2 b on a.id=b.id;
3.示例
select * from salaries a,dept_manager b where a.emp_no=b.emp_no;
select * from salaries a join dept_manager b on a.emp_no=b.emp_no;
三、外链接---->outer join
1、概念
分为左外连接( LEFT OUTER JON )和右连接(RIGHT OUTER JOIN),
即除了返回符合连接条件的结果之外,
还要返回左表(左连接)或者右表(右连接)中不符合连接条件的结果,相对应的使用NULL对应。
1、左外连接 left inner join
左边主表,左所有数据都显示,右边显示相关联 ,没有数据显示null
2、右外连接 right inner join
右边主表,右所有数据都显示,左边显示相关联 ,没有数据显示null
2. 语法
SELECT * FROM table1 a left join table2 b on a.id=b.id ;
SELECT * FROM table1 a right join table2 b on a.id=b.id;
3.示例
(1)两张表以左表为准
select * from salaries a left join dept_manager b on a.emp_no=b.emp_no;
(2)三张表
A left join B on A.id=B.id left join C on B.code=C.code
SELECT last_name, first_name, dept_name
FROM employees a LEFT JOIN dept_emp b ON a.emp_no=b.emp_no
LEFT JOIN departments c ON b.dept_no=c.dept_no;
四、联合连接---->union
1、概念
两个sql语句,中间用union连接
union all 分别查看&不去重
2.示例
select device_id, gender, age, gpa
from user_profile
where university='山东大学'
union all
select device_id, gender, age, gpa
from user_profile
where gender='male'