视图
# 创建视图
CREATE VIEW productsum (product_type, cnt_product)
AS#视图用来保存SELECT
SELECT product_type, COUNT(*)
FROM product
GROUP BY product_type
ORDER BY product_type;
(理解为把SELECT的结果保留下来)
可以在视图上进行大部分对表可以进行的操作,
子查询(套娃查询)
SELECT product_type, cnt_product
FROM (SELECT *
FROM (SELECT product_type,
COUNT(*) AS cnt_product
FROM product
GROUP BY product_type) AS productsum
WHERE cnt_product = 4) AS productsum2;
#套娃而且不好读
既在from后面还是一个SELECT语句(对查询筛选后的结果在进行查询筛选)
(对视视图的查询应该也是一个子查询)
套太多层子查询会使代码变的难以理解,所以应该尽量少用,
函数
算数函数
加减乘除
ABS( 数值 ) -- 绝对值,MOD( 被除数,除数 ) -- 求余数
字符串函数
CONCAT(str1, str2, str3)拼接,LENGTH( 字符串 ) -- 字符串长度
REPLACE( 对象字符串,替换前的字符串,替换后的字符串 ) 替换
SUBSTRING (对象字符串 FROM 截取的起始位置 FOR 截取的字符数) -- 字符串的截取
日期函数
CURRENT_TIME -- 当前时间
CURRENT_TIMESTAMP -- 当前日期和时间
EXTRACT(日期元素 FROM 日期) -- 截取日期元素(EXTRACT(YEAR FROM CURRENT_TIMESTAMP))返回当前年份
转换函数
CAST(转换前的值 AS 想要转换的数据类型)类型转换
COALESCE(数据1,数据2,数据3……)-- 将NULL转换为其他值
谓词
WHERE strcol LIKE '%ddd%'; (%代表任意长度字符 _ 代表一个字符)
BETWEEN A AND B (值在A和B的范围间)
IS NULL/IS NOT NULL (是NULL\不是NULL则返回ture)
IN(A,B,C) (是A,B,C其中任何一个则返回ture)
CASE 表达式(逻辑判断)
CASE WHEN <求值表达式> THEN <表达式>
WHEN <求值表达式> THEN <表达式>
.
.
ELSE <表达式>
END
满足条件则执行then后的语句
SELECT product_name,
CASE WHEN product_type = '衣服' THEN CONCAT('A : ',product_type)
WHEN product_type = '办公用品' THEN CONCAT('B : ',product_type)
WHEN product_type = '厨房用具' THEN CONCAT('C : ',product_type)
ELSE NULL
END AS abc_product_type
FROM product;
#使用case 来判断product_type 并在对应的类似后面分别加上A,B,C