SQL编程学习03

一、要点回忆

q1:ch03主要讲了哪些内容?
主要讲了视图、谓词两大块内容。接下来依次做简要回顾:

  • 视图部分,主要学习了视图的定义、视图与表的练习、视图的创建、删除、修改(ALTER)、更新(UPDATE)
  • 谓词,返回值是TRUE/FLASE/UNKNOW,包括like,between,in/not in ,exists, case
  • 子查询(嵌套子查询,标量子查询,关联子查询)

q2:视图与表的区别是什么?操作试图要注意哪些?
视图不是表,视图是虚表,视图基于表。
update视图中表的数据时,会同步修改相应表中的数据,应当避免这种操作。

q3:case表达式的语法是怎样的?

CASE WHEN <求值表达式> THEN <表达式>
     WHEN <求值表达式> THEN <表达式>
     WHEN <求值表达式> THEN <表达式>
     .
ELSE <表达式> # else null 是默认值,可省略
END  

二、课后练习

3.1 创建出满足下述三个条件的视图(视图名称为 ViewPractice5_1)

CREATE VIEW ViewPractice5_1(product_name, sale_price, regist_date)
AS
SELECT product_name, sale_price, regist_data # condition3
  FROM productcopy 
 WHERE sale_price >= '1000' # condition1
   AND regist_data = '20090920' # condition 2
 ORDER BY sale_price ASC;
 
SELECT * FROM ViewPractice5_1;

3.2 向视图中插入如下数据会报错,因为列product_type not null

INSERT INTO ViewPractice5_1 VALUES (' 刀子 ', 300, '2009-11-02');

3.3 关联子查询

SELECT product_id, 
	   product_name, 
	   product_type, 
	   sale_price, 
	   (SELECT AVG(sale_price)
	      FROM product AS p2 
		 WHERE p1.product_type = p2.product_type) AS AvgPriceByType
FROM product AS p1;

3.5 判断

四则运算中含有 NULL 时,运算结果一定会变为NULL。

3.6 谓词in

结果不一样,语句1能够查询出数据,语句2查询结果为空。因为IN、NOT IN 无法选取出NULL数据的,选取NULL数据只能使用 IS NULL、IS NOT NULL。
语句1的结果:
在这里插入图片描述
语句2结果为空,因为谓词 NOT IN 不能匹配 NULL。
实验发现,IN 与 IN NULL、IN NOT NULL 查询结果一样,如下所示:

SELECT product_name, purchase_price
  FROM product
 WHERE purchase_price IN (500, 2800, 5000);
 # WHERE purchase_price IN (500, 2800, 5000, NULL);
 # WHERE purchase_price IN (500, 2800, 5000, NOT NULL);

3.7 统计低档、中档、高档商品的数量

SELECT COUNT(case WHEN sale_price < 1001 
				  THEN sale_price 
				  ELSE NULL END) AS low_price,
	   COUNT(case WHEN sale_price BETWEEN 1001 AND 3000 # 闭区间
				  THEN sale_price 
				  ELSE NULL END) AS mid_price,
	   COUNT(case WHEN sale_price >= 3001 
				  THEN sale_price END) AS high_price # ELSE NULL 省略
  FROM product;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值