使用scott用户,密码为tiger登录数据库orcl,数据库中有一个表,表名为emp,具体信息如下: emp职工表;
表中有如下列:empno(职工编号)、ename(职工姓名)、job(岗位)、MGR(主管的职工编号)、hiredate(入职日期)、sal(薪水)、comm(津贴)、deptno(部门编号)
练习一:
1. 查询emp(雇员)整个表内容;
select * from emp;
2. 只查询emp表中的job和deptno两列信息;
select job,deptno from emp;
3. 查询emp表中数据,并给列取中文别名 ;
select job \工作\,deptno \部门编号\
4.将姓名和薪水两列连接起来显示“xxx的薪水是多少”这样的信息; select ename||'薪水是'||sal from emp; 5.查询岗位为\的职工信息;
select * from emp where job='CLERK'; 6.查询部门编号不是10的职工信息;
select * from emp where deptno!='10'; 7.查询comm为空值的职工信息;
select * from emp where comm is null; 8.查询职工姓名中带有A的职工信息;
select * from emp where ename like '%A%'; 9.查询职工姓名中倒数第二个字符为E的职工信息; select * from emp where ename like '%E_';
10.查询职工姓名中带有L和E的职工信息,并且姓名中L在前,E在后;要求:只查询出职工编号,职工姓名,薪水和部门编号这四列,并且给部门编号列取中文别名;(扩展练习) select empno\职工编号\职工姓名\薪水\部门编号\ 11.查询职工姓名中带有L和E的职工信息,并且姓名中L在前,E在后,且要求姓名第三位是L; select * from emp where ename like '__LE%'
练习2:
1.查询部门编号为30,MGR主管编号为7698的员工信息; select * from emp where deptno='30' and mgr='7698'; 2.查询部门编号为10,或者job为CLERK的员工信息
select * from emp where deptno='10' or job='CLERK';
3.查询sal大于等于900,小于3000,并且部门编号为10、20的职工信息;
select * from emp where sal>=900 and sal<3000 or deptno='10'and deptno=20'; 4.查询mgr主管编号不是7698和7788,或者job岗位为CLERK的职工信息,查询结果并且先按sal薪水降序排列,再按empno职工编号升序排列 (扩展练习)
select * from emp where not(mgr='7698' or mgr='7798') or job='CLERK' order by sal desc,empno asc;
5.将下面SQL分别执行,能得出什么结论?(扩展练习)
select * from emp where deptno='30' and mgr='7698' or job='CLERK';
select * from emp where job='CLERK' or deptno='30' and mgr='7698';
select * from emp where deptno='30' or mgr='7698' and job='CLERK';
练习3:
1.往emp表里插入一条雇员信息,雇员编号为4位,第一位为按组号取,其他三位组内讨论决定,hiredate取当前系统值,DEPTNO部门编号取值为10、20、30当中的一个,其他字段自行决定;不提交
2.将deptno取值为10的职工薪水翻倍,并且ename在原来取值的基础上拼接上TEST;不提交,设置一个保存点,保存点名字以自己的名字命名
3.删除刚刚插入的的职工信息;不提交
4.回滚到保存点;
5.提交,最后数据会变成什么样?
练习4:
两个表定义如下:(如果已经有该表,则将该表删除掉再重新创建)
---省份表,省份id和省份名称; create table province( pro_id varchar2(10),
pro_name varchar2(30), primary key(pro_id));
--公民信息表,身份证id,姓名,年龄,城市,性别,手机号,学历。其中省份定义为省份表中的省份id的外键
create table human( id varchar2(20),
name varchar2(20) not null, age number(3),
province varchar2(10), sex char(1),
telephone varchar2(15), primary key(id),
check (sex in('男','女')), unique (telephone),
foreign key(province) references province(pro_id));
执行上面两个SQL语句,将表建上。
1.往省份表插入“陕西、山西、江西、广西”这4个省份信息,省份编号自定义;
2. 已知“姓名为吴起,年龄22,省份名称为江西,性别男,手机号15134523543”这个公民信息,将这个公民插入到公民表中,没有说明的属性字段自定义;插入中会遇到很多约束限制,约束不能变,可以通过修改表结构、表数据来满足要求,将数据插入到表中。并把解决问题的sql记录下来
3. 已知“姓名为吴起,年龄151,省份名称为浙江,性别女”公民信息,将这个公民插入到公民表中;说明:插入时遇到约束限制时,可以修改约束、表结构、表数据来满足插入要求。并把解决问题的sql记录下来
4.将省份表中的省份为“江西”的数据删除;
练习5:
如下四张表:
1)学生信息表student
学号:sid char 长度5 (主键) 姓名:sname varchar2 长度10 性别:ssex char(M/F) 长度1 年龄:sage number 长度3 电话:sphone varchar2 长度12
系别:did number 长度5 (外键)
2)课程信息表(course)
编号:cid char 长度5 (主键) 名称:cname varchar2 长度20 课时:chour number 长度2 讲师:tname varchar 长度10
3)学生成绩表(score)
编号:scid number 长度5 (主键) 学号:sid char 长度5 (外键) 课程:cid char 长度5 (外键) 成绩:grade number 长度3
4)系别表(department)
编号:did number 长度5 (主键) 名称:dname varchar2 长度20 电话:dphone varchar2 长度12
1.创建一个名称为自己姓名的表空间;大小为100m,可自动扩展,最大为220m;
2.创建上面4张表及约束,并将4张表创建在新创建的表空间上;
练习6:
有emp、dept(部门表)、salgrade(薪资级别表)三个表
1.写一条sql语句返回”abcdefg”的后三位字符“efg”
2.写一条sql语句将“abcdefg”转换成大写字符
3.统计emp表的数据总条数
4.查询入职日期早于1981年5月26日的职工信息
5.查询薪水大于平均薪水的职工信息
6.查询属于部门名称为“sales”的所有员工
7.查询薪水范围在[1000,4000]的员工及其对应的部门信息
8.查询出薪水在薪资级别为4的范围内的员工及其对应的部门信息(扩展练习)