用到的数据库创建文件
创建方法:cmd窗口打开mysql之后source:sql文件路径创建数据库
create database if not exists db1 default charset utf8; USE db1; -- 部门表 CREATE TABLE DEPT( DEPTNO INT PRIMARY KEY, DNAME VARCHAr(14), -- 部门名称 LOC VARCHAr(13)-- 部门地址 )CHARSET=UTF8,ENGINE=INNODB; 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'); -- 员工表 CREATE TABLE EMP( EMPNO INT PRIMARY KEY, -- 员工编号 ENAME VARCHAr(10), -- 员工姓名 JOB VARCHAr(9), -- 员工工作 MGR INT, -- 员工直属领导编号 HIREDATE DATE, -- 入职时间 SAL DOUBLE, -- 工资 COMM DOUBLE, -- 奖金 DEPTNO INT -- 所在部门 ); -- 关联dept表 INSERT INTO EMP VALUES(7369,'SMITH','CLERK',7566,"1980-12-17",800,NULL,20); INSERT INTO EMP VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30); INSERT INTO EMP VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30); INSERT INTO EMP VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20); INSERT INTO EMP VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30); INSERT INTO EMP VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30); INSERT INTO EMP VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10); INSERT INTO EMP VALUES(7788,'SCOTT','ANALYST',7566,'1987-07-03',3000,2000,20); INSERT INTO EMP VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10); INSERT INTO EMP VALUES(7844,'TURNERS','SALESMAN',7698,'1981-09-08',1500,50,30); INSERT INTO EMP VALUES(7876,'ADAMS','CLERK',7566,'1987-07-13',1100,NULL,20); INSERT INTO EMP VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',1250,NULL,30); INSERT INTO EMP VALUES(7902,'FORD','CLERK',7566,'1981-12-03',3000,NULL,20); INSERT INTO EMP VALUES(7934,'MILLER','CLERK',7782,'1981-01-23',1300,NULL,10); -- 工资等级表 CREATE TABLE SALGRADE( GRADE INT,-- 等级 LOSAL DOUBLE, -- 最低工资 HISAL DOUBLE ); -- 最高工资 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);
所练习的全部查询语句
-- 查找部门中30员工的详细信息 SELECt* FROM emp WHERe DEPTNO=30 -- 找出从事职员工作的员工的编号,姓名,部门号 SELECt EMPNO 编号,ENAME 姓名,DEPTNO 部门号 FROM emp WHERe JOB='CLERK' -- 检索出奖金多于基本工资的员工信息 SELECt* FROM emp WHERe COMM>SAL -- 检索奖金多于基本工资百分之60的员工信息 SELECt * FROM emp WHERe COMM>SAL*0.6; -- 找出姓名中包含A的员工信息 -- %通配符,表示0~n个任意字符 SELECt * FROM emp WHERe ENAME like '%A%'; -- 找出姓名以a,b,s开头的员工信息 -- 通配符^表示从开头计算 -- []通配符表示取[]内任意字符 SELECt* FROM emp WHERe ENAME REGEXP '^[abs]'; -- 找出名字长度为7个字符的员工信息 -- LENGTH(str)函数获取字符串长度 SELECt * FROM emp WHERe LENGTH(ENAME)=7; -- 名字中不包含R字符的员工信息 SELECt* FROM emp WHERe ENAME NOT LIKE '%R%'; -- 返回员工的详细信息并按姓名升序排序 -- 关键字ORDER BY,其中ASC升序,DESC降序 SELECt * FROM emp ORDER BY ENAME ASC; -- 返回员工的信息并按姓名降序,工资升序排列 -- 先使用的排序约束条件放在前面 SELECt * FROM emp ORDER BY ENAME DESC,SAL+COMM ASC; -- 计算员工的日薪(按30天) SELECt SAL/30 日薪 FROM emp; -- 找出获得奖金的员工的工作 SELECt JOB FROM emp WHERe COMM IS NOT NULL GROUP BY JOB; -- 找出奖金少于100或者没有获得奖金的员工的信息。 -- NULL不可用<判断,应用IS NULL SELECt * FROM emp WHERe COMM<100 or COMM is NULL; -- 找出10部门的经理、20部门的职员 的员工信息。 SELECt* FROM emp WHERe DEPTNO=10 AND JOB='MANAGER' OR DEPTNO=20 AND JOB='CLERK'; -- 找出10部门的经理、20部门的职员 或者既不是经理也不是职员但是工资高于2000元的员工信息。 SELECt* FROM emp WHERe DEPTNO=10 AND JOB='MANAGER' OR DEPTNO=20 AND JOB='CLERK' OR SAL>2000; -- 返回部门号及其本部门的最低工资。 SELECt DEPTNO as 部门,MIN(SAL) as 最低工资 FROM emp GROUP BY DEPTNO; -- 查询员工姓名和年薪,并且按年薪降序排序 SELECt ENAME 员工姓名,MGR 年薪 FROM emp ORDER BY MGR DESC -- 返回员工工作及其从事此工作的最低工资。 SELECt MIN(SAL) 最低工资,JOB FROM emp GROUP BY JOB; -- 查找和SCOTT从事相同工作的员工信息 SELECt* FROM emp WHERe JOB=( SELECt JOB FROM emp WHERe ENAME='SCOTT' ); -- 工资水平多于JAMES的员工信息 SELECt * FROM emp WHERe SAL>( SELECt SAL FROM emp WHERe ENAME='JAMES' ); -- 返回工资大于平均工资的员工信息 SELECt* FROM emp WHERe SAL>( SELECt AVG(SAL) FROM emp ); -- 返回销售部所有员工的姓名 SELECt ENAME FROM emp WHERe DEPTNO=( SELECt DEPTNO FROM dept WHERe DNAME='SALES' ); -- 返回工资高于30部门所有员工工资水平的员工信息。 SELECt* FROM emp WHERe SAL>( SELECt AVG(SAL) FROM emp WHERe DEPTNO=30 ); -- 返回拥有员工的部门名、部门号。 -- 显示内连接 SELECt dept.DNAME 部门名,emp.DEPTNO FROM emp INNER JOIN dept on emp.DEPTNO=dept.DEPTNO; -- 隐式内连接 SELECt dept.DNAME,emp.DEPTNO FROM emp,dept WHERe emp.DEPTNO=dept.DEPTNO; -- 返回员工的姓名,所在部门和所在部门名称 SELECt emp.ENAME,dept.DEPTNO,dept.DNAME FROM emp,dept WHERe emp.DEPTNO=dept.DEPTNO; -- 返回从事职员工作的姓名和所在的部门名称 SELECt ENAME,dept.DNAME FROM emp,dept WHERe emp.DEPTNO=dept.DEPTNO and emp.JOB='CLERK' -- 返回部门号,部门名,部门所在位置及其每个部门的员工总数 SELECt d1.DEPTNO,d1.DNAME,d1.LOC,e.部门员工总数 FROM dept d1,( SELECt DEPTNO,count(*) 部门员工总数 FROM emp GROUP BY DEPTNO )e WHERe d1.DEPTNO=e.DEPTNO; -- 返回员工职员或者销售员和所属经理的姓名 SELECt e1.ENAME 员工,e2.`经理` 所属经理 FROM emp e1,( SELECt DEPTNO,ENAME 经理 FROM emp WHERe JOB='MANAGER' )e2 WHERe e1.DEPTNO=e2.DEPTNO AND e1.JOB!='MANAGER'; -- 返回员工的入职日期早于其经理入职日期的员工及经理姓名 SELECt e1.ENAME 员工,e2.ENAME 经理 FROM emp e1,emp e2 WHERe e1.DEPTNO=e2.DEPTNO AND e2.JOB='MANAGER' and e1.HIREDATEs1.LOSAL and e1.SAL 2000 SELECt 职位名称,平均工资 FROM( SELECt JOB 职位名称,AVG(SAL) 平均工资 FROM emp GROUP BY 职位名称 )e WHERe 平均工资>2000; -- 查找部门编号,部门名字,部门地址,部门人数,部门平均工资 SELECt d.DEPTNO 部门编号,d.DNAME 部门名字,d.LOC 部门地址,e.部门人数,e.`平均工资` FROM dept d,( SELECt DEPTNO,count(*) 部门人数,AVG(SAL) 平均工资 FROM emp GROUP BY DEPTNO )e WHERe d.DEPTNO=e.DEPTNO; -- 查询所有在销售部工作的 员工标号,姓名,基本工资,奖金,职位,入职日期 部门最高和最低工资 SELECt e1.empno,e1.ename,e1.sal,e1.comm,e1.job,e1.HIREDATE,e2.`部门最低工资`,e2.`部门最高工资` FROM emp e1,( SELECt DEPTNO,max(SAL) 部门最高工资,min(SAL) 部门最低工资 FROM emp GROUP BY DEPTNO )e2 WHERe e1.DEPTNO=e2.DEPTNO and e1.DEPTNO=( SELECt DEPTNO FROM dept WHERe dname='SALES' )



