内连接
内连接
内连接,又称作普通连接或自然连接,是一种基本的数据库操作,用于合并来自不同表格的信息。它会从结果集中删除所有与另一个表格中没有匹配行的行,因此可能丢失一些信息。
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
两通球阀 法兰连接内螺纹连接.豆丁建筑网.2024-10-24
目录
概述
SQL连接查询分类
内连接
外连接
左连接
右连接
全连接
自身连接
交叉连接
嵌套查询
排序
注意事项
空格处理
NULL值处理
ANY与ALL区别
否定查询陷阱
多重嵌套查询
实例
参考资料