美文网首页
2019-07-18

2019-07-18

作者: Sam_6155 | 来源:发表于2019-07-19 10:35 被阅读0次

1-1 关系数据库以行为单位读写数据。
1-2一个单元格中只能输入一个数据
1-3 学会标准SQL就可以在各种RDBMS中书写SQL语句了
1-4 SQL根据功能不同可以分为三类,其中使用最多的是DML
1-5 SQL语句以分号(;)结尾
1-6 关键字不区分大小写,但是建议如下:
关键字大写
表名的首字母大写
其余(列名等)小写
但是插入到表中的数据是区分大小写的。例如:在操作过程中,数据Computer、COMPUTER或computer,三者是不一样的。
1-7字符串和日期常数需要使用单引号(‘)括起来。
数字常数无需加注单引号(直接书写数字即可)。
1-8单词之间需要使用半角空格或者换行符进行分割。
1-9数据库名称、表名和列名等可以使用以下三种字符。
半角英文字母 半角数字 下划线(_)
1-10名称必须以半角英文字母作为开头
1-11名称不能重复
1-12删了的表是无法恢复的。
在执行DROP TABLE 语句之前请务必仔细确认
1-13表定义变更之后无法恢复。在执行ALTER TABLE语句之前请务必仔细确认。

2-1星号()代表全部列的意思
2-2设定汉语别名时需要使用双引号(“)括起来
其他汉语字符串内容使用(')
2-3在SELECT语句中使用DISTINCT可以删除重复行
DISTINCT关键字只能用在第一个列名之前。
2-4 WHERE子句要紧跟在 FROM子句之后
2-5注释是SQL语句中用来标识说明或者注意事项的部分。
分为1行注释 --注释
多行注释 /
注释*/
2-6 SELECT 子句中可以使用常数或者表达式。
2-7 使用比较运算符时一定要注意不等号和等号的位置。
2-8 字符串类型的数据原则上按照字典顺序进行排序,不能与数字的大小顺序混淆。
2-9 希望选取NULL记录时,需要在条件表达式中使用IS NULL 运算符。希望选取不是NULL的纪录时,需要在条件表达式中使用IS NOT NULL运算符。
2-10 NOT运算符用来否定某一条件,但是不能滥用。
2-11 多个查询条件进行组合时,需要使用AND运算符或者OR运算符
2-12 文氏图很方便
2-13 AND 运算符的优先级高于OR运算符。想要优先执行OR运算符时可以使用括号。
2-14 通过创建真值表,无论多复杂的条件,都会更容易理解。

3-1 通常,聚合函数会对NULL以外的对象进行汇总。但是只有COUNT函数例外,使用COUNT()可以查出包含NULL在内的全部数据的行数。
COUNT函数的结果根据参数的不同而不同。COUNT(
)会得到包含NULL的数据行数,而COUNT(<列名>)会得到NULL之外的数据行数。
除COUNT函数外,其他函数不能使用星号作为参数。
3-2 聚合函数会将NULL排除在外。但COUNT(*)例外,并不会排除NULL。
3-3 MAX/MIN函数几乎适用于所有数据类型的列。SUM/AVG函数只适用于数值类型的列。
3-4 想要计算值的种类时,可以在COUNT函数的参数中使用DISTINCT。
3-5 在聚合函数的参数中使用DISTINCT,可以删除重复数据。
注意事项:聚合键中包含NULL时,在结果中会以‘不确定’行(空行)的形式表现出来。
使用聚合函数和GROUP BY子句时需要注意以下4点。
1.聚合函数只能写在SELECT子句中
2.GROUP BY 子句中不能使用SELECT子句中列的别名
3.GROUP BY子句的聚合结果是无序的
4.WHERE 子句中不能使用聚合函数。
3-6 GROUP BY 就像是切分表的一把刀
3-7 SQL子句的顺序不能改变,也不能互相替换。
3-8 聚合键中包含NULL时,在结果中会以“不确定”行(空行)的形式表现出来。
3-9 使用GROUP BY子句时,SELECT 子句中不能出现聚合键之外的列名。
3-10 在GROUP BY 子句中不能使用SELECT子句中定义的别名。
3-11 GROUP BY 子句结果的显示是无序的。
3-12 只有SELECT子句和HAVING子句(以及ORDER BY 子句)中能够使用聚合函数。
3-13 HAVING子句要写在GROUP BY 子句之后
3-14 WHERE 子句 和 HAVING 子句的作用不同:
WHERE 子句= 指定行所对应的条件
HAVING 子句= 指定组所对应的条件
聚合键所对应的条件不应该书写在HAVING子句当中,而应该书写在WHERE子句当中。
3-15 ORDER BY 子句通常写在SELECT语句的末尾。
3-16 未指定ORDER BY 子句中排列顺序时会默认使用升序进行排序。
3-17 排序键中包含NULL时,会在开头或末尾进行汇总。
3-18 在ORDER BY子句中可以使用SELECT子句中定义的别名
3-19 在ORDER BY子句中可以使用SELECT子句中未使用的列和聚合函数。
3-20 在ORDER BY子句中不要使用列编号。

4-1 原则上,执行一次INSERT语句会插入一行数据。
4-2 省略INSERT语句中的列名,就会自动设定为该列的默认值(没有默认值时会设定为NULL)
4-3 INSERT 语句的SELECT语句中,可以使用WHERE子句或者GROUP BY子句等任何SQL语法(但使用ORDER BY子句并不会产生任何效果)。
4-4 DELETE语句的删除对象并不是表或者列,而是记录(行)。
4-5 DELETE 可以通过WHERE子句指定对象条件来删除部分数据。
只能删除表中全部数据的TRUNCATE语句
TRUNCATE<表名>
与DELETE 不同的是,TRUNCATE只能删除表中的全部数据,而不能通过WHERE子句指定条件来删除部分数据。也正是因为它不能具体地控制删除对象,所以其处理速度比DELETE 要快的多。实际上,DELETE语句在DML语句中也属于处理时间比较长的,因此需要删除全部数据行时,使用TRUNCATE可以缩短执行时间。
4-6 使用UPDATE 语句可以将值看为NULL(但只限于未设置NOT NULL约束的列)。
4-7 事务是需要在同一个处理单元中执行的一系列更新处理的集合。
4-8 虽然我们可以不清楚事务开始的时间点,但是在事务结束时一定要仔细进行确认。

5-1 表中存储的是实际数据,而视图中保存的是从表中取出数据所使用的SELECT语句。
5-2 应该讲经常使用的SELECT语句做成视图。
5-3 应该避免在视图的基础上创建视图。
5-4 定义视图时不要使用ORDER BY子句。
5-5 视图和表需要同时进行更新,因此通过汇总得到的视图无法进行更新。
5-6 子查询作为内层查询会首先执行。
5-7 标量子查询就是返回单一值的子查询。
5-8 在细分的组内进行比较时,需要使用关联子查询。

6-1 通常指定关联子查询作为EXITS的参数。
6-2 作为EXIST参数的子查询中经常会使用SELECT *
6-3 虽然CASE表达式中的ELSE子句可以省略,但还是希望大家不要省略。
6-4 CASE 表达式中的 END不能省略。

7-1 集合运算符会除去重复的纪录。
7-2 在集合运算符中使用ALL选项,可以保留重复行。
7-3 进行联结时需要在FROM子句中使用多张表。
7-4 进行内联结时必须使用ON子句,并且要书写在FROM 和 WHERE 之间。
7-5 使用联结时SELECT子句中的列需要按照“<表的别名>.<列名>”的格式进行书写。
7-6 外联结中使用LEFT、RIGHT来指定主表。使用二者所得到的结果完全相同。
7-7 对于联结的过时语法和特定语法,虽然不建议使用,但还是希望大家能够读懂。

-- 窗口函数 目前MYSQL 还不支持,只支持ORACLE、SQL server、DB2、PostgreSQL
8-1 窗口函数兼具分组和排序两种功能。
8-2 通过PARTITION BY分组后的记录集合成为“窗口”。
PATTITION BY 在横向上对表进行分组,而 ORDER BY 决定了纵向排序的规则。
8-3 由于专用窗口函数无需参数,因此通常括号中都是空的。
8-4 原则上窗口函数只能在SELECT子句中使用。
8-5 将聚合函数作为窗口函数使用时,会以当前记录为基准来决定汇总对象的记录。

SELECT '合计' AS product_type,SUM(sale_price)
FROM Product
UNION ALL
SELECT product_type,SUM(sale_price)
FROM Product
GROUP BY product_type;
合计 作为 produt_type 名称


image.png
image.png

8-6 超级分组记录默认使用NULL作为聚合键。
8-7 ROLLUP可以同时得出合计和小计,是非常方便的工具。
8-8 使用GROUPING函数 能够简单地分辨出原始数据中的NULL 和 超级分组记录中的NULL
8-9 可以把CUBE理解为将使用聚合键进行切割的模块堆积成一个立方体。

相关文章

网友评论

      本文标题:2019-07-18

      本文链接:https://www.haomeiwen.com/subject/csullctx.html