SQL学习小结

这些关于SQL的链接不错:
w3school:
http://www.w3school.com.cn/sql/

“十步完全理解SQL”:
http://blog.jobbole.com/55086/

下面是关于上面链接的一些学习笔记。

1.SQL语句的语法顺序和其语句的执行顺序不一致。
一个典型的SQL语句的语法顺序是:
SELECT[DISTINCT]
FROM
WHERE
GROUP BY
HAVING
UNION
ORDER BY

该SQL语句的执行顺序是:
FROM
WHERE
GROUP BY
HAVING
SELECT
DISTINCT
UNION
ORDER BY

而且好像不同的数据库对SQL语句解析方式也不一定一样。

2. FROM 语句是SQL语句执行的第一步(而不是SELECT)。该语句会通过文件系统将数据从硬盘加载到数据缓冲区中,以便对这些数据进行操作。

SELECT 语句是大部分语句执行了之后再执行的,严格说是在FROM和GROUP BY之后执行的。所以下面SQL语句错误

SELECT A.x + A.y AS z
FROM A
WHERE z = 10 -- z在此处不可用,因为SELECT是最后执行的语句

一个方法是重新写一遍 z 所代表的表达式:

SELECT A.x + A.y AS z
FROM A
WHERE (A.x + A.y) = 10 

或者求助于衍生表、通用数据表达式或者视图,以避免别名重用。

3.不管是语法顺序还是执行顺序,UNION总是排在ORDER BY之前。好像并不一定每个UNION段都能使用ORDER BY排序 ??
“某些数据库允许 SQL 语句对子查询(subqueries)或者派生表(derived tables)进行排序,但是这并不说明这个排序在 UNION 操作过后仍保持排序后的顺序。”

4. SQL 语言的核心是对表的引用(table references)
根据 SQL 标准,FROM 语句被定义为:

<from clause> ::= FROM <table reference> [ { <comma> <table reference> }... ]

FROM 语句的“输出”是一张联合表,来自于所有引用的表在某一维度上的联合。

FROM a, b

上面这句 FROM 语句的输出是一张联合表,联合了表 a 和表 b 。如果 a 表有三个字段, b 表有 5 个字段,那么这个“输出表”就有 8 ( =5+3)个字段。

这个联合表里的数据是 a*b,即 a 和 b 的笛卡尔积。换句话说,也就是 a 表中的每一条数据都要跟 b 表中的每一条数据配对。如果 a 表有3 条数据, b 表有 5 条数据,那么联合表就会有 15 =5*3条数据。

FROM 输出的结果被 WHERE 语句筛选后要经过 GROUP BY 语句处理,从而形成新的输出结果。

从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个 SQL 语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。

5. 尽量使用 JOIN 进行表的连接
不要在 FROM 后面使用逗号连接表。这样会提高SQL 语句的可读性,并且可以避免一些错误。比如说下面的语句很容易引起混乱:

FROM a, b, c, d, e, f, g, h
WHERE a.a1 = b.bx
AND a.a2 = c.c1
AND d.d1 = b.bc

而使用JOIN的话会更安全,JOIN 和要连接的表离得非常近,这样就能避免错误。JOIN 语句能去区分出来外连接和内连接等。

6. SQL 语句中不同的连接操作
关于JOIN的操作,下面这个图不错 (来源”画图解释SQL join 语句”)。

这里写图片描述

SQL 语句中,表连接的方式从根本上分为五种:
EQUI JOIN
SEMI JOIN
ANTI JOIN
CROSS JOIN
DIVISION

EQUI JOIN
未完待续

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值