MySQL練習(xí)題
- 讓emp表中所員工的工資 + 200产喉, 同時(shí)顯示之前的工資和加薪之后的工資
SELECT
sal,
(sal + 200)
FROM
emp;
- 員工試用期6個(gè)月,轉(zhuǎn)正后月薪上調(diào)20%,請(qǐng)查詢出所有員工工作第一年的所有收入苗胀,要求顯示列標(biāo)題為員工姓名狡刘,工資收入享潜,獎(jiǎng)金收入,總收入
SELECT
ename AS 員工姓名,
sal AS 工資收入,
ifnull(comm, 0) AS 獎(jiǎng)金收入,
(
sal * 6 + sal * 1.2 * 6 + ifnull(comm, 0)
) AS 總收入
FROM
emp;
- 查詢員工表中一共有哪幾種崗位類型
SELECT DISTINCT
job
FROM
emp;
- 查詢職位為SALESMAN的員工編號(hào)嗅蔬、職位剑按、入職日期。
SELECT
empno,
job,
hiredate
FROM
emp
WHERE
job = 'SALESMAN';
- 查詢1985年12月31日之前入職的員工姓名及入職日期澜术。
SELECT
empno,
hiredate
FROM
emp
WHERE
hiredate < '1985-12-31';
- 查詢部門編號(hào)不在10部門的員工姓名艺蝴、部門編號(hào)
SELECT
empno,
deptno
FROM
emp
WHERE
deptno <> 10;
- 查詢?nèi)肼毴掌谠?2年至85年的員工姓名,入職日期
SELECT
ename,
hiredate
FROM
emp
WHERE
hiredate BETWEEN '1982-01-01'
AND '1985-01-01';
- 查詢?cè)滦皆?000到5000的員工姓名鸟废,月薪猜敢。
SELECT
ename,
sal
FROM
emp
WHERE
sal BETWEEN 3000
AND 5000;
- 查詢經(jīng)理編號(hào)為7902, 7566, 7788的員工姓名,經(jīng)理編號(hào)
SELECT
ename,
mgr
FROM
emp
WHERE
mgr IN (7902, 7566, 7788);
- 查詢員工姓名以W開(kāi)頭的員工姓名盒延。
SELECT
ename
FROM
emp
WHERE
ename LIKE 'W%';
- 查詢員工姓名倒數(shù)第2個(gè)字符為T的員工姓名锣枝。
SELECT
ename
FROM
emp
WHERE
ename LIKE "%T_";
- 查詢獎(jiǎng)金為空的員工姓名,獎(jiǎng)金
SELECT
ename,
comm
FROM
emp
WHERE
comm IS NULL;
- 查詢工資超過(guò)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;
- 查詢?nèi)肼毴掌谠?1年趋厉,并且職位不是SALES開(kāi)頭的員工姓名、入職日期胶坠、職位君账。
SELECT
ename,
hiredate,
job
FROM
emp
WHERE
hiredate BETWEEN '1981-01-01'
AND '1982-01-01'
AND job NOT LIKE 'SALES%';
- 查詢職位為SALESMAN或MANAGER,部門編號(hào)為10或者20沈善,
姓名包含A的員工姓名乡数、職位、部門編號(hào)闻牡。
SELECT
ename,
job,
deptno
FROM
emp
WHERE
job IN ('SALESMAN', 'MANAGER')
AND deptno IN (10, 20)
AND ename LIKE 'A';
- 查詢部門在20或30的員工姓名净赴,部門編號(hào),并按照工資升序排序罩润。
SELECT
ename,
deptno,
sal
FROM
emp
WHERE
deptno IN (20, 30)
ORDER BY
sal;
- 查詢工資在2000-3000之間玖翅,部門不在10號(hào)的員工姓名,部門編號(hào),工資金度,并按照部門升序应媚,工資降序排序。
SELECT
ename,
deptno,
sal
FROM
emp
WHERE
sal BETWEEN 2000
AND 3000
AND deptno NOT IN (10)
ORDER BY
deptno ASC,
sal DESC;
- 查詢?nèi)肼毴掌谠?1年至82年之間猜极,職位以SALES或者M(jìn)AN開(kāi)頭的員工姓名珍特,入職日期,職位魔吐,并按照入職日期降序排序
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;
- 查詢?nèi)肼毴掌谧钤绲那?名員工姓名扎筒,入職日期。
SELECT
ename,
hiredate
FROM
emp
ORDER BY
hiredate
LIMIT 5;
- 查詢20號(hào)部門下入職日期最早的前2名員工姓名酬姆,入職日期嗜桌。
SELECT
ename,
hiredate
FROM
emp
WHERE
deptno = 20
ORDER BY
hiredate
LIMIT 2;
- 按照每頁(yè)顯示5條記錄,分別查詢第1頁(yè)辞色,第2頁(yè)骨宠,第3頁(yè)信息,
要求顯示員工姓名相满、入職日期层亿、部門編號(hào)。
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;
- 查詢?nèi)肼殨r(shí)間在1982-7-9之后立美,并且不從事SALESMAN工作的員工姓名匿又、入職時(shí)間、職位建蹄。
SELECT
ename,
hiredate,
job
FROM
emp
WHERE
hiredate > '1982-07-09'
AND job <> 'SALESMAN';
- 查詢員工姓名的第三個(gè)字母是a的員工姓名碌更。
SELECT
ename
FROM
emp
WHERE
ename LIKE '__a%';
- 查詢除了10、20號(hào)部門以外的員工姓名洞慎、部門編號(hào)痛单。
SELECT
ename,
deptno
FROM
emp
WHERE
deptno NOT IN (10, 20);
- 查詢部門號(hào)為30號(hào)員工的信息,先按工資降序排序劲腿,再按姓名升序排序旭绒。
SELECT
*
FROM
emp
WHERE
deptno = 30
ORDER BY
sal DESC,
ename;
- 查詢工資大于等于4500并且部門為10或者20的員工的姓名\工資、部門編號(hào)焦人。
SELECT
ename,
sal,
deptno
FROM
emp
WHERE
sal >= 4500
AND deptno IN (10, 20);
- 寫(xiě)一個(gè)查詢挥吵,顯示所有員工姓名,部門編號(hào)垃瞧,部門名稱蔫劣。
SELECT
e.ename,
e.empno,
e.job
FROM
emp e,
dept d
WHERE
e.deptno = d.deptno;
- 寫(xiě)一個(gè)查詢坪郭,顯示所有工作在CHICAGO并且獎(jiǎng)金不為空的員工姓名个从,工作地點(diǎn),獎(jiǎng)金
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;
- 寫(xiě)一個(gè)查詢,顯示所有姓名中含有A字符的員工姓名嗦锐,工作地點(diǎn)嫌松。
SELECT
e.ename,
d.loc
FROM
emp e,
dept d
WHERE
e.deptno = d.deptno
AND e.ename LIKE '%A%';
- 查詢每個(gè)員工的姓名和直接上級(jí)姓名
SELECT
w.ename 員工姓名,
m.ename 領(lǐng)導(dǎo)姓名
FROM
emp w,
emp m
WHERE
w.mgr = m.empno;
- 查詢所有雇員姓名,部門編號(hào)奕污,部門名稱萎羔,包括沒(méi)有部門的員工也要顯示出來(lái)(左外連接)
SELECT
e.ename,
e.deptno,
d.dname
FROM
emp e
LEFT OUTER JOIN dept d ON (e.deptno = d.deptno);
- 查詢所有雇員姓名,部門編號(hào)碳默,部門名稱贾陷,包括沒(méi)有員工的部門也要顯示出來(lái) (右外連接)
SELECT
e.ename,
e.deptno,
d.dname
FROM
emp e
RIGHT OUTER JOIN dept d ON (e.deptno = d.deptno);
- 創(chuàng)建一個(gè)員工表和部門表的交叉連接。
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';
- 使用左連接该抒,查詢每個(gè)員工的姓名慌洪,經(jīng)理姓名,沒(méi)有經(jīng)理的King也要顯示出來(lái)凑保。
SELECT
w.ename,
m.ename
FROM
emp w
LEFT JOIN emp m ON w.mgr = m.empno;
- 使用右連接冈爹,查詢每個(gè)員工的姓名,經(jīng)理姓名欧引,沒(méi)有經(jīng)理的King也要顯示出來(lái)频伤。
SELECT
w.ename,
m.ename
FROM
emp m
RIGHT JOIN emp w ON w.mgr = m.empno;
- 顯示員工SMITH的姓名,部門名稱芝此,直接上級(jí)名稱
SELECT
w.ename 員工姓名,
m.ename 領(lǐng)導(dǎo)姓名,
d.dname 部門名稱
FROM
emp w,
emp m,
dept d
WHERE
w.mgr = m.empno
AND w.deptno = d.deptno
AND w.ename = 'SMITH';
- 顯示員工姓名剂买,部門名稱,工資癌蓖,工資級(jí)別瞬哼,要求工資級(jí)別大于4級(jí)。
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管理的員工姓名及其經(jīng)理姓名租副。
SELECT
e.ename AS '管理的員工姓名',
m.ename AS '員工姓名',
p.ename AS '經(jīng)理姓名'
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;
- 顯示員工姓名坐慰,參加工作時(shí)間,經(jīng)理名用僧,參加工作時(shí)間结胀,要求參加時(shí)間比經(jīng)理早。
SELECT
w.ename 員工姓名,
m.ename 經(jīng)理姓名,
w.hiredate 員工入職時(shí)間,
m.hiredate 經(jīng)理入職時(shí)間
FROM
emp w,
emp m
WHERE
w.mgr = m.empno
AND w.hiredate > m.hiredate;
- 查詢部門30有多少個(gè)員工領(lǐng)取獎(jiǎng)金
SELECT
COUNT(comm)
FROM
emp
WHERE
deptno = 30;
- 查詢?nèi)肼毴掌谧钤绾妥钔淼娜掌?/li>
SELECT
MIN(hirdate),
MAX(HIREDATE)
FROM
emp
- 查詢職位以SALES開(kāi)頭的所有員工平均工資责循、最低工資糟港、最高工資、工資和院仿。
SELECT
AVG(SAL) 平均工資,
MIN(SAL) 最低工資,
MAX(SAL) 最高工資,
SUM(SAL) 工資和
FROM
emp
WHERE
JOB LIKE 'SALES%'
- IFNULL 函數(shù)可以使分組函數(shù)強(qiáng)制包含含有空值的記錄
SELECT
COUNT(IFNULL(COMM,0))
FROM
emp;
- 所有員工的平均獎(jiǎng)金
SELECT
AVG(IFNULL(COMM,0))
FROM
emp;
- 有獎(jiǎng)金的平均獎(jiǎng)金
SELECT
AVG(COMM)
FROM
emp;
- 查詢部門20的員工秸抚,每個(gè)月的工資總和及平均工資速和。
SELECT
AVG(sal) 平均工資,
SUM(sal) 工資和
FROM
emp
WHERE
deptno = 20;
- 查詢工作在CHICAGO的員工人數(shù),最高工資及最低工資剥汤。
SELECT
COUNT(m.empno) 員工人數(shù),
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 語(yǔ)句
- 查詢每個(gè)部門的部門編號(hào)颠放, 平均工資
SELECT
deptno,
avg(sal)
FROM
emp
GROUP BY
deptno;
- 查詢每個(gè)部門的部門編號(hào), 每個(gè)部門的最低工資
SELECT
deptno,
min(sal)
FROM
emp
GROUP BY
deptno;
- 查詢每個(gè)部門的部門編號(hào)吭敢, 每個(gè)部門的最高工資
SELECT
deptno,
max(sal)
FROM
emp
GROUP BY
deptno;
- 查詢每個(gè)部門每個(gè)崗位的工資總和
SELECT
deptno,
job,
sum(sal)
FROM
emp
GROUP BY
deptno,
job;
- 查詢每個(gè)部門的部門編號(hào)碰凶,部門名稱,部門人數(shù)鹿驼,最高工資欲低,最低工資,工資總和畜晰,平均工資伸头。
SELECT
d.DEPTNO 部門編號(hào),
d.DNAME 部門名稱,
COUNT(*) 部門人數(shù),
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;
- 查詢每個(gè)部門,每個(gè)崗位的部門編號(hào)舷蟀,部門名稱恤磷,崗位名稱,部門人數(shù)野宜,最高工資扫步,最低工資,工資總和匈子,平均工資河胎。
SELECT
d.DEPTNO 部門編號(hào),
d.DNAME 部門名稱,
e.JOB 崗位名稱,
COUNT(*) 部門人數(shù),
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;
- 查詢每個(gè)經(jīng)理所管理的人數(shù),經(jīng)理編號(hào)虎敦,經(jīng)理姓名游岳,要求包括沒(méi)有經(jīng)理的人員信息。
SELECT
COUNT(*) 管理人數(shù),
m.EMPNO 經(jīng)理編號(hào),
m.ENAME 經(jīng)理姓名
FROM
emp w
LEFT OUTER JOIN emp m ON w.MGR = m.EMPNO
GROUP BY
m.EMPNO,
m.ENAME
- 查詢每個(gè)部門最高薪水大于2900的部門編號(hào)其徙,最高工資
SELECT
e.DEPTNO,
MAX(e.sal)
FROM
emp e
GROUP BY
e.DEPTNO
HAVING
MAX(e.SAL) > 2900
- 查詢每個(gè)工種胚迫, 工資總和, 并且工作不是以 SALE開(kāi)頭的且每個(gè)工種的工資和大于5000時(shí)輸出唾那,并按照結(jié)果的工資總數(shù)進(jìn)行升序排序
SELECT
job 工種,
SUM(sal) 工資總和
FROM
emp
WHERE
job NOT LIKE 'SALES%'
GROUP BY
job
HAVING
SUM(sal) > 5000
ORDER BY
SUM(sal);
- 查詢部門人數(shù)大于2的部門編號(hào)访锻,部門名稱,部門人數(shù)闹获。
SELECT
e.DEPTNO 部門編號(hào),
d.DNAME 部門名稱,
COUNT(*) 部門人數(shù)
FROM
emp e,
dept d
WHERE
e.DEPTNO = d.DEPTNO
GROUP BY
e.DEPTNO
HAVING
COUNT(*) > 2
- 查詢部門平均工資大于2000期犬,且人數(shù)大于2的部門編號(hào),部門名稱避诽,部門人數(shù)龟虎,部門平均工資,并按照部門人數(shù)升序排序沙庐。
SELECT
e.DEPTNO 部門編號(hào),
d.DNAME 部門名稱,
COUNT(*) 部門人數(shù),
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);
- 顯示和工號(hào)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部門最低工資高的部門編號(hào)及最低工資
SELECT e.DEPTNO 部門編號(hào) ,MIN(e.SAL)
from emp e
GROUP BY e.DEPTNO
HAVING
MIN(e.SAL) > (SELECT MIN(sal) from emp WHERE DEPTNO = 20)
- 查詢?nèi)肼毴掌诒?0部門任意一個(gè)員工晚的員工姓名鲤妥、入職日期佳吞,不包括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
);
- 查詢?nèi)肼毴掌诒?0部門所有員工晚的員工姓名、入職日期旭斥,不包括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部門任意一個(gè)員工職位相同的員工姓名容达,職位古涧,不包括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”開(kāi)頭并且平均工資在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;
- 查詢部門人數(shù)在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;
- 顯示經(jīng)理號(hào)碼和經(jīng)理姓名职祷,這個(gè)經(jīng)理所管理員工的最低工資氏涩,沒(méi)有經(jīng)理的KING也要顯示,不包括最低工資小于3000的有梆,按最低工資由高到低排序
SELECT
m.empno AS '經(jīng)理編號(hào)',
m.ename AS '經(jīng)理姓名',
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;
- 查詢工資高于編號(hào)為7782的員工工資是尖,并且和7369號(hào)員工從事相同工作的員工的編號(hào)、姓名及工資泥耀。
SELECT
e.empno AS '員工編號(hào)',
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號(hào)部門最低工資的部門的編號(hào)、名稱及部門最低工資痰催。
SELECT
d.deptno AS '部門編號(hào)',
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
);
- 查詢員工工資為其部門最低工資的員工的編號(hào)和姓名及工資兜辞。
SELECT
e.empno AS '員工編號(hào)',
e.ename AS '員工姓名',
e.sal AS '員工工資'
FROM
emp e
WHERE
e.sal IN (
SELECT
min(e.sal)
FROM
emp e
GROUP BY
e.deptno
);
- 顯示經(jīng)理是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參加工作時(shí)間晚的員工姓名逸吵,工資,參加工作時(shí)間缝裁。
SELECT
w.ename AS '員工姓名',
w.sal AS '員工工資',
w.hiredate AS '參加工作時(shí)間'
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)
);
學(xué)校想做一個(gè)選課系統(tǒng)胁塞,其中涉及到課程表,學(xué)生表压语,請(qǐng)分別創(chuàng)建這兩個(gè)表啸罢,自己思考表中應(yīng)有的列及數(shù)據(jù)類型。
學(xué)校有一個(gè)選課系統(tǒng)胎食,其中包括如下關(guān)系模式:
系(系編號(hào): 主鍵扰才,系名稱: 唯一鍵,系主任: 非空約束厕怜,系所在校去:默認(rèn)為渾南區(qū))
班級(jí)(班級(jí)編號(hào): 主鍵衩匣,班級(jí)名稱: 唯一鍵蕾总,所屬系: 外鍵)
創(chuàng)建學(xué)生表,包含如下屬性:
學(xué)號(hào) 定長(zhǎng)字符型 10位 主鍵
姓名 變長(zhǎng)字符型 20位 非空
性別 定長(zhǎng)字符型 2位
出生日期 日期型
所在班級(jí)
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 ('渾南區(qū)')
);
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)
);
- 創(chuàng)建與dept表相同表結(jié)構(gòu)的表dtest琅捏,將dept表中部門編號(hào)在40之前的信息插入該表生百。
CREATE TABLE dtest SELECT
*
FROM
dept
WHERE
DEPTNO < 40;
- 創(chuàng)建與emp表結(jié)構(gòu)相同的表empl,并將其部門編號(hào)為前30號(hào)的員工信息復(fù)制到empl表柄延。
CREATE TABLE empl SELECT
*
FROM
emp
WHERE
DEPTNO < 30;
- 向部門表新增一個(gè)部門蚀浆,部門編號(hào)為50,部門名稱為HR搜吧,工作地點(diǎn)為SY市俊。
INSERT INTO dept
VALUES
(50, "HR", "SY");
- 向部門表新增一個(gè)部門,部門編號(hào)為60滤奈,部門名稱為MARKET摆昧。
INSERT INTO dept
VALUES
(60, "MARKET", "");
- 插入日期值
INSERT INTO emp
VALUES
(
8889,
'李會(huì)長(zhǎng)',
'小青年',
NULL,
'1888-01-01
',
4000,
12,
50
);
- 向員工表中新增一個(gè)員工,員工編號(hào)為8888蜒程,姓名為BOB绅你,崗位為CLERK,經(jīng)理為號(hào)7788昭躺,入職日期為1985-03-03忌锯,薪資3000,獎(jiǎng)金和部門為空窍仰。
INSERT INTO emp
VALUES
(
8899,
'BOB',
'clerk',
7788,
'1985-03-03',
3000,
NULL,
NULL
);
- 批量插入數(shù)據(jù)
INSERT INTO EMP(EMPNO, ENAME, JOB, SAL)
VALUES
('8881', '張三', '部門經(jīng)理', 6000),
('8882', '李四', '職員', 3000),
('8883', '王五', '職員', 3500),
('8884' ,'趙六', '部門經(jīng)理', 6500),
('8885', '高七', '職員', 2500),
('8886', '馬八', '職員', 3100),
('8887', '錢九', '部門經(jīng)理', 5000),
('8888', '孫十', '職員', 2800);
創(chuàng)建一個(gè)manager表
CREATE TABLE manager AS SELECT
*
FROM
emp
WHERE
1 = 0;
- 插入數(shù)據(jù)汉规, 全部工作為salesman的數(shù)據(jù)
INSERT INTO manager SELECT
*
FROM
emp
WHERE
job = 'SALESMAN';
- 修改部門20的員工信息,把82年之后入職的員工入職日期向后調(diào)整10天
UPDATE emp
SET hiredate = DATE_ADD(hiredate, INTERVAL + 10 DAY)
WHERE
deptno = 20
AND hiredate > '1981-12-31';
- 修改獎(jiǎng)金為null的員工驹吮,獎(jiǎng)金設(shè)置為0
UPDATE emp
SET comm = 0
WHERE
comm IS NULL;
- 修改工作地點(diǎn)在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,創(chuàng)建emp_back表,拷貝下來(lái)即可碟狞。
CREATE TABLE emp_back as SELECT * FROM EMP WHERE 1=0
- 把emp表中入職日期大于1982年1月1日之前的員工信息復(fù)制到emp_back表中
create table emp_back SELECT * from emp WHERE hiredate > '1982-01-01';
- 刪除經(jīng)理編號(hào)為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啄枕、手動(dòng)開(kāi)啟事務(wù)
start transaction;
-
2、執(zhí)行一些操作
給張三賬戶轉(zhuǎn) 50塊錢imageimage