SQL笔记--复杂一点的查询


视图

# 创建视图
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


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值