大型门户网站程序,做外贸需要做个英文网站吗,百度广告大全,有没有做粤菜的网站11、取得最后入职的5名员工
select ename from emp order by hiredate desc limit 5;
12、取得每个薪水等级有多少员工 先取每个员工的薪水等级
Select e.ename,s.grade grade
From emp e
Join salgrade s
On e.sal between s.losal and s.hisal 接着直接分组求
Select …11、取得最后入职的5名员工
select ename from emp order by hiredate desc limit 5;
12、取得每个薪水等级有多少员工 先取每个员工的薪水等级
Select e.ename,s.grade grade
From emp e
Join salgrade s
On e.sal between s.losal and s.hisal 接着直接分组求
Select a.grade,count(*)From (Select e.ename,s.grade gradeFrom emp eJoin salgrade sOn e.sal between s.losal and s.hisal) aGroup by grade;
13、面试题
1找出没选过“黎明”老师的所有学生姓名
Select distinct s.sname
From sc
Join s
On sc.sno s.sno
Join c
On sc.cno c.cno
Where c.cteacher ! ‘黎明’;
Select s.sname,c.cname,c.cno
From sc
Join s
On sc.sno s.sno
Join c
On sc.cno c.cno
Where c.cteacher ! ‘黎明’; 第一个问题是用的cmd窗口输入因此编码有问题无法得知是代码的问题还是编码的问题因此把老师名字改成课号 第二个问题是和之前一样的因为笛卡尔积把所有的都求出来了,一个人选了很多门课题目的要求是只要存在即删去这个人名但是程序的只要这一行数据没有就保留最后就会把不该保留的保留 尝试按照名字分组使用having对分组数据进行再次过滤
Select s.sname,c.cname,c.cno
From sc
Join s
On sc.sno s.sno
Join c
On sc.cno c.cno
Where s 还是失败了采用先把选5号课的学生找出来再用not in求 选5号课的学生(要找老师也是同理)
Select s.sname
From s
Join sc
on s.sno sc.sno
Where sc.cno 5; 接着排除
Select s.snameFrom sWhere s.sname not in (Select s.snameFrom sJoin scon s.sno sc.snoWhere sc.cno 5);
2先找到学生未及格门数的表 Selects.sname,avg(sc.scgrade)FromSRight Join //这里右联应该是为了完整性但是看起来好像不用ScOns.sno sc.snowheresc.scgrade 60Group bySnoHaving Cout(grade) 2;//改成Cout(s.sname) 2,因为在成绩表中一个学号对应多个课号对应有多个成绩因此前面where查到的不及格的课程有几个就有几个名字所以就统计有多少个名字就知道有多少科没过
3即学过 1 号课程又学过 2 号课所有学生的姓名。 找出学过一号课程的学生学号再找到学过二号课程的学生学号然后找重合的最后联合s表查到学生名字
Select s.snameFrom (select sc.sno,sc.cno from sc where sc.cno 1 ) aJoin (select sc.sno,sc.cno from sc where sc.cno 2 ) bOn b.sno a.snoJoin sOn a.sno s.sno;
14、列出所有员工及领导的姓名
Select a.ename,b.ename mgrFrom emp aLeft Join emp bOn a.mgr b.empno;
15、列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称 这里的问题是入职越早时间就越小所以入职早的反而小于入职晚的
先得到员工编号姓名部门编号上级编号表并求得受雇日期较早的员工
Select a.ename,a.empno,a.deptno,b.empno mgr
From emp a
Left Join emp b
On a.mgr b.empno
Where a.hiredate b.hiredate; 内连得到部门名称
Select d.dname,c.empno,c.enameFrom (Select a.ename,a.empno,a.deptno,b.empno mgrFrom emp aLeft Join emp bOn a.mgr b.empnoWhere a.hiredate b.hiredate) cJoin dept dOn d.deptno c.deptno;
16、列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门.
Select e.*,d.dnameFrom emp eRight Join dept dOn e.deptno d.deptno;
17、列出至少有5个员工的所有部门 先找到有5个及以上员工的部门编号
Select deptno,count(*) sum
From emp
Group by deptno
Having count(*) 5; 再多表查询找到部门名字
Select d.dname,a.sumFrom dept dJoin (Select deptno,count(*) sumFrom empGroup by deptnoHaving count(*) 5) aOn d.deptno a.deptno;
18、列出薪金比SMITH多的所有员工信息.
Select *From empWhere sal (select sal from emp where ename ‘smith’);
19、列出所有CLERK(办事员)的姓名及其部门名称,部门的人数 这里总是报错最后发现是要把where语句放到join on 语句后面要不然执行顺序不对 找到办事员的姓名部门名称再和部门人数表联合得到部门人数
Select e.ename,d.dnameFrom emp eJoin dept dOn e.deptno d.deptnoJoin (Select deptno,count(*) sumFrom empGroup by deptno) aOn e.deptno a.deptnoWhere e.job ‘clerk’
20、列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数 先找个每个工作的最低薪资和雇员人数
Select min(sal) min_sal,job,count(ename)
From emp
Group by job 再找到大于1500的
Select *From (Select min(sal) min_sal,job,count(ename)From empGroup by job) aWhere a.min_sal 1500;