一個初中級實習程序員面試的必經之路———mysql面試常見題

最近參與面試,作爲剛入門的一名後端程序員,永遠離不開增刪改查,熟練使用mybatis。數據庫成爲了必考的一個分支,想想還是做點題來鞏固一下以前的知識;

首先是三個表的的創建工作

 dept  | CREATE TABLE `dept` (
  `deptnu` int(11) NOT NULL COMMENT '部門編號',
  `dname` varchar(50) DEFAULT NULL COMMENT '部門名稱',
  `addr` varchar(50) DEFAULT NULL COMMENT '部門地址',
  PRIMARY KEY (`deptnu`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8   


employee | CREATE TABLE `employee` (
  `empno` int(11) NOT NULL COMMENT '僱員編號',
  `ename` varchar(50) DEFAULT NULL COMMENT '僱員姓名',
  `job` varchar(50) DEFAULT NULL COMMENT '僱員職位',
  `mgr` int(11) DEFAULT NULL COMMENT '僱員上級編號',
  `hiredate` date DEFAULT NULL COMMENT '僱傭日期',
  `sal` decimal(7,2) DEFAULT NULL COMMENT '薪資',
  `deptnu` int(11) DEFAULT NULL COMMENT '部門編號',
  PRIMARY KEY (`empno`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8  

salgrade | CREATE TABLE `salgrade` (
  `grade` int(11) NOT NULL COMMENT '等級',
  `lowsal` int(11) DEFAULT NULL COMMENT '最低薪資',
  `higsal` int(11) DEFAULT NULL COMMENT '最高薪資',
  PRIMARY KEY (`grade`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8     

然後插入數據

/*插入dept表數據*/
INSERT INTO dept VALUES (10, '研發部', '北京');
INSERT INTO dept VALUES (20, '工程部', '上海');
INSERT INTO dept VALUES (30, '銷售部', '廣州');
INSERT INTO dept VALUES (40, '財務部', '深圳');
/*插入emp表數據*/
INSERT INTO employee VALUES (1009, '唐僧', '董事長', NULL, '2010-11-17', 50000, 10);
INSERT INTO employee VALUES (1004, '豬八戒', '經理', 1009, '2001-04-02', 29750, 20);
INSERT INTO employee VALUES (1006, '猴子', '經理', 1009, '2011-05-01', 28500, 30);
INSERT INTO employee VALUES (1007, '張飛', '經理', 1009, '2011-09-01', 24500,10);
INSERT INTO employee VALUES (1008, '諸葛亮', '分析師', 1004, '2017-04-19', 30000, 20);
INSERT INTO employee VALUES (1013, '林俊杰', '分析師', 1004, '2011-12-03', 30000, 20);
INSERT INTO employee VALUES (1002, '牛魔王', '銷售員', 1006, '2018-02-20', 16000, 30);
INSERT INTO employee VALUES (1003, '程咬金', '銷售員', 1006, '2017-02-22', 12500, 30);
INSERT INTO employee VALUES (1005, '後裔', '銷售員', 1006, '2011-09-28', 12500, 30);
INSERT INTO employee VALUES (1010, '韓信', '銷售員', 1006, '2018-09-08', 15000,30);
INSERT INTO employee VALUES (1012, '安琪拉', '文員', 1006, '2011-12-03', 9500, 30);
INSERT INTO employee VALUES (1014, '甄姬', '文員', 1007, '2019-01-23', 7500, 10);
INSERT INTO employee VALUES (1011, '妲己', '文員', 1008, '2018-05-23', 11000, 20);
INSERT INTO employee VALUES (1001, '小喬', '文員', 1013, '2018-12-17', 8000, 20);
/*插入salgrade表數據*/
INSERT INTO salgrade VALUES (1, 7000, 12000);
INSERT INTO salgrade VALUES (2, 12010, 14000);
INSERT INTO salgrade VALUES (3, 14010, 20000);
INSERT INTO salgrade VALUES (4, 20010, 30000);
INSERT INTO salgrade VALUES (5, 30010, 99990);

接着開始實戰演練(練習的題基本是常見的面試題)

1.查出至少有一個員工的部門。顯示部門編號、部門名稱、部門位置、部門人數。

涉及表: employee dept
語句:select deptnu,count(*) from employee group by deptnu
語句:select a.deptnu,a.dname,a.addr, b.zongshu from dept a,(select deptnu,count(*) as
zongshu from employee group by deptnu) b where a.deptnu=b.deptnu;

2.列出薪金比安琪拉高的所有員工。

涉及表:employee
語句:select * from employee where sal > (select sal from employee where ename='安琪
拉');

3.列出所有員工的姓名及其直接上級的姓名。

涉及表:employee
語句:select a.ename,ifnull(b.ename,'BOSS') as leader from employee a left join employee
b on a.mgr=b.empno;

4.列出受僱日期早於直接上級的所有員工的編號、姓名、部門名稱。

涉及表:employee dept
條件:a.hiredate < b.hiredate
語句:select a.empno,a.ename,c.dname from employee a left join employee b on
a.mgr=b.empno left join dept c on a.deptnu=c.deptnu where a.hiredate < b.hiredate;

5.列出部門名稱和這些部門的員工信息,同時列出那些沒有員工的部門。

涉及表:dept employee
語句:select a.dname,b.* from dept a left join employee b on a.deptnu=b.deptnu;

6.列出所有文員的姓名及其部門名稱,所在部門的總人數。

涉及表:employee dept
條件:job='文員'
語句:select deptnu,count(*) as zongshu from employee group by deptnu;
語句:select b.ename,a.dname,b.job,c.zongshu from dept a ,employee b ,(select
deptnu,count(*) as zongshu from employee group by deptnu) c where a.deptnu=b.deptnu and
b.job='文員' and b.deptnu=c.deptnu;

7.列出最低薪金大於15000的各種工作及從事此工作的員工人數。

涉及表:employee
條件:min(sal) > 15000
語句:select job,count(*) from employee group by job having min(sal) > 15000;

8.列出在銷售部工作的員工的姓名,假定不知道銷售部的部門編號。

涉及表:employee dept
select ename from employee where deptnu=(select deptnu from dept where dname='銷售部');

9.列出與諸葛亮從事相同工作的所有員工及部門名稱。

涉及表:employee dept
語句:select a.ename,b.dname from employee a,dept b where a.deptnu=b.deptnu and a.job=
(select job from employee where ename='諸葛亮');
語句:select a.ename,b.dname from employee a left join dept b on a.deptnu=b.deptnu where
a.job=(select job from employee where ename='諸葛亮');

10.列出薪金比 在部門30工作的員工的薪金 還高的員工姓名和薪金、部門名稱。

涉及表:employee dept
語句:select a.ename,a.sal,b.dname from employee a ,dept b where a.deptnu=b.deptnu and
sal > (select max(sal) from employee where deptnu=30);

11.列出每個部門的員工數量、平均工資。

涉及表:employee
語句:select deptnu , count(*) ,avg (sal) from employee group by deptnu;

12.列出薪金高於公司平均薪金的所有員工信息,所在部門名稱,上級領導,工資等級。

涉及表:employee dept salgrade
條件:select avg(sal) from employee
語句:elect a.*,c.dname,b.ename,d.grade from employee a,employee b,dept c ,salgrade d
where a.mgr=b.empno and a.deptnu =c.deptnu and a.sal > (select avg(sal) from
employee) and a.sal between d.lowsal and d.higsal;

練習到此爲止,後端初中級別程序員,能夠熟練完成以上習題,基本上面試階段就夠用了。但是長期的發展還是要繼續努力,加油吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章