• sql语句练习


    --5. 显示出表employees中的全部job_id(不能重复)
    SELECT DISTINCT JOB_ID FROM EMPLOYEES;
    --6. 显示出表employees的全部列,各个列之间用逗号连接,列头显示成OUT_PUT
    SELECT EMPLOYEES.EMPLOYEE_ID || ',' || EMPLOYEES.FIRST_NAME || ',' ||
    EMPLOYEES.LAST_NAME AS OUT_PUT
    FROM EMPLOYEES;

    --3. 选择工资不在5000到12000的员工的姓名和工资
    SELECT FIRST_NAME, SALARY
    FROM EMPLOYEES
    WHERE SALARY > 12000
    OR SALARY < 5000;
    SELECT FIRST_NAME, SALARY
    FROM EMPLOYEES
    WHERE SALARY NOT BETWEEN 5000 AND 12000;
    --4. 选择雇用时间在1998-02-01到1998-05-01之间的员工姓名,job_id和雇用时间
    SELECT FIRST_NAME, JOB_ID, HIRE_DATE
    FROM EMPLOYEES
    WHERE HIRE_DATE BETWEEN '01-2月-98' AND '01-5月-98';

    SELECT FIRST_NAME, JOB_ID, HIRE_DATE
    FROM EMPLOYEES
    WHERE HIRE_DATE BETWEEN TO_DATE('1998-02-01', 'yyyy-mm-dd') AND
    TO_DATE('1998-05-01', 'yyyy-mm-dd');

    --5. 选择在20或50号部门工作的员工姓名和部门号
    SELECT FIRST_NAME, DEPARTMENT_ID
    FROM EMPLOYEES
    WHERE DEPARTMENT_ID IN (20, 50);
    --6. 选择在1994年雇用的员工的姓名和雇用时间
    SELECT FIRST_NAME, HIRE_DATE
    FROM EMPLOYEES
    WHERE HIRE_DATE BETWEEN '01-1月-94' AND '01-1月-95';

    SELECT FIRST_NAME, HIRE_DATE
    FROM EMPLOYEES
    WHERE to_char(HIRE_DATE,'yyyy') ='1994';

    SELECT hire_date FROM employees;
    --7. 选择公司中没有管理者的员工姓名及job_id
    SELECT FIRST_NAME,manager_id, JOB_ID FROM EMPLOYEES WHERE MANAGER_ID IS NULL;
    --8. 选择公司中有奖金的员工姓名,工资和奖金级别
    SELECT * FROM employees e WHERE e.commission_pct IS NOT NULL;
    --9. 选择员工姓名的第三个字母是a的员工姓名
    SELECT FIRST_NAME FROM EMPLOYEES WHERE FIRST_NAME LIKE '__a%';
    --10. 选择姓名中有字母a和e的员工姓名
    SELECT FIRST_NAME
    FROM EMPLOYEES
    WHERE FIRST_NAME LIKE '%a%'
    AND FIRST_NAME LIKE '%e%' SELECT FIRST_NAME
    FROM EMPLOYEES
    WHERE FIRST_NAME LIKE '%a%e%'
    OR FIRST_NAME LIKE '%e%a%';


    --0927;
    --mysql,小型数据库,增删改查,适合小型的项目;
    --oracle大型项目,数据量大;

    --查询部门表中的所有列数据,select 后面是要查询的列名,from后面是要查的是哪一张表;
    --SELECT * FROM departments;
    --查询员工的id和员工的first_name;
    --SELECT employee_id,first_name FROM employees;
    --查询所有员工的年薪,as实现重命名或者是空格,两个以上单词组成的列名中间用_分割;
    --select employee_id,salary*12 yearly_salary from employees;
    SELECT EMPLOYEES.EMPLOYEE_ID FROM EMPLOYEES;

    --查询所有员工的实发工资
    SELECT EMPLOYEES.EMPLOYEE_ID, SALARY + SALARY * NVL(COMMISSION_PCT, 0)
    FROM EMPLOYEES;
    --查询所有员工的名字定义别名为emp name
    SELECT FIRST_NAME "emp namE" FROM EMPLOYEES;
    --将员工的first_name和last_name组合成emp_name显示
    SELECT FIRST_NAME || ' ' || LAST_NAME EMP_NAME FROM EMPLOYEES;
    --获得在员工表中出现的所有部门id(去重)
    SELECT DISTINCT DEPARTMENT_ID FROM EMPLOYEES;

    --查询90号部门的员工id,first_name,工资和部门号
    SELECT EMPLOYEE_ID, FIRST_NAME, SALARY, DEPARTMENT_ID
    FROM EMPLOYEES
    WHERE DEPARTMENT_ID = 90;

    --查询工资大于5000的所有员工的信息
    SELECT * FROM EMPLOYEES WHERE SALARY > 10000;

    --查询first_name是john的人的信息
    SELECT * FROM EMPLOYEES WHERE FIRST_NAME = 'John';
    --查询工资大于5000并且他在50号部门工作
    SELECT *
    FROM EMPLOYEES
    WHERE SALARY > 5000
    AND DEPARTMENT_ID = 50;
    --查询工资大于8000或者他在20号部门工作的员工信息
    SELECT *
    FROM EMPLOYEES
    WHERE SALARY > 8000
    OR DEPARTMENT_ID = 20;
    --查询不在50号部门工作的人的员工id和部门id
    SELECT EMPLOYEE_ID, DEPARTMENT_ID FROM EMPLOYEES WHERE DEPARTMENT_ID <> 50;
    --查询工资在5000-8000之间的员工的信息
    --select * from employees where salary>=5000 and salary<=8000;
    SELECT * FROM EMPLOYEES WHERE SALARY BETWEEN 5000 AND 8000;

    --查询在20,50,60号部门工作的员工的信息
    --select * from employees where department_id=20 or department_id=50 or department_id=60;
    SELECT * FROM EMPLOYEES WHERE DEPARTMENT_ID IN (20, 50, 60);
    --查询没有奖金的员工的id,工资和奖金
    SELECT E.EMPLOYEE_ID, E.SALARY, E.COMMISSION_PCT
    FROM EMPLOYEES E
    WHERE E.COMMISSION_PCT IS NULL;
    --查询有奖金的员工的id,工资和奖金
    SELECT E.EMPLOYEE_ID, E.SALARY, E.COMMISSION_PCT
    FROM EMPLOYEES E
    WHERE E.COMMISSION_PCT IS NOT NULL;
    --查询不在20,50,60号部门工作的员工的信息
    SELECT * FROM EMPLOYEES WHERE DEPARTMENT_ID NOT IN (20, 50, 60);
    --查询first_name首字符为S的员工的first_name,salary,department_id
    SELECT FIRST_NAME, SALARY, DEPARTMENT_ID
    FROM EMPLOYEES
    WHERE FIRST_NAME LIKE 'S%';
    --查询first_name第三个字符为a的员工的first_name,salary,department_id
    SELECT FIRST_NAME, SALARY, DEPARTMENT_ID
    FROM EMPLOYEES
    WHERE FIRST_NAME LIKE '__a%';
    --查询96年5月1日以前入职的员工信息
    SELECT * FROM EMPLOYEES WHERE HIRE_DATE < '01-5月-96';
    --查询在20号部门工作或者job_id含有VP字样的人的信息
    SELECT *
    FROM EMPLOYEES
    WHERE DEPARTMENT_ID = 20
    OR JOB_ID LIKE '%VP%';

    --按照工资升序排序查询所有员工信息
    SELECT * FROM EMPLOYEES ORDER BY SALARY;
    --按照部门降序排序查询所有员工信息
    SELECT *
    FROM EMPLOYEES
    WHERE DEPARTMENT_ID IS NOT NULL
    ORDER BY DEPARTMENT_ID DESC;
    --按照年薪进行排序
    SELECT EMPLOYEE_ID, SALARY * 12 年薪 FROM EMPLOYEES ORDER BY 年薪;
    --在部门排序的基础上进行工资排序
    SELECT * FROM EMPLOYEES ORDER BY DEPARTMENT_ID DESC, SALARY DESC;

    --实现查询的所有员工名字大写
    SELECT LOWER(FIRST_NAME) FROM EMPLOYEES;

    --查询虚表
    SELECT INITCAP('hello world') FROM DUAL;

    --在不区分大小写的情况下查询first_name为john的人的信息
    SELECT * FROM EMPLOYEES WHERE UPPER(FIRST_NAME) = 'JOHN';

    --使用虚表实现函数
    SELECT CONCAT('hello', 'world'), SUBSTR('abcdefg', 3, 4) FROM DUAL;

    SELECT CONCAT(FIRST_NAME, LAST_NAME) FROM EMPLOYEES;

    --查询工资
    SELECT LPAD(SALARY, 8, '!') FROM EMPLOYEES;
    SELECT RPAD(SALARY, 8, '@') FROM EMPLOYEES;

    SELECT TRIM(' ' FROM ' Hello World ') FROM DUAL;

    --round练习
    SELECT ROUND(55.5555, 0) FROM DUAL;
    --trunc练习
    SELECT TRUNC(155.555, -1) FROM DUAL;
    --sysdate练习
    SELECT SYSDATE FROM DUAL;
    --查询所有员工来公司了多少周(不能有小数),周数降序排列
    SELECT EMPLOYEE_ID, TRUNC((SYSDATE - HIRE_DATE) / 7) WEEK
    FROM EMPLOYEES
    ORDER BY WEEK DESC;
    --next_day练习
    SELECT NEXT_DAY(SYSDATE, '星期日') FROM DUAL;
    --last_day练习
    SELECT LAST_DAY(SYSDATE) FROM DUAL;
    --日期的round练习
    SELECT TRUNC(SYSDATE) FROM DUAL;

    --当前日期转成字符型
    SELECT SYSDATE FROM dual;
    SELECT TO_CHAR(SYSDATE, 'yyyy/mm/dd hh24:mi:ss') FROM DUAL;
    --员工表中所有入职时间变为:年/月/日的样式显示
    SELECT TO_CHAR(HIRE_DATE, 'yyyy/mm/dd') FROM EMPLOYEES;
    --工资数字格式转换
    SELECT TO_CHAR(SALARY, 'L999,999.99') FROM EMPLOYEES;
    --将字符类型转成date
    SELECT TO_DATE('2005-05-05', 'yyyy-mm-dd') FROM DUAL;

    --10号部门的员工工资提升10%显示,20号提升20%,30号部门提升30%,其余部门不提升,工资重命名为
    --update_salary
    SELECT EMPLOYEE_ID,
    DEPARTMENT_ID,
    CASE DEPARTMENT_ID
    WHEN 10 THEN
    1.1 * SALARY
    WHEN 20 THEN
    1.2 * SALARY
    WHEN 30 THEN
    1.3 * SALARY
    ELSE
    SALARY
    END "update_salary"
    FROM EMPLOYEES
    SELECT EMPLOYEE_ID,
    DEPARTMENT_ID,
    DECODE(DEPARTMENT_ID,
    10,
    1.1 * SALARY,
    20,
    1.2 * SALARY,
    30,
    1.3 * SALARY,
    SALARY) UPDATE_SALARY
    FROM EMPLOYEES

    --1. 显示系统时间
    SELECT SYSDATE FROM DUAL;

    --2. 查询员工号,姓名,工资,以及工资提高百分之20%后的结果(new salary)
    SELECT E.EMPLOYEE_ID, E.FIRST_NAME, E.SALARY, E.SALARY * 1.2 "new salary"
    FROM EMPLOYEES E;
    --3. 查询员工的姓名和工资,按下面的形式显示
    SELECT E.LAST_NAME, LPAD(E.SALARY, 15, '$') FROM EMPLOYEES E;
    --做一个查询,产生下面的结果 king***********
    SELECT EMPLOYEE_ID,
    SALARY,
    RPAD(LAST_NAME, LENGTH(LAST_NAME) + (SALARY / 1000), '*')
    FROM EMPLOYEES E;
    --使用decode函数,按照下面的条件
    --AD_PRES A
    --ST_MAN B
    --IT_PROG C
    --SA_REP D
    --ST_CLERK E

    SELECT LAST_NAME,
    JOB_ID,
    DECODE(JOB_ID,
    'AD_PRES',
    'A',
    'ST_MAN',
    'B',
    'IT_PROG',
    'C',
    'SA_REP',
    'D',
    'ST_CLERK',
    'E',
    NULL) GRADE
    FROM EMPLOYEES;

    SELECT LAST_NAME,
    JOB_ID,
    CASE JOB_ID
    WHEN 'AD_PRES' THEN
    'A'
    WHEN 'ST_MAN' THEN
    'B'
    WHEN 'IT_PROG' THEN
    'C'
    ELSE
    NULL
    END GRADE
    FROM EMPLOYEES;

    --1. 显示所有员工的姓名,部门号和部门名称。
    SELECT E.FIRST_NAME, E.DEPARTMENT_ID, D.DEPARTMENT_NAME
    FROM EMPLOYEES E, DEPARTMENTS D
    WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID(+);
    --2. 查询90号部门员工的job_id和90号部门的location_id
    SELECT E.EMPLOYEE_ID, E.JOB_ID, D.LOCATION_ID
    FROM EMPLOYEES E
    JOIN DEPARTMENTS D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
    AND E.DEPARTMENT_ID = 90;
    --3. 选择所有有奖金的员工的
    --last_name , department_name , location_id , city
    SELECT E.LAST_NAME,
    D.DEPARTMENT_NAME,
    L.LOCATION_ID,
    L.CITY,
    E.COMMISSION_PCT
    FROM EMPLOYEES E
    JOIN DEPARTMENTS D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
    JOIN LOCATIONS L ON D.LOCATION_ID = L.LOCATION_ID
    AND E.COMMISSION_PCT IS NOT NULL;
    --4. 选择在Toronto工作的员工的
    --last_name , job_id , department_id , department_name
    SELECT E.LAST_NAME, E.JOB_ID, D.DEPARTMENT_ID, D.DEPARTMENT_NAME
    FROM EMPLOYEES E, DEPARTMENTS D, LOCATIONS L
    WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID
    AND D.LOCATION_ID = L.LOCATION_ID
    AND L.CITY = 'Toronto';
    --5. 选择所有员工的姓名,员工号,以及他的管理者的姓名和员工号,结果类似于下面的格式
    --employees Emp# manager Mgr#
    --kochhar 101 king 100
    SELECT EMP.FIRST_NAME EMPLOYEES,
    EMP.EMPLOYEE_ID "Emp#",
    MGR.FIRST_NAME MANAGER,
    MGR.EMPLOYEE_ID "Mgr#"
    FROM EMPLOYEES EMP, EMPLOYEES MGR
    WHERE EMP.MANAGER_ID = MGR.EMPLOYEE_ID;

    --6. 查询各部门员工姓名和他们的同事姓名,结果类似于下面的格式
    --Department_id Last_name colleague
    --20 fay hartstein
    SELECT E.DEPARTMENT_ID, E.LAST_NAME, C.LAST_NAME COLLEAGUE
    FROM EMPLOYEES E, EMPLOYEES C
    WHERE E.DEPARTMENT_ID = C.DEPARTMENT_ID
    AND E.EMPLOYEE_ID <> C.EMPLOYEE_ID

    --求出工资的平均值
    SELECT AVG(SALARY) 平均值, MAX(SALARY) 最大值
    FROM EMPLOYEES
    --求出工资的平均值,最大值,最小值,总和
    SELECT AVG(SALARY) 平均值,
    MAX(SALARY) 最大值,
    MIN(SALARY),
    SUM(SALARY)
    FROM EMPLOYEES;

    --求50号部门有多少人
    SELECT COUNT(MANAGER_ID) FROM EMPLOYEES WHERE DEPARTMENT_ID = 50;

    --查询有多少个部门
    SELECT COUNT(DEPARTMENT_ID) FROM DEPARTMENTS;

    --查询各个部门的平均工资和最大工资
    SELECT DEPARTMENT_ID, AVG(SALARY), MAX(SALARY)
    FROM EMPLOYEES
    GROUP BY DEPARTMENT_ID;
    --查询各个job的工资总和
    SELECT JOB_ID, SUM(SALARY) FROM EMPLOYEES GROUP BY JOB_ID;
    --查询各个部门的各个job的平均工资和最大工资
    SELECT DEPARTMENT_ID, JOB_ID, AVG(SALARY), MAX(SALARY)
    FROM EMPLOYEES
    GROUP BY DEPARTMENT_ID, JOB_ID;

    SELECT EMPLOYEE_ID, MAX(SALARY) FROM EMPLOYEES GROUP BY EMPLOYEE_ID;

    SELECT JOB_ID, COUNT(*) FROM EMPLOYEES GROUP BY JOB_ID;

    --查询平均工资大于5000的部门的id和平均工资,并且部门号要求大于50
    SELECT DEPARTMENT_ID, AVG(SALARY)
    FROM EMPLOYEES
    WHERE DEPARTMENT_ID > 50
    GROUP BY DEPARTMENT_ID
    HAVING AVG(SALARY) > 5000
    ORDER BY DEPARTMENT_ID DESC;
    --查询最大工资大于10000的job_id和最大工资,要求job_id包含a字母
    SELECT JOB_ID, MAX(SALARY)
    FROM EMPLOYEES
    WHERE LOWER(JOB_ID) LIKE '%a%'
    GROUP BY JOB_ID
    HAVING MAX(SALARY) > 10000
    ORDER BY MAX(SALARY);
    --查询最大工资的人的id
    SELECT MAX(SALARY) FROM EMPLOYEES;

    --4. 查询公司员工工资的最大值,最小值,平均值,总和
    SELECT MAX(E.SALARY), MIN(E.SALARY), AVG(E.SALARY), SUM(E.SALARY)
    FROM EMPLOYEES E;
    --5. 查询各job_id的员工工资的最大值,最小值,平均值,总和
    SELECT JOB_ID, MAX(E.SALARY), MIN(E.SALARY), AVG(E.SALARY), SUM(E.SALARY)
    FROM EMPLOYEES E
    GROUP BY JOB_ID;
    --6. 选择具有各个job_id的员工人数
    SELECT JOB_ID, COUNT(EMPLOYEE_ID) FROM EMPLOYEES GROUP BY JOB_ID;

    --7. 查询员工最高工资和最低工资的差距(DIFFERENCE)
    SELECT MAX(SALARY) - MIN(SALARY) AS "DIFFERENCE" FROM EMPLOYEES;

    --8. 查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内
    SELECT E.MANAGER_ID, MIN(E.SALARY)
    FROM EMPLOYEES E
    WHERE E.MANAGER_ID IS NOT NULL
    GROUP BY E.MANAGER_ID
    HAVING MIN(E.SALARY) >= 6000;

    --9. 查询所有部门的名字,location_id,员工数量和工资平均值
    SELECT D.DEPARTMENT_NAME,
    D.LOCATION_ID,
    COUNT(E.EMPLOYEE_ID),
    AVG(E.SALARY)
    FROM EMPLOYEES E, DEPARTMENTS D
    WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID
    GROUP BY D.DEPARTMENT_NAME, D.LOCATION_ID;

    --10. 查询公司的人数,以及在1995-1998年之间,每年雇用的人数,结果类似下面的格式
    --total 1995 1996 1997 1998
    --30 3 4 6 7
    SELECT COUNT(EMPLOYEE_ID) TOTAL,
    SUM(DECODE(TO_CHAR(HIRE_DATE, 'yyyy'), '1995', 1, 0)) "1995",
    SUM(DECODE(TO_CHAR(HIRE_DATE, 'yyyy'), '1996', 1, 0)) "1996",
    SUM(DECODE(TO_CHAR(HIRE_DATE, 'yyyy'), '1997', 1, 0)) "1997",
    SUM(DECODE(TO_CHAR(HIRE_DATE, 'yyyy'), '1998', 1, 0)) "1998"
    FROM EMPLOYEES;

    SELECT COUNT(EMPLOYEE_ID) TOTAL,
    COUNT(DECODE(TO_CHAR(HIRE_DATE, 'yyyy'), '1995', 1, NULL)) "1995",
    COUNT(DECODE(TO_CHAR(HIRE_DATE, 'yyyy'), '1996', 1, NULL)) "1996",
    COUNT(DECODE(TO_CHAR(HIRE_DATE, 'yyyy'), '1997', 1, NULL)) "1997",
    COUNT(DECODE(TO_CHAR(HIRE_DATE, 'yyyy'), '1998', 1, NULL)) "1998"
    FROM EMPLOYEES;

    --select to_char(sysdate,'yyyy') from dual;

    --查询工资比id为200号员工高的人的所有信息
    SELECT *
    FROM EMPLOYEES
    WHERE SALARY > (SELECT SALARY FROM EMPLOYEES WHERE EMPLOYEE_ID = 200);
    --查询和199号员工干同一工作的人的所有信息
    SELECT *
    FROM EMPLOYEES
    WHERE JOB_ID = (SELECT JOB_ID FROM EMPLOYEES WHERE EMPLOYEE_ID = 199)
    AND EMPLOYEE_ID <> 199;
    --查询和126号员工同一个部门的人的所有信息
    SELECT *
    FROM EMPLOYEES
    WHERE DEPARTMENT_ID =
    (SELECT DEPARTMENT_ID FROM EMPLOYEES WHERE EMPLOYEE_ID = 126)
    AND EMPLOYEE_ID <> 126;
    --查询最大工资的人的名字和工资
    SELECT LAST_NAME, SALARY
    FROM EMPLOYEES
    WHERE SALARY = (SELECT MAX(SALARY) FROM EMPLOYEES);
    --查询平均工资比200号员工工资高的部门id和平均工资
    SELECT DEPARTMENT_ID, AVG(SALARY)
    FROM EMPLOYEES
    GROUP BY DEPARTMENT_ID
    HAVING AVG(SALARY) > (SELECT SALARY FROM EMPLOYEES WHERE EMPLOYEE_ID = 200);
    --选择在Toronto工作的员工的信息
    --1,查询location表中的location_id
    SELECT LOCATION_ID
    FROM LOCATIONS L
    WHERE L.CITY = 'Toronto'
    --2,查询该location_id对应的部门id
    SELECT DEPARTMENT_ID
    FROM DEPARTMENTS
    WHERE LOCATION_ID =
    (SELECT LOCATION_ID FROM LOCATIONS L WHERE L.CITY = 'Toronto')
    --3,根据部门id查询员工信息
    SELECT *
    FROM EMPLOYEES
    WHERE DEPARTMENT_ID =
    (SELECT DEPARTMENT_ID
    FROM DEPARTMENTS
    WHERE LOCATION_ID =
    (SELECT LOCATION_ID
    FROM LOCATIONS L
    WHERE L.CITY = 'Toronto'));

    --查询工资比John高的人的信息
    SELECT *
    FROM EMPLOYEES
    WHERE SALARY < ALL
    (SELECT SALARY FROM EMPLOYEES WHERE FIRST_NAME = 'John');

    SELECT COUNT(EMPLOYEE_ID) TOTAL,
    COUNT(DECODE(TO_CHAR(HIRE_DATE, 'yyyy'), '1995', 1, NULL)) AS "1995"
    FROM EMPLOYEES;
    SELECT TO_CHAR(HIRE_DATE, 'yyyy'), COUNT(*)
    FROM EMPLOYEES
    WHERE TO_CHAR(HIRE_DATE, 'yyyy') BETWEEN 1995 AND 1998
    GROUP BY TO_CHAR(HIRE_DATE, 'yyyy');

    --1. 查询和John相同部门的员工姓名和雇用日期

    SELECT FIRST_NAME, HIRE_DATE
    FROM EMPLOYEES
    WHERE DEPARTMENT_ID IN
    (SELECT DEPARTMENT_ID FROM EMPLOYEES E WHERE FIRST_NAME = 'John');
    --2. 查询工资比公司平均工资高的员工的员工号,姓名和工资。
    SELECT EMPLOYEE_ID, FIRST_NAME, SALARY
    FROM EMPLOYEES
    WHERE SALARY > (SELECT AVG(SALARY) FROM EMPLOYEES);

    --3. 查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名
    SELECT EMPLOYEE_ID, FIRST_NAME
    FROM EMPLOYEES
    WHERE DEPARTMENT_ID IN
    (SELECT DEPARTMENT_ID FROM EMPLOYEES WHERE FIRST_NAME LIKE '%u%')
    AND FIRST_NAME NOT LIKE '%u%';
    --4. 查询在部门编号为20部门员工的员工号,和job_id

    --5. 查询管理者是king的员工姓名和工资
    SELECT FIRST_NAME || LAST_NAME ENAME, SALARY
    FROM EMPLOYEES
    WHERE MANAGER_ID IN
    (SELECT EMPLOYEE_ID FROM EMPLOYEES WHERE LOWER(LAST_NAME) = 'king');

    SELECT * FROM EMPLOYEE1;
    --为jobs1表插入一条数据
    INSERT INTO JOBS1
    (JOB_ID, JOB_TITLE, MIN_SALARY, MAX_SALARY)
    VALUES
    ('sal_man1', 'xxoo', 500, 5000);
    --向员工表中插入数据
    INSERT INTO EMPLOYEES
    VALUES
    (997,
    'xx',
    'oo',
    'xxxx2',
    '12456',
    TO_DATE('1999-09-09', 'yyyy-mm-dd'),
    'HR_REP',
    12222,
    NULL,
    124,
    NULL);

    INSERT INTO JOBS1 (JOB_ID, JOB_TITLE) VALUES ('sal_man2', 'xxoo');

    INSERT INTO JOBS1
    (JOB_ID, MIN_SALARY, MAX_SALARY)
    VALUES
    ('sal_man1', 500, 5000);
    --把jobs中的所有数据插入到jobs1中
    INSERT INTO JOBS1
    (JOB_ID, JOB_TITLE)
    SELECT FIRST_NAME, LAST_NAME FROM EMPLOYEES;
    INSERT INTO EMPLOYEE1
    SELECT * FROM EMPLOYEES;
    --将30号部门的所有员工工资改为10000
    UPDATE EMPLOYEE1 SET SALARY = 10000 WHERE DEPARTMENT_ID = 30;

    --将和106号员工同一部门的人员的工资提升10%

    UPDATE EMPLOYEE1
    SET SALARY = 1.1 * SALARY
    WHERE DEPARTMENT_ID =
    (SELECT DEPARTMENT_ID FROM EMPLOYEE1 WHERE EMPLOYEE_ID = 106)

    UPDATE EMPLOYEE1 SET SALARY = 0;

    --将所有工资低于108员工的人的部门全部调整到和108号员工同一部门
    UPDATE EMPLOYEE1
    SET DEPARTMENT_ID = (SELECT DEPARTMENT_ID
    FROM EMPLOYEE1
    WHERE EMPLOYEE_ID = 108)
    WHERE SALARY < (SELECT SALARY FROM EMPLOYEE1 WHERE EMPLOYEE_ID = 108);

    --将100号员工的部门改为12号
    UPDATE EMPLOYEES SET DEPARTMENT_ID = 120 WHERE EMPLOYEE_ID = 100;

    --将100号部门的所有员工删除
    DELETE FROM EMPLOYEE1 WHERE DEPARTMENT_ID = 100;
    --将所有工资小于101号员工的人员信息删除
    DELETE FROM EMPLOYEE1
    WHERE SALARY < (SELECT SALARY FROM EMPLOYEE1 WHERE EMPLOYEE_ID = 101);
    DELETE FROM EMPLOYEE1;

    --删除部门表中部门id为30的记录
    DELETE FROM DEPARTMENTS WHERE DEPARTMENT_ID = 30;

    INSERT INTO JOBS1 VALUES ('zzz', DEFAULT, 20, 200);
    SELECT * FROM JOBS1;


    insert into emp values(7369, '任盈盈', '职员', 7902, to_date('1980-12-17','yyyy-mm-dd'), 800, NULL, 20);
    insert into emp values(7499, '杨逍', '销售人员', 7698, to_date('1981-2-20','yyyy-mm-dd'), 1600, 300, 30);
    insert into emp values(7521, '范遥', '销售人员', 7698, to_date('1981-2-22','yyyy-mm-dd'), 1250, 500, 30);
    insert into emp values(7566, '任我行', '经理', 7839, to_date('1981-4-2','yyyy-mm-dd'), 2975, NULL, 20);
    insert into emp values(7654, '金毛狮王', '销售人员', 7698, to_date('1981-9-28','yyyy-mm-dd'), 1250, 1400, 30);
    insert into emp values(7698, '张无忌', '经理', 7839, to_date('1981-5-1','yyyy-mm-dd'), 2850, NULL, 30);
    insert into emp values(7782, '苏荃', '经理', 7839, to_date('1981-6-9','yyyy-mm-dd'), 2450, NULL, 10);
    insert into emp values(7788, '东方不败', '分析员', 7566, to_date('1982-12-9','yyyy-mm-dd'), 3000, NULL, 20);
    insert into emp values(7839, '韦小宝', '总裁', NULL, to_date('1981-11-17','yyyy-mm-dd'), 5000, NULL, 10);
    insert into emp values(7844, '紫衫龙王', '销售人员', 7698, to_date('1981-9-8','yyyy-mm-dd'), 1500, 0, 30);
    insert into emp values(7876, '向问天', '职员', 7788, to_date('1983-1-12','yyyy-mm-dd'), 1100, NULL, 20);
    insert into emp values(7900, '小昭', '职员', 7698, to_date('1981-12-3','yyyy-mm-dd'), 950, NULL, 30);
    insert into emp values(7902, '令狐冲', '分析员', 7566, to_date('1981-12-3','yyyy-mm-dd'), 3000, NULL, 20);
    insert into emp values(7934, '双儿', '职员', 7782, to_date('1982-1-23','yyyy-mm-dd'), 1300, NULL, 10);


    update dept set dname='总部',loc='神龙岛' where deptno=10;
    update dept set dname='技术部',loc='黑木崖' where deptno=20;
    update dept set dname='市场部',loc='光明顶' where deptno=30;
    update dept set dname='行政部',loc='嵩山' where deptno=40;

    -----------------------------------4---------------------------------------------
    --1、查询员工表所有数据
    select * from emp;
    --2、查询总裁的基本工资
    select sal,job from emp where job='总裁';
    --3、所有奖金为空的员工
    select * from emp where comm is null;
    --4、查询基本工资最高的三个人

    select * from (select * from emp order by sal desc) where rownum<=3
    --5、查询技术部的所在地
    select loc from dept where dname='技术部'

    --6、查询部门编号为30且奖金大于300元的员工信息
    select * from emp where deptno=30 and comm>300
    --7、查询部门编号为20的员工中基本工资最高的员工姓名和工资
    select ename,sal from(select * from emp where deptno=20 order by sal desc ) where rownum=1

    select ename,sal,deptno from emp
    where sal=(select max(sal) from emp where deptno=20 )and deptno=20

    --8、查询位于'嵩山'、'黑木崖'、'南海神宫'的部门信息
    select * from dept where loc='嵩山' or loc='黑木崖' or loc='南海神宫';

    select * from dept where loc in ('嵩山','黑木崖','南海神宫');

    --9、查询入职日期在1981-5-1到1981-12-31之间的所有员工
    select * from emp
    where hiredate>=to_date('1981-5-1','yyyy-mm-dd') and hiredate<=to_date('1981-12-31','yyyy-mm-dd');

    select * from emp hiredate between to_date('1981-5-1','yyyy-mm-dd') and to_date('1981-12-31','yyyy-mm-dd');


    --10、查询所有名字为三个字的员工的员工编号,姓名
    select empno,ename from emp where length(ename)=3

    --11、查询10号部门的所有经理和20号部门的所有职员的详细信息
    select * from emp where deptno=10 and job='经理' or deptno=20 and job='职员';

    --12、查询姓名中没有‘王’字的员工的详细信息
    select * from emp where instr(ename,'王')=0;
    select * from emp where ename not like '%王%';
    select * from emp where not ename like '%王%';

    --13、查询员工姓名,将工作年限最长的员工排在最前面
    select ename,hiredate from emp order by hiredate asc;

    --14、查询'任我行'的基本工资
    select sal,ename from emp where ename='任我行';

    --15、查询基本工资比'任我行'多的所有员工的姓名和基本工资
    select sal,ename from emp where sal>(select sal from emp where ename='任我行');

    --16、查询各个部门经理的基本工资
    select sal from emp where job='经理';

    --17、查询与'东方不败'从事相同工作的员工的详细信息
    select * from emp where job in (select job from emp where ename='东方不败') and ename<>'东方不败';

    --18、查询市场部员工的姓名
    select ename from emp where deptno=(select deptno from dept where dname='市场部');

    --19、查询某些员工的姓名和基本工资,
    --条件是他们的基本工资与部门30中某一
    --个员工的基本工资相同
    select ename,sal from emp where sal in(select distinct sal from emp where deptno=30) and deptno<>30;

    --20、查询奖金收入比基本工资高的员工的详细信息
    select * from emp where comm>sal;

    -----------------------------------5---------------------------------------------
    --21、查询不同部门的平均基本工资
    select avg(sal),deptno from emp group by deptno;

    --22、查询所有基本工资高于平均基本工资(平均基本工资为所有部门员工的基本工资平均数)的销售人员
    select * from emp where job='销售人员' and sal>(select avg(sal) from emp);

    --23、显示各种职位的最低基本工资
    select min(sal),job from emp group by job;

    --24、查询每个部门的人数
    select count(*),deptno from emp group by deptno;

    --25、查询每个部门入职最早的员工的入职时间和部门编号
    select min(hiredate),deptno from emp group by deptno;

    --26、显示所有职员的姓名及其所在部门的名称
    select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;

    --27、显示所有员工的姓名、所在部门名称和基本工资
    select e.ename,d.dname,e.sal from emp e,dept d where e.deptno=d.deptno;

    --28、显示不同部门不同职位的平均基本工资,部门名称,职位
    select avg(sal),d.dname,e.job from emp e,dept d where d.deptno=e.deptno
    group by d.dname,e.job order by d.dname,avg(sal) desc;

    --29、查询部门平均工资大于员工平均工资(全体员工平均工资)的部门编号和平均工资
    select deptno,avg(sal) from emp group by deptno having avg(sal)>(select avg(sal) from emp)

    --30、查询没有员工的部门名称
    select dname from dept where deptno not in(select distinct deptno from emp);

    select count(e.empno),d.dname
    from emp e right outer join dept d on e.deptno=d.deptno
    group by d.dname
    having count(e.empno)=0;


    --31、查询 部门当中每个员工基本工资都大于1200的部门名称
    select d.dname from emp e,dept d where e.deptno=d.deptno
    group by d.dname having min(sal)>1200;

  • 相关阅读:
    jQuery的动画以及扩展功能
    yii2 redirect重定向
    nvaicat mysql ssh 跳板机(堡垒机???)连接服务器
    Linux下Redis的安装
    深入理解PHP的运行模式
    thinkphp5 如何监听sql?
    thinkphp5 如何使用查询事件?
    layui laydate is not defined
    CSS 实现图片灰度效果 兼容各种浏览器
    PHP基础学习----函数
  • 原文地址:https://www.cnblogs.com/konglxblog/p/10135977.html
Copyright © 2020-2023  润新知