create view `ViewPratice5_1`(product_name, sale_price, regist_date)
as
select product_name, sale_price, regist_date
from product
where `sale_price` >= 1000 and regist_date = '2009-09-20';
select * from ViewPratice5_1;
INSERT INTO ViewPratice5_1 VALUES (' 刀子 ', 300, '2009-11-02');
#当向视图中插入数据时,同时也会向原表插入数据插入数据 ,
#而原表(employees)中存在多个字段不允许为空,所以无法插入 ,将这些不允许为空的字段修改为允许为空即可。
select product_id,
product_name,
product_type,
sale_price,
(select avg(sale_price) from product as sale_price_all)
from product;
CREATE VIEW `AvgPriceByType`(product_id,
product_name,
product_type,
sale_price,
vg_sale_price)
AS
SELECT
product_id,
product_name,
product_type,
sale_price,
(SELECT AVG(sale_price)
FROM product AS p2
WHERE p1.product_type = p2.product_type
GROUP BY product_type) AS avg_sale_price
FROM
product AS p1;
#是的。任何与NULL进行的运算或者包含NULL的表达式都会得到NULL作为结果。
#这种行为称为"三值逻辑",其中的第三个值就是NULL。
SELECT product_name, purchase_price
FROM product
WHERE purchase_price NOT IN (500, 2800, 5000);
SELECT product_name, purchase_price
FROM product
WHERE purchase_price NOT IN (500, 2800, 5000, NULL);
#当使用NOT IN子句时,如果指定的值列表中包含NULL,则结果可能不会如预期般工作。
#这是因为在SQL中,与NULL进行比较的结果通常是未知的(不是TRUE也不是FALSE),
#因此,NOT IN操作符可能无法按照预期的方式处理NULL值。
#修改后
SELECT product_name, purchase_price
FROM product
WHERE purchase_price NOT IN (500, 2800, 5000) AND purchase_price IS NOT NULL;
select
sum(case when `sale_price` <= 1000 then 1 else 0 end) as low_price,
sum(case when `sale_price` > 1000 and `sale_price` <= 3000 then 1 else 0 end) as mid_price,
sum(case when `sale_price` > 3000 then 1 else 0 end) as high_price
from product;