1. 简单百科
  2. 内连接

内连接

内连接,又称作普通连接或自然连接,是一种基本的数据库操作,用于合并来自不同表格的信息。它会从结果集中删除所有与另一个表格中没有匹配行的行,因此可能丢失一些信息。

SQL连接查询分类

内连接

内连接通过比较两个表格中指定字段的值来确定它们之间的联系。其语法形式为:

```sql

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

```

这种连接只会返回符合条件的行,其他不符合条件的行会被过滤掉。

外连接

左连接

左连接的特点在于,无论右边表格是否有对应的匹配行,都会显示左边表格的所有行。其语法示例为:

```SQL

SELECT courses.cno, max(coursename), 计数(sno)

FROM courses LEFT JOIN grades ON courses.cno = grades.cno

GROUP BY courses.cno

```

右连接

右连接与左连接类似,只是角色互换,无论左边表格是否有对应的匹配行,都会显示右边表格的所有行。

全连接

全连接会显示左右两个表格的所有行,包括没有对应匹配行的行。其语法示例为:

```SQL

SELECT sno, name, major

FROM students FULL JOIN majors ON students.mno = majors.mno

```

自身连接

自身连接是指对同一个表格进行连接,通常需要使用别名来区分不同的实例。其语法示例为:

```sql

SELECT c1.cno, c1.coursename, c1.pno, c2.coursename

FROM courses c1, courses c2 WHERE c1.pno = C2Cno

```

交叉连接

交叉连接会产生笛卡尔积,即将第一个表格中的每一行与第二个表格中的每一行组合起来。其语法示例为:

```SQL

SELECT lastname + firstname FROM lastname CROSS JOIN firstanme

```

嵌套查询

嵌套查询可以通过`IN`或`EXISTS`关键字实现。例如,查询某个学生的同乡时,可以使用以下语句:

```sql

SELECT * FROM students

WHERE native IN (SELECT native FROM students WHERE name = '李山')

```

排序

SQL中的`ORDER BY`子句可用于按指定字段进行排序,默认为升序(`ASC`),也可以指定为降序(`DESC`)。例如,按平均成绩排序时,可以使用以下语句:

```sql

SELECT sno, 计数(*), avg(mark) FROM grades

GROUP BY sno HAVING avg(mark) \u003e 85

ORDER BY 3 DESC

```

注意事项

空格处理

当字段名称包含空格时,需要用方括号`[]`将其括起来以确保正确识别。

NULL值处理

如果想要查找某个字段为空的行,可以使用`IS NULL`条件,例如:

```SQL

SELECT sno, courseno FROM grades WHERE mark IS NULL

```

ANY与ALL区别

在嵌套查询中,`ANY`相当于逻辑运算符`OR`,而`ALL`相当于逻辑运算符`AND`。

否定查询陷阱

在进行否定意义的查询时,需要注意避免误判。例如,查询没有选修某个课程的学生时,正确的语句应该是:

```sql

SELECT * FROM students

WHERE NOT EXISTS (SELECT * FROM grades WHERE grades.sno = students.sno AND cno = 'B2')

```

多重嵌套查询

对于复杂的多重嵌套查询,需要仔细分析并逐步排除不符合条件的行。例如,查询选修了所有课程的学生时,可以使用以下语句:

```SQL

SELECT *

FROM students

WHERE NOT EXISTS (

SELECT *

FROM courses

WHERE NOT EXISTS (

SELECT *

FROM grades

WHERE sno = students.sno AND cno = courses.cno

)

)

```

实例

内连接的一个简单例子是在两个Excel工作簿之间建立连接。假设有一个出货表和一个产品表,分别存储着出货信息和产品的详细资料。出货表包含日期、客户、产品编码和数量等字段,而产品表包含产品编码、产品名称和生产厂家等字段。为了将这两个表格连接起来,我们可以使用内连接,条件为出货表的产品编码等于产品表的产品编码。这样得到的结果集将会包含出货表和产品表中所有匹配的行,即具有相同的商品编码的行。

参考资料

内连接 .简书.2024-10-24

SQL内连接与外连接的区别.豆丁网.2024-10-24

两通球阀 法兰连接内螺纹连接.豆丁建筑网.2024-10-24