SQL Task3

一、视图

创建视图

创建视图不能用order by;多表合并这个功能很好用,可以把多个表中同一id集合在一起

CREATE VIEW view_shop_product(product_type, sale_price, shop_name)

AS

SELECT product_type, sale_price, shop_name

  FROM product,

       shop_product

WHERE product.product_id = shop_product.product_id;

修改视图结构

ALTER VIEW productSum

    AS

        SELECT product_type, sale_price

          FROM Product

         WHERE regist_date > '2009-09-11';

更新视图内容(不建议通过修改视图修改表)

视图是原表的派生,所以当底层表格必须发生变化的时候才可以。

UPDATE productsum

   SET sale_price = '5000'

WHERE product_type = '办公用品';

修改视图的时候原表也在跟着修改

删除视图

DROP VIEW productSum;

二、子查询

标量子查询

标量子查询返回一个值,比如下图,需要返回值为“004”

通过标量子查询语句查询出销售单价高于平均销售单价的商品

SELECT product_id, product_name, sale_price

  FROM product

WHERE sale_price > (SELECT AVG(sale_price) FROM product);

关联子查询

三、各种各样的函数

算术函数 (用来进行数值计算的函数)

字符串函数 (用来进行字符串操作的函数)

日期函数 (用来进行日期操作的函数)

转换函数 (用来转换数据类型和值的函数)

聚合函数 (用来进行数据聚合的函数)

算术函数

ABS -- 绝对值

MOD -- 求余数

ROUND -- 四舍五入

字符串函数

CONCAT -- 拼接

LENGTH -- 字符串长度

LOWER -- 小写转换

REPLACE -- 字符串的替换

SUBSTRING -- 字符串的截取

日期函数

CURRENT_DATE -- 获取当前日期

CURRENT_TIME -- 当前时间

转换函数

在 SQL 中主要有两层意思:一是数据类型的转换,简称为类型转换,在英语中称为cast;另一层意思是值的转换

CAST -- 类型转换

COALESCE -- 将NULL转换为其他值

 四、谓词

谓词就是返回值为真值的函数。包括TRUE / FALSE / UNKNOWN。

谓词主要有以下几个:

LIKE

前方一致

SELECT *FROM samplelike

WHERE strcol LIKE 'ddd%';   比如选择出dddabce“

中间一致

SELECT *FROM samplelike

WHERE strcol LIKE '%ddd%';  比如选择出‘12ddd3k’

后方一致

SELECT *FROM samplelike

WHERE strcol LIKE '%ddd';

使用下划线_代替%,任意一个字符

SELECT *FROM samplelike

WHERE strcol LIKE 'abc__';

BETWEEN(范围查询)

-- 选取销售单价为100~ 1000元的商品

SELECT product_name, sale_price

FROM product

WHERE sale_price BETWEEN 100 AND 1000;

开区间:

SELECT product_name, sale_price

FROM product

WHERE sale_price > 100AND sale_price < 1000;

IS NULL、IS NOT NULL

为了选取出某些值为 NULL 的列的数据,不能使用 =,而只能使用特定的谓词IS NULL

SELECT product_name, purchase_price

FROM product

WHERE purchase_price IS NULL;

SELECT product_name, purchase_price

FROM product

WHERE purchase_price IS NOT NULL;

IN

多个查询条件取并集时可以选择使用or语句

SELECT product_name, purchase_price

FROM product

WHERE purchase_price (NOT) IN (320, 500, 5000);

分步使用,先查到shop_id是000C,然后把这些店铺的销售单价取出

SELECT product_name, sale_price

FROM product

WHERE product_id (NOT) IN (SELECT product_id

  FROM shopproduct

                       WHERE shop_id = '000C');

EXISTS

谓词的作用就是 “判断是否存在满足某种条件的记录”。

如果存在这样的记录就返回真(TRUE),如果不存在就返回假(FALSE)。

EXIST(存在)谓词的主语是“记录”。

我们继续以 IN和子查询 中的示例,使用 EXIST 选取出大阪门店在售商品的销售单价。

SELECT product_name, sale_price

  FROM product AS p

WHERE EXISTS (SELECT *

                 FROM shopproduct AS sp

                WHERE sp.shop_id = '000C'

                  AND sp.product_id = p.product_id);

由于 EXIST 只关心记录是否存在,因此返回哪些列都没有关系。 EXIST 只会判断是否存在满足子查询中 WHERE 子句指定的条件“商店编号(shop_id)为 '000C',商品(product)表和商店商品(shopproduct)表中商品编号(product_id)相同”的记录,只有存在这样的记录时才返回真(TRUE)。

因此,使用下面的查询语句,查询结果也不会发生变化。(1代表任意一列)

SELECT product_name, sale_price

  FROM product AS p

WHERE EXISTS (SELECT 1 -- 这里可以书写适当的常数

                 FROM shopproduct AS sp

                WHERE sp.shop_id = '000C'

                  AND sp.product_id = p.product_id);

NOT EXIST--不存在值的用法

SELECT product_name, sale_price

  FROM product AS p

WHERE NOT EXISTS (SELECT *

                     FROM shopproduct AS sp

                    WHERE sp.shop_id = '000A'

                      AND sp.product_id = p.product_id);

五、case

根据不同分支得到不同列值

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;

实现列方向上的聚合

SELECT SUM(CASE WHEN product_type = '衣服' THEN sale_price ELSE 0 END) AS sum_price_clothes,

       SUM(CASE WHEN product_type = '厨房用具' THEN sale_price ELSE 0 END) AS sum_price_kitchen,

       SUM(CASE WHEN product_type = '办公用品' THEN sale_price ELSE 0 END) AS sum_price_office

  FROM product;

数字——行与列的转换【用SUM AVG MAX MIN的函数】

SELECT name,

       SUM(CASE WHEN subject = '语文' THEN score ELSE null END) as chinese,

       SUM(CASE WHEN subject = '数学' THEN score ELSE null END) as math,

       SUM(CASE WHEN subject = '外语' THEN score ELSE null END) as english

  FROM score

GROUP BY name;

文本——行与列的转换【用MAX MIN的函数】

SELECT name,

       MAX(CASE WHEN subject = '语文' THEN subject ELSE null END) as chinese,

       MAX(CASE WHEN subject = '数学' THEN subject ELSE null END) as math,

       MIN(CASE WHEN subject = '外语' THEN subject ELSE null END) as english

  FROM score

GROUP BY name;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容