加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门网 (https://www.xiamenwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

10个简单步骤,完全理解SQL

发布时间:2019-06-04 05:02:23 所属栏目:编程 来源:IT技术圈
导读:多年前收藏在笔记中的一篇文章,今天偶然翻出,重读了一遍,依然大有收获。分享出来,大家一起探讨。 以本文是为了以下读者而特地编写的: 1、 在工作中会用到 SQL 但是对它并不完全了解的人。 2、 能够熟练使用 SQL 但是并不了解其语法逻辑的人。 3、 想

SQL 语言标准中表的连接定义如下:

  1. <table reference> ::= 
  2. <table name> 
  3. | <derived table> 
  4. | <joined table> 

就拿之前的例子来说:

  1. FROM a, b 

a 可能输如下表的连接:

  1. a1 JOIN a2 ON a1.id = a2.id 

将它放到之前的例子中就变成了:

  1. FROM a1 JOIN a2 ON a1.id = a2.id, b 

尽管将一个连接表用逗号跟另一张表联合在一起并不是常用作法,但是你的确可以这么做。结果就是,最终输出的表就有了 a1+a2+b 个字段了。

在 SQL 语句中派生表的应用甚至比表连接更加强大,下面我们就要讲到表连接。

我们学到了什么?

思考问题时,要从表引用的角度出发,这样就很容易理解数据是怎样被 SQL 语句处理的,并且能够帮助你理解那些复杂的表引用是做什么的。

更重要的是,要理解 JOIN 是构建连接表的关键词,并不是 SELECT 语句的一部分。有一些数据库允许在 INSERT 、 UPDATE 、 DELETE 中使用 JOIN 。

5、 SQL 语句中推荐使用表连接

我们先看看刚刚这句话:

  1. FROM a, b 

高级 SQL 程序员也许给你忠告:尽量不要使用逗号来代替 JOIN 进行表的连接,这样会提高你的 SQL 语句的可读性,并且可以避免一些错误。 利用逗号来简化 SQL 语句有时候会造成思维上的混乱,想一下下面的语句:

  1. FROM a, b, c, d, e, f, g, h 
  2. WHERE a.a1 = b.bx 
  3. AND a.a2 = c.c1 
  4. AND d.d1 = b.bc 
  5. -- etc... 

我们不难看出使用 JOIN 语句的好处在于: 安全。 JOIN 和要连接的表离得非常近,这样就能避免错误。

更多连接的方式,JOIN 语句能去区分出来外连接和内连接等。

我们学到了什么?

记着要尽量使用 JOIN 进行表的连接,永远不要在 FROM 后面使用逗号连接表。

6、 SQL 语句中不同的连接操作

SQL 语句中,表连接的方式从根本上分为五种:

  1. EQUI JOIN 
  2. SEMI JOIN 
  3. ANTI JOIN 
  4. CROSS JOIN 
  5. DIVISION 

EQUI JOIN 是一种最普通的 JOIN 操作,它包含两种连接方式:

INNER JOIN(或者是 JOIN )

OUTER JOIN(包括: LEFT 、 RIGHT、 FULL OUTER JOIN)

用例子最容易说明其中区别:

  1. -- This table reference contains authors and their books. 
  2. -- There is one record for each book and its author. 
  3. -- authors without books are NOT included 
  4. author JOIN book ON author.id = book.author_id 
  5. -- This table reference contains authors and their books 
  6. -- There is one record for each book and its author. 
  7. -- ... OR there is an "empty" record for authors without books-- ("empty" meaning that all book columns are NULL) 
  8. author LEFTOUTER JOIN book ON author.id = book.author_id 

SEMI JOIN

这种连接关系在 SQL 中有两种表现方式:使用 IN,或者使用 EXISTS。“ SEMI ”在拉丁文中是“半”的意思。这种连接方式是只连接目标表的一部分。这是什么意思呢?

再想一下上面关于作者和书名的连接。我们想象一下这样的情况:我们不需要作者 / 书名这样的组合,只是需要那些在书名表中的书的作者信息。那我们就能这么写:

  1. -- Using IN 
  2. FROM author 
  3. WHERE author.id IN(SELECT book.author_id FROM book) 
  4.   
  5. -- Using EXISTS 
  6. FROM author 
  7. WHERE EXISTS (SELECT 1 FROM book WHERE book.author_id = author.id) 

(编辑:厦门网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读