数据库一些基本操作(提供了原数据库信息)

用到的数据库创建文件
创建方法: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.HIREDATE<e2.HIREDATE;

-- 返回最高工资和最低工资的职员信息
SELECT e1.EMPNO,e1.ENAME,e1.JOB,e1.MGR,e1.HIREDATE,e1.SAL,e1.COMM,e1.DEPTNO
FROM emp e1,(
	SELECT MAX(SAL) 最高工资,MIN(SAL) 最低工资
	FROM emp
)e2
WHERE e1.SAL=e2.`最低工资` OR e1.SAL=e2.`最高工资`;

-- 返回工资处于第四级别的员工的姓名和工资
SELECT ENAME,SAL
FROM salgrade s1,emp e1
WHERE e1.SAL>s1.LOSAL and e1.SAL<s1.HISAL and s1.GRADE=4;

-- 场景:查询平均工资高于2000置为名称和平均工资
SELECT JOB 职位名称,AVG(SAL) 平均工资
FROM emp
GROUP BY 职位名称
HAVING 平均工资>2000

/**
 from之后的子查询通常是一张多行多列的为表
多行多列的子查询通常放在from之后where之前
伪表必须定义别名,否则无法执行查询
工作中通常不需要写having,因为它内存消耗很大,而是使用子查询,
将having后面的条件放在夫查询的from后面
父查询SELECT后面的列查询实际式查询了子查询的列别名

即通过FRom后面的语句生成一张临时表,然后在这个临时的表中查数据
**/
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'
)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下坠丷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值