- 实验目的
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 )。