`

SQL基础总结(六):联结

 
阅读更多

本系列blog源自前年写的SQL学习笔记,汇总一下发上来。(1月份发了前三篇笔记,原以为后面的笔记误操作删了,今天在硬盘里又找到了,一起发上来)

--------------------------------

限定名称是一个表名后跟一个点号和表中的列名。限定名称可以在整个数据库中唯一的标识出某个列。如:table.column

要提高性能,应该在联结查询中对所有列使用限定名称。

 

创建表的别名,在子查询的上下文中也称为相关名称:table [AS] alias

AS关键字是可选的。

 

SELECT子句可以在后面的语句定义别名之前先使用别名。

别名隐藏了表名,如果为表命名了别名,则必须在所有的限定引用中使用它的别名。

SELECT authors.au_id FROM authors au; //这样是不合法的。

也可以使用AS为视图分配别名。

 

使用联结

交叉联结:返回第一个表的每一行和第二个表的所有行组合得到的表的所有行。

自然联结:对第一个表所有列和第二个表具有名字相同的列进行等同比较的联结。

内联结:最普通的联结。使用比较操作符基于每一个表中共同列的值。

左外联结:返回左表中的所有行,不管与右表是否有匹配的联结列。如果左表中的行在右表中没有匹配的行,关联的结果对于右表所有SELECT子句列包含空值。

右外联结:返回右表中的所有行。

全外联结:返回左表和右表中的所有行。

自联结:表和它自身的联结。

如果关键字是复合的,通常应该联结所有关键字列。

如果联结列包含空值,空值无法联结。

不能联结二进制对象。

 

为了提高性能,应该对联结列建立索引。

 

可以将视图联结表或其它视图。

 

处理联结时,按照下面顺序执行整个查询:

1. JOIN子句中应用联结条件。

2. WHERE子句中应用联合条件和查询条件。

3. 按照GROUP BY分组。

4. HAVING子句中对分组进行过滤。

5. 按照ORDER BY排序。

当联结两个表时,对左表每一行和右表每一行进行组对,形成交叉联结,然后使用联结条件从交叉联结中筛选行。

 

被联结的列不必有相同的数据类型。如果数据类型不可以被隐式地转换,联结条件需要使用CAST()函数显示的转换数据类型。大多数使用联结的查询可以改写为嵌套在另一个查询中的查询(子查询),反之,大多数子查询可以改写为联结。

 

对于使用JOIN语法,如果被联结列有相同的名字且被用于比较是否相等,SQL标准定义了替代ON子句的USING子句。FROM table1 JOINTYPE table2 USING (columns).

 

使用CROSS JOIN 创建交叉联结

SELECT * FROM authors CROSS JOIN publishers;

等价于:

SELECT * FROM authors , publishers;

 

使用NATURAL JOIN创建自然联结

比较一个表中所有列和另一个表中具有名称相同的相应列的等同性。

使用自然联结,需要确保两个联结表中所有相关列有相同的列名,且非相关列有唯一的列名。

 

使用INNER JOIN创建内联结

使用比较操作符(=,,<>,>,<,>=,<=)匹配两个表的行。

只返回满足联结条件的联结行的结果。

SELECT columns FROM table1 INNER JOIN table2 ON join_conditions;

SELECT columns FROM table1 , table2 WHERE join_conditions;

 

默认情况下,JOIN等价于INNER JOIN

使用>,<,>=,<=的联结很常见,<>很少用到,不等联结仅当用于自联结时才有意义。

 

使用OUTER JOIN创建外联结

内联结:两表中至少有一行满足联结条件才返回行,内联结删除在另一表中没有匹配的行。

外联结:外联结至少返回其中一个表的行。

 

左外联结:返回左表中的所有行,不管与右表是否有匹配的联结列。如果左表中的行在右表中没有匹配的行,关联的结果对于右表所有SELECT子句列显示空值。

SELECT columns FROM left_table LEFT [OUTER] JOIN right_table ON join_conditions;

 

右外联结:

SELECT columns FROM left_table RIGHT [OUTER] JOIN right_table ON join_conditions;

 

全外联结:

SELECT columns FROM left_table FULL [OUTER] JOIN right_table ON join_conditions;

 

关键字OUTER可选。

 

SQL有联合联结(union join):返回删除匹配行的全外联结。在联合联结中每行是一个表的列与另一个表为空值的列。

联合联结很少使用,很多DBMS不支持。t1 UNION JOIN t2等价于t1 FULL OUTER JOIN t2 ON 1=2.1=2是永远为假的条件。

 

创建自联结

自联结是一个表和自身的联结,并通过比较同一个表的一列或多列值,从表中检索行的常规SQL联结。

自联结常被使用在有反身联系的表。

反身联系是指主键/外键同为一个表中的列或列的组合。

 

像任何联结一样,自联结需要两个表,但只是添加同一个表的另一个实例。DBMS组合并返回满足联结条件的行。将它们想象成两个表就很容易理解。

自联结经常被改写为子查询。

分享到:
评论

相关推荐

    Microsoft SQL Server 2008技术内幕:T-SQL查询(第二卷)

    主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决...

    SQL基础教程.rar

    **SQL基础教程** 本教程是针对SQL初学者的全面指南,涵盖了多个主流数据库系统的使用,包括Oracle Database 12cR1、SQL Server 2014、DB2 10.5、PostgreSQL 9.5.3以及MySQL 5.7。SQL,全称Structured Query ...

    SQL ASP+联结数据库

    总结起来,这段ASP代码展示了如何在C#中使用.NET Framework的ADO.NET组件连接到SQL Server数据库,执行查询,将结果存入DataSet,并在网页上显示这些数据。这对于任何需要在ASP.NET应用中进行数据库交互的开发者来说...

    SQL查询语言及应用

    #### 六、总结 SQL作为一种强大的工具,在数据库管理和数据处理方面发挥着不可替代的作用。掌握SQL的基础知识和高级技巧对于从事数据相关工作的人员来说至关重要。通过对SQL的学习和实践,可以有效地管理和分析数据...

    Microsoft+SQL+Server+2008技术内幕:T-SQL查询_源代码及附录 中文版

    主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决...

    SQL server 初级总结

    这篇总结涵盖了SQL Server初级阶段的关键概念,包括数据库基础、SQL语言、表的管理、数据操作以及数据库安全性和完整性。 首先,SQL(Structured Query Language)是用于与关系型数据库交互的语言,SQL Server则是...

    sql经典面试题综合题总结

    一、SQL基础 SQL(Structured Query Language)是用于管理和处理关系数据库的标准语言。基础题通常涉及创建数据库、表结构,以及插入、更新和删除数据。 1. 创建数据库:`CREATE DATABASE 数据库名;` 2. 创建表:`...

    SQLServer2008技术内幕T-SQL查询包含源代码及附录A

    主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决...

    sql server 2005数据库查询

    在本实验中,我们旨在通过SQL Server 2005来熟悉并掌握数据库的基本查询操作,包括简单的数据查询、数据排序以及数据联结查询等。这些技能是数据库管理和维护的基础,对于任何从事IT领域工作的人员来说都是必不可少...

    1 小时 SQL 极速入门(二).pdf

    在上一篇教程中,我们介绍了 SQL 的基础语法,这为我们提供了单表查询的能力。然而,在实际应用中,数据通常分布在多个表中,并且各表之间存在复杂的业务关系。因此,学会如何通过表联结来获取跨表信息变得至关重要...

    T-SQL 编程基础 程序员查考资料

    ### T-SQL编程基础知识点详解 #### 一、T-SQL的组成 1. **DML(数据操作语言Data Manipulation Language)** DML主要包括用于操作数据库中数据的SQL命令,如查询、插入、删除和修改数据。具体包括: - `SELECT`:...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...

    Mysql知识点总结.pdf

    - 内联结、自然联结和外联结:不同类型表连接,内联结只返回匹配的行,自然联结是内联结的特殊类型,外联结则可以返回左表、右表或两者的所有行。 13. 组合查询: - 使用UNION来组合多个SELECT语句的结果集。 14...

    sql语句子查询大全[借鉴].pdf

    SQL 子查询大全.left ...总结:LEFT JOIN、RIGHT JOIN 和 INNER JOIN 都可以用于组合来源表的记录,但是它们的结果不同。LEFT JOIN 是以左表为准的,RIGHT JOIN 是以右表为准的,而 INNER JOIN 只显示符合条件的记录。

    全面掌握MySQL:学生课程管理系统的实战演练

    本练习包涵了多个MySQL数据库的基础与提高题目,包括但不限于数据库创建、表设计、数据插入、查询操作及性能优化等。通过这些题目的练习,读者不仅能够巩固现有的SQL知识,还能提升实际问题解决的能力。 以下是资源...

    (完整版)大学数据库考试题与答案.docx

    ### 关键知识点总结 #### 1. 层次模型的完整性约束 - **知识点**: 在层次数据库模型中,如果删除了一个双亲结点,则相应的所有子女结点也将被删除。这是因为层次模型的**完整性约束**所决定的。 - **解释**: 在层次...

Global site tag (gtag.js) - Google Analytics