mysql 查询案例dept,emp表内数据

mysql 查询案例dept,emp表内数据

部门表

CREATE TABLE DEPT(
DEPTNO INT PRIMARY KEY, – 部门编号
DNAME VARCHAR(14) , – 部门名称
LOC VARCHAR(13) – 部门地址
) 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’);

员工表

CREATE TABLE EMP
(
EMPNO INT PRIMARY KEY, – 员工编号
ENAME VARCHAR(10), – 员工名称
JOB VARCHAR(9), – 工作
MGR DOUBLE, – 直属领导编号
HIREDATE DATE, – 入职时间
SAL DOUBLE, – 工资
COMM DOUBLE, – 奖金
DEPTNO INT, – 部门号
FOREIGN KEY(DEPTNO) REFERENCES DEPT(DEPTNO))charset=utf8;

SELECT * FROM emp;

INSERT INTO EMP VALUES
(7369,‘SMITH’,‘CLERK’,7902,‘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-13’,3000,NULL,20);
INSERT INTO EMP VALUES
(7839,‘KING’,‘PRESIDENT’,NULL,‘1981-11-17’,5000,NULL,10);
INSERT INTO EMP VALUES
(7844,‘TURNER’,‘SALESMAN’,7698,‘1981-09-08’,1500,0,30);
INSERT INTO EMP VALUES
(7876,‘ADAMS’,‘CLERK’,7788,‘1987-07-13’,1100,NULL,20);
INSERT INTO EMP VALUES
(7900,‘JAMES’,‘CLERK’,7698,‘1981-12-03’,950,NULL,30);
INSERT INTO EMP VALUES
(7902,‘FORD’,‘ANALYST’,7566,‘1981-12-03’,3000,NULL,20);
INSERT INTO EMP VALUES
(7934,‘MILLER’,‘CLERK’,7782,‘1982-01-23’,1300,NULL,10);

工资等级表

CREATE TABLE SALGRADE
( GRADE INT, – 工资等级
LOSAL DOUBLE, – 最低工资
HISAL DOUBLE ) charset=utf8; – 最高工资
INSERT INTO SALGRADE VALUES (1,700,1200);
INSERT INTO SALGRADE VALUES (2,1201,1400);
INSERT INTO SALGRADE VALUES (3,1401,2000);
INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);

查询案例:

查询单个列
SELECT 列名称 FROM table;
查询员工的姓名
SELECT ename FROM emp;
查询多个列
SELECT 列1,列2,列3… FROM table;
查询员工的姓名和工作
SELECT ename , job FROM emp;
查询所有列
SELECT * FROM table;
查询员工的所有信息
SELECT * FROM emp;
去除重复数据
SELECT DISTINCT 列1,列2… FROM table;
查询emp表中有哪些工种
SELECT DISTINCT job FROM emp;
查询中的四则运算
Mysql支持在查询中直接进行四则运算[ +、-、、/ ]
查询每个员工的年薪
SELECT ename,sal
12 FROM emp;
查询用别名
Select 列1 AS 别名1,列2 别名2 … FROM 表;
查询每个员工的年薪
SELECT ename 姓名,sal*12 AS 年薪 FROM emp;
排序查询
SELECT * FROM 表 ORDER BY 列1 ASC,列2 DESC…
查询员工的姓名和工资,按照工资降序排序
SELECT ename,sal FROM emp ORDER BY sal DESC;
按照多个字段排序:查询员工的姓名,入职日期和工资,按照工资升序,入职日期升序排序
SELECT ename,emp.HIREDATE,sal FROM emp ORDER BY sal ASC, emp.HIREDATE ASC;
分页查询
SELECT * FROM table LIMIT start,pagesize;
查询员工表的前三条记录
SELECT ename,emp.HIREDATE,sal FROM emp LIMIT 3; – 取出来前3条记录
查询员工表中间的三条记录,从第五条开始取
SELECT ename,emp.HIREDATE,sal FROM emp LIMIT 5,3; – 5是行号,行号从0开始
查询员工表中间的10条记录,从第5条开始取,按照工资升序
SELECT ename,emp.HIREDATE,sal FROM emp ORDER BY sal LIMIT 5,10;
使用全限定的列名查询
SELECT 表1.列1,表1.列2… FROM 表;
查询员工姓名和工资
SELECT emp.ename ,emp.sal FROM emp;
查用表别名查询
SELECT a.列1,a.列2… FROM 表 a;
查询员工的姓名和工资
SELECT e.ename ,e.sal FROM emp e;
WHERE子句
Select * from 表 where 条件 order by column1…;

使用比较运算符查询
 查询员工编号是7566的员工信息
SELECT * FROM emp e WHERE e.EMPNO = 7566;
查询不是销售员的员工信息
SELECT * FROM emp e WHERE e.JOB != ‘SALESMAN’;
SELECT * FROM emp e WHERE e.JOB <> ‘SALESMAN’;
查询工资小于3200的员工信息
SELECT * FROM emp e WHERE e.SAL < 3200;
查询工资大于3200的员工信息
SELECT * FROM emp e WHERE e.SAL > 3200;
查询工资小于等于2000的员工信息
SELECT * FROM emp e WHERE e.SAL <= 2000;
查询工资大于等于2000的员工信息
SELECT * FROM emp e WHERE e.SAL >= 2000;
进行范围查询
查询工资在2000 - 3000之间的员工信息
SELECT * FROM emp e WHERE e.SAL BETWEEN 2000 AND 3000;
空值/非空查询
 查询有奖金的员工信息
SELECT * FROM emp e WHERE e.COMM IS NOT NULL;
查询没有奖金的员工信息
SELECT * FROM emp e WHERE e.COMM IS NULL;
多条件查询-AND
 查询销售员中工资大于1200的员工信息
SELECT * FROM emp e WHERE e.SAL > 1250 AND e.JOB = ‘salesman’;
查询销售员中工资大于1200的员工信息入职日期在1981年5月之前的
SELECT * FROM emp e WHERE e.SAL > 1250 AND e.JOB = ‘salesman’ AND e.HIREDATE < ‘1981-5-1’;
多条件查询-OR
查询工资大于4500或者是销售员的员工信息
SELECT * FROM emp e WHERE e.SAL > 4500 OR e.JOB = ‘salesman’;
查询7566,7788,7956三个员工的信息
SELECT * FROM emp e WHERE e.EMPNO = 7566 OR e.EMPNO = 7788 OR e.EMPNO = 7839;
IN关键字查询
查询7566,7788,7956三个员工的信息
SELECT * FROM emp e WHERE e.EMPNO IN (7566,7788,7839,777);
NOT关键字查询
查询不是7566,7788,7956这三个员工的信息
SELECT * FROM emp e WHERE e.EMPNO NOT IN (7566,7788,7839);
模糊查询
查询姓名中带有A的员工信息
SELECT * FROM emp e WHERE e.ENAME LIKE ‘%a%’;
查询姓名中以A结尾的员工信息
SELECT * FROM emp e WHERE e.ENAME LIKE ‘%a’;
查询姓名中以A开头的员工信息
SELECT * FROM emp e WHERE e.ENAME LIKE ‘a%’;
查询姓名中第二个字母是A的员工信息
SELECT * FROM emp e WHERE e.ENAME LIKE ‘a%’;
查询姓名中第三个字母是A的员工信息
SELECT * FROM emp e WHERE e.ENAME LIKE ‘__a%’;
查询姓名中第二个字母是_的员工信息
SELECT * FROM emp e WHERE e.ENAME LIKE '
/_%’ ESCAPE ‘/’;
组合查询-合并结果集

 查询工资在1200以上的员工信息
SELECT ename,sal FROM emp e WHERE e.SAL > 1200;
 查询工资在3000以上的员工信息
SELECT ename,sal FROM emp e WHERE e.SAL > 3000;

扫描二维码关注公众号,回复: 12558482 查看本文章

–合并结果集: 去除重复数据
SELECT ename,sal FROM emp e WHERE e.SAL > 1200
UNION
SELECT ename,sal FROM emp e WHERE e.SAL > 3000;

– 合并结果集:不去除重复数据
SELECT ename,sal FROM emp e WHERE e.SAL > 1200
UNION ALL
SELECT ename,sal FROM emp e WHERE e.SAL > 2000 ORDER BY sal;
分组函数

– 求和函数SUM() :求所有人的工资总和
SELECT SUM(sal) FROM emp ;
– 求20号部门的工资总和
SELECT SUM(sal) FROM emp WHERE emp.DEPTNO = 20;
– 求平均数的函数AVG():求所有人的平均工资
SELECT AVG(sal) FROM emp ;
– 求20号部门的平均工资
SELECT AVG(sal) FROM emp WHERE emp.DEPTNO = 20;
– 求最大值函数MAX():查询最高工资
SELECT MAX(sal) FROM emp ;
– 查询20号部门的最高工资
SELECT MAX(sal) FROM emp WHERE emp.DEPTNO = 20;
– 求最小值函数MIN():查询最低的工资
SELECT MIN(sal) FROM emp ;
– 查询20号部门的最低工资
SELECT MIN(sal) FROM emp WHERE emp.DEPTNO = 20;
– 求总行数的函数count():查询公司有多少名员工
SELECT COUNT(empno) FROM emp;
– 查询20号部门的人数
SELECT COUNT(empno) FROM emp WHERE emp.DEPTNO = 20;

分组查询
 查询每个部门的最低工资
SELECT deptno,MIN(sal) xyz FROM emp GROUP BY deptno;
 查询每个部门的最高工资
SELECT deptno,MAX(sal) xyz FROM emp GROUP BY deptno;
 查询每个部门的人数
SELECT deptno,COUNT(empno) xyz FROM emp GROUP BY deptno;
 查询每个部门下每个工种有多少人
SELECT deptno,job,COUNT(empno) FROM emp e GROUP BY e.DEPTNO,e.JOB;
 查询每个部门的最低工资以及部门号
SELECT deptno,MIN(sal) FROM emp e GROUP BY e.DEPTNO;

分组函数练习:显示非销售人员工作名称以及从事同一工作的员工的月工资的总和
SELECT e.JOB,SUM(sal) FROM emp e WHERE e.JOB <> ‘salesman’ GROUP BY e.JOB;
分组查询:对分组条件筛选
对分组以后的数据进行筛选使用HAVING子句
– 显示非销售人员工作名称以及从事同一工作的员工的月工资的总和,
– 并且要满足从事同一工作月工资总和大于5000,结果按月工资总和的升序排列。取出来第一条记录
SELECT e.JOB,SUM(sal) 总和 FROM emp e WHERE e.JOB <> ‘salesman’
GROUP BY e.JOB HAVING SUM(sal) > 5000 ORDER BY 总和 DESC LIMIT 1;

小总结:
– SQL语句顺序:
select 列1,列2… from tableName [WHERE 子句] [GROUP BY 子句] [HAVING 子句] [ORDER BY 子句] [limit x,y]
删除数据
格式:DELETE FROM tableName [WHERE 条件];

 删除要带条件,否则删除整张表中的数据
DELETE FROM salgrade;
删除编号是7369的员工
DELETE FROM emp WHERE empno = 7369;
删除7521或者是20号部门的员工
DELETE FROM emp WHERE empno = 7521 OR deptno = 20;

如果确实要清空表中的数据,那么使用截断表速度更快
TRUNCATE emp;
更新数据
格式:UPDATE tableName SET 列1 = 值1,列2 = 值2 [where 条件]
将所有的部门地址修改成上海
UPDATE dept SET loc = ‘上海’; – 更新也要带条件,否则更新全表
将10号部门地址修改成北京,部门名称修改成信息部
UPDATE dept SET dname = ‘信息部’,loc = ‘北京’ WHERE deptno = 10;
第三单元
约束
主键约束
主键约束:被主键约束所约束起来的字段,该字段中的数据不能为NULL,不能重复[非空,唯一]
注意:每张表中只能有一个主键约束

DROP TABLE dept;
在创建表的时候,添加主键约束
CREATE TABLE dept(
deptno INT PRIMARY KEY, – 给deptno字段添加主键约束
dname VARCHAR(10),
address VARCHAR(100)
);
INSERT INTO dept VALUES(20,‘研究部x’,‘达拉斯’); – 添加成功,因为不违反主键约束的规则
INSERT INTO dept VALUES(20,‘研究部x’,‘达拉斯’); – 添加失败,因为20重复

删除主键约束
ALTER TABLE dept DROP PRIMARY KEY;
给已经创建完毕的表设置主键约束
ALTER TABLE emp CHANGE empno empno INT(11) PRIMARY KEY;
主键自增
DROP TABLE dept;
CREATE TABLE dept(
deptno INT PRIMARY KEY AUTO_INCREMENT, – 给deptno字段添加主键约束
dname VARCHAR(10),
address VARCHAR(100)
);
– 0和null使用自增长得值
INSERT INTO dept VALUES(0,‘研究部x’,‘达拉斯’);
INSERT INTO dept VALUES(null,‘研究部x’,‘达拉斯’);
INSERT INTO dept (dname,address) VALUES(‘研究部x’,‘达拉斯’);
– 具体值则使用具体值
INSERT INTO dept VALUES(999,‘研究部x’,‘达拉斯’);
给已经创建好的表添加主键自增
ALTER TABLE dept CHANGE deptno deptno INT(11) AUTO_INCREMENT;
唯一约束
被唯一约束的字段,值不能重复.
DROP TABLE dept;
在创建表的时候,添加唯一约束
CREATE TABLE dept(
deptno INT PRIMARY KEY, – 给deptno字段添加主键约束
dname VARCHAR(10) NOT NULL,-- 给DNAME字段添加非空约束,
address VARCHAR(100) UNIQUE NOT NULL – 给address添加唯一和非空约束
);
删除唯一约束:唯一约束是索引的一种,所以用删除索引的语法删除唯一约束。
ALTER TABLE dept DROP INDEX address;
或者
ALTER TABLE emp CHANGE empno empno INT(11)。
给已经创建好的表添加唯一约束
ALTER TABLE dept CHANGE dname dname VARCHAR(10) NOT NULL UNIQUE;
非空约束
被非空约束的字段,值不能为NULL
DROP TABLE dept;
在创建表的时候,添加非空约束
CREATE TABLE dept(
deptno INT PRIMARY KEY, – 给deptno字段添加主键约束
dname VARCHAR(10) NOT NULL,-- 给DNAME字段添加非空约束,
address VARCHAR(100)
);

INSERT INTO dept VALUES(10,‘xxx’,‘达拉斯’); – 成功
INSERT INTO dept VALUES(20,‘YYY’,‘达拉斯’); – 成功
INSERT INTO dept VALUES(30,NULL,‘达拉斯’); --失败,因为违反非空约束

删除非空约束
ALTER TABLE dept CHANGE dname dname VARCHAR(10);
给已经创教好的表添加非空约束
ALTER TABLE dept CHANGE dname dname VARCHAR(10) NOT NULL;
默认值
设置了默认值约束的字段,如果不赋值则使用默认值
DROP TABLE dept;
在创建表的时候,添加默认值约束
CREATE TABLE dept(
deptno INT PRIMARY KEY, – 给deptno字段添加主键约束
dname VARCHAR(10) NOT NULL,-- 给DNAME字段添加非空约束,
address VARCHAR(100) UNIQUE NOT NULL DEFAULT ‘上海’ – 给address添加唯一和非空约束
);
INSERT INTO dept VALUES(10,‘xxx’,‘达拉斯’);
INSERT INTO dept (deptno,dname) VALUES(210,‘xxxY’);
INSERT INTO dept VALUES(30,‘xxx’,‘达拉斯’);
 删除默认值约束
ALTER TABLE dept CHANGE address address VARCHAR(10) ;
添加默认值约束
ALTER TABLE dept CHANGE address address VARCHAR(10) NOT NULL DEFAULT ‘上海’ ;

猜你喜欢

转载自blog.csdn.net/shuai_ge_feng/article/details/107357962
今日推荐