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=‘牙膏’;