笔记
1.在select语句中使用distinct可删除重复行,在使用distinct时,null也被视为一类数据,distinct关键字只能用在第一个列名之前。
2.所有包含null的计算,结果肯定是null。
3.表中设置not null约束的原因: and(逻辑积),or(逻辑和),not这三个可以通过真值表判断,原本只有四行的真值表,如果要考虑null的话就会增加到9行,看起来也变得更加繁琐,考虑null的条件判断也会变得异常复杂,所以创建表的时候要给某些列设置not null。
练习题
2.1 编写一条 SQL 语句,从 Product(商品)表中选取出“登记日期(regist_date)在 2009 年 4 月 28 日之后”的商品。查询结果要包含 product_name 和 regist_date 两列。
select product_name,regist_date from Product where regist_date > '2009-04-28'
2.2 请说出对 Product 表执行如下 3 条 SELECT 语句时的返回结果。
(1) SELECT * FROM Product WHERE purchase_price = NULL;
答:从product表中筛选出purchase_price 列里行为NULL的其他所有列。
(2) SELECT * FROM Product WHERE purchase_price <> NULL;
答:从product表中筛选出purchase_price 列里行非NULL的其他所有列。
(3) SELECT * FROM Product WHERE product_name > NULL;
答:product_name列里没有空值,无数据返回。
2.3 代码清单 2-22(2-2 节)中的 SELECT 语句能够从 Product 表中取出“销售单价(sale_price)比进货单价(purchase_price)高出 500日元以上”的商品。请写出两条可以得到相同结果的 SELECT 语句。执行
结果如下所示。
(1)select product_name, sale_price, purchase_price from Product
where (sale_price-purchase_price) >= 500
(2)select product_name,sale_price,purchase_price from Product
where sale_price-500 >= purchase_price
2.4 请写出一条 SELECT 语句,从 Product 表中选取出满足“销售单价打九折之后利润高于 100 日元的办公用品和厨房用具”条件的记录。查询结果要包括 product_name 列、product_type 列以及销售单价打九折之后的利润(别名设定为 profit)。
select product_name,product_type, (sale_price*0.9 - purchase_price) as profit from Product where (sale_price*0.9 - purchase_price) > 100