Oracle 截取函数 WHERE HAVING区别 MDL查询练习

本文介绍了Oracle数据库中SUBSTR函数的使用,解释了WHERE和HAVING子句的区别,并提供了实际的查询练习。通过示例展示了如何在SQL中截取字符串,以及在聚合查询中使用HAVING进行过滤。此外,还给出了两个具体的操作示例,分别是查询牙膏卖出数量最多的供应商和调整牙膏商品单价的两种方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、数据库截取字符串SUBSTR函数的使用
2、WHERE HAVING函数的使用区别
3、Oracle查询小练习

1、SUBSTR(str,pos,len)
其中的 str表示被截取的字段
    pos表示开始的下标
    len表示截取的长度

2、在SQL中增加HAVING自居的原因是,WHERE关键字无法与合计函数(COUNT, SUM, AVG, MIN, MAX)一起使用。换个说法是,WHERE是对分组之前的数据进行过滤,二HAVING是对分组之后的数据进行过滤,所以GROUP BY是在WHERE之后,在HACING之前。

3、有三个表:

  • customer(customerid/name/location);

  • product(productid/productname/unitprice/category/provider)

  • purcase(customerid/productid/quantity)

  • 第一步:建表(包括约束,顾客名称和商品名称不能重复,商品单价大于0)
    CREATE TABLE customer(
            customerid varchar2(10),
            name varchar2(20) NOT NULL,
            location varchar2(50),
            CONSTRAINT pk_customerid PRIMARY KEY(customerid) );
    CREATE TABLE product(
            productid varchar2(3),
            productname varchar2(20) NOT NULL,
            unitprice number,
            category varchar2(20),
            provider varcha2(20)
            CONSTRAINT pk_productid PRIMARY KEY(customerid),
            CONSTRAINT ck_unitprice CHECK(unitprice>0) );
    CREATE TABLE purcase(
            customerid varchar2(10),
            productid vachar2(10)
            quantity number,
    CONSTRAINT fk_customerid FOREIGN KEY(customerid) references customer(customerid) on delete cascade,
    CONSTRAINT fk_productid FOREIGN KEY(productid) references product(productid) on delete cascade,
    CONSTRAINT ck_quantity CHECK(quantity between 0 and 20));

example1: 查询牙膏卖出数量最多的供应商

SELECT p1.productid sum(p2.quantity)
FROM product p1,purcase p2
WHERE p1.productid=p2.productid,
    AND p1.productname=“牙膏”
GROUP BY p1.productid
HAVING sum(p2.quantity)=(
     SELECT max(sum(p2.quantity))
     FROM product p1,purcase p2
     WHERE p1.productid=p2.productid,
      AND p1.productname=“牙膏”
      GROUP BY p1.productid)
csdn博客中居然打不出来空格,查询后才知,可以把输入法中的半角改成全角即可
example2: 将所有牙膏商品的单价增加10%
方法一:
SELECT unitprice*1.1 unitprice
FROM product
WHERE productname=‘牙膏’;

方法二:UPDATE product SET unitprice=unitprice*1.1 WHERE productname=‘牙膏’;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值