SQL查询深度解析:从内连接到外连接

需积分: 10 3 下载量 109 浏览量 更新于2024-07-31 收藏 153KB DOC 举报
"SQL中的SELECT语句是用于从数据库中检索数据的基本工具,涵盖了各种查询方式,包括连接查询、外连接等。以下是对这些知识点的详细解释: 1. **连接查询** - **内连接(Inner Join)**:等值连接是内连接的一种,它返回两个表中满足特定条件的匹配行。例如,`SELECT student_no, student_sex, classmate_name, department_name FROM students, classmate c, department d WHERE s.classmate_no = c.classmate_no AND c.department_no = d.department_no;` 这个查询将学生表、同学表和部门表通过共同的键连接在一起,只显示那些在所有表中都存在对应关系的记录。不等值连接则是找出两个表中某个字段不相等的记录,例如,找出教师年龄小于学生的教师和学生。 - **自身连接**:自身连接是特殊的内连接,一个表与自身进行连接。例如,`SELECT c1.course_no as "课程", c2.course_no as "先修课程" FROM course c1, course c2 WHERE c1.course_pno = c2.course_no;` 这个例子展示了课程表中查找先修课程的关系,课程号c1是另一个课程c2的先修课。 2. **外连接** - **左外连接(Left Outer Join)**:左外连接返回左表的所有记录,以及右表中与左表匹配的记录。如果在右表中没有匹配,则结果是NULL。正确使用左外连接的格式可以是:`SELECT * FROM classmate c LEFT JOIN department d ON c.department_no = d.department_no WHERE d.department_no = '500';` 这将返回所有学生的信息,即使他们未分配到部门'500',部门'500'的记录会被包含,其他部门的记录则会显示NULL。在某些旧的SQL语法中,如Oracle,可以使用`(+)`操作符来表示外连接,但现代SQL(如MySQL, PostgreSQL, SQL Server)更倾向于使用JOIN关键字。 注意,外连接的关键在于即使在右表中没有匹配项,左表的所有记录也会被返回。因此,`SELECT * FROM classmate c, department d WHERE c.department_no(+)=d.department_no AND d.department_no='500';` 这样的写法在某些系统中也可以实现左外连接的效果,但不是标准的JOIN语法。 3. **其他SELECT语句用法** - **子查询**:SELECT语句还可以嵌套在其他SELECT语句中,用于获取满足特定条件的数据集。 - **聚合函数**:如COUNT(), SUM(), AVG(), MAX(), MIN()等,用于对一组值进行计算或统计。 - **分组(GROUP BY)和聚合**:用于根据一个或多个列对结果进行分组,通常与聚合函数一起使用。 - **排序(ORDER BY)**:按照指定列对结果进行升序或降序排序。 - **分页(LIMIT和OFFSET)**:限制返回的结果数量,常用于实现数据的分页展示。 - **条件筛选(WHERE)**:基于特定条件过滤记录。 - **别名(AS)**:为列或表提供易于阅读的名称。 掌握这些基本的SELECT语句及其组合使用,能够有效地在SQL中处理和查询复杂的数据。"