question
-- 列出所有员工信息。
-- 列出所有部门的名称和所在地。
-- 列出所有员工名,列名显示'EMP_NAME'。
-- 列出两遍全部部门名,第一列起名'COL_A',第二列'COL_B'。
-- 列出工资大于1000的所有员工信息。
-- 列出工资大于1000的办事员。
-- 列出所有办事员以及工资大于1500的其他员工。
-- 列出所有不是办事员的员工。
-- 列出所有被补助人员信息。
-- 列出所有姓名为S开头的员工信息。
-- 列出所有姓名为S开头H结尾的员工信息。
-- 列出所有姓名中带S的员工信息。
-- 列出所有姓名中第二位为L的员工信息。
-- 列出所有姓名中不带S的员工信息。
-- 列出所有姓名中带单引号的员工信息。
-- 列出所有姓名中带%号的员工信息。
-- 列出每个部门每个月一共发出的工资数。
-- 列出和MARTIN工资一样的员工信息。
-- 列出比SMITH和WARD工资都高的所有员工信息。
-- 列出工资比20部门所有人工资要高的所有员工信息。
-- 列出工资比20部门某些人工资要高的所有员工信息。
-- 列出工资和20部门某些人工资一样的所有员工信息。
-- 列出存在员工的部门,要求使用IN。
-- 列出不存在员工的部门,要求使用EXISTS。
-- 列出所有员工信息和所有部门信息;
-- 列出所有员工姓名及所在部门名,员工无部门,显示'NO'。
-- 列出所有部门名及其员工名,部门无员工,显示'NO'。
-- 列出所有正式员工姓名及其所在部门名
-- 列出所有工资大于1500的员工名以及所在部门名。
-- 列出所有员工姓名,及其上级领导姓名。
answer
SELECT *
FROM EMP;
SELECT DNAME, LOC
FROM DEPT;
SELECT ENAME 'EMP_NAME'
FROM EMP;
SELECT DNAME 'COL_A', DNAME 'COL_B'
FROM DEPT;
SELECT *
FROM EMP
WHERE SAL > 1500;
SELECT *
FROM EMP
WHERE JOB = 'CLERK'
AND SAL > 1000;
SELECT *
FROM EMP
WHERE JOB = 'CLERK'
OR SAL > 1000;
SELECT *
FROM EMP
WHERE JOB != 'CLERK';
SELECT *
FROM EMP
WHERE COMM IS NOT NULL;
SELECT *
FROM EMP
WHERE ENAME LIKE 'S%';
SELECT *
FROM EMP
WHERE ENAME LIKE 'S%H';
SELECT *
FROM EMP
WHERE ENAME LIKE '%S%';
SELECT *
FROM EMP
WHERE ENAME LIKE '_L%';
SELECT *
FROM EMP
WHERE ENAME NOT LIKE '%S%';
SELECT *
FROM EMP
WHERE ENAME LIKE '%\'%';
-- 列出所有姓名中带%号的员工信息。
SELECT *
FROM EMP
WHERE ENAME LIKE '%A%%' ESCAPE 'A';
-- 列出和MARTIN工资一样的员工信息。
SELECT *
FROM EMP
WHERE SAL = (
SELECT SAL
FROM EMP
WHERE ENAME = 'MARTIN');
-- 列出比SMITH和WARD工资都高的所有员工信息。
SELECT *
FROM EMP
WHERE SAL > ALL (
SELECT SAL
FROM EMP
WHERE ENAME IN ('SMITH', 'WARD'));
-- 列出工资比20部门所有人工资要高的所有员工信息。
SELECT *
FROM EMP
WHERE SAL > ALL (
SELECT SAL
FROM EMP
WHERE DEPTNO = 20);
-- 列出工资比20部门某些人工资要高的所有员工信息。
SELECT *
FROM EMP
WHERE SAL > ANY (
SELECT SAL
FROM EMP
WHERE DEPTNO = 20);
-- 列出工资和20部门某些人工资一样的所有员工信息。
SELECT *
FROM EMP
WHERE SAL = SOME (
SELECT SAL
FROM EMP
WHERE DEPTNO = 20);
-- 列出存在员工的部门,要求使用IN。
SELECT *
FROM DEPT
WHERE DEPTNO IN (
SELECT DEPTNO
FROM EMP
WHERE DEPTNO IS NOT NULL
);
-- 列出不存在员工的部门,要求使用EXISTS。
SELECT *
FROM DEPT
WHERE NOT EXISTS(
SELECT 1 FROM EMP WHERE EMP.DEPTNO = DEPT.DEPTNO
);
-- 列出所有员工信息和所有部门信息;
SELECT *
FROM EMP
JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;
-- 列出所有员工姓名及所在部门名,员工无部门,显示'NO'。
SELECT ENAME, DNAME, IFNULL(EMP.DEPTNO, 'NO') RESULT
FROM EMP
LEFT JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;
-- 列出所有部门名及其员工名,部门无员工,显示'NO'。
SELECT ENAME, DNAME, IFNULL(EMP.EMPNO, 'NO') RESULT
FROM EMP
RIGHT JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;
-- 列出所有正式员工姓名及其所在部门名。
SELECT ENAME, DNAME
FROM EMP
JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO
WHERE DNAME IS NOT NULL;
-- 列出所有工资大于1500的员工名以及所在部门名。
SELECT ENAME, DNAME
FROM EMP
JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO
WHERE SAL > 1500;
-- 列出所有员工姓名,及其上级领导姓名。
SELECT XIAO.ENAME XIAO, DA.ENAME DA
FROM EMP XIAO
JOIN EMP DA ON XIAO.MGR = DA.EMPNO;
-------------------------------------------------
question
answer
SELECT DISTINCT JOB
FROM EMP
WHERE JOB IS NOT NULL;
SELECT ENAME, EMPNO
FROM EMP
WHERE EMPNO BETWEEN 7499 AND 7654;
SELECT ENAME, EMPNO
FROM EMP
WHERE EMPNO IN (7499, 7654);
SELECT ENAME, SAL
FROM EMP
WHERE SAL BETWEEN 0 AND 2000
OR SAL > 3000;
SELECT DATE_FORMAT(NOW(), '%Y年%M月%D日 %A %H点%I分%S秒') RESULT;
SELECT ENAME, DATEDIFF(CURDATE(), HIREDATE) RESULT
FROM EMP
WHERE HIREDATE IS NOT NULL;
SELECT DATE_SUB(CURDATE(), INTERVAL DAYOFYEAR(NOW()) - 1 DAY) RESULT;
SELECT DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) RESULT;
SELECT DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) - 6 DAY) RESULT;
SELECT DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) + 7 DAY) RESULT;
SELECT DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) + 7 - 6 DAY) RESULT;
SELECT LAST_DAY(CURDATE()) RESULT;
SELECT LAST_DAY(CURDATE() - INTERVAL 1 MONTH) RESULT;
SELECT CONCAT(YEAR(CURDATE()), '-12-31') RESULT;
SELECT CONCAT(DATE_FORMAT(CURDATE(), '%Y-%M-'), '01') RESULT;
SELECT CONCAT(DATE_FORMAT(CURDATE() - INTERVAL 1 MONTH, '%Y-%M-'), '01') RESULT;
SELECT CONCAT_WS('-', XIAO.ENAME, DA.ENAME)
FROM EMP XIAO
JOIN EMP DA ON XIAO.MGR = DA.EMPNO;
SELECT REPEAT('I LOVE YOU', 10);
SELECT ENAME, INSTR(ENAME, 'A')
FROM EMP;
SELECT ENAME, REPLACE(REVERSE(ENAME), 'A', '*')
FROM EMP;
SELECT ENAME, RPAD(ENAME, 5, SPACE(1))
FROM EMP;
SELECT ENAME, INSERT(ENAME, 3, 0, SPACE(1))
FROM EMP;
SELECT DEPTNO, SUM(SAL + IFNULL(COMM, 0))
FROM EMP
WHERE DEPTNO IS NOT NULL
GROUP BY DEPTNO;
SELECT DEPTNO, AVG(SAL)
FROM EMP
WHERE DEPTNO IS NOT NULL
GROUP BY DEPTNO;
SELECT JOB, MIN(SAL)
FROM EMP
WHERE JOB != 'PRESIDENT'
GROUP BY JOB;
SELECT JOB, MIN(IFNULL(COMM, 0))
FROM EMP
WHERE JOB IS NOT NULL
GROUP BY JOB;
SELECT DNAME, AVG(SAL)
FROM DEPT
JOIN EMP ON DEPT.DEPTNO = EMP.DEPTNO
GROUP BY EMP.DEPTNO
HAVING AVG(SAL) > 2000;
SELECT DEPTNO, AVG(SAL), MAX(SAL), MIN(SAL)
FROM EMP
WHERE DEPTNO IS NOT NULL
GROUP BY DEPTNO;
SELECT ENAME, IF(COMM IS NOT NULL, 'YES', 'NO') RESULT
FROM EMP;
SELECT ENAME, SAL + IFNULL(COMM, 0) RESULT
FROM EMP;