- w3c:http://www.w3school.com.cn/sql/index.asp
- 书籍:SQL必知必会
SQL基本规范
-
多条SQL语句必须以分号(;)分割
SELECT * FROM table1; SELECT * FROM table2;
-
SQL语句不区分大小写,但是开发人员对SQL关键词使用大些,表、列名使用小写;
- 关键词:SELECT、FROM、WHERE、AND 等这些词语
SQL语句可以是多行,也可以是一行,建议使用多行,方便阅读
-
SQL注释
单行注释:# 这是一个注释
在某行后面增加注释: -- 这是一个注释
-
多行注释:
/* 这是一个多行注释 */
SQL特殊语法
排序 ORDER BY
-
按列名称排序
# 建议使用列名称排序 SELECT column1, column2 FROM table ORDER BY column1, column2
-
按列序号排序
SELECT column1, column2 FROM table ORDER BY 1, 2
-
如何按照字母大小写排序??
- 数据库默认情况下不区分 a/A的顺序,故如果需要按照字母大小写排序需要使用 collate(校对集)
- 具体排序方法可以参考博客园文章MySQL的order by时区分大小写
SELECT * FROM table ORDER BY column1 COLLATE utf8_bin;
过滤
介于 a 和 b之间使用 BETWEEN,BETWEEN包含a和b的值
-
判断是否为空
SELECT column1, column2 FROM table WHERE column3 IS NULL
like
-
普通like语句:
‘x%’: 以x开头
‘%x’: 以x结尾
-
‘x%y’:以x开头,y结尾
SELECT column1, column2 FROM table WHERE column3 LIKE ‘x%’
-
通配符
'[xy]%':以x或者y开头
-
'[^xy]%':不以x或者y开头
SELECT column1, column2 FROM table WHERE column3 LIKE ‘[^xy]%’
函数
- 函数:RTRIM、LTRIM、TRIM、SOUNDEX(发音相似)
- 聚合函数是否忽略null?
- AVG、MIN、MAX、SUM 直接忽略
- COUNT(column1) 忽略
- COUNT(*) 不忽略
联结
具体 可参考csdn博客
- INNER JOIN: 数据包含第一个(左边)表和二个(右边)表的集合,不能匹配的数据则丢失;
- LEFT OUTER JOIN: 数据包含第一个(左边)表,如果第二个(右边)表没有对应记录,则为null;
- RIHGHT OUTER JOIN: 数据包含第二个(右边)表,如果第一个(左边)表没有对应记录,则为null;
- UNION: 两表数据合并,去掉重复数据
- ALL UNION: 两表数据合并,保留重复数据
求值顺序
-
WHERE语句可以包含AND和OR,其中AND的优先级高于OR,如果不合理使用,则会出现顺序错误情况
SELECT column1, column2 FROM table WHERE column1 = ‘a’ or column1 = 'b' and column2 > 'c'
-
以上执行顺序为
- column1 = 'b' and column2 > 'c'
- column1 = ‘a’
- 优先执行and,再执行or
注意
- HAVING和WHERE的区别
WHERE可以使用表中本来就有的字段
HAVING只能使用从SELECT筛选过滤的字段
-
HAVING可以使用聚合函数计算过的字段
# 引用博客园的博客例子:https://www.cnblogs.com/ljf-Sky/p/9024683.html SELECT goods_category_id, AVG(good_price) AS ag FROM sw_goods GROUP BY goods_category HAVING ag > 1000 SELECT goods_category_id, AVG(goods_price) AS ag FROM sw_goods WHERE ag > 1000 -- ag 为聚合函数计算字段,WHERE不可以使用 GROUP BY goods_category(X)报错