2016.12.2
十一.用内连接组合表
关系数据库最大的成就就是能够把数据组织到任意多个相互关联的表中,但同时这些表是彼此独立的。关系是通过表中共有的列来推断的。
关系数据库最大的优点在于可以分析业务实体然后进行适当的数据库设计,这样就具备最大的灵活性。实际上,关系数据库就是以任何想要的方式将表连接在一起,从而实现关系的。
把表连接到一起的能力是SQL的基本特性,不使用连接的话,关系数据库的作用就会小很多。
内连接只许查看连接的表之间匹配的数据。
实体关系图:实体指的是表,关系指的是在这些表中的数据元素之间所画的线。
11.1 内连接
SELECT *
FROM table1
INNER JOIN table2
ON table1.column=table2.column
这个意思是把table1表中的column列 和table2中的column列连接起来。
内连接只会返回关联的两个表之间相匹配的数据,内连接会显示所有可能的匹配。
11.2 内连接中表的顺序
SELECT *
FROM table1
INNER JOIN table2
ON table1.column=table2.column
和
SELECT *
FROM table2
INNER JOIN table1
ON table2.column=table1.column
以上两条语句逻辑上是相同的,也会返回相同的数据。唯一不同的是第一条语句会先显示table1中的列,第二条语句相反。SQL不会指定执行任务的先后顺序,SQL只是指定了需要的逻辑,并且让数据库的内部机制来决定如何执行任务。SQL不会决定数据库如何物理地检索数据,数据库软件会决定诗句的最优化方式。
11.3 内连接的另一种规范
实际上,不仅可以使用INNER JOIN和ON来指定内连接,也可以使用FROM和WHERE子句来指定内连接,但不建议这样做。
SELECT *
FROM table1
INNER JOIN table2
ON table1.column=table2.column
等同于
SELECT *
FROM table1,table2
WHERE table1.column=table2.column
INNER JOIN和ON的优点在于它们显示的表示了连接的逻辑。
11.4 别名
当指定所有列(*)时,两个表中的相同列会出现多次,我们可以使用显式的指定标的别名和列的别名来去除重复。
SELECT
T1.Column1 AS c1,
T1.Column2 AS c2,
T2.Column2 AS d2,
FROM table1 AS T1
INNER JOIN table2 AS T2
ON T1.column1=T2.column1
ORACLE中
SELECT
T1.Column1 AS c1,
T1.Column2 AS c2,
T2.Column2 AS d2,
FROM table1 T1
INNER JOIN table2 T2
ON T1.column1=T2.column1;