首页 > 代码库 > 8.11
8.11
1、出现分组函数,不能用where 用having
2、to_date 这样子写
3、
//假设所有商品的有效期是一年, 以当前2017-06-01为标准, 查询所有商品的信息, 并且加一列标注是否过期
UPDATE product p SET p.sfgq = CASE WHEN (TO_DATE (‘2017-06-01‘,‘yyyy-mm-dd‘)-p.createtime)/365<=1 THEN 1
ELSE 0 END ;
不能够用select,因为那一列中没有任何的数据
4、decode里面只能写常量
case when中可以写表达式
5、在avg,sum 等的函数要过滤空值加nvl(列名,0)
6、where 列名is not null 空列不予计算
//8、 以Cno升序、Degree降序查询Score表的所有记录。
SELECT * FROM score sc ORDER BY sc.cno ASC,sc.degree DESC
order by 链接两列不用在写一次关键字直接用,链接就可以
select * from PRODUCT t
-- 使用insert into任意添加三条数据(数据信息自定)加到这个表中
INSERT INTO product
VALUES(21,‘f-1234‘,‘橡皮‘,10.00,12.00,‘赵六‘,20,‘e‘,1,SYSDATE);
INSERT INTO product
VALUES(22,‘f-12h‘,‘橙子‘,3.50,5.00,‘赵六‘,20,‘a‘,1,SYSDATE);
INSERT INTO product
VALUES(23,‘f-30‘,‘绿茶‘,2.00,3.00,‘赵六‘,20,‘d‘,1,SYSDATE);
COMMIT;
-- 删除‘猪肉‘的那条记录
DELETE product t WHERE t.pname=‘猪肉‘;
COMMIT;
-- 将‘扳手‘和‘钳子‘的商品名称分别改为‘16号扳手‘和‘小号钳子‘, 并将这两个商品的管理人员都改为‘赵六‘
UPDATE product p SET p.pname=‘16号扳手‘,p.toma=‘赵六‘
WHERE p.id=9;
UPDATE product p SET p.pname=‘小号钳子‘,p.toma=‘赵六‘
WHERE p.id=10;
COMMIT;
-- 查询商品类型为‘a‘的所有商品, 并按照售价由大到小排序
SELECT t.*,NVL(t.outprice,0) FROM product t WHERE t.ptype=‘a‘
ORDER BY t.outprice DESC;
-- 查询王五负责的c类商品
SELECT * FROM product t WHERE t.ptype=‘c‘ AND t.toma=‘王五‘
-- 查询剩余数量小于50的所有商品
SELECT * FROM product t WHERE t.lastcou<50
-- 查询剩余数量在60-80之间的所有商品
SELECT * FROM product t WHERE t.lastcou BETWEEN 60 AND 80
-- 查询商品名称带‘笔‘的和带‘鱼‘的记录
SELECT * FROM product t WHERE t.pname LIKE (‘%鱼%‘) OR t.pname LIKE (‘%笔%‘);
-- 查询商品编号中带‘tt‘的记录
SELECT * FROM product t WHERE t.pcode LIKE(‘%tt%‘);
-- 查询商品类型为a, d, c的所有商品
SELECT * FROM product t WHERE t.ptype IN(‘a‘,‘b‘,‘c‘) ;
-- 查询整个表中每一类商品的剩余数量, 并按照剩余数由大到小排序
SELECT t.id, t.pname,t.lastcou FROM product t ORDER BY t.lastcou DESC;
-- 查询所有‘e‘类型商品, 并按照剩余库存数量排序
SELECT * FROM product t WHERE t.ptype=‘c‘ ORDER BY t.lastcou
-- 查询管理商品数少于4的管理员名称和管理的商品数量
SELECT t.toma 管理者, COUNT(t.id) 商品数量 FROM product t HAVING COUNT(t.id)<4 GROUP BY t.toma
-- 查询所有的管理员名称和其手上所管理的所有商品数量
SELECT t.toma 管理者, SUM(t.lastcou) 商品数量 FROM product t GROUP BY t.toma
-- 查询所有的管理员名称和其手上所管理的所有‘a‘类商品名称的数量
SELECT t.toma 管理者, SUM(t.lastcou) 商品数量 FROM product t WHERE t.ptype=‘a‘ GROUP BY t.toma
-- 查询所有商品中剩余数量最少的一个
SELECT * FROM product p WHERE p.lastcou=( SELECT MIN(lastcou) AS minlastcou FROM product)
-- 查询生产日期在2015/5/31之前的数据
SELECT * FROM product p WHERE p.createtime< TO_DATE (‘2015/5/31‘,‘yyyy/mm/dd‘)
-- 假设所有商品的有效期是一年, 以当前2017-06-01为标准, 查询所有商品的信息, 并且加一列标注是否过期
SELECT p.*, CASE WHEN (TO_DATE (‘2017-06-01‘,‘yyyy-mm-dd‘)-p.createtime)/365<=1 THEN ‘未过期‘
ELSE ‘过期‘ END FROM product p;
-- 将所有过期的商品的有效标志改为0
UPDATE product p SET p.mark=0 WHERE (TO_DATE (‘2017-06-01‘,‘yyyy-mm-dd‘)-p.createtime)/365>1;
-- 查询所有商品中还有一个月就过期的商品(一个月按照30天计算)
SELECT * FROM product p WHERE p.createtime+30>TO_DATE (‘2017-06-01‘,‘yyyy-mm-dd‘)
-- 查询每个管理员所管理的商品的平均进价价格和售价价格
SELECT AVG(NVL (p.inprice,0)),AVG(NVL (p.outprice,0)),p.toma FROM product p GROUP BY p.toma
-- 查询每个管理员手上的商品的利润的平均值
SELECT p.toma,AVG(NVL (p.outprice,0)-NVL (p.inprice,0)) FROM product p GROUP BY p.toma
-- 查询假设每个管理员把所有商品售完后各自的利润总和
SELECT p.toma,SUM((p.outprice-p.inprice)*p.lastcou) FROM product p GROUP BY p.toma
-- 查询出利润总和最高的管理员的名称, 以及利润
WITH rr AS
(SELECT p.toma,SUM((p.outprice-p.inprice)*p.lastcou) lirun FROM product p GROUP BY p.toma)
SELECT * FROM rr WHERE rr.lirun=(SELECT MAX(rr.lirun) FROM rr )
--SELECT MAX(SUM((p.outprice-p.inprice)*p.lastcou)) FROM product p GROUP BY p.toma
-- 查询商品编号重复的记录并将他们删除
DELETE product p3 WHERE p3.id IN(SELECT p1.id FROM product p1, product p2
WHERE p1.id!=p2.id AND p1.pcode=p2.pcode)
8.11