- 实验目的
1.掌握SQL语言中常用系统函数;
2.掌握SQL语言的应用。
- 实验内容
1. 查询SQL中如下常用函数的使用,并举例说明(完成格式参考Length)。
- 字符< Ltrim、Replace、Rtrim、Substr、Trim>
- 日期< Sysdate、next_day>
- 转换< To_char、to_date、to_number>
- 统计函数< Sum、Avg、Max、Min、Count>
例如:Length
函数形式:Length(X)
函数说明:返回字符串X的长度
举例:select length(‘hello world’) from dual;
运行结果:
LENGTH('HELLOWORLD')
--------------------
函数形式 |
函数说明 |
举例&运行结果 | |
Ltrim |
Ltrim(x[,trim_string]) |
删除字符串左边的字符,默认情况下删除左边空格;可以选择使用trim_string指定将要被删除的字符(不是字符串), 停止条件:字符串第一个字符不在trim_string里 |
|
Replace |
Relace(‘x’,’search_string’,’replace_string’) |
在字符串x中查找search_string,找到后将替换成replace_string |
|
Rtrim |
Rtrim(x[,trim_string]) |
删除字符串右边的字符,默认情况下删除右边空格;可以选择使用trim_string指定删除将要被删除的字符 |
|
Substr |
Stbstr(x,start[,length]) |
返回字符串的子串,从start开始(从1开始),可选的length 表示子串的长度(空格也算一位) |
|
Trim |
Trim([trim_char] from x) |
删除字符串左右两边的字符,默认情况下删除空格;可以选择使用trim_string指定删除将要被删除的字符 |
|
Sysdate |
Sysdate() |
返回当前系统的日期 |
|
next_day |
Next_day(date,’day’) |
获取指定日期到下一个星期几的日期,date为指定日期,day参数为下一个星期几(数字:1-7星期日~星期一)(字符串:Monday~Sunday) 当第二个参数传的星期数比现有星期数小的时候,会返回下一个星期的日期;当第二个参数所传的星期数比 现有的星期数大的时候,则会返回本周的相应星期日期。 |
|
To_char |
To_char(x[,fmt]) |
将指定表达式转化成字符串 |
|
to_date |
To_date(c[,]fmt) |
将字符串转换成日期;c必须大于0且小于5378484,fmt为’J’表示公元转换 |
|
to_number |
To_number(c[,fmt]) |
将字符串转换成数值,与to_char作用相反, |
|
Sum |
Sum(x) |
汇总值 |
|
Avg |
Avg(x) |
平均数 |
|
Max |
Max(x) |
最大值 |
|
Min |
Min(x) |
最小值 |
|
Count |
Count(x) |
统计数量 |
|
2. 在使用SQL的内置函数时,经常用到关键词dual,查询dual的含义,并举例说明其使用方法。
答:
- 含义:dual是一个Orcale中的一个虚表,利用这个虚表可以数值或查看序列,或者调用一些内置得函数。
- 使用方法:select 字段名/函数from dual;
3. 练习SQL事务处理
(参见教材p112- p113中的示例内容,自己举例使用保存点进行事务回退操作,将练习所执行的SQL记录下来)
4. SQL语言的应用(根据题目的写出执行正确的SQL语句):
(1)解锁HR模式,对HR模式下的表进行操作(此操作不用记录);
(2)以HR身份登录数据库后进行如下操作:
- 查询HR.EMPLOYEES表的表结构;
- 查询EMPLOYEES表中每个雇员的姓名(要求将first_name,last_name字段连接在一起显示)、职位、工薪、部门编号;
- 查询HR.DEPARTMENTS表的表结构;
- 使用子查询查询属于某一部门员工的姓名、职位、工薪、部门编号的信息(已知的信息为部门名称,部门名称由用户自己给出);
- 统计某一部门的雇员的最高和最低工薪;
- 向EMPLOYEES表添加一组数据:
values(600,’LISI’,’lisi@163.com’,sysdate,’SH_CLERK’,1650)
通过SELECT查询语句,查看是否在EMPLOYEES表中添加了相应的记录;
- 使用UPDATE语句更新该记录的SALARY列,为部门编号80的员工上调工薪10%;
- 删除操作⑥中新增加的那条记录。
实验五附加:SQL语句基础(子查询、多表查询应用)
-
- 实验目的
- 掌握子查询的使用;
- 掌握检索多表中的数据。
- 实验内容
SQL语言的应用(以scott用户下emp、dept表为例,根据题目写出执行正确的SQL语句或运行结果):
1.列出每个部门的部门号,员工数量、员工平均工资。
2.列出员工SCOTT所在部门的所有员工编号(empno)、姓名(ename)、部门编号(deptno)以及工资(sal)。
3.列出工资(sal)比SCOTT多的所有员工信息。
4.查询emp表中所有员工的编号(empno)、姓名(ename)、部门编号(deptno)、部门名称(dname)。
5.若已知emp,dept表数据如下图所示:
图1 emp表
图2 dept表
- 运行如下语句后:
SQL> select e.empno, e.ename,d.deptno,d.dname
2 from emp e left join dept d
3 on e.deptno=d.deptno;
显示的结果数据应为( 14 )行,并写出运行结果。
- 运行如下语句后:
SQL> select e.empno, e.ename,d.deptno,d.dname
2 from emp e right join dept d
3 on e.deptno=d.deptno;
显示的结果数据应为( 15 )行,并写出运行结果。
(3)运行如下语句后:
SQL> select e.empno, e.ename,d.deptno,d.dname
2 from emp e full join dept d
3 on e.deptno=d.deptno;
显示的结果数据应为( 15 )行。
(4)运行如下语句后:
SQL> select count(*) from emp, dept;
显示的统计结果为( 56 )。