等值连接和非等值连接

2023-05-10 09:54:51 浏览数 (1)

一、等值连接

等值连接是指通过使用相等运算符将两个表中相同的列进行比较,从而获得匹配行的过程。等值连接可以使用INNER JOIN关键字进行操作,其语法如下:

代码语言:javascript复制
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;

其中,column_name(s)指定要返回的列的名称,table1和table2指定要连接的两个表的名称,INNER JOIN关键字指定要进行的连接操作,ON子句指定连接条件。等值连接返回两个表中共有的数据。

以下是一个使用等值连接的示例:

假设我们有两个表students和scores,它们分别存储了学生和成绩的信息。students表包含id和name两个列,scores表包含id、student_id和score三个列。现在,我们想查询每个学生的姓名和成绩。

我们可以使用如下语句进行查询:

代码语言:javascript复制
SELECT students.name, scores.score
FROM students
INNER JOIN scores
ON students.id = scores.student_id;

执行结果如下:

name

score

Alice

80

Alice

120

Bob

60

Bob

90

Charlie

100

在这个查询中,我们使用了INNER JOIN关键字将students表和scores表连接起来,并使用ON子句指定连接条件为students.id = scores.student_id。这个查询将返回所有在students表和scores表中都存在的学生姓名和成绩。

二、非等值连接

非等值连接可以使用INNER JOIN关键字进行操作,其语法与等值连接类似,只是连接条件使用不等运算符。

以下是一个使用非等值连接的示例:

假设我们有两个表employees和salaries,它们分别存储了员工和薪资的信息。employees表包含id、name和department三个列,salaries表包含id、employee_id和salary三个列。现在,我们想查询每个部门中薪资高于平均水平的员工。

我们可以使用如下语句进行查询:

代码语言:javascript复制
SELECT employees.department, employees.name, salaries.salary
FROM employees
INNER JOIN salaries
ON employees.id = salaries.employee_id
WHERE salaries.salary > (SELECT AVG(salary) FROM salaries);

执行结果如下:

department

name

salary

A

Alice

80000

A

Bob

85000

B

Charlie

90000

B

David

95000

在这个查询中,我们使用了INNER JOIN关键字将employees表和salaries表连接起来,并使用ON子句指定连接条件为employees.id = salaries.employee_id。查询还使用了WHERE子句过滤出薪资高于平均水平的员工。这个查询将返回每个部门中薪资高于平均水平的员工的姓名、所属部门和薪资。

除了INNER JOIN之外,还有其他类型的连接操作,包括LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN等。这些连接操作可以实现更为灵活的连接需求,但其语法相对复杂,需要仔细掌握。

sql

0 人点赞