MySQL练习题
- 让emp表中所员工的工资 + 200, 同时显示之前的工资和加薪之后的工资
SELECT
sal,
(sal + 200)
FROM
emp;
- 员工试用期6个月,转正后月薪上调20%,请查询出所有员工工作第一年的所有收入,要求显示列标题为员工姓名,工资收入,奖金收入,总收入
SELECT
ename AS 员工姓名,
sal AS 工资收入,
ifnull(comm, 0) AS 奖金收入,
(
sal * 6 + sal * 1.2 * 6 + ifnull(comm, 0)
) AS 总收入
FROM
emp;
- 查询员工表中一共有哪几种岗位类型
SELECT DISTINCT
job
FROM
emp;
- 查询职位为SALESMAN的员工编号、职位、入职日期。
SELECT
empno,
job,
hiredate
FROM
emp
WHERE
job = 'SALESMAN';
- 查询1985年12月31日之前入职的员工姓名及入职日期。
SELECT
empno,
hiredate
FROM
emp
WHERE
hiredate < '1985-12-31';
- 查询部门编号不在10部门的员工姓名、部门编号
SELECT
empno,
deptno
FROM
emp
WHERE
deptno <> 10;
- 查询入职日期在82年至85年的员工姓名,入职日期
SELECT
ename,
hiredate
FROM
emp
WHERE
hiredate BETWEEN '1982-01-01'
AND '1985-01-01';
- 查询月薪在3000到5000的员工姓名,月薪。
SELECT
ename,
sal
FROM
emp
WHERE
sal BETWEEN 3000
AND 5000;
- 查询经理编号为7902, 7566, 7788的员工姓名,经理编号
SELECT
ename,
mgr
FROM
emp
WHERE
mgr IN (7902, 7566, 7788);
- 查询员工姓名以W开头的员工姓名。
SELECT
ename
FROM
emp
WHERE
ename LIKE 'W%';
- 查询员工姓名倒数第2个字符为T的员工姓名。
SELECT
ename
FROM
emp
WHERE
ename LIKE "%T_";
- 查询奖金为空的员工姓名,奖金
SELECT
ename,
comm
FROM
emp
WHERE
comm IS NULL;
- 查询工资超过2000并且职位是 MANAGER或SALESMAN的员工姓名、职位、工资。
SELECT
ename,
job,
sal
FROM
emp
WHERE
sal > 2000
AND job IN ('MANAGER', 'SALESMAN');
- 查询部门在10或者20,并且工资在3000到5000之间的员工姓名、部门、工资。
SELECT
ename,
deptno,
sal
FROM
emp
WHERE
deptno IN (10, 20)
AND sal BETWEEN 3000
AND 5000;
- 查询入职日期在81年,并且职位不是SALES开头的员工姓名、入职日期、职位。
SELECT
ename,
hiredate,
job
FROM
emp
WHERE
hiredate BETWEEN '1981-01-01'
AND '1982-01-01'
AND job NOT LIKE 'SALES%';
- 查询职位为SALESMAN或MANAGER,部门编号为10或者20,
姓名包含A的员工姓名、职位、部门编号。
SELECT
ename,
job,
deptno
FROM
emp
WHERE
job IN ('SALESMAN', 'MANAGER')
AND deptno IN (10, 20)
AND ename LIKE 'A';
- 查询部门在20或30的员工姓名,部门编号,并按照工资升序排序。
SELECT
ename,
deptno,
sal
FROM
emp
WHERE
deptno IN (20, 30)
ORDER BY
sal;
- 查询工资在2000-3000之间,部门不在10号的员工姓名,部门编号,工资,并按照部门升序,工资降序排序。
SELECT
ename,
deptno,
sal
FROM
emp
WHERE
sal BETWEEN 2000
AND 3000
AND deptno NOT IN (10)
ORDER BY
deptno ASC,
sal DESC;
- 查询入职日期在81年至82年之间,职位以SALES或者MAN开头的员工姓名,入职日期,职位,并按照入职日期降序排序
SELECT
ename,
hiredate,
job
FROM
emp
WHERE
(
hiredate BETWEEN '1981-01-01'
AND '1983-01-01'
)
AND (
job LIKE 'SALES%'
OR job LIKE 'MAN%'
)
ORDER BY
hiredate DESC;
- 查询入职日期最早的前5名员工姓名,入职日期。
SELECT
ename,
hiredate
FROM
emp
ORDER BY
hiredate
LIMIT 5;
- 查询20号部门下入职日期最早的前2名员工姓名,入职日期。
SELECT
ename,
hiredate
FROM
emp
WHERE
deptno = 20
ORDER BY
hiredate
LIMIT 2;
- 按照每页显示5条记录,分别查询第1页,第2页,第3页信息,
要求显示员工姓名、入职日期、部门编号。
SELECT
ename,
hiredate,
deptno
FROM
emp
LIMIT 0,
5;
SELECT
ename,
hiredate,
deptno
FROM
emp
LIMIT 5,
5;
SELECT
ename,
hiredate,
deptno
FROM
emp
LIMIT 10,
5;
- 查询入职时间在1982-7-9之后,并且不从事SALESMAN工作的员工姓名、入职时间、职位。
SELECT
ename,
hiredate,
job
FROM
emp
WHERE
hiredate > '1982-07-09'
AND job <> 'SALESMAN';
- 查询员工姓名的第三个字母是a的员工姓名。
SELECT
ename
FROM
emp
WHERE
ename LIKE '__a%';
- 查询除了10、20号部门以外的员工姓名、部门编号。
SELECT
ename,
deptno
FROM
emp
WHERE
deptno NOT IN (10, 20);
- 查询部门号为30号员工的信息,先按工资降序排序,再按姓名升序排序。
SELECT
*
FROM
emp
WHERE
deptno = 30
ORDER BY
sal DESC,
ename;
- 查询工资大于等于4500并且部门为10或者20的员工的姓名\工资、部门编号。
SELECT
ename,
sal,
deptno
FROM
emp
WHERE
sal >= 4500
AND deptno IN (10, 20);
- 写一个查询,显示所有员工姓名,部门编号,部门名称。
SELECT
e.ename,
e.empno,
e.job
FROM
emp e,
dept d
WHERE
e.deptno = d.deptno;
- 写一个查询,显示所有工作在CHICAGO并且奖金不为空的员工姓名,工作地点,奖金
SELECT
e.ename,
d.loc,
e.comm
FROM
emp e,
dept d
WHERE
e.deptno = d.deptno
AND d.loc = 'CHICAGO'
AND comm IS NOT NULL;
- 写一个查询,显示所有姓名中含有A字符的员工姓名,工作地点。
SELECT
e.ename,
d.loc
FROM
emp e,
dept d
WHERE
e.deptno = d.deptno
AND e.ename LIKE '%A%';
- 查询每个员工的姓名和直接上级姓名
SELECT
w.ename 员工姓名,
m.ename 领导姓名
FROM
emp w,
emp m
WHERE
w.mgr = m.empno;
- 查询所有雇员姓名,部门编号,部门名称,包括没有部门的员工也要显示出来(左外连接)
SELECT
e.ename,
e.deptno,
d.dname
FROM
emp e
LEFT OUTER JOIN dept d ON (e.deptno = d.deptno);
- 查询所有雇员姓名,部门编号,部门名称,包括没有员工的部门也要显示出来 (右外连接)
SELECT
e.ename,
e.deptno,
d.dname
FROM
emp e
RIGHT OUTER JOIN dept d ON (e.deptno = d.deptno);
- 创建一个员工表和部门表的交叉连接。
SELECT
e.ename,
e.deptno,
d.deptno
FROM
emp e
CROSS JOIN dept d;
- 使用自然连接,显示入职日期在80年5月1日之后的员工姓名,部门名称,入职日期
SELECT
e.ename,
d.dname,
e.hiredate
FROM
emp e
NATURAL JOIN dept d
WHERE
hiredate > '1980-05-01';
- 使用左连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。
SELECT
w.ename,
m.ename
FROM
emp w
LEFT JOIN emp m ON w.mgr = m.empno;
- 使用右连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。
SELECT
w.ename,
m.ename
FROM
emp m
RIGHT JOIN emp w ON w.mgr = m.empno;
- 显示员工SMITH的姓名,部门名称,直接上级名称
SELECT
w.ename 员工姓名,
m.ename 领导姓名,
d.dname 部门名称
FROM
emp w,
emp m,
dept d
WHERE
w.mgr = m.empno
AND w.deptno = d.deptno
AND w.ename = 'SMITH';
- 显示员工姓名,部门名称,工资,工资级别,要求工资级别大于4级。
SELECT
e.ename,
d.dname,
e.sal,
s.grade
FROM
emp e,
dept d,
salgrade s
WHERE
e.deptno = d.deptno
AND e.sal BETWEEN s.losal
AND s.hisal
AND s.grade > 4;
- 显示员工KING和FORD管理的员工姓名及其经理姓名。
SELECT
e.ename AS '管理的员工姓名',
m.ename AS '员工姓名',
p.ename AS '经理姓名'
FROM
emp e,
emp m
LEFT OUTER JOIN emp p ON (m.mgr = p.empno)
WHERE
m.ename IN ('KING', 'FORD')
AND e.mgr = m.empno;
- 显示员工姓名,参加工作时间,经理名,参加工作时间,要求参加时间比经理早。
SELECT
w.ename 员工姓名,
m.ename 经理姓名,
w.hiredate 员工入职时间,
m.hiredate 经理入职时间
FROM
emp w,
emp m
WHERE
w.mgr = m.empno
AND w.hiredate > m.hiredate;
- 查询部门30有多少个员工领取奖金
SELECT
COUNT(comm)
FROM
emp
WHERE
deptno = 30;
- 查询入职日期最早和最晚的日期
SELECT
MIN(hirdate),
MAX(HIREDATE)
FROM
emp
- 查询职位以SALES开头的所有员工平均工资、最低工资、最高工资、工资和。
SELECT
AVG(SAL) 平均工资,
MIN(SAL) 最低工资,
MAX(SAL) 最高工资,
SUM(SAL) 工资和
FROM
emp
WHERE
JOB LIKE 'SALES%'
- IFNULL 函数可以使分组函数强制包含含有空值的记录
SELECT
COUNT(IFNULL(COMM,0))
FROM
emp;
- 所有员工的平均奖金
SELECT
AVG(IFNULL(COMM,0))
FROM
emp;
- 有奖金的平均奖金
SELECT
AVG(COMM)
FROM
emp;
- 查询部门20的员工,每个月的工资总和及平均工资。
SELECT
AVG(sal) 平均工资,
SUM(sal) 工资和
FROM
emp
WHERE
deptno = 20;
- 查询工作在CHICAGO的员工人数,最高工资及最低工资。
SELECT
COUNT(m.empno) 员工人数,
MAX(sal) 最高工资,
MIN(sal) 最低工资
FROM
emp m,
dept d
WHERE
m.deptno = d.DEPTNO
AND d.loc = 'CHICAGO';
- 查询员工表中一共有几种岗位类型
SELECT
COUNT(DISTINCT JOB)
FROM
emp;
group by 语句
- 查询每个部门的部门编号, 平均工资
SELECT
deptno,
avg(sal)
FROM
emp
GROUP BY
deptno;
- 查询每个部门的部门编号, 每个部门的最低工资
SELECT
deptno,
min(sal)
FROM
emp
GROUP BY
deptno;
- 查询每个部门的部门编号, 每个部门的最高工资
SELECT
deptno,
max(sal)
FROM
emp
GROUP BY
deptno;
- 查询每个部门每个岗位的工资总和
SELECT
deptno,
job,
sum(sal)
FROM
emp
GROUP BY
deptno,
job;
- 查询每个部门的部门编号,部门名称,部门人数,最高工资,最低工资,工资总和,平均工资。
SELECT
d.DEPTNO 部门编号,
d.DNAME 部门名称,
COUNT(*) 部门人数,
MAX(e.SAL) 最高工资,
MIN(e.SAL) 最低工资,
SUM(e.SAL) 工资总和,
AVG(e.SAL) 平均工资
FROM
emp e,
dept d
WHERE
e.DEPTNO = d.DEPTNO
GROUP BY
e.DEPTNO, d.DNAME;
- 查询每个部门,每个岗位的部门编号,部门名称,岗位名称,部门人数,最高工资,最低工资,工资总和,平均工资。
SELECT
d.DEPTNO 部门编号,
d.DNAME 部门名称,
e.JOB 岗位名称,
COUNT(*) 部门人数,
MAX(e.SAL) 最高工资,
MIN(e.SAL) 最低工资,
SUM(e.SAL) 工资总和,
AVG(e.SAL) 平均工资
FROM
emp e,
dept d
WHERE
e.DEPTNO = d.DEPTNO
GROUP BY
d.DEPTNO,d.DNAME, e.JOB;
- 查询每个经理所管理的人数,经理编号,经理姓名,要求包括没有经理的人员信息。
SELECT
COUNT(*) 管理人数,
m.EMPNO 经理编号,
m.ENAME 经理姓名
FROM
emp w
LEFT OUTER JOIN emp m ON w.MGR = m.EMPNO
GROUP BY
m.EMPNO,
m.ENAME
- 查询每个部门最高薪水大于2900的部门编号,最高工资
SELECT
e.DEPTNO,
MAX(e.sal)
FROM
emp e
GROUP BY
e.DEPTNO
HAVING
MAX(e.SAL) > 2900
- 查询每个工种, 工资总和, 并且工作不是以 SALE开头的且每个工种的工资和大于5000时输出,并按照结果的工资总数进行升序排序
SELECT
job 工种,
SUM(sal) 工资总和
FROM
emp
WHERE
job NOT LIKE 'SALES%'
GROUP BY
job
HAVING
SUM(sal) > 5000
ORDER BY
SUM(sal);
- 查询部门人数大于2的部门编号,部门名称,部门人数。
SELECT
e.DEPTNO 部门编号,
d.DNAME 部门名称,
COUNT(*) 部门人数
FROM
emp e,
dept d
WHERE
e.DEPTNO = d.DEPTNO
GROUP BY
e.DEPTNO
HAVING
COUNT(*) > 2
- 查询部门平均工资大于2000,且人数大于2的部门编号,部门名称,部门人数,部门平均工资,并按照部门人数升序排序。
SELECT
e.DEPTNO 部门编号,
d.DNAME 部门名称,
COUNT(*) 部门人数,
AVG(e.SAL) 部门平均工资
FROM
emp e,
dept d
WHERE
e.DEPTNO = d.DEPTNO
GROUP BY
e.DEPTNO
HAVING
(COUNT(*) > 2)
AND (AVG(e.SAL) > 2000)
ORDER BY
3
- 查询工资比Jones工资高的员工信息
SELECT
*
FROM
emp e
WHERE
e.SAL > ( SELECT e.SAL from emp e WHERE e.ENAME = 'JONES');
- 查询工资最低的员工姓名
SELECT
e.ENAME
FROM
emp e
WHERE
e.SAL = (SELECT MIN(e.sal) from emp e);
- 显示和工号7369从事相同工作并且工资大于7876的员工姓名和工作
SELECT e.ENAME, e.JOB
from emp e
WHERE
e.JOB = (SELECT JOB FROM emp WHERE EMPNO = 7369) and
e.sal > (SELECT SAL FROM emp WHERE EMPNO = 7876);
- 查询部门最低工资比20部门最低工资高的部门编号及最低工资
SELECT e.DEPTNO 部门编号 ,MIN(e.SAL)
from emp e
GROUP BY e.DEPTNO
HAVING
MIN(e.SAL) > (SELECT MIN(sal) from emp WHERE DEPTNO = 20)
- 查询入职日期比10部门任意一个员工晚的员工姓名、入职日期,不包括10部门员工
SELECT
e.ename AS '员工姓名',
e.hiredate AS '入职日期'
FROM
emp e
WHERE
e.deptno <> 10
AND e.hiredate > ANY (
SELECT
hiredate
FROM
emp
WHERE
deptno = 10
);
- 查询入职日期比10部门所有员工晚的员工姓名、入职日期,不包括10部门员工
SELECT
e.ename AS '员工姓名',
e.hiredate AS '入职日期'
FROM
emp e
WHERE
e.empno <> 10
AND e.hiredate > ALL (
SELECT
hiredate
FROM
emp
WHERE
deptno = 10
);
- 查询职位和10部门任意一个员工职位相同的员工姓名,职位,不包括10部门员工
SELECT
e.ename AS '员工姓名',
e.job AS '职位'
FROM
emp e
WHERE
e.deptno <> 10
AND e.job = ANY (
SELECT
job
FROM
emp
WHERE
deptno = 10
);
查询部门平均工资在2500元以上的部门名称及平均工资。
SELECT
d.dname AS '部门名称',
avg(e.sal) AS '平均工资'
FROM
emp e,
dept d
WHERE
e.deptno = d.deptno
GROUP BY
e.deptno
HAVING
avg(e.sal) > 2500;
- 查询员工岗位中不是以“SA”开头并且平均工资在2500元以上的岗位及平均工资,并按平均工资降序排序。
SELECT
e.job AS '岗位',
avg(e.sal) AS '平均工资'
FROM
emp e
WHERE
e.job NOT LIKE 'SA%'
GROUP BY
e.job
HAVING
avg(e.sal) > 2500
ORDER BY
2 DESC;
- 查询部门人数在2人以上的部门名称、最低工资、最高工资。
SELECT
d.dname AS '部门名称',
min(e.sal) AS '最低工资',
max(e.sal) AS '最高工资'
FROM
emp e,
dept d
WHERE
e.deptno = d.deptno
GROUP BY
d.deptno
HAVING
count(e.empno) > 2;
- 查询岗位不为SALESMAN,工资和大于等于2500的岗位及每种岗位的工资和。
SELECT
e.job AS '岗位',
sum(e.sal) AS '工资和'
FROM
emp e
WHERE
e.job <> 'SALESMAN'
GROUP BY
e.job
HAVING
sum(e.sal) > 2500;
- 显示经理号码和经理姓名,这个经理所管理员工的最低工资,没有经理的KING也要显示,不包括最低工资小于3000的,按最低工资由高到低排序
SELECT
m.empno AS '经理编号',
m.ename AS '经理姓名',
min(w.sal) AS '管理员工的最低工资'
FROM
emp w
LEFT OUTER JOIN emp m ON (w.mgr = m.empno)
GROUP BY
m.empno
HAVING
min(w.sal) > 3000
ORDER BY
3 DESC;
- 查询工资高于编号为7782的员工工资,并且和7369号员工从事相同工作的员工的编号、姓名及工资。
SELECT
e.empno AS '员工编号',
e.ename AS '员工姓名',
e.sal AS '员工工资'
FROM
emp e
WHERE
e.sal > (
SELECT
sal
FROM
emp
WHERE
empno = 7782
)
AND e.job = (
SELECT
job
FROM
emp
WHERE
empno = 7369
);
- 查询工资最高的员工姓名和工资。
SELECT
e.ename AS '员工姓名',
e.sal AS '员工工资'
FROM
emp e
ORDER BY
e.sal DESC
LIMIT 1;
SELECT
e.ename AS '员工姓名',
e.sal AS '员工工资'
FROM
emp e
WHERE
e.sal = (SELECT max(sal) FROM emp);
- 查询部门最低工资高于10号部门最低工资的部门的编号、名称及部门最低工资。
SELECT
d.deptno AS '部门编号',
d.dname AS '部门名称',
min(e.sal) AS '部门最低工资'
FROM
emp e,
dept d
WHERE
e.deptno = d.deptno
GROUP BY
d.deptno
HAVING
min(e.sal) > (
SELECT
min(sal)
FROM
emp
WHERE
deptno = 10
);
- 查询员工工资为其部门最低工资的员工的编号和姓名及工资。
SELECT
e.empno AS '员工编号',
e.ename AS '员工姓名',
e.sal AS '员工工资'
FROM
emp e
WHERE
e.sal IN (
SELECT
min(e.sal)
FROM
emp e
GROUP BY
e.deptno
);
- 显示经理是KING的员工姓名,工资。
SELECT
w.ename AS '员工姓名',
w.sal AS '员工工资'
FROM
emp w,
emp m
WHERE
w.mgr = m.empno
AND m.ename = 'KING';
SELECT
w.ename AS '员工姓名',
w.sal AS '员工工资'
FROM
emp w
WHERE
w.mgr = (
SELECT
empno
FROM
emp
WHERE
ename = 'KING'
);
- 显示比员工SMITH参加工作时间晚的员工姓名,工资,参加工作时间。
SELECT
w.ename AS '员工姓名',
w.sal AS '员工工资',
w.hiredate AS '参加工作时间'
FROM
emp w
WHERE
w.hiredate > (
SELECT
hiredate
FROM
emp
WHERE
ename = 'SIMTH'
);
- 主键约束(PRIMARY KEY)
CREATE TABLE classes (
classes_id INT PRIMARY KEY,
classes_name VARCHAR (10),
classes_dept VARCHAR (10)
);
- 外键约束(FOREIGN KEY)
CREATE TABLE teacher (
teacher_id INT PRIMARY KEY,
teacher_name VARCHAR (10),
cid INT,
FOREIGN KEY (cid) REFERENCES classes (classes_id)
);
学校想做一个选课系统,其中涉及到课程表,学生表,请分别创建这两个表,自己思考表中应有的列及数据类型。
学校有一个选课系统,其中包括如下关系模式:
系(系编号: 主键,系名称: 唯一键,系主任: 非空约束,系所在校去:默认为浑南区)
班级(班级编号: 主键,班级名称: 唯一键,所属系: 外键)
创建学生表,包含如下属性:
学号 定长字符型 10位 主键
姓名 变长字符型 20位 非空
性别 定长字符型 2位
出生日期 日期型
所在班级
CREATE TABLE
IF NOT EXISTS xi (
XINumber VARCHAR (20) NOT NULL PRIMARY KEY,
XIName VARCHAR (20) NOT NULL UNIQUE,
XIZhuren VARCHAR (20) NOT NULL,
Xiaoqu enum ('浑南区')
);
CREATE TABLE
IF NOT EXISTS class (
classid VARCHAR (20) NOT NULL PRIMARY KEY,
cname VARCHAR (20) NOT NULL UNIQUE,
xiname VARCHAR (10) NOT NULL,
FOREIGN KEY (xiname) REFERENCES xi (xiname)
);
CREATE TABLE
IF NOT EXISTS student (
xh VARCHAR (20) NOT NULL PRIMARY KEY,
xm VARCHAR (20) NOT NULL,
gender CHAR (2),
birthday DATE,
cname VARCHAR (20) NOT NULL UNIQUE,
FOREIGN KEY (cname) REFERENCES class (cname)
);
- 创建与dept表相同表结构的表dtest,将dept表中部门编号在40之前的信息插入该表。
CREATE TABLE dtest SELECT
*
FROM
dept
WHERE
DEPTNO < 40;
- 创建与emp表结构相同的表empl,并将其部门编号为前30号的员工信息复制到empl表。
CREATE TABLE empl SELECT
*
FROM
emp
WHERE
DEPTNO < 30;
- 向部门表新增一个部门,部门编号为50,部门名称为HR,工作地点为SY。
INSERT INTO dept
VALUES
(50, "HR", "SY");
- 向部门表新增一个部门,部门编号为60,部门名称为MARKET。
INSERT INTO dept
VALUES
(60, "MARKET", "");
- 插入日期值
INSERT INTO emp
VALUES
(
8889,
'李会长',
'小青年',
NULL,
'1888-01-01
',
4000,
12,
50
);
- 向员工表中新增一个员工,员工编号为8888,姓名为BOB,岗位为CLERK,经理为号7788,入职日期为1985-03-03,薪资3000,奖金和部门为空。
INSERT INTO emp
VALUES
(
8899,
'BOB',
'clerk',
7788,
'1985-03-03',
3000,
NULL,
NULL
);
- 批量插入数据
INSERT INTO EMP(EMPNO, ENAME, JOB, SAL)
VALUES
('8881', '张三', '部门经理', 6000),
('8882', '李四', '职员', 3000),
('8883', '王五', '职员', 3500),
('8884' ,'赵六', '部门经理', 6500),
('8885', '高七', '职员', 2500),
('8886', '马八', '职员', 3100),
('8887', '钱九', '部门经理', 5000),
('8888', '孙十', '职员', 2800);
创建一个manager表
CREATE TABLE manager AS SELECT
*
FROM
emp
WHERE
1 = 0;
- 插入数据, 全部工作为salesman的数据
INSERT INTO manager SELECT
*
FROM
emp
WHERE
job = 'SALESMAN';
- 修改部门20的员工信息,把82年之后入职的员工入职日期向后调整10天
UPDATE emp
SET hiredate = DATE_ADD(hiredate, INTERVAL + 10 DAY)
WHERE
deptno = 20
AND hiredate > '1981-12-31';
- 修改奖金为null的员工,奖金设置为0
UPDATE emp
SET comm = 0
WHERE
comm IS NULL;
- 修改工作地点在NEW YORK或CHICAGO的员工工资,工资增加500
UPDATE emp
SET sal = sal + 500
WHERE
deptno IN (
SELECT
deptno
FROM
dept
WHERE
loc IN ('NEW YORK', 'CHICAGO')
);
- 使用CREATE TABLE emp_back as SELECT - FROM EMP WHERE 1=0,创建emp_back表,拷贝下来即可。
CREATE TABLE emp_back as SELECT * FROM EMP WHERE 1=0
- 把emp表中入职日期大于1982年1月1日之前的员工信息复制到emp_back表中
create table emp_back SELECT * from emp WHERE hiredate > '1982-01-01';
- 删除经理编号为7566的员工记录
delete from emp_copy where mgr=7566;
- 删除工作在NEW YORK的员工记录
DELETE
FROM
emp_copy
WHERE
deptno IN (
SELECT
DEPTNO
FROM
dept
WHERE
loc = 'NEW YORK'
)
- 删除工资大于所在部门平均工资的员工记录
DELETE FROM emp_copy WHERE empno in (select * from (SELECT
a.empno
FROM
emp_copy AS a,
(
SELECT
deptno,
AVG(sal) AS avgsal
FROM
emp_copy
GROUP BY
deptno
) as b
WHERE
a.deptno = b.deptno
AND a.sal > b.avgsal) as query)
delete from emp22 where sal>(select avg(sal) from emp e where emp22.deptno=e.deptno);
- 1、手动开启事务
start transaction;
-
2、执行一些操作
给张三账户转 50块钱