SELECT CID,CNAME
FROM Customers
WHERE CNAME LIKE'A%';
排序检索数据
1.查询地址为空的顾客信息,按姓名降序排列
SELECT CID,CNAME
FROM Customers
WHERE ADDRESS ISNULLORDERBY CNAME DESC
过滤数据
1.查询薪水大于3000的销售员信息,薪水为空按3000计算(薪水为空怎么处理)
SELECT SID,SNAME
FROM Sales
WHERE SALARY >3000AND SALARY ISNOTNULL;
高级链结
1.找出比Smith工资高的销售员(至少有两个Smith,工资不一样)(两个以上不会实现)
SELECT SID,SNAME
FROM Customers
WHERE SALARY>ALL(SELECT SALARY
FROM Customers
WHERE CNAME='Smith');
使用存储过程
1.编写一个存储过程,计算顾客在给定的时间前一年对某种商品的总购买量
CREATEPROCEDURECOMPUTE(
v_cid INCHAR(4),
v_sum OUT NUMBER(6,2),
v_date INDATEDEFAULT SYSDATE)ASBEGINSELECTSUM(QTY)INTO v_sum
FROM orders
WHERE cid=v_cid AND
DATE_BUY BETWEEN v_date-365AND v_data;END;
2.编写一个存储过程,计算用户在给定时间前一年对某首歌曲的收听次数
CREATEPROCEDURE NUM(
v_uid IN NUMBER(10),
v_sid IN NUMBER(10),
v_sum OUT NUMBER,
v_date INDATEDEFAULT SYSDATE
)ASBEGINSELECTCOUNT(*)INTO v_sum
FROM listen_history
WHERE uid=v_uid AND
sid=v_sid AND
date_listen BETWEEN v_date-365AND v_date;END;
3.设计一个存储过程,计算某学生在给定时间前一年的总借书数量。
CREATEPROCEDURE NUM(
V_SNO IN NUMBER(10),
V_DATE INDATEDEFAULT SYSDATE,
V_SUM OUT NUMBER)ASBEGINSELECTSUM(LQTY)INTO V_sum
FROM lend_return
WHERE V_SNO=SNO ANDDATEBETWEEN V_DATE-365AND V_DATE;END;
CREATEPROCEDURE NUMT(
V_SNAME IN NUMBER(10),
V_DATE INDATEDEFAULT SYSDATE,
V_AVTIME OUT NUMBER(6.2))ASBEGINDECLARECURSOR c1 ISSELECT SNAME,SUM(RDATE-LDATE)AS SUMTIME,SUM(LQTY)AS SUMBOOK
FROM lend_return ,students
WHERE students.SNAME=V_SNAME AND
students.SNO=lend_return.SNO AND
LDATE <= V_DATE
GROUPBY lend_return.SNO;
V_SUMBOOK NUMBER;
V_SUMSUMBOOK NUMBER;
V_SUMTIME DATE;
V_SUMSUMTIME DATE;BEGINOPEN c1;LOOPFETCH c1 INTO V_SNAME,V_SUMTIME,V_SUMBOOK;
V_SUMSUMBOOK:=V_SUMSUMBOOK+V_SUMBOOK;
V_SUMSUMTIME:=V_SUMSUMTIME+V_SUMTIME;EXITWHEN c1%NOTFOUND;
V_AVTIME=V_SUMSUMBOOK/V_SUMSUMTIME;ENDLOOP;CLOSE c1;END;
2.设计一个游标,为年平均借书数量高于100本的学生的可借本数增加10本。
DECLARE
V_SNO NUMBER(10);
V_canlended NUMBER(2);
V_sum NUMBER;
V_date DATEDEFAULT SYSDATE;CURSOR plus ISSELECT SNO,sum(LQTY)AS sumbook
FROM lend_return
WHERE LDATE BETWEEN V_date-365AND V_date
GROUPBY SNO;BEGINOPEN plus;LOOPFETCH plus INTO V_SNO,V_sum,V_canlended;EXITWHEN c1%NOTFOUND;IF V_sum>100THEN V_canlended=V_canlended+10;UPDATE students SET canlended =V_canlended WHERECURRENTOF PLUS;ENDIF;ENDLOOP;CLOSE plus;END;