1.素材簡(jiǎn)介
數(shù)據(jù)庫:dept_emp
1.dept表:deptno’部門編號(hào)’、dname’部門名稱’、loc’地理位置’;
2.emp表:empno ‘員工編號(hào)’、ename ‘員工名字’、job ‘職位’、mgr ‘上司’、hiredate ‘入職時(shí)間’、sal ‘基本工資’,comm ‘補(bǔ)貼’,deptno ‘所屬部門編號(hào)’;
3.salgrade:grade ‘工資等級(jí)’、losal ‘最低限額’、hisal ‘最高限額’;
問題:
單表查詢
1.選擇部門30中的所有員工
2.列出所有辦事員的姓名,編號(hào)和部門編號(hào)
3.找出傭金高于薪金的員工
4.找出沒有傭金的員工
5.找出傭金高于薪金的60%的員工
6.找出部門10中所有人事部長(zhǎng)和部門20中所有辦事員的詳細(xì)資料
7.找出收取傭金的員工
8.找出不收取傭金或收取的傭金低于100的員工
9.找出姓張的員工的信息
10.顯示員工的姓名和受雇日期,新的員工排在最前面
11.按工作的降序排序,若工作相同則按薪金排序
12.查出不姓劉的員工的信息
13.取出姓李的員工
多表查詢
1. 查詢出每一位雇員的編號(hào)、姓名、職位、部門名稱、位置
2.要求查詢出每一位雇員的姓名、職位、領(lǐng)導(dǎo)的姓名
3.查詢出每個(gè)雇員的編號(hào)、姓名、基本工資、職位、領(lǐng)導(dǎo)的姓名、部門名稱及位置。
4.列出在部門"銷售部"工作的員工的姓名,假定不知道銷售部的部門編號(hào)。
5.列出與"李興"從事相同工作的所有員工。
6.列出薪金高于在部門30工作的所有員工的薪金的員工姓名和薪金。
7.列出受雇日期早于其直接上級(jí)的所有員工。
分組函數(shù)查詢
1.按照部門編號(hào)分組,求出每個(gè)部的人數(shù),平均工資
2.按照職位分組,求出每個(gè)職位的最高和最低工資
3.計(jì)算出每個(gè)各職位的平均工資
4.查詢出每個(gè)部門的名稱、部門的人數(shù)、平均工資
left outer join on
5.要求統(tǒng)計(jì)出每個(gè)部門的詳細(xì)信息,并且要求這些部門的平均工資高于2000;
6.要求查詢出工資比華仔還要高的全部雇員信息
7.要求查詢出高于公司平均工資的全部雇員信息
8.查詢出每個(gè)部門的編號(hào)、名稱、位置、部門人數(shù)、平均工資
9.列出至少有一個(gè)員工的所有部門。
等級(jí)查詢
1.查詢每個(gè)工資等級(jí)各有多少員工
2.查詢部門中(所有人)的平均工資等級(jí)
2.創(chuàng)建dept表
CREATE TABLE dept (
deptno INT(2) NOT NULL COMMENT '部門編號(hào)',
dname VARCHAR (15) COMMENT '部門名稱',
loc VARCHAR (20) COMMENT '地理位置' );
-- 添加主鍵
ALTER TABLE dept ADD PRIMARY KEY (deptno);
-- 添加數(shù)據(jù)
INSERT INTO dept (deptno,dname,loc)VALUES (10,'財(cái)務(wù)部','高新四路');
INSERT INTO dept (deptno,dname,loc)VALUES (20,'人事部','科技二路');
INSERT INTO dept (deptno,dname,loc)VALUES (30,'銷售部','長(zhǎng)安區(qū)');
INSERT INTO dept (deptno,dname,loc)VALUES (40,'運(yùn)輸部','雁塔區(qū)');
3.創(chuàng)建emp表
CREATE TABLE emp(
empno INT(4) NOT NULL COMMENT '員工編號(hào)',
ename VARCHAR(10) COMMENT '員工名字',
job VARCHAR(10) COMMENT '職位',
mgr INT(4) COMMENT '上司',
hiredate DATE COMMENT '入職時(shí)間',
sal INT(7) COMMENT '基本工資',
comm INT(7) COMMENT '補(bǔ)貼',
deptno INT(2) COMMENT '所屬部門編號(hào)'
);
-- 添加主鍵
ALTER TABLE emp ADD PRIMARY KEY (empno);
-- 添加外鍵約束
ALTER TABLE emp ADD CONSTRAINT f_ed_key
FOREIGN KEY (deptno)
REFERENCES dept(deptno);
-- 添加數(shù)據(jù)
INSERT INTO `emp` VALUES('7369','張倩','辦事員','7902','2002-12-17','820',NULL,'20');
INSERT INTO `emp` VALUES('7499','劉博','售貨員','7698','1992-02-20','1900','300','30');
INSERT INTO `emp` VALUES('7521','李興','售貨員','7698','1995-07-22','1250','500','30');
INSERT INTO `emp` VALUES('7566','李雷','人事部長(zhǎng)','7839','1991-04-02','975',NULL,'20');
INSERT INTO `emp` VALUES('7654','劉浩','售貨員','7698','1991-09-28','1250','1400','30');
INSERT INTO `emp` VALUES('7698','劉濤','銷售部長(zhǎng)','7839','1997-05-01','2850',NULL,'30');
INSERT INTO `emp` VALUES('7782','華仔','人事部長(zhǎng)','7839','1995-06-09','2450',NULL,'10');
INSERT INTO `emp` VALUES('7788','張飛','人事專員','7566','1998-04-19','3000',NULL,'20');
INSERT INTO `emp` VALUES('7839','馬曉云','董事長(zhǎng)',NULL,'1991-11-17','5000',NULL,'10');
INSERT INTO `emp` VALUES('7844','馬琪','售貨員','7698','1996-09-08','1500','0','30');
INSERT INTO `emp` VALUES('7876','李涵','辦事員','7788','1997-05-23','1100',NULL,'20');
INSERT INTO `emp` VALUES('7900','李小涵','銷售員','7698','1993-2-13','950',NULL,'30');
INSERT INTO `emp` VALUES('7902','張三','人事組長(zhǎng)','7566','1992-10-08','3000',NULL,'20');
INSERT INTO `emp` VALUES('7934','張三豐','人事長(zhǎng)','7782','1997-06-23','1300',NULL,'10');
4.創(chuàng)建salgrade表
CREATE TABLE salgrade(
grade INT (10) COMMENT '工資等級(jí)',
losal INT (10) COMMENT '最低限額',
hisal INT (10) COMMENT '最高限額');
-- 添加數(shù)據(jù)
INSERT INTO salgrade (grade, losal, hisal)VALUES (1, 700, 1200);
INSERT INTO salgrade (grade, losal, hisal)VALUES (2, 1201, 1400);
INSERT INTO salgrade (grade, losal, hisal)VALUES (3, 1401, 2000);
INSERT INTO salgrade (grade, losal, hisal)VALUES (4, 2001, 3000);
INSERT INTO salgrade (grade, losal, hisal)VALUES (5, 3001, 9999);
測(cè)試:
至此,所有數(shù)據(jù)庫與表就創(chuàng)建完成了,就可以就行查詢了!
解答:
一、單表查詢
1.選擇部門30中的所有員工
mysql> select * from emp where deptno=30;
2.列出所有辦事員的姓名,編號(hào)和部門編號(hào)
mysql> select ename,empno,deptno from emp where job='辦事員';
3.找出傭金高于薪金的員工
mysql> select * from emp where comm > sal;
4.找出沒有傭金的員工
mysql> select * from emp where comm is null or comm=0;
5.找出傭金高于薪金的60%的員工
mysql> select * from emp where comm is null or comm=0;
6.找出部門10中所有人事部長(zhǎng)和部門20中所有辦事員的詳細(xì)資料
mysql> select * from emp where comm is null or comm=0;
7.找出收取傭金的員工
mysql> select * from emp where comm >0;
8.找出不收取傭金或收取的傭金低于100的員工
mysql> select * from emp where comm is NULL or comm<100;
9.找出姓張的員工的信息
mysql> select * from emp where ename like '張%';
10.顯示員工的姓名和受雇日期,新的員工排在最前面
mysql> select ename,hiredate from emp order by hiredate desc;
11.按工作的降序排序,若工作相同則按薪金排序
mysql> select * from emp order by job,sal;
12.查出不姓劉的員工的信息
mysql> select * from emp where ename not like '劉%';
13.取出姓李的員工
mysql> select ename from emp where ename like '李%';
二、多表查詢
1.查詢出每一位雇員的編號(hào)、姓名、職位、部門名稱、位置
mysql>select e.empno,e.ename,e.job,d.dname,d.loc from dept d,emp e where d.deptno=e.deptno;
2.要求查詢出每一位雇員的姓名、職位、領(lǐng)導(dǎo)的姓名
mysql> select e.ename,e.job,m.ename
-> from emp e,emp m
-> where e.mgr=m.empno;
3.查詢出每個(gè)雇員的編號(hào)、姓名、基本工資、職位、領(lǐng)導(dǎo)的姓名、部門名稱及位置。
mysql> select e.empno,e.ename,e.sal,e.job,e.mgr,d.dname,d.loc
-> from emp e,emp m,dept d
-> where e.mgr=m.empno and e.deptno=d.deptno;
4.列出在部門"銷售部"工作的員工的姓名,假定不知道銷售部的部門編號(hào)。
mysql> select e.empno,e.ename,e.sal,e.job,e.mgr,d.dname,d.loc
-> from emp e,emp m,dept d
-> where e.mgr=m.empno and e.deptno=d.deptno;
5.列出與"李興"從事相同工作的所有員工。
mysql> select e.* from emp e where e.job=(select el.job from emp el where el.ename='李興');
6.列出薪金高于在部門30工作的所有員工的薪金的員工姓名和薪金。
mysql> select e.ename,e.sal from emp e where e.sal > all
-> (select el.sal from emp el where deptno =30);
7.列出受雇日期早于其直接上級(jí)的所有員工。
mysql> select e.* from emp e where ((select el.hiredate from emp el where e.mgr=el.empno)-e.hiredate)>0;
三、分組函數(shù)查詢
1.按照部門編號(hào)分組,求出每個(gè)部的人數(shù),平均工資
mysql> select deptno,count(empno),avg(sal) from emp group by deptno;
2.按照職位分組,求出每個(gè)職位的最高和最低工資
mysql> select job,max(sal) as 最高工資,min(sal) as 最低工資 from emp group by job;
3.計(jì)算出每個(gè)各職位的平均工資
mysql> select job,avg(sal) from emp group by job;
4.查詢出每個(gè)部門的名稱、部門的人數(shù)、平均工資
mysql> select d.dname,count(e.empno),avg(e.sal) from emp e,dept d where e.deptno=d.deptno group by dname;
left outer join on
5.要求統(tǒng)計(jì)出每個(gè)部門的詳細(xì)信息,并且要求這
些部門的平均工資高于2000;
mysql> select d.dname,avg(e.sal) a
-> from dept d left outer join emp e
-> on d.deptno =e.deptno
-> group by d.dname
-> having a > 2000;
6.要求查詢出工資比華仔還要高的全部雇員信息
mysql> select * from emp where sal > (select sal from emp where ename='華仔');
7.要求查詢出高于公司平均工資的全部雇員信息
mysql> select * from emp where sal > (select avg(sal) from emp);
8.查詢出每個(gè)部門的編號(hào)、名稱、位置、部門人數(shù)、平均工資
mysql> select d.dname,count(e.deptno) c ,avg(e.sal)
-> from dept d left outer join emp e
-> on d.deptno =e.deptno
-> group by d.dname order by c;
9.列出至少有一個(gè)員工的所有部門。
mysql> select d.deptno,d.dname from dept d where(
-> select count(e.empno) from emp e
-> where e.deptno=d.deptno)>1;
四、等級(jí)查詢
1.查詢每個(gè)工資等級(jí)各有多少員工
mysql> select s.grade,count(*)
-> from emp e join salgrade s
-> on e.sal between s.losal and hisal
-> group by s.grade;
2.查詢部門中(所有人)的平均工資等級(jí)文章來源:http://www.zghlxwxcb.cn/news/detail-810761.html
mysql> select e.deptno,avg(s.grade) avggrade
-> from emp e join salgrade s
-> on e.sal between s.losal and hisal
-> group by e.deptno
-> order by e.deptno;
文章來源地址http://www.zghlxwxcb.cn/news/detail-810761.html
到了這里,關(guān)于六、MySQL---綜合練習(xí)題(單表、多表、分組函數(shù)以及等級(jí)查詢)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!