MySQL数据库---连接查询

目录

一、内连接查询

二、外连接查询

三、复合条件连接查询

总结


一、内连接查询

内连接仅仅返回两个表中满足连接条件的记录,是最常用的连接方式,为默认连接方式。

语法:

SELECT ... FROM table1 INNER JOIN table2 ON table1.column = table2.column;

  从表1中取出每一条记录,去表2中与所有的记录进行匹配,匹配必须是某个条件在表1中与表2中相同,最终才会保留结果,否则不保留。inner 关键字可省略不写;on 表示连接条件:条件字段就是代表相同的业务含义(如下面两张表中的 students.id 和 scores.student_id),大多数情况下为两张表中的主外键关系。 

关联查询思路分为三步:
1.确定所连接的表,
2.确定所要查询的字段,
3.确定连接条件与连接方式。 

例如:假设有students表(id, name)和scores表(student_id, score):

SELECT students.name, scores.score
FROM students
INNER JOIN scores ON students.id = scores.student_id;

 结果:仅返回同时存在于students和scores表中的记录。

二、外连接查询

以某张表为主,取出里面的所有记录,然后每条与另外一张表进行连接,不管能不能匹配上条件,最终都会保留。能匹配,正确保留;不能匹配,其它表的字段都置空(null),称为外连接。

 

外连接查询分为左外连接和右外连接
1.左外连接查询:在内连接的基础上,保留左表所有记录,右表未匹配部分补NULL。
2.右外连接查询:在内连接的基础上,保留右表所有记录,左表未匹配部分补NULL。

表1 left/right [outer]  join 表2 on 表1.字段=表2.字段

例如:

1.左连接:

SELECT students.name, scores.score
FROM students
LEFT JOIN scores ON students.id = scores.student_id;

结果:返回所有学生,无论是否有成绩(无成绩时score为NULL)。 

2.右连接:

SELECT students.name, scores.score
FROM students
RIGHT JOIN scores ON students.id = scores.student_id;

结果:返回所有成绩记录,无论学生是否存在(学生不存在时name为NULL)。

 

三、复合条件连接查询

在连接条件中使用多个条件(通过AND、OR组合)。
可结合过滤条件(如WHERE子句)进一步筛选结果。

例如:

1.在连接条件中使用多个条件(通过AND、OR组合)。

假设有employees表(id, name, department_id)和departments表(id, name, location):

SELECT employees.name, departments.name AS department, departments.location
FROM employees
INNER JOIN departments 
  ON employees.department_id = departments.id 
  AND departments.location = 'Beijing';

结果:返回部门位于北京的所有员工信息。 

2.可结合过滤条件(如WHERE子句)进一步筛选结果。

SELECT employees.name, departments.name AS department
FROM employees
INNER JOIN departments 
  ON employees.department_id = departments.id
WHERE employees.salary > 5000 AND departments.location = 'Shanghai';

结果:返回上海部门中工资超过 5000 的员工。 


总结

1.总结对比

连接类型

匹配逻辑

保留未匹配记录?

内连接

仅匹配条件成立的记录

左连接

保留左表全部记录

左表保留,右表补NULL

右连接

保留右表全部记录

右表保留,左表补NULL

复合条件连接

在基本连接上增加额外条件

取决于基础连接类型

2.选择原则:

仅需匹配数据:内连接。
需保留一侧数据:左 / 右连接。
需复杂条件筛选:复合条件连接。

你可能感兴趣的:(mysql,数据库)