宝安22班陈玉 发表于 2022-3-15 11:46:12

3.15作业-陈玉

三表题目:
create table A(Sid int(1),SNAME char(20),AGE int(1),SEX int(1));
create table B(Sid int(1),Cid char(5),GRADE char(20));
create table C(Cid char(5),CNAME char(20),TEACHER char(20));
insert into A(Sid,SNAME,AGE,SEX)values(1111,'David',28,1),(1112,'Dany',23,0),(1113,'TOM',38,1),(1114,'Lily',20,0);
insert into B(Sid,Cid,GRADE)values(1113,'C1','38'),(1112,'C2','80'),(1112,'C3','67'),(1111,'C4','88'),(1114,'C4','66');
insert into C(Cid,CNAME,TEACHER)values('C4','Maths','zhangsan'),('C3','English','lisi'),('C2','Chinese','wangwu'),('C1','Computer','zhaoliu');
select * from A;
select * from B;
select * from C;

select *
from A a
left join B b
on a.sid = b.sid
left join C c
on b.cid =c.cid ;


1.查询出学习成绩及格以上的学生姓名与成绩;
select sname,grade
from A a
left join B b
on a.sid=b.sid where grade >60;


2.查询姓名以ny结尾的学生姓名及其任课老师姓名;

select sname,teacher
from A a
left join B b
on a.sid = b.sid
left join C c
on b.cid =c.cid
where sname like '%ny' ;


3.选修课名为Maths的学生学号与姓名;

select sname,A.sid
from A
left join B
on A.sid = B.sid
left join C
on B.cid =C.cid
where C.cname = 'maths';



4.选修课号为C2和C4的学生学号;
select A.sid,cid,sname
from A
left join B
on A.sid =B.sid
where cid ='c2' or 'c4';


5.请问没有参加考试的学生的姓名及其学号;
select sname,A.sid
from A
left join B
on A.sid =B.sid
where grade is null;


6.请问总分在80分以上的学生姓名;
select sname,grade
from A
left join B
on A.sid =B.sid
where grade >80;


7.请问考试不及格的考生姓名以及科目名称;

select sname,cname
from A
left join B
on A.sid =B.sid
left join C
on B.cid =C.cid
where grade <60;


8.找出Dany的所有考试后成绩中最高的科目的任课老师姓名;

select A.sname,teacher,cname
from A
left join B
on A.sid =B.sid
left join C
on B.cid =C.cid
right join (
select sname,max(grade),cid
from A
left join B
on A.sid =B.sid
where sname ='dany')t
on B.cid=t.cid
where A.sname ='dany';

9.各个科目的平均成绩各是多少;
select cname,avg(grade)
from A
right join B
on A.sid =B.sid
right join C
on B.cid =C.cid
group by cname;

10.由于录入员的失误,导致TOM同学有成绩不及格的科目,请帮忙将其合理修正;


update A
left join B
on A.sid =B.sid
set grade =60
where sname ='Tom' and grade <60;


11.显示出参加考试的学生的学号和姓名;

select a.sid,sname
from A a
left join B b
on a.sid = b.sid
where grade is not null;


12.请问TOM一共参加了几门科目的考试;
select count(*)
from A a
left join B b
on a.sid = b.sid
where sname ='tom' and grade is not null;

13.期末,DBA发现学生表中没有班级字段,请帮忙将其合理修正;

alter table A
add(class int(8))
;
update A set class ='2' where sname ='lily';



14.学校新招了1位美术老师叫“白雪”,请在课程表中增加一条相应的记录,课程编号为C5;


alter table C
add (cid1,cname,teacher)
values('c5','draw','baixue');



15.赵姓的老师很早就离职了,然而课程表中却还有其上课的记录,请帮忙删除;

delete from C
where teacher like 'zhao%';

select * from C;



16.请求出TOM同学所有任课老师的名字及其所教的课程名;

select teacher,cname
from A a
left join B b
on a.sid = b.sid
left join C c
on b.cid =c.cid
where sname ='tom';



17.求每个同学的各科(总分或者平均)成绩,并以每一个人的成绩的先大后小的顺序显示;
select sname,avg(grade)
from A a
left join B b
on a.sid = b.sid
left join C c
on b.cid =c.cid
group by sname
order by avg(grade) desc;

********************************************(以下是两列成绩算总分)
select a.sname,zongfen
from A a
left join B b
on a.sid = b.sid
left join (select *,sum(b.GRADE + b.grade1) 'zongfen'
fromB b
GROUP BY sid)t
on a.sid =t.sid
group by sname
order by zongfen desc
;

18.请问张老师教什么课程,以及他班上所有学生的姓名;

select teacher,cname,sname
from A a
left join B b
on a.sid = b.sid
left join C c
on b.cid =c.cid
where teacher like 'zhang%'
;


CREATE TABLE DEPT(
    DEPTNO INT PRIMARY KEY comment '部门id',
    DNAME VARCHAR(14) comment '部门名称', -- 部门名称
    LOC VARCHAR(13) comment '部门地址' -- 部门地址
)DEFAULt CHARSET=UTF8 ;
INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');

SELECT * FROM DEPT

CREATE TABLE EMP(
    EMPNO INTPRIMARY KEY COMMENT '员工编号', -- 员工编号
    ENAME VARCHAR(10) comment '员工姓名', -- 员工姓名
    JOB VARCHAR(9) comment '员工工作', -- 员工工作
    MGR INT comment '员工领导编号', -- 员工直属领导编号
    HIREDATE DATE comment '入职时间', -- 入职时间
    SAL DOUBLE comment '员工工资', -- 工资
    COMM DOUBLE comment '奖金', -- 奖金
    DEPTNO INT comment '部门id',-- 所在部门
    FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO))DEFAULTcharset=utf8;-- 关联dept表

-- ALTER TABLE EMP ADD FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO);
INSERT INTO EMP VALUES(7369,'SMITH','职员',7566,"1980-12-17",800,NULL,20);
INSERT INTO EMP VALUES(7499,'ALLEN','销售员',7698,'1981-02-20',1600,300,30);
INSERT INTO EMP VALUES(7521,'WARD','销售员',7698,'1981-02-22',1250,500,30);
INSERT INTO EMP VALUES(7566,'JONES','经理',7839,'1981-04-02',2975,NULL,20);
INSERT INTO EMP VALUES(7654,'MARTIN','销售员',7698,'1981-09-28',1250,1400,30);
INSERT INTO EMP VALUES(7698,'BLAKE','经理',7839,'1981-05-01',2850,NULL,30);
INSERT INTO EMP VALUES(7782,'CLARK','经理',7839,'1981-06-09',2450,NULL,10);
INSERT INTO EMP VALUES(7788,'SCOTT','职员',7566,'1987-07-03',3000,2000,20);
INSERT INTO EMP VALUES(7839,'KING','董事长',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO EMP VALUES(7844,'TURNERS','销售员',7698,'1981-09-08',1500,50,30);
INSERT INTO EMP VALUES(7876,'ADAMS','职员',7566,'1987-07-13',1100,NULL,20);
INSERT INTO EMP VALUES(7900,'JAMES','职员',7698,'1981-12-03',1250,NULL,30);
INSERT INTO EMP VALUES(7902,'FORD','销售员',7566,'1981-12-03',3000,NULL,20);
INSERT INTO EMP VALUES(7934,'MILLER','职员',7782,'1981-01-23',1300,NULL,10);

select *
from emp;

drop table SAVEPOINT;

CREATE TABLE SALGRADE(
    GRADE INT comment '员工等级',-- 等级
    LOSAL DOUBLE comment '最低工资', -- 最低工资
    HISAL DOUBLE comment '最高工资' )DEFAULT CHARSET=UTF8; -- 最高工资

INSERT INTO SALGRADE VALUES (1,500,1000);
INSERT INTO SALGRADE VALUES (2,1001,1500);
INSERT INTO SALGRADE VALUES (3,1501,2000);
INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);


单表题目:
#1、查找部门30中员工的详细信息。
select *
from EMP e
where e.deptno =30;

#2、找出从事职员工作的员工的编号、姓名、部门号。(clerk职员,办事员)

select e.empno,e.ename,e.deptno
from EMP e
where e.job ='职员';

#3、检索出奖金多于基本工资的员工信息。

select *
from EMP e
where e.comm > e.sal;

#4、检索出奖金多于基本工资60%的员工信息。
select *
from EMP e
where e.comm > e.sal * 0.6;

#5、找出10部门的经理、20部门的职员 的员工信息。(manager经理;管理
select *
from EMP e
where (e.deptno =10 and e.job ='经理')
or (e.deptno =20 and e.job ='职员');

#6、找出10部门的经理、20部门的职员 或者既不是经理也不是职员但是工资高于2000元的员工信息。(sal 工资)
select *
from EMP e
where (e.deptno =10 and e.job ='经理')
or (e.deptno =20 and e.job ='职员')
or (e.job not in('经理','职员') and e.sal >2000);

#7、找出获得奖金的员工的工作。(comm奖金)
select e.job,e.ename
from EMP e
where e.comm is not null ;

#8、找出奖金少于100或者没有获得奖金的员工的信息。

select *
from EMP e
where e.comm <100
or e.comm is null;

#9、找出姓名以A、B、S开始的员工信息.

select *
from EMP e
where e.ename like 'A%' or 'B%' or 'S%';

#10、找到名字长度为6个字符的员工信息。

select *
from EMP e
where e.ename like '______'    #6个下划线指定6个字节

#11、名字中不包含R字符的员工信息。
select *
from EMP e
where e.ename not like '%R%' ;

#12、查找员工的详细信息并按姓名排序。
select *
from EMP e
order by e.ename ;

#13、返回员工的信息并按工作降序工资升序排列。(升序的规则)
select *
from EMP e
order by e.job desc ,e.sal
;

#14、计算员工的日薪(按30天)。

select *,e.sal /30 '日薪'
from EMP e
where e.sal /30;

#15、找出姓名中包含A的员工信息。

select *
from EMP e
where e.ename like '%A%' ;

多表题目
#1、返回拥有员工的部门名、部门号。
select d.dname,d.deptno
from EMP e
left join DEPT d
on e.deptno =d.deptno
;


#2、工资水平多于smith的员工信息。

select *
from EMP e
left join DEPT d
on e.deptno =d.deptno
where e.sal >(
select sal
from EMP e
where e.ename ='smith')
;

#3、返回员工和所属经理的姓名。

select *
from EMP e
inner join EMP f
on f.mgr = e.empno
;

#4、返回雇员的雇佣日期早于其经理雇佣日期的员工及其经理姓名。

select e.ename,f.ENAME
from EMP e
inner join EMP f
on f.mgr = e.empno
where e.HIREDATE > f.HIREDATE
;

#5、返回员工姓名及其所在的部门名称。

select e.ename,d.dname
from EMP e
left join DEPT d
on e.deptno =d.deptno
;

#6、返回从事clerk工作的员工姓名和所在部门名称。(CLERK销售)

select e.ename,d.dname
from EMP e
left join DEPT d
on e.deptno =d.deptno
where e.job ='销售员';

#7、返回部门号及其本部门的最低工资。
select d.deptno,min(sal)
from EMP e
left join DEPT d
on e.deptno =d.deptno
group by d.deptno
;

#8、返回销售部(sales)所有员工的姓名。

select e.ename,d.dname
from EMP e
left join DEPT d
on e.deptno =d.deptno
where d.dname ='sales';

#9、返回工资水平多于平均工资的员工。

select *
from EMP e
left join DEPT d
on e.deptno =d.deptno
where e.sal > (select avg(sal)
from EMP e);

#10、返回与SCOTT从事相同工作的员工。(职员)

select *
from EMP e
left join DEPT d
on e.deptno =d.deptno
where e.job = (select job
from EMP e
where e.ename ='scott');


#11、返回与30部门员工工资水平相同的员工姓名与工资。

select e.ename,e.sal
from EMP e
where e.sal in (select sal
from EMP e
LEFT JOIN DEPT d
on e.deptno =d.deptno
where d.DEPTNO =30);

#12、返回工资高于30部门所有员工工资水平的员工信息。

select *
from EMP e
where e.sal > (select max(sal)
from EMP e
LEFT JOIN DEPT d
on e.deptno =d.deptno
where d.DEPTNO =30);

#13、返回部门号、部门名、部门所在位置及其每个部门的工员总数。
select d.DEPTNO,d.DNAME,d.LOC,count(*) '总数'
from EMP e
left join DEPT d
on e.deptno =d.deptno
group by d.DEPTNO
;

#14、返回员工的姓名、所在部门名及其工资。

select e.ename,d.dname,e.sal
from EMP e
left join DEPT d
on e.deptno =d.deptno
;

#15、返回员工的详细信息。(包括部门名)

select *
from EMP e
left join DEPT d
on e.deptno =d.deptno
;
#16、返回员工工作及其从事此工作的最低工资。
select *,min(sal)
from EMP e
left join DEPT d
on e.deptno =d.deptno
;

select *,min(sal)
from EMP e
left join DEPT d
on e.deptno =d.deptno
where e.sal >(select min(sal)
from EMP e
left join DEPT d
on e.deptno =d.deptno
group by e.job)
group by e.ename;

#17、计算出员工的年薪,并且以年薪排序。

select e.ename,e.sal*12 '年薪'
from EMP e
left join DEPT d
on e.deptno =d.deptno
order by e.sal*12 desc;

#18、返回工资处于第四级别的员工的姓名。
select e.ename,e.sal
from EMP e
where e.sal > (select losal
from SALGRADE where grade =4)
and e.sal <(select hisal
from SALGRADE where grade =4);


#19、返回工资为二等级的职员名字、部门所在地、和二等级的最低工资和最高工资

select e.ename,d.loc
from EMP e
left join DEPT d
on e.deptno =d.deptno
where e.sal > (select losal
from SALGRADE where grade =2)
and e.sal <(select hisal
from SALGRADE where grade =2) ;

#20.工资等级多于smith的员工信息。
select e.ename,e.sal
from EMP e
where e.sal >(select sal
from EMP e
where e.ename ='smith')
;

select s.grade
from SALGRADE s
where s.LOSAL >(select sal
from EMP e
where e.ename ='smith')
;












页: [1]
查看完整版本: 3.15作业-陈玉