建sql练习题库

来源:互联网 发布:艾默生环境优化官网 编辑:程序博客网 时间:2024/04/27 20:50

CREATE TABLE emp--(员工信息表)
(
  empno NUMBER(10),--员工编号
  ename VARCHAR2(50),--员工姓名
  job VARCHAR2(50),--职业
  mgr  NUMBER(10),--员工上级编号
  hirdate DATE,--入职时间
  sal NUMBER,--薪水
  comm NUMBER,--奖金
  deptno NUMBER(10)--员工部门编号
)
CREATE TABLE dept --(部门信息表)、
(
  deptno  NUMBER(10),--部门编号
  dname VARCHAR2(50),--部门名称
  loc VARCHAR2(500)--部门地址
)
CREATE TABLE salgrade--(薪水等级表)
(
  grade NUMBER(2),--等级编号
  losal NUMBER,--金额下限
  hisal NUMBER--金额上限
)

DECLARE
 i NUMBER:=1;
BEGIN
  EXECUTE IMMEDIATE 'TRUNCATE TABLE emp';
  FOR i IN 1..100
  LOOP
       INSERT INTO  emp VALUES (i,initcap(DBMS_RANDOM.string ('L', 5)||' '||DBMS_RANDOM.string ('L', 5)),
              decode(mod(i,5),1,'项目经理',2,'工程师','实习生'),1,sysdate-DBMS_RANDOM.VALUE (1, 100),
              round(100+DBMS_RANDOM.VALUE (1, 1000),2),
              round(case when 100+DBMS_RANDOM.VALUE (1, 1000)<200 then null
                         when 100+DBMS_RANDOM.VALUE (1, 1000)<300 THEN 0
                    else 100+DBMS_RANDOM.VALUE (1, 1000) END,2),
              mod(i,5));
  END LOOP;
  COMMIT;
END;

INSERT INTO dept
SELECT 1,'工程部','成都' FROM dual UNION ALL
SELECT 2,'客服部','成都' FROM dual UNION ALL
SELECT 3,'质检部','成都' FROM dual UNION ALL
SELECT 4,'清洁部','成都' FROM dual UNION ALL
SELECT 5,'总部','成都' FROM dual
COMMIT;

1. 查询部门为工程部的奖金大于0的所有员工信息

2. 查询员工数多余5个的部门

3. 查询每个部门薪水+奖金最高的5个人的信息

原创粉丝点击