Http://www.kingbase.com.cn
说明:表中ENAME表示员工姓名,HIREDATE-入职时间。
SELECT ename,hiredate FROM SCOTT.EMP WHERE hiredate >'5-1-1982'; 或SELECT ename,hiredate FROM SCOTT.EMP WHERE hiredate >'1982-5-1';
7、SCOTT模式下EMP表中,如何显示第三个字符为大写N 的所有员工的姓名和工资?
SELECT ename,sal FROM SCOTT.EMP WHERE ename like '_ _N%';
8、SCOTT模式下EMP表中,如何显示empno为7844, 7839,7566的雇员情况?
SELECT * FROM scott.emp WHERE empno in (7844, 7839,7566);
9、在SCOTT模式下的EMP表中,“员工上级”的字段为MGR,如何显示没有上级的雇员的情况?
SELECT * FROM scott.emp WHERE mgr is null;
10、查询工资高于500 或者是岗位为MANAGER 的雇员,同时还要满足他们的姓名首字母为大写的J?
SELECT * FROM scott.emp WHERE (sal >500 or job = 'MANAGER') and ename LIKE 'J%';
11、如何按照工资的从低到高的顺序显示雇员的信息?
SELECT * FROM scott.emp ORDER by sal;
12、按照部门号升序而雇员的工资降序排列
SELECT * FROM scott.emp ORDER by deptno, sal DESC; 13、如何显示所有员工中最高工资和最低工资?
select max(sal),min(sal) from scott.emp;
14、显示所有员工中最高工资,最高工资那个人是谁?
select ename, sal from scott.emp where sal = (select max(sal) from scott.emp); 15、如何显示所有员工的平均工资和工资总和?
select avg(sal),sum(sal) from scott.emp;
16、如何计算总共有多少员工?以下选项哪个最为准确
select count(empno) from scott.emp;
17、查询最高工资员工的名字,工作岗位和工资
select ename,job,sal from scott.emp where sal=(select max(sal) from scott.emp);
____________________________________________________________________________________
联系方式:北京市海淀区上地西路8号上地科技大厦4号楼601 电话:86-010-58851118 邮箱:Training@kingbase.com.cn
31
Http://www.kingbase.com.cn
18、显示工资高于平均工资的员工信息
select * from scott.emp where sal>(select avg(sal) from scott.emp); 19、如何显示每个部门的平均工资和最高工资?
select avg(sal),max(sal),deptno from scott.emp group by deptno; 20、显示每个部门的每种岗位的平均工资和最低工资?
select avg(sal),min(sal),job,deptno from scott.emp group by deptno,job; 21、显示平均工资低于2000 的部门号和它的平均工资?
SELECT AVG(sal),deptno FROM scott.emp GROUP by deptno having AVG(sal)< 2000;
二、多表查询
22、显示雇员名,雇员工资及所在部门的名字
SELECT e.ename,e.sal,d.dname FROM scott.emp e,scott.dept d WHERE e.deptno=d.deptno; 23、显示部门号为10 的部门名、员工名和工资? SELECT d.dname, e.ename, e.sal
FROM scott.emp e, scott.dept d
WHERE e.deptno = d.deptno and e.deptno = 10;
24、显示各个员工的姓名,工资及工资的级别?
select ename,sal,grade from scott.emp,scott.salgrade where sal between losal and hisal; 25、显示雇员名,雇员工资及所在部门的名字,并按部门排序?
SELECT e.ename, e.sal, d.dname
FROM scott.emp e, scott.dept d WHERE e.deptno = d.deptno ORDER by e.deptno;
26、显示某个员工的上级领导的姓名?【注释:该题属于自连接查询】
SELECT worker.ename as \员工姓名\上级领导姓名\
FROM scott.emp worker,scott.emp boss
WHERE worker.mgr= boss.empno AND worker.ename = 'FORD';
32
____________________________________________________________________________________
联系方式:北京市海淀区上地西路8号上地科技大厦4号楼601 电话:86-010-58851118 邮箱:Training@kingbase.com.cn
Http://www.kingbase.com.cn
三、子查询
27、如何查询和部门10的工作相同的雇员的名字、岗位、工资、部门号?
SELECT * FROM emp WHERE job IN (SELECT DISTINCT job FROM emp WHERE deptno= 10);
28、如何显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号?
方法一:select ename,sal,deptno from scott.emp where sal>all (select sal from scott.emp where deptno=30);
方法二:Select ename,sal,deptno from scott.emp where sal>(select max(sal) from scott.emp where deptno=30);
29、如何显示工资比部门30的任意一个员工的工资高的员工的姓名、工资和部门号?
方法一:select ename,sal,deptno from scott.emp where sal>any (select sal from scott.emp where deptno=30);
方法二:Select ename,sal,deptno from scott.emp where sal>(select min(sal) from scott.emp where deptno=30);
30、如何查询与SMITH的部门和岗位完全相同的所有雇员??
SELECT * FROM scott.emp WHERE (deptno, job) = (SELECT deptno, job FROM scott.emp WHERE ename = 'SMITH');
31、如何显示高于自己部门平均工资的员工的信息??
方法一:select e1.*,e2.myavg from scott.emp e1,(select avg(sal) myavg,deptno from scott.emp group by deptno) e2 where e1.deptno=e2.deptno and e1.sal>e2.myavg;
方法二:select e1.* from scott.emp e1 where e1.sal>(select avg(sal) from scott.emp where deptno=e1.deptno);
32、查找每个部门工资最高的人的详细资料?
select * from scott.emp e where sal=(select max(sal) from scott.emp where deptno=e.deptno);
33、用查询结果创建新表(这个命令是一种快捷的建表方法)
create table mytable (id,name,sal,job,deptno) as select empno,ename,sal,job,deptno from
____________________________________________________________________________________
联系方式:北京市海淀区上地西路8号上地科技大厦4号楼601 电话:86-010-58851118 邮箱:Training@kingbase.com.cn
33
Http://www.kingbase.com.cn
scott.emp;
34、自我复制数据(蠕虫复制)
有时,为了对某个sql语句进行效率测试,我们需要海量数据时,可以使用此法为表创建海量数据。
insert into mytable (id,name,sal,job,deptno) select empno,ename,sal,job,deptno from scott.emp;
大家思考:如下的语句在执行以后,会产生什么结果?
insert into public.mytable (id,name,sal,job,deptno) select * from public.mytable;
四、分页查询
35、查询5-10条记录(分页查询)
select * from (select a1.*, rownum rn from (select * from scott.emp) a1 where rownum<=10) where rn>=5;
实验(六):权限授予与权限传播
任务1:授权与回收
【例1】 授权。在KingbaseES 中建立多个用户,给他们赋予不同的权限,然后查看是否真正拥有被授予的权限了。
1) 建立用户U1、U2、U3、U4、U5、U6、U7。密码均为123456
CREATE USER U1 WITH PASSWORD '123456'; 2) 在SYSTEM(即DBA)与七个用户之间进行授权。 [例1-1]把查询Student 表的权限授给用户U1。
因为当前用户即为SYSTEM,所以直接写授权语句即可。 GRANT SELECT
34
____________________________________________________________________________________ 联系方式:北京市海淀区上地西路8号上地科技大厦4号楼601 电话:86-010-58851118 邮箱:Training@kingbase.com.cn
Http://www.kingbase.com.cn
ON TABLE Student TO U1;
[例1-2]把对Student 表和Course 表的全部操作权限授予用户U2 和U3。 GRANT ALL PRIVILEGES ON TABLE Student,Course TO U2,U3;
[例1-3]把对表SC 的查询权限授予所有用户。 GRANT SELECT ON TABLE SC TO PUBLIC;
[例1-4]把查询Student 表和修改学生学号的权限授给用户U4。 GRANT UPDATE (Sno) , SELECT ON Student TO U4;
[例1-5]把对表SC 的INSERT 权限授予U5,并允许U5 将此权限再授予其他用户。GRANT INSERT ON SC TO U5
WITH GRANT OPTION;
[例1-6]用户U5 将对表SC 的INSERT 权限授予U6,并允许将权限转授给其他用户。首先应该以U5 的身份重新登录数据库,然后再进行授权。 GRANT INSERT ON SC TO U6
WITH GRANT OPTION;
[例1-7]用户U6 将对表SC 的INSERT 权限授予U7。 首先应该以U6 的身份重新登录数据库,然后再进行授权。 GRANT INSERT
____________________________________________________________________________________
联系方式:北京市海淀区上地西路8号上地科技大厦4号楼601 电话:86-010-58851118 邮箱:Training@kingbase.com.cn
35