一、等值连接
等值连接是指通过使用相等运算符将两个表中相同的列进行比较,从而获得匹配行的过程。等值连接可以使用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等。这些连接操作可以实现更为灵活的连接需求,但其语法相对复杂,需要仔细掌握。