第1章 数据库和SQL
数据库(DB):将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。
数据库管理系统(DBMS):用来管理计算机的系统。
服务器:用来接收其他程序程序发出的请求,并对该请求进行相应处理的程序,或者安装了此类程序的设备。
客户端:向服务器发送请求的程序,或者安装了此类程序的设备。
SQL语句及其种类:SQL用关键字、表名、列名等组合而成的一条语句来描述操作的内容。种类包括:DDL、DML、DCL。
数据库的创建:CREATE DATABASE <数据库名称>;
表的创建:CREATE TABLE
命名规则:只能使用半角英文字母、数字、下划线,且必须以半角英文字母开头。
数据类型:INTEGER型,CHAR型,VARCHAR型,DATE型
约束条件:NOT NULL、PRIMARY KEY
表的删除 :DROP TABLE <>;
表定义的更新: 添加列 ALTER TABLE <> ADD COLUMN <>; 删除列 ALTER TABLE <> DROP COLUMN <>; 插入数据 INSERT INTO <> VALUES ();
第2章 查询基础
简单查询:SELECT <> FROM <>;
设置别名:AS
去重:DISTINCT
算术运算符:+ 、 – 、 * 、 /
比较运算符: = 、 <>、 >= 、 >、 <、 <= (注意:不能对NULL使用比较运算符,IS NULL ;IS NOT NULL)
逻辑运算符: NOT 、 AND 、OR
第3章 聚合与排序
聚合函数: COUNT 、SUM 、 AVG 、MAX 、 MIN
分组:GROUP BY
HAVING字句,放在GROUP BY 之后
排序:ORDER BY
ASC升序 , DESC降序
排序NULL值放在最后
第4章 数据更新
数据插入 INSERT INTO < > ()VALUES ();
插入默认值 DEFAULT
复制其他表的内容:INSERT INTO < > () SELECT
数据的删除:DROP TABLE 将表完全删除,DELETE会留下表,删除表中的全部内容
数据的更新:UPDATE <表名> SET <列名> = <表达式>;
事务:需要在同一个处理单元中执行的一系列更新处理的集合。
创建事务:START TRANSACTION;(MySQL)
COMMIT——提交处理
ROLLBACK——取消处理
事务具有ACID特性:
- 原子性(Atomicity):在事务结束时,其中所包含的更新处理要么全部执行,要么完全不执行。
- 一致性(Consistency): 事务中包含的处理要满足数据库提前设置的约束,如主键约束或者NOT NULL约束。
- 隔离性(Isolation):不同事务之间互不干扰。
- 持久性(Durability):也称耐久性,指的是在事务结束后,DBMS能够保证该时间点的数据状态会被保存的特性。
第5章 复杂查询
视图:“从SQL的角度来看视图就是一张表” 与表的区别在于是否保存了实际的数据。视图就是保存好的SELECT语句。
使用视图的优点:
- 无需保存数据,节省了存储设备的数据空间。
- 将频繁使用的SELECT语句保存成视图,不用每次都重复书写。
创建视图的方法:CREATE VIEW 视图名称 (<视图列名1>,<视图列名2>,<>,······) AS <SELECT语句>
视图的限制: - 定义视图时不能使用ORDER BY 子句
- 对视图进行更新需要满足这些条件(1.SELECT子句中未使用DISTINCT 2.FROM子句中只有一张表 3.未使用GROUP BY 4. 未使用HAVING)
删除视图:DROP VIEW
子查询:一言以蔽之,子查询就是一次性视图。与视图不同,子查询在SELECT语句执行完毕之后就会消失。
标量子查询:必须而且只能返回1行1列的结果。
标量子查询的书写位置:能够使用常数或者列名的地方,无论是SELECT子句、GROUP BY子句、HAVING子句,还是ORDER BY子句,几乎所有的地方都可以使用。
关联子查询:在子查询中添加WHERE子句的条件
以一个例子来说明:通过关联子查询按照商品种类对平均销售单价进行比较
SELECT product_type,product_name,sale_price
FROM Product AS P1
WHERE sale_price > (SELECT AVG(sale_price)
FROM Product AS P2
WHERE P1.product_type = P2.product_type
GROUP BY product_type);
第6章 函数、谓词、CASE表达式
算术函数:+,-,*,/,ABS绝对值,MOD求余,ROUND四舍五入
字符串函数:||——拼接,在MySQL中用CONCAT函数;LENGTH——字符串长度;LOWER——小写转换;REPLACE——字符串的替换;SUBSTRING——字符串的替换;UPPER——大写转换;
日期函数:CURRENT_DATE——当前日期(MySQL);CURRENT_TIME——当前时间;CURRENT_TIMESTAMP——当前日期和时间;EXTRACT——截取日期元素
转换函数:CAST——类型转换;COALESCE——将NULL转换为其他值
谓词:
LIKE——字符串的部分一致查询 %代表“0字符以上的任意字符串” ,_代表“任意一个字符串”
BETWEEN——范围查询
IS NULL、IS NOT NULL —— 判断是否为NULL
IN——OR的简单用法
EXIST 判断是否存在满足某种条件的记录,如果存在这样的记录就返回为真,如果不存在就返回为假。EXIST通常用关联子查询作为参数。
CASE表达式 CASE WHEN <> THEN <> ELSE <> END
第7章 集合运算
行方向:UNION(并集),UNION ALL (包含重复项),INTERSECT(交集)——选取表中的公共部分,EXCEPT——用a表减去ab俩表公共的部分
列方向(表的联结):内联结——INNER JOIN, 外联结——OUTER JOIN 选取主表的全部信息(用LEFT、RIGHT来指定主表)
交叉联结——CROSS JOIN (不常用) 笛卡尔积
第8章 SQL高级用法
窗口函数也称OLAP(Online Analysis Processing)函数,能对数据库数据进行实时分析处理。
语法:<窗口函数> OVER ([PARTITION BY <列清单>] ORDER BY <排序用列清单>)
- 能过作为窗口函数使用的函数:(SUM,AVG,COUNT,MAX,MIN)
- RANK、DENSE_RANK、ROW_NUMBER
PARTITION BY设定排序的对象范围(横向对表分组)。
ORDER BY 指定按哪一列、何种顺序进行排序(纵向排序)。
窗口函数只能在SELECT子句之中使用。因为在DBMS内部,窗口函数是对WHERE子句或者GROUP BY子句处理后的“结果”进行的操作。
将聚合函数当作窗口函数使用时的最大特征是以“自身记录”作为基准进行统计,SUM可以实现累计的功能。
用AVG计算移动平均
SELECT product_id,product_name,product_price,
AVG (sale_price) OVER (ORDER BY product_id ROWS 2 PRECEDING) AS moving_avg
FROM Product;
ROWS(行)和PRECEDING(之前) 表示选之前的三行
GROUPING运算符
ROLLUP——同时得出合计和小计
GROUPING——让NULL更加容易分辨
CUBE——用数据来搭积木
GROUPING SETS——取得期望的积木