Task3
Task03:复杂查询方法-视图、子查询、函数等
3.1 视图
3.1.1 什么是视图
虚拟表,不直接更改原始数据库。
3.1.2 视图与表有什么区别
《sql基础教程**第2版》用一句话非常凝练的概括了视图与表的区别—“是否保存了实际的数据”。
3.1.3 为什么会存在视图
通过定义视图可以将频繁使用的SELECT语句保存以提高效率。
通过定义视图可以使用户看到的数据更加清晰。
通过定义视图可以不对外公开数据表全部字段,增强数据的保密性。
通过定义视图可以降低数据的冗余。
3.1.4 如何创建视图
create view test1(product_type,t_cum)
as
select product_type,count(*)
from product
group by product_type,
~~order by product_type;~~
上述代码 order by不能使用。一般的DBMS中定义视图时不能使用ORDER BY语句。下面这样定义视图是错误的。因为数据行无顺序。
3.1.5 如何修改视图结构
ALTER VIEW <视图名> AS <SELECT语句>
3.1.6 如何更新视图内容
对于一个视图来说,如果包含以下结构的任意一种都是不可以被更新的:
聚合函数 SUM()、MIN()、MAX()、COUNT() 等。
DISTINCT 关键字。
GROUP BY 子句。
HAVING 子句。
UNION 或 UNION ALL 运算符。
FROM 子句中包含多个表。
更新视图本质上也是对底层数据表的更新,可以成功但不推荐。
3.1.7 如何删除视图
DROP VIEW <视图名1> [ , <视图名2> …]
3.2 子查询
3.2.6 关联子查询
3.3 各种各样的函数
3.3.1 算数函数-数值计算
绝对值 ABS()
求余数 MOD(被除数,除数
四舍五入 ROUND(数值,位数)
3.3.2 字符串函数-字符串操作
拼接 CONCAT(str1,str2…)
字符串长度 LENGTH()
字符串替换 REPLACE(对象字符串,替换前字符串,替换后字符串)
字符串截取 SUBSTRING(对象字符串 FROM 截取起始位置 FOR 截取字符数)
字符串按索引截取 SUBSTRING_INDEX(原始字符串,分隔符,n)
3.3.3 日期函数-日期操作
获取当前日期 CURRENT_TIME CURRENT_DATE CURRENT_TIMESTAMP
截取日期元素 EXTRACT(日期元素 FROM 日期)
3.3.4 转换函数-转换数据类型和值
一是数据类型的转换,简称为类型转换,在英语中称为cast;另一层意思是值的转换。
数据类型转换 CAST(转换前的值 AS 想要转换的数据类型)
NULL转换为其他值 COALESCE(数据1,数据2,…)
3.3.5 聚合函数-进行数据聚合
3.4 谓词
3.4.1 什么是谓词
返回值为真值(TRUE/FALSE/UNKNOWN)的函数
常用谓词有:LIKE/BETWEEN/IS NULL/IS NOT NULL/IN/EXIST
3.4.2 LIKE谓词 – 用于字符串的部分一致查询
当需要进行字符串的部分一致查询时需要使用该谓词。
%是代表“零个或多个任意字符串”的特殊符号,_下划线匹配任意 1 个字符
3.4.3 BETWEEN谓词 – 用于范围查询
默认闭区间,若不需要临界值,应使用<和>。
3.4.4 IS NULL、 IS NOT NULL – 用于判断是否为NULL
3.4.5 IN谓词 – OR的简便用法
多个查询条件取并集
3.4.6 使用子查询作为IN谓词的参数
3.4.7 EXIST 谓词
EXIST谓词的使用方法
谓词的作用就是 “判断是否存在满足某种条件的记录”。
3.5 CASE 表达式
3.5.1 什么是 CASE 表达式?
CASE 表达式是在区分情况时使用的。条件分支。
CASE表达式的语法分为简单CASE表达式和搜索CASE表达式两种。
3.5.2 CASE表达式的使用方法
根据不同分支得到不同列值
实现列方向上的聚合
实现行转列