sql练习(针对Mysql)

创建表:

 1 DROP TABLE DEPT;
 2 --部门表
 3 CREATE TABLE DEPT(
 4     DEPTNO int  PRIMARY KEY,
 5     DNAME VARCHAR(14) , --部门名称
 6     LOC VARCHAR(13)  ---部门地址
 7     ) ;
 8     
 9 CREATE TABLE DEPT(
10     DEPTNO int  PRIMARY KEY,
11     DNAME VARCHAR(14) , 
12     LOC VARCHAR(13) 
13     ) ;
14     
15     
16     INSERT INTO DEPT VALUES    (10,'ACCOUNTING','NEW YORK');
17     INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
18     INSERT INTO DEPT VALUES    (30,'SALES','CHICAGO');
19     INSERT INTO DEPT VALUES    (40,'OPERATIONS','BOSTON');
20     
21     
22     
23 DROP TABLE EMP;
24 --员工表
25 CREATE TABLE EMP(
26     EMPNO int  PRIMARY KEY, --员工编号
27     ENAME VARCHAR(10), ---员工姓名
28     JOB VARCHAR(9), --员工工作
29     MGR int, ----员工直属领导编号
30     HIREDATE DATE, ----入职时间
31     SAL double, ---工资
32     COMM double, --奖金
33     DEPTNO int  REFERENCES DEPT);  --关联dept表
34     
35     
36     CREATE TABLE EMP(
37         EMPNO int  PRIMARY KEY,
38         ENAME VARCHAR(10),
39         JOB VARCHAR(9),
40         MGR int, 
41         HIREDATE DATE, 
42         SAL double,
43         COMM double,
44         DEPTNO int ,
45         foreign key EMP(DEPTNO) REFERENCES DEPT(DEPTNO)
46     );  
47     
48 
49 INSERT INTO EMP VALUES(7369,'SMITH','CLERK',7902,"1980-12-17",800,NULL,20);
50 INSERT INTO EMP VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
51 INSERT INTO EMP VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
52 INSERT INTO EMP VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
53 INSERT INTO EMP VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
54 INSERT INTO EMP VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
55 INSERT INTO EMP VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
56 INSERT INTO EMP VALUES(7788,'SCOTT','ANALYST',7566,'1987-07-03',3000,NULL,20);
57 INSERT INTO EMP VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
58 INSERT INTO EMP VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
59 INSERT INTO EMP VALUES(7876,'ADAMS','CLERK',7788,'1987-07-13',1100,NULL,20);
60 INSERT INTO EMP VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
61 INSERT INTO EMP VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
62 INSERT INTO EMP VALUES(7934,'MILLER','CLERK',7782,'1981-01-23',1300,NULL,10);
63 
64 DROP TABLE SALGRADE;
65 //工资等级表
66 CREATE TABLE SALGRADE( 
67     GRADE int,--等级
68     LOSAL double, --最低工资
69     HISAL double ); --最高工次
70     
71     CREATE TABLE SALGRADE( 
72     GRADE int,
73     LOSAL double, 
74     HISAL double );
75 INSERT INTO SALGRADE VALUES (1,700,1200);
76 INSERT INTO SALGRADE VALUES (2,1201,1400);
77 INSERT INTO SALGRADE VALUES (3,1401,2000);
78 INSERT INTO SALGRADE VALUES (4,2001,3000);
79 INSERT INTO SALGRADE VALUES (5,3001,9999);

 

emp表

dep表

salgrade表

练习1:

  1 1.安装mysql数据库
  2 
  3 2.创建一个mydb1数据库,并查看。
  4 create database mydb1;
  5 
  6 show mydb1;
  7 show create database mydb1;
  8 
  9 3.创建一个mydb2数据库,指定字符编码为gb2312;
 10 create database mydb2 chracter set gb2312 collate gb2312_bin;
 11 
 12 4.创建一个mydb3数据库,指定字符编码为utf8,并且指定校验规则;
 13 create database mydb3 character utf8 collate utf8_bin;
 14 
 15 
 16 update练习
 17 
 18 drop table if exists employee;
 19 create table if not exists employee
 20 (
 21     id int,
 22     name varchar(20),
 23     sex varchar(10),
 24     birthday date,
 25     salary float,    
 26     resume text
 27 );
 28 
 29 
 30 insert into employee values (1,'zhangsan','male','1980-11-25',2000,'good body');
 31 insert into employee values(2,"lisi","male","1980-04-25",1000,"good body");
 32 insert into employee values(3,"xiaohong","female","1978-11-25",4000,"good girl");
 33 
 34 将所有员工薪水修改为5000元。
 35 --alter table employee salary  "alter这个关键字仅仅是用来修改表的结构的,对表中的内容无法修改,修改表中的内容要用update"
 36 --update table employee set salary = 5000; update 是修改表中的数据,就不用在其后加上talbe关键字了.
 37 update employee set salary = 5000;
 38 
 39 
 40 将姓名为’zhangsan’的员工薪水修改为3000元。
 41 update employee set salary = 3000 where name = 'zhangsan';
 42 
 43 将姓名为’lisi’的员工薪水修改为4000元,sex改为female。
 44 --update employee set salary = 4000 and sex = female where name = 'lisi' ; 有多个列要修改的时候不用and连接列,用逗号.!!!
 45 update employee set salary = 4000,sex = 'female' where name = 'lisi' ;
 46 
 47 将xiaohong的薪水在原有基础上增加1000元。
 48 update employee set salary = salary + 1000 where name = 'xiaohong';
 49 
 50 
 51 select 练习
 52 
 53 create table student(
 54     id int,
 55     name varchar(20),
 56     chinese float,
 57     english float,
 58     math float
 59 );
 60 
 61 insert into student(id,name,chinese,english,math) values(1,'张小明',89,78,90);
 62 insert into student(id,name,chinese,english,math) values(2,'李进',67,53,95);
 63 insert into student(id,name,chinese,english,math) values(3,'王五',87,78,77);
 64 insert into student(id,name,chinese,english,math) values(4,'李一',88,98,92);
 65 insert into student(id,name,chinese,english,math) values(5,'李来财',82,84,67);
 66 insert into student(id,name,chinese,english,math) values(6,'张进宝',55,85,45);
 67 insert into student(id,name,chinese,english,math) values(7,'黄蓉',75,65,30);
 68 
 69 
 70 
 71 查询表中所有学生的信息。
 72 select * from student;
 73 
 74 查询表中所有学生的姓名和对应的英语成绩。;
 75 select name,english from student ;
 76 
 77 
 78 过滤表中重复数据。
 79 
 80 select distinct * from student;
 81 
 82 统计每个学生的总分。
 83 --select sum(chinese+english+math) as Total from student; 这个是所有学生的总分, 貌似sum()函数是对以整列求和,对一个记录内的求和是要单独加
 84 select name ,(chinese+english+math) as Total from student;
 85 select name ,chinese+english+math as Total from student;--这两个都对.
 86 
 87 在所有学生总分数上加10分特长分。
 88 --select name , chinese+english+math+10 as Total from student;是所有学生分数上,并不是学生总成绩上.
 89 select name , chinese+10,english+10,math+10 as Total from student;
 90 
 91 
 92 使用别名表示学生分数。
 93 select name,chinese ch ,english en,math ma from student;--这个地方别名 加不加as都对.
 94 
 95 
 96 查询姓名为李一的学生成绩
 97 select name,chinese, math,english from student where name = '李一';
 98 
 99 
100 查询英语成绩大于90分的同学
101 select name from student where english > 90 ;
102 
103 查询总分大于200分的所有同学
104 select name from student where english+chinese+math>200;
105 
106 查询英语分数在 80-90之间的同学。
107 --select name from student where english>=80 & english<=90; &这个符号不能代表and!!!!
108 select name from student where english>=80 and english<=90;
109 select name from student where english between 80 and 90;
110 
111 
112 查询数学分数为89,90,91的同学。
113 select name from student where math in(89,90,91);
114 --select name from student where math=89 and math=90 and math=91;这个地方用and就不正确.检索不到东西.可以用关键字OR
115 select name from student where math=89 or math=90 or math=91;
116 
117 
118 
119 查询所有姓李的学生英语成绩。
120 select name,english from student where name like "李%";
121 
122 
123 
124 查询数学分>80并且语文分>80的同学。
125 select name from student where math>80 and chinese >80;
126 
127 查询英语>80或者总分>200的同学
128 select name from student where english > 80 OR english+math+chinese>200;
129 
130 对数学成绩排序后输出。
131 select * from student order by math ;--默认是升序排列.
132 select * from student order by math desc;
133 select * from student order by math asc;
134 
135 
136 对总分排序后输出,然后再按从高到低的顺序输出
137 select * from student order by chinese+math+english desc;
138 
139 对姓李的学生成绩排序输出
140 select * from student where name like "李%" order by chinese+math+english desc;

 

练习2:

 1 1、查找部门30中员工的详细信息。
 2 --select * from emp where deptno=30;
 3 select * from emp where deptno=30;
 4 2、找出从事clerk工作的员工的编号、姓名、部门号。
 5 -- select empno,ename,deptno from emp where job = 'clerk';
 6 
 7 select empno,ename,deptno from emp where job='clerk';
 8 
 9 3、检索出奖金多于基本工资的员工信息。
10 --select * from emp where comm>sal;
11 select * from emp where comm >sal
12 
13 4、检索出奖金多于基本工资60%的员工信息。
14 --select * from emp where comm>sal*0.6;
15 select *from emp where comm>sal*0.6;
16 
17 5、找出10部门的经理(job=Manger)、20部门的职员(job=clerk) 的员工信息。
18 --select * from dept,emp where dept.deptno=10 and emp.deptno=20;
19 
20 --select * from emp where deptno=10 and job = 'manager' and deptno=20 and job='clerk';
21 --这个地方找出10号部门的经理20部门的职员的员工信息.中间用OR连接.别用AND,用and是找不到这么个条件的值的.
22 
23 select * from emp where deptno=10 and job='MANAGER' or   deptno=20 and job='CLERK'
24 
25 6、找出10部门的经理、20部门的职员 或者既不是经理也不是职员但是工资高于2000元的员工信息。
26 
27 --select * from emp where deptno=10 and job='MANAGER' or   deptno=20 and job='CLERK' or 最后这个条件不会写,原来用not 外加in
28 
29 select * from emp where (deptno=10 and job='MANAGER') or  ( deptno=20 and job='CLERK') or  ( job not in ('MANAGER','CLERK') and sal>2000)
30 
31 7、找出获得奖金的员工的工作。
32 --select * from emp where comm not null; 用is not null.
33 select * from emp where comm is not null.
34 
35 select * from emp where comm is not null;
36 
37 8、找出奖金少于100或者没有获得奖金的员工的信息。
38 select * from emp where comm<100 or comm is null;
39 
40 select * from emp where comm is null or comm<100;
41 
42 9、找出姓名以A、B、S开始的员工信息。
43 --select * from emp where ename like "A%","B%","S%";要写多个like语句.
44 
45 select * from emp where ename like 'A%' OR ENAME LIKE 'B%' OR ENAME LIKE 'S%';
46 
47 
48 10、找到名字长度为7个字符的员工信息。
49 --select * from emp where ename.length= 7;
50 --报错:ERROR 1054 : Unknown column 'ename.length' in 'where clause'
51 --用到了length()函数,还有就是弄like中引入对应数字的空格' '.
52 
53 select * from emp where length(ename)=7;
54 select * from emp where ename like '______';
55 
56 11、名字中不包含R字符的员工信息。
57 
58 --利用 not like '%R%'
59 select * from emp where ename not like '%R%';
60 
61 12、返回员工的详细信息并按姓名排序。
62 select * from emp order by ename;
63 
64 
65 13、返回员工的信息并按工作降序工资升序排列。
66 select * from emp order by job desc,sal asc;
67 
68 
69 14、计算员工的日薪(按30天)。
70 select sal/30 from emp
71 
72 
73 15、找出姓名中包含A的员工信息。
74 select * from emp where ename like '%A%';

 

练习3:

  1 //多表与分组练习
  2 
  3 1、返回拥有员工的部门名、部门号。
  4 --不知道这个具体干什么的.通过看部门dept表和emp表可以看出来,员工并不是都是在dept表中存在的地方的.
  5 --dept表中可能有四个部门号,但是员工emp表中可能只占其中的三个部门号码
  6 --题干的需求就是干这个的.(即有的部门可能没有"员工")
  7 select dname,deptno from dept where deptno in (select deptno from emp);
  8 +------------+--------+
  9 | dname      | deptno |
 10 +------------+--------+
 11 | ACCOUNTING |     10 |
 12 | RESEARCH   |     20 |
 13 | SALES      |     30 |
 14 +------------+--------+
 15 
 16 
 17 2、工资水平多于smith的员工信息。
 18 select * from emp where sal>(select sal from emp where ename = 'smith');
 19 
 20     
 21 3、返回员工和所属经理的姓名。
 22 --这个感觉很简单就是没有想出来怎么办,看答案才理解了
 23 --复用表emp,再加上使用外连接.
 24 
 25 --select ee.ename as eename ,mm.ename as mename from emp ee left join emp mm where ee.mgr=mm.empno; 
 26 --看完答案理解了之后也写错了,注意外连接是left/right join on
 27 select ee.ename as eename ,mm.ename as mename from emp ee left join emp mm on ee.mgr=mm.empno;
 28 
 29 --现在左外连接还有另外的一种写法,就是用加号"+";仔细查了一下,并且纳闷为什么+的SQL语句外连接在navicate中没有效果.
 30 --得知加号的外连接只有在oracle中才是用.
 31 
 32 
 33 +--------+--------+
 34 | eename | mename |
 35 +--------+--------+
 36 | SMITH  | FORD   |
 37 | ALLEN  | BLAKE  |
 38 | WARD   | BLAKE  |
 39 | JONES  | KING   |
 40 | MARTIN | BLAKE  |
 41 | BLAKE  | KING   |
 42 | CLARK  | KING   |
 43 | SCOTT  | JONES  |
 44 | KING   | NULL   |
 45 | TURNER | BLAKE  |
 46 | ADAMS  | SCOTT  |
 47 | JAMES  | BLAKE  |
 48 | FORD   | JONES  |
 49 | MILLER | CLARK  |
 50 
 51 
 52      
 53 4、返回雇员的雇佣日期早于其经理雇佣日期的员工及其经理姓名。
 54 --感觉这个也是要复用emp表,确实复用emp表
 55  --select ee.ename as eename,mm.ename as mename from emp ee,emp mm where ee.hiredate<mm.hiredate;
 56 --这句话没有加上是其经理的条件
 57 --select ee.ename as eename,mm.ename as mename from emp ee left join emp mm on ee.mgr = mm.empno and ee.hiredate < mm.hiredate;
 58 --上面这句仅仅是把第三句中加上了日期小于的条件.
 59 select ee.ename as eename,mm.ename as mename from emp ee ,emp mm where ee.mgr = mm.empno and ee.hiredate < mm.hiredate;
 60 --这句为什么不用left join? 第三句用where可不可以?   注意时间老的日期大小是小于时间老的日期的.
 61 (select ee.ename as eename ,mm.ename as mename from emp ee left join emp mm where ee.mgr=mm.empno;)第三句的写法.
 62 
 63 
 64 5、返回员工姓名及其所在的部门名称。
 65 --这句有点像第三句,不过这个牵扯到了两个表
 66 --select ee.ename as ename, ee.deptno as dptname from emp ee, dept dd where ee.deptno=dd.deptno;
 67 --最开始写的,写错了.还是没有把最基本的需求高清,人家要部门名.
 68 
 69 select ename as ename ,dname  from emp ee,dept dd where ee.deptno=dd.deptno;
 70 +--------+------------+
 71 | ename  | dname      |
 72 +--------+------------+
 73 | CLARK  | ACCOUNTING |
 74 | KING   | ACCOUNTING |
 75 | MILLER | ACCOUNTING |
 76 | SMITH  | RESEARCH   |
 77 | JONES  | RESEARCH   |
 78 | SCOTT  | RESEARCH   |
 79 | ADAMS  | RESEARCH   |
 80 | FORD   | RESEARCH   |
 81 | ALLEN  | SALES      |
 82 | WARD   | SALES      |
 83 | MARTIN | SALES      |
 84 | BLAKE  | SALES      |
 85 | TURNER | SALES      |
 86 | JAMES  | SALES      |
 87 +--------+------------+
 88 
 89 
 90 6、返回从事clerk工作的员工姓名和所在部门名称。
 91 select ename ,dname from emp ee, dept dd where ee.job='clerk' and ee.deptno = dd.deptno;
 92 +--------+------------+
 93 | ename  | dname      |
 94 +--------+------------+
 95 | MILLER | ACCOUNTING |
 96 | SMITH  | RESEARCH   |
 97 | ADAMS  | RESEARCH   |
 98 | JAMES  | SALES      |
 99 +--------+------------+
100 
101 
102 7、返回部门号及其本部门的最低工资。
103 --这个语句不用where条件进行过滤.
104 --找出部门的最低工资 ----想不起来.提示一下用到了min()函数.
105 --select min(sal) from emp ;
106 --select deptno , min(sal) from deptno ,emp 
107 --首先想需求中要用到哪几个表.然后再写.
108 --因为是按照部门为单位的所以用到分组
109 select deptno ,min(sal) from emp group by deptno;
110 +--------+----------+
111 | deptno | min(sal) |
112 +--------+----------+
113 |     10 |     1300 |
114 |     20 |      800 |
115 |     30 |      950 |
116 +--------+----------+
117 
118 8、返回销售部(sales)所有员工的姓名。
119 --根据需求用到了emp和dept两个表
120 select ename from emp ee,dept dd where dd.dname='sales' and ee.deptno = (select deptno from dept where dname = 'sales');
121 +--------+
122 | ename  |
123 +--------+
124 | ALLEN  |
125 | WARD   |
126 | MARTIN |
127 | BLAKE  |
128 | TURNER |
129 | JAMES  |
130 +--------+
131 
132 
133 9、返回工资水平多于平均工资的员工。
134 --这个用到了avg()函数. 用到表emp
135 --select * from emp where sal > avg(sal);
136 --一开始这样写的,但是报错,提示信息为:ERROR 1111 : Invalid use of group function
137 --在这种情况下要把聚合函数放在select语句中
138 select * from emp where sal > (select avg(sal) from emp);
139 +-------+-------+-----------+------+------------+------+------+--------+
140 | EMPNO | ENAME | JOB       | MGR  | HIREDATE   | SAL  | COMM | DEPTNO |
141 +-------+-------+-----------+------+------------+------+------+--------+
142 |  7566 | JONES | MANAGER   | 7839 | 1981-04-02 | 2975 | NULL |     20 |
143 |  7698 | BLAKE | MANAGER   | 7839 | 1981-05-01 | 2850 | NULL |     30 |
144 |  7782 | CLARK | MANAGER   | 7839 | 1981-06-09 | 2450 | NULL |     10 |
145 |  7788 | SCOTT | ANALYST   | 7566 | 1987-07-03 | 3000 | NULL |     20 |
146 |  7839 | KING  | PRESIDENT | NULL | 1981-11-17 | 5000 | NULL |     10 |
147 |  7902 | FORD  | ANALYST   | 7566 | 1981-12-03 | 3000 | NULL |     20 |
148 +-------+-------+-----------+------+------------+------+------+--------+
149 
150 10、返回与SCOTT从事相同工作的员工。
151 --只用到表emp
152 --select * from emp where job = '(select job from emp where ename = 'scott')';
153 --上一句在语法上是没有问题的,但是有个小问题就是job是varchar字符串类型的,但是在其后是select语句
154 -- 的时候其后是不能加上单引号,或者是单引号的,否则都会报错的.
155 --还要把搜索到的结果去掉scott他本身这条记录.
156 
157 select * from emp where job = (select job from emp where ename = 'scott') and ename<> 'scott';
158 
159 
160 
161 11、返回与30部门员工工资水平相同的员工姓名与工资。
162 --这个也只用到了emp表
163 
164 select ename ,sal from emp where sal in( select sal from emp where deptno = 30);
165 +--------+------+
166 | ename  | sal  |
167 +--------+------+
168 | ALLEN  | 1600 |
169 | WARD   | 1250 |
170 | MARTIN | 1250 |
171 | BLAKE  | 2850 |
172 | TURNER | 1500 |
173 | JAMES  |  950 |
174 +--------+------+
175 
176 
177 
178 12、返回工资高于30部门所有员工工资水平的员工信息。
179 --从题意中就可以看出要使用到关键字all 也只用到了emp表
180 --all关键字怎么使用.
181 select * from emp where sal>all(select sal from emp where deptno = 30);
182 +-------+-------+-----------+------+------------+------+------+--------+
183 | EMPNO | ENAME | JOB       | MGR  | HIREDATE   | SAL  | COMM | DEPTNO |
184 +-------+-------+-----------+------+------------+------+------+--------+
185 |  7566 | JONES | MANAGER   | 7839 | 1981-04-02 | 2975 | NULL |     20 |
186 |  7788 | SCOTT | ANALYST   | 7566 | 1987-07-03 | 3000 | NULL |     20 |
187 |  7839 | KING  | PRESIDENT | NULL | 1981-11-17 | 5000 | NULL |     10 |
188 |  7902 | FORD  | ANALYST   | 7566 | 1981-12-03 | 3000 | NULL |     20 |
189 +-------+-------+-----------+------+------------+------+------+--------+
190 
191 
192 13、返回部门号、部门名、部门所在位置及其每个部门的员工总数。    
193 --需要用到emp和dept两个表
194 select deptno ,dname ,loc ,count(*) from emp ee,dept dd  where ee.deptno = dd.deptno 
195 
196 14、返回员工的姓名、所在部门名及其工资。
197 --需要用到emp表和dept表.
198 select ee.ename , dd.dname ,ee.sal from emp ee,dept dd where ee.deptno = dd.deptno;
199 +--------+------------+------+
200 | ename  | dname      | sal  |
201 +--------+------------+------+
202 | CLARK  | ACCOUNTING | 2450 |
203 | KING   | ACCOUNTING | 5000 |
204 | MILLER | ACCOUNTING | 1300 |
205 | SMITH  | RESEARCH   |  800 |
206 | JONES  | RESEARCH   | 2975 |
207 | SCOTT  | RESEARCH   | 3000 |
208 | ADAMS  | RESEARCH   | 1100 |
209 | FORD   | RESEARCH   | 3000 |
210 | ALLEN  | SALES      | 1600 |
211 | WARD   | SALES      | 1250 |
212 | MARTIN | SALES      | 1250 |
213 | BLAKE  | SALES      | 2850 |
214 | TURNER | SALES      | 1500 |
215 | JAMES  | SALES      |  950 |
216 +--------+------------+------+
217 
218 15、返回员工的详细信息。(包括部门名)
219 --需要用到两个表emp和dept
220 --在用select * 的基础上还要加上部门名这一列,这咋办????
221 --看了答案明白了既然是还要加上部门名并且是详细信息,那么就对这三个表都select* 操作
222 --select * from emp ee,dept dd,salgrade ss where ee.deptno = dd.deptno;
223 --一开始没有加上工资的限制.
224 select * from emp ee,dept dd,salgrade ss where ee.deptno = dd.deptno and sal between losal and hisal;
225 
226 +-------+--------+-----------+------+------------+------+------+--------+--------+------------+----------+-------+-------+-------+
227 | EMPNO | ENAME  | JOB       | MGR  | HIREDATE   | SAL  | COMM | DEPTNO | DEPTNO | DNAME      | LOC      | GRADE | LOSAL | HISAL |
228 +-------+--------+-----------+------+------------+------+------+--------+--------+------------+----------+-------+-------+-------+
229 |  7369 | SMITH  | CLERK     | 7902 | 1980-12-17 |  800 | NULL |     20 |     20 | RESEARCH   | DALLAS   |     1 |   700 |  1200 |
230 |  7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600 |  300 |     30 |     30 | SALES      | CHICAGO  |     3 |  1401 |  2000 |
231 |  7521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250 |  500 |     30 |     30 | SALES      | CHICAGO  |     2 |  1201 |  1400 |
232 |  7566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975 | NULL |     20 |     20 | RESEARCH   | DALLAS   |     4 |  2001 |  3000 |
233 |  7654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250 | 1400 |     30 |     30 | SALES      | CHICAGO  |     2 |  1201 |  1400 |
234 |  7698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850 | NULL |     30 |     30 | SALES      | CHICAGO  |     4 |  2001 |  3000 |
235 |  7782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450 | NULL |     10 |     10 | ACCOUNTING | NEW YORK |     4 |  2001 |  3000 |
236 |  7788 | SCOTT  | ANALYST   | 7566 | 1987-07-03 | 3000 | NULL |     20 |     20 | RESEARCH   | DALLAS   |     4 |  2001 |  3000 |
237 |  7839 | KING   | PRESIDENT | NULL | 1981-11-17 | 5000 | NULL |     10 |     10 | ACCOUNTING | NEW YORK |     5 |  3001 |  9999 |
238 |  7844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500 |    0 |     30 |     30 | SALES      | CHICAGO  |     3 |  1401 |  2000 |
239 |  7876 | ADAMS  | CLERK     | 7788 | 1987-07-13 | 1100 | NULL |     20 |     20 | RESEARCH   | DALLAS   |     1 |   700 |  1200 |
240 |  7900 | JAMES  | CLERK     | 7698 | 1981-12-03 |  950 | NULL |     30 |     30 | SALES      | CHICAGO  |     1 |   700 |  1200 |
241 |  7902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000 | NULL |     20 |     20 | RESEARCH   | DALLAS   |     4 |  2001 |  3000 |
242 |  7934 | MILLER | CLERK     | 7782 | 1981-01-23 | 1300 | NULL |     10 |     10 | ACCOUNTING | NEW YORK |     2 |  1201 |  1400 |
243 +-------+--------+-----------+------+------------+------+------+--------+--------+------------+----------+-------+-------+-------+
244 
245 16、返回员工工作及其从事此工作的最低工资。
246 --需要用到表emp,很明显需要 用到分组group by.
247 select job ,min(sal) from emp group by job;
248 --原来可以在from前面直接用聚合函数.
249 +-----------+----------+
250 | job       | min(sal) |
251 +-----------+----------+
252 | ANALYST   |     3000 |
253 | CLERK     |      800 |
254 | MANAGER   |     2450 |
255 | PRESIDENT |     5000 |
256 | SALESMAN  |     1250 |
257 +-----------+----------+
258 17、返回不同部门经理的最低工资。
259 --需要用到一个表emp,需要用到group by
260 select deptno , min(sal) from emp where job = 'manager' group by deptno;
261 +--------+----------+
262 | deptno | min(sal) |
263 +--------+----------+
264 |     10 |     2450 |
265 |     20 |     2975 |
266 |     30 |     2850 |
267 +--------+----------+
268 
269 
270 
271 18、计算出员工的年薪,并且以年薪排序。
272 --需要用到一个表emp
273 select sal*12 as ysal from emp order by ysal asc;
274 --上面的语句没有问题,关键是年薪的计算方法,这里还牵扯到奖金的问题.
275 
276 
277 
278 19、返回工资处于第四级别的员工的姓名。
279 --这里需要两个表,一个是emp一个是salgrade
280 --select ename form emp ee,salgrade where grade =4;
281 --这句话仔细一想就可以看出不会有任何结果,where过滤不掉任何东西
282 
283 select ename from emp ,salgrade where grade =4 and sal>=losal and sal <= hisal;
284 select ename from emp ,salgrade where grade =4 and sal between losal and  hisal;
285 +-------+
286 | ename |
287 +-------+
288 | JONES |
289 | BLAKE |
290 | CLARK |
291 | SCOTT |
292 | FORD  |
293 +-------+
294 
295 20、返回工资为二等级的职员名字、部门所在地、和二等级的最低工资和最高工资
296 --从题意中可知需要用到三个表 emp dept salgrade
297 --二等级的最低工资和最高工资.并不是二等级员工的工资.这个是和第21问的区别.
298 --select ename ,loc ,min(sal) ,max(sal) from emp ee,dept dd, salgrade ss  where grade = 2 and sal between losal and hisal;
299 --二等级的最低工资和最高工资并不是二等级员工的最低工资和最高工资.
300 
301 select ename ,loc ,losal,hisal from emp ee,dept dd,salgrade ss where grade = 2 and sal between losal and hisal;
302 
303 
304 21、返回工资为二等级的职员名字、部门所在地、二等级员工工资的最低工资和最高工资
305 --需要用到salgrade , dept表和emp表
306 mysql> select ename , loc ,min(sal) ,max(sal) from emp ee, dept dd, salgrade ss where grade = 2 and sal between losal and hisal;
307 +-------+----------+----------+----------+
308 | ename | loc      | min(sal) | max(sal) |
309 +-------+----------+----------+----------+
310 | WARD  | NEW YORK |     1250 |     1300 |
311 +-------+----------+----------+----------+
312 
313 --这样写是错误的.到底在select后加上聚合函数的应用?????
314 
315 --select e.ename,loc,max(m.sal) ,min(m.sal),grade from emp e,emp m ,dept salgrade where e.deptno=dept.deptno and e.sal beteeen losal and hissal
316 --m.sal between losal and hisal and grade = 2 group by e.ename , loc, grade;
317 
318 
319 select ename , loc ,(select min(sal) from emp,salgrade where sal between losal and hisal and grade = 2) minsal,(select max(sal) from emp,salgrade
320  where sal between losal and hisal and grade = 2) maxsal from emp,salgrade ,dept where emp.deptno = dept.deptno and sal between
321  losal and hisal and grade = 2;
322 +--------+----------+--------+--------+
323 | ename  | loc      | minsal | maxsal |
324 +--------+----------+--------+--------+
325 | WARD   | CHICAGO  |   1250 |   1300 |
326 | MARTIN | CHICAGO  |   1250 |   1300 |
327 | MILLER | NEW YORK |   1250 |   1300 |
328 +--------+----------+--------+--------+
329 
330 22.工资等级多于smith的员工信息。
331 --获得员工信息,三个表中有的信息都获取出来,就 用到三个表.
332 --需要用到两个表 emp表和salgrade 表
333 --select * from emp,salgrade where grade >(select sal from emp,salgrade where sal between losal and hisal);
334 --select * from emp ee,salgrade ss,dept dd where grade > (select grade from salgrade, emp  where ename = 'smith' and sal between losal and ss.hisal ) 
335 --and sal > (select sal from em );
336  select * from emp,salgrade where sal between losal and hisal and grade >(select grade from emp,salgrade where sal between losal
337  and hisal and ename = 'smith');
338 +-------+--------+-----------+------+------------+------+------+--------+-------+-------+-------+
339 | EMPNO | ENAME  | JOB       | MGR  | HIREDATE   | SAL  | COMM | DEPTNO | GRADE | LOSAL | HISAL |
340 +-------+--------+-----------+------+------------+------+------+--------+-------+-------+-------+
341 |  7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600 |  300 |     30 |     3 |  1401 |  2000 |
342 |  7521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250 |  500 |     30 |     2 |  1201 |  1400 |
343 |  7566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975 | NULL |     20 |     4 |  2001 |  3000 |
344 |  7654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250 | 1400 |     30 |     2 |  1201 |  1400 |
345 |  7698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850 | NULL |     30 |     4 |  2001 |  3000 |
346 |  7782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450 | NULL |     10 |     4 |  2001 |  3000 |
347 |  7788 | SCOTT  | ANALYST   | 7566 | 1987-07-03 | 3000 | NULL |     20 |     4 |  2001 |  3000 |
348 |  7839 | KING   | PRESIDENT | NULL | 1981-11-17 | 5000 | NULL |     10 |     5 |  3001 |  9999 |
349 |  7844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500 |    0 |     30 |     3 |  1401 |  2000 |
350 |  7902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000 | NULL |     20 |     4 |  2001 |  3000 |
351 |  7934 | MILLER | CLERK     | 7782 | 1981-01-23 | 1300 | NULL |     10 |     2 |  1201 |  1400 |
352 +-------+--------+-----------+------+------------+------+------+--------+-------+-------+-------+

 

转载于:https://www.cnblogs.com/DreamDrive/p/6193530.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET6之MiniAPI(十二):引入EntityFramewor

说明&#xff1a;本篇重点说明MiniAPI引入EntityFramework&#xff0c;EF的使用不是本篇的重点本篇是在MiniAPI中使用EntityFramework&#xff0c;所以先奉上创建数据的脚本&#xff0c;数据库是SQL Server&#xff0c;可能版本不同&#xff0c;会有一些问题&#xff0c;可以自…

2021 开源社年度报告:开心开源

# 引言 #2020年的开源社年度报告仿佛还在昨天&#xff0c;一转眼&#xff0c;2021年都已经过完了。在去年的年度报告上&#xff0c;我们说2020是动荡不安的一年。结果2021年&#xff0c;简直可以说是动荡加剧&#xff0c;令人应接不暇的一年。迫于疫情的影响&#xff0c;我们一…

luajit日记-FFI库

2019独角兽企业重金招聘Python工程师标准>>> LuaJIT FFI LibraryThe FFI library allows calling external C functions and using C data structures from pure Lua code. The FFI library largely obviates the need to write tedious manual Lua/C bindings in …

C#10 和 .NET6 代码跨平台开发

零、前言有数千页长的编程书籍&#xff0c;旨在成为 C# 语言、.NET 库、网站、服务、桌面和移动应用等应用模型的综合参考。这本书不一样。它简洁明了&#xff0c;旨在成为一本轻快有趣的书&#xff0c;每一个主题都有实用的实践演练。总体叙述的广度是以某种深度为代价的&…

linux之tar命令使用总结

1、使用原因 刚才在linux平台需要安装Clion的时候,下载得到CLion-2016.3.2.tar.gz 这个gz的压缩文件,所以需要解压到当前文件夹 2、简单解压到当前文件 解压当前文件夹命令 tar -zxvf CLion-2016.3.2.tar.gz 效果如下 3、tar命令介绍 -c: 建立压缩档案 -x:解压 -t:…

体验 正式发布 的OSM v1.0.0 版本

2021年10月份发布了OSM 1.0 RC[1]&#xff0c;在过去的几个月里&#xff0c;OSM 的贡献者一直在努力为 v1.0.0 版本的发布做准备。2022年2月1日&#xff0c;OSM 团队正式发布 1.0.0 版本[2]。OSM 从最初的发布到现在已经走了很长的路&#xff0c;团队继续专注于社区需要的关键和…

数据流图的画法

数据流图的画法 数据流图也称为数据流程图date flow diagram , DFD&#xff0c;是一种便于用户理解和分析系统数据流程的图形工具&#xff0c;他摆脱了系统和详细内容&#xff0c;精确的在逻辑上描写叙述系统的功能、输入、输出和数据存储等&#xff0c;是系统逻辑模型的重要组…

MFC继承表

转载于:https://www.cnblogs.com/Lthis/p/4264967.html

linux之fdisk查看分区和mkfs.ext3删除分区和mount挂载和e2label添加卷标使用总结

一、使用fdisk、mkfs.ext3、和mount、e2lable的原因 有个分区挂载不上,然后需要格式化分区,还需要添加卷标 二、fdisk、mkfs.ext3、mount、e2lable命令介绍 1、fdisk命令介绍 1)、了解分区 分区是将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当做一个…

linux c之strncpy函数和strncmp函数最简单使用总结

1.原型声明&#xff1a; char * strncpy(char *dest,const char *src, size_t n); strncmp() 用来比较两个字符串的前n个字符&#xff0c;区分大小写&#xff0c;其原型为&#xff1a; int strncmp ( const char * str1, const char * str2, size_t n ); 若str1与str2的前n…

阻止你变现的,从来都不是开源许可证

文 | lola_chen出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013&#xff09;之前&#xff0c;《GPL 转闭源&#xff1f;法院判决&#xff1a;一日 GPL 终身 GPL》一文提出一个冷门却又重要的知识点&#xff1a;GPL 许可证之下的开源项目&#xff0c;可以分叉出来闭源…

03-递归

数据结构和算法 基于《算法图解》—Aditya Bhargava和《数据结构》—严蔚敏 第3章 递归 3.1 递归 假设在一堆嵌套的盒子里找钥匙&#xff0c;对比循环和递归。 使用循环解决&#xff1a; #使用while循环&#xff1a;只要盒子堆不是空&#xff0c;就从中取出一个盒子&#x…

linux c之提示format‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long int’ [-Wformat

1、问题 有个long int data;我输出的时候printf("data is %d", data);出现下面警告 自己竟然不知道 长整型怎么打印出来&#xff0c;日了狗。 2、解决办法 md&#xff0c;m为指定的输出字段的宽度。如果数据的位数小于m&#xff0c;则左端补以空格&#xff0c;若大…

Asp.Net Core部署:早知道,还是docker!以及一点碎碎念

前言AspNetCore技术栈在我们团队里的使用也有一段时间了&#xff0c;之前的部署方式一直是本地编译之后上传可执行文件到服务器&#xff0c;使用supervisor来管理进程这种很原始的方式。参考之前的文章&#xff1a;Asp.Net Core学习笔记&#xff1a;&#xff08;五&#xff09;…

04-快速排序

数据结构和算法 基于《算法图解》—Aditya Bhargava 和《数据结构》—严蔚敏 第4章 快速排序 4.1 分而治之 divide and conquer , 简称D&C&#xff1a;一种著名的递归式问题解决方法。 例子1&#xff1a; 假设你是农场主&#xff0c;有一小块土地。要求将这块地均匀地分…

android studio no marked region found along edge Found along top edge

由于种种原因&#xff0c;导致9图已经不是9图格式了&#xff0c;但是在Eclipse里面不会报错&#xff0c;在android studio 里面会报错 Error:9-patch image D:\download\avatar-android-master\avatar-android-master\sample\src\main\res\drawable-hdpi\abc_list_divider_holo…

Linux下安装compsoer ,并使用composer安装laravel

为什么80%的码农都做不了架构师&#xff1f;>>> 1、composer安装 https://getcomposer.org/download/打开composer官网。根据提示linux下可以使用php安装。 php -r "copy(https://getcomposer.org/installer, composer-setup.php);" php -r "if (ha…

AspNetCore在docker部署时遇到一个小坑

哦吼之前刚说了尝试了使用docker来部署AspNetCore应用&#xff08;Asp.Net Core部署&#xff1a;早知道&#xff0c;还是docker!以及一点碎碎念&#xff09;&#xff0c;结果这才刚上班就遇到问题了 …我这项目用的数据库是Oracle&#xff0c;之前直接运行没啥问题&#xff0c;…

05-散列表

数据结构和算法 基于《算法图解》—Aditya Bhargava 和《数据结构》—严蔚敏 第5章 散列表 假设你在一家杂货店上班。有顾客来买东西时&#xff0c;你得到一个本子中查找价格。如果本子的内容不是按字母顺序来排序的&#xff0c;你可能为查找苹果价格而浏览每一页&#xff0c…

疯狂ios讲义疯狂连载之实现游戏逻辑(2)

13.6.5 定义获取通道的工具方法这里所谓的通道指的是一个方块上、下、左、右4个方向上的空白方块图13.10显示了一个方块四周的通道。图13.10 方块四周的通道下面是获取某个坐标点四周通道的4个方法。程序清单codes/13/Link/Link/sources/board/FKGameService.m13.6.6 没有转折点…