[关闭]
@demonly 2017-02-06T09:21:26.000000Z 字数 1268 阅读 1046

复杂数据库查询

SQL


在查询里连接表

内连接

内连接利用表的通用字段来连接表。

  1. SELECT TABLE1,.COLUMN1, TABLE2.COLUMN2...
  2. FROM TABLE1, TABLE2 [, TABLE3 ]
  3. WHERE TABLE1.COLUMN_NAME = TABLE2.COLUMN_NAME
  4. [ AND TABLE1.COLUMN_NAME = TABLE3.COLUMN_NAME]

也可以使用 INNER JOIN 语法来提高可读性

  1. SELECT TABLE1,.COLUMN1, TABLE2.COLUMN2...
  2. FROM TABLE1
  3. INNER JOIN TABLE2 ON TABLE1.COLUMN_NAME = TABLE2.COLUMN_NAME

在连接表的查询中所有字段名称的前面都需要有表名,可以给表起别名来使代码更加简洁,给表起别名之后就可以用别名来替代表名。

  1. SELECT...
  2. FROM TABLE1 ALIAS

不等连接

不等连接通过非相等条件连接两表,基本语法与等值连接相似。

外连接

外连接会返回一个表里的全部记录,即使对应的记录在第二个表里不存在,在不同的实现中外连接的写法不同。

Oracle

  1. SELECT...
  2. FROM TABLE1, TABLE2(+)

其中后面有‘+’的表中的记录允许不存在。

SQL Server

  1. SELECT..
  2. FROM TABLE1 LEFT JOIN TABLE2 ON TABLE1.COLUMN1 = TABLE2.COLUMN2

LEFT JOIN 表示完全显示左边表的记录,RIGHT JOIN 表示完全显示右边表的记录,FULL JOIN 表示完全显示两个表的记录。

自连接

自连接可以像操作两个表一样把表结合到自身,方法是给表起别名,其余部分与其他连接一样。

注意事项

如果在查询中涉及两个表的时候没有连接两个表那么就会返回两个表的笛卡尔积,当数据量过大时可能会导致主机停止或者崩溃。

使用子查询定义未确定数据

子查询的主要作用是获取数据给主查询使用。在子查询返回多个值的情况下,子查询就不能跟随在比较操作符之后,只能跟随在逻辑操作符之后。

子查询里的表也可以与主查询里的表相关联。在关联子查询中,子查询可以跟随在比较操作符之后,因为关联子查询时对于主查询中的每一次比较只会返回相应的一条记录的值。

组合多个查询

组合查询可以组合两个或多个 SELECT 语句的结果。在使用 组合查询时,每个 SELECT 语句里必须选择同样数量的字段、同样数量的字段表达式、同样的数据类型和同样的次序,但是长度不必一样。

输出的结果中两个查询的结果将被结合在一起,列标题取第一个查询的列标题。

组合查询中的 ORDER BY 子句只能有一个,而且只能够用别名或者数字来引用字段。

组合查询中的 GROUP BY 子句可以分别应用与每个 SELECT 语句,也可以应用于全部查询结果

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注