第二章上机课SQL查询和SQL函数
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
息。
实现思路:
SQL 函数用于执行特定运算,包括分组函数、分析函数和单行函数,可接收一个或多个参数并返回一
个值。
单行函数包括如下内容,见表 2.1。 表 2.1 单行函数的内容
函数
说明
日期函数
对日期值进行运算并返回日期数据类型的输出结果。日期函数包括 ADD-MONTHS、 LAST-DAY、MONTHS-BETWEEN、ROUND、NEXT-DAY、TRUNC 和 EXTRACT
使用以下语句查看表中的记录。
SELECT * FROM my-test; 可以看到表中的所有记录都是相同的。
(3)测试 ROWID 伪列。 现在使用 ROWID 伪列区分这些记录。 SELECT ROWID ,id ,name FROM my-test; 输出结果为:
ROWID
ID NAME
------------------ ---- --------------------
VENCODE
-------
V001
V002
V003
V004
阶段六:使用 SQL 日期函数
需求说明:
公司决定提升 2003 年前半年之前就职的职员。要求显示职员的就职年度,如果日期晚于“01-7 月 -2003”,则四舍五入到下一年,即 2004 年。编写语句以显示 2003 年 7 月 1 日之前就职职员的详细信
-2-
老二牛车教育 《Oracle 数据库应用 》上机课
上述命令创建一个与 employee 表结构相同,名为 employee-cocp 的空表。 (2) 使用 SELECT 语句选择记录并插入到另一个表中。 要把部门代码为 DP02 的记录插入到副本表中,需执行以下命令。 INSERT INTO employee-copy SELECT * FROM employee WHERE deptcode =‘DP02’; (1) 使用 SELECT 语句指定列的别名。
AAAM4qAADAAAHsMAAB 1 This is line 1
AAAM4qAADAAAHsMAAC 1 This is line 1
AAAM4qAADAAAHsMAAD 1 This is line 1
AAAM4qAADAAAHsMAAE 1 This is line 1
可以看到每个行的 ROWID 值都是不同的。现在删除第三行。
参考步骤:
(1)启动 SQL*Plus,并登录到数据库 按以下结构创建一个名为 my-test 的表。
id
NUMBER(3)
name VARCHAR2(20)
(2)在表中插入 5 条完全相同的记录。 在 SQL 提示符下执行 5 次以下命令。
INSERT INTO my-test VALUES (1,‘This is line 1’);
实现思路: 连接操作符用于将两个或两个以上的字符串或者数据值合并在一起。使用连接操作符可将订单状态显 示在同一行中。
参考步骤: SELECT (orderno ||‘的订单日期为’|| odate || ‘发货日期为’ || del-date) AS “订单状态” FROM order-master WHERE vencode = ‘V001’ SELECT 语句的输出结果如图所示。
阶段二:构造 SELECT 语句 需求说明:
检查 employee 表的描述。 empno VARCHAR2(5) PRIMARY KEY ename VARCHAR2(25) designation VARCHAR2(20) dateofjoining DATE branchcode VARCHAR2(15) deptcode VARCHAR2(15) 职员表 employee 中的信息需要做较大的调整,在调整之前要先对表中的重要记录做一个副本。查询 职员信息时需要指定各个列的别名,如以中文名称做标题等。
E002 Jane
DP02
15000
E004 JOE
DP03
20000
E005 Michael
DP02
18000
E006 Jack Aranck
DP01
18000
E007 George
DP03
18000
使用 BETWEEN„AND 操作符可以实现同样的目的。 SELECT e . empno , ename, e . deptcode , s . empsal FROM employee e INNER JOIN salary-records s
-4-
老二牛车教育 《Oracle 数据库应用 》上机课
参考步骤:
打开 SQL*Plus。 在 SQL 提示符下输入以下命令。
SELECT vencode FROM vendor-master
UNION SELECT vencode FROM 输出结果如图所示。
order-master
WHERE
ostatus =‘c’;
实现思路: SELECT 命令可检索存储在数据库中的数据。SELECT 语句还可以与其它的 DDL 和 DML 语句一起使 用来执行各种操作,如创建表、插入记录和指定列的别名等。Baidu Nhomakorabea
参考步骤: (1)创建表 employee 表的副本,但不包含表中的记录。 在 SQL 提示符下输入以下命令。 CREATE TABLE employee-cocp AS SELECT * FROM employee WHERE 1=2;
SELECT empno“职员编号”, ename“职员姓名”, Designation “职位”, dateofjoining“入职日期”
FROM employee ;
阶段三:测试 SQL 操作符 需求说明: Oracle SQL 语言支持的操作符类型有算数操作符、比较操作符、逻辑操作符、集合操作符和连接 操作符。 检查 Salary-Records 表的描述。 Empcode VARCHAR2(10) Working-Days NUMBER empsal NUMBER 公司的财务部需要检查职员的工资。请使用 SQL 操作符编写语句,检索工资在 15000 到 20000 元 之间的职员的信息。 实现思路:
ROWNUM ID NAME ---------- ---- --------------------
1 1 This is line 1 2 1 This is line 1 3 1 This is line 1 4 1 This is line 1
使用以下语句限制查询返回的行数。 SELECT * FROM my-test WHERE ROWNUM<3; 上述命令返回两条记录。可以看出,使用 ROWNUM 伪列可以实现类似 SQL SERVER 中的 TOPn 功 能。
老二牛车教育 《Oracle 数据库应用 》上机课
SQL 查询和 SQL 函数
目标:
能够构造 SELECT 语句 能够测试 SQL 操作符 能够使用 SQL 函数
第一部分:指导: 本阶段重点介绍使用 SELECT 语句、SQL 操作符和 SQL 函数编写查询语序的方法
阶段一:测试 ROWID 和 ROWNUM 伪列 需求说明:
-1-
老二牛车教育 《Oracle 数据库应用 》上机课
DELECT FROM my-test WHERE ROWID =‘AAAM4qAADAAAHsMAAD’;
再次执行查询语句。 SELECT ROWID ,id ,name FROM my-test; 可以看到第三条记录已经被删除。由此可见,即使不定义主键,Oracle 也可以唯一区分表中的行,因 为 ROWID 可以当作表的主键。 (4)测试 ROWNUM 伪列。 使用以下语句测试 ROWNUM 伪列。 SELECT ROWNUM ,id ,name FROM my-test; 输出结果为:
阶段五:使用集合操作符 需求说明:
要求编写语句以显示 vendor-master 和 order-master 表中不重复的 vencode 列值,只列出 ostatus 为”c” 的 vencode。
实现思路: 集合操作符将两个查询的结果组合成一个结果。UNION 集合操作符将两个查询的结果组合成一起, 从而删除重复的行。UNION 操作符返回 order-master 和 vendor-master 表中所有不重复的 vencode 列值。 SELECT 语句中的 WHERE 子句显示 ostatus 为”c”的 vencode。
-5-
老二牛车教育 《Oracle 数据库应用 》上机课
阶段七:使用分析函数 需求说明:
检查 ProductDetails 表的描述。 Prod-No NUMBER ProdId VARCHAR2(10) ProdName VARCHAR2(15) ProdPrice NUMBER 销售经理想查看产品的详细信息,并根据产品价格对产品进行排序。ProdPrice 最高的产品将排在最高 位,即 1。要求编写语句以显示产品的 ProdId 和 ProdPrice,并根据产品价格对产品进行排序。按 ProdPrice 递减的顺序来显示产品。
ON e . empno = s . empno
WHERE s . empsal > = 15000 AND s . empsal < =20000; 以上语句的输出如图所示。
EMPNO ENAME
DEPTCODE
EMPSAL
----- ------------------------- --------------- ----------
数字函数
接受数字输入并返回数值作为输出结果
字符函数
接受数字输入并返回字符或数值
转换函数
转换值的数据类型。转换函数包括 TO-CHAR、TO-DATE 和 TO-NUMBER
其它函数
包括将空值转换为实际值的 NVL、NVL2、NULLIF
参考步骤: 打开 SQL*Plus。 在 SQL 提示符下输入以下命令。 SELECT EmpNo , Ename , designation , deptcode , ROUND (dateofjoining ,‘YEAR’) FROM Employee WHERE dateofjoining < ‘01-7 月-2003’; 输出结果如图所示
用户表因为没有建立主键约束而插入了重复的记录,为了解决数据冗余问题,必须删除表中重复的记 录。用户应用程序只关心查询结果集中的一部分,需要限制查询返回的行数。
实现思路: Oracle 的 ROWID 伪列可以唯一地标识表中的行,可以利用 ROWID 删除表中重复的记录。ROWNUM 伪列返回查询结果集中行的序号,可以通过 ROWNUM 限制查询返回的行数
订单状态 -----------------------------------------------------------o002 的订单日期为 14-5月 -05,发货日期为 15-5月 -05 o003 的订单日期为 14-5月 -05,发货日期为 15-2月 -05 o005 的订单日期为 14-5月 -05,发货日期为 15-2月 -05 o008 的订单日期为 11-5月 -05,发货日期为 12-6月 -05 o011 的订单日期为 14-1月 -05,发货日期为 10-2月 -05 o013 的订单日期为 14-3月 -05,发货日期为 15-5月 -05
由于比较操作符可用于比较不同的表达式,可以在 SQL 命令中使用比较操作符。
参考步骤:
在 SQL 提示符下输入以下命令。
SELECT e . empno , ename, e . deptcode , s . empsal
FROM employee e INNER JOIN salary-records s
-3-
老二牛车教育 《Oracle 数据库应用 》上机课
ON e . empno = s . empno WHERE s . empsal BETWEEN 15000 AND 20000;
阶段四:使用连接操作符 需求说明:
检查 order-master 表的描述。 orderno VARCHAR2(5) odate DATE vencode VARCHAR2(5) ostatus CHAR(1) del-date DATE 销售经理想查看 vencode 为 V001 的供应商的订单状态。需使用连接操作符编写查询语句,使订单号、 订购日期和发货日期在同一列显示,而非分列显示。