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;

–合并结果集: 去除重复数据
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 ‘上海’ ;

mysql 查询案例dept,emp表内数据相关推荐

  1. mysql连接查询(两个表内和多个表内连接查询)

    连接是关系数据模型的主要特点,连接查询是关系数据库中最主要的查询,包括内连接.外连接等. 当两个或多个表中存在相同意义的字段时,便可以通过这些字段对不同的表进行 连接查询,得到存放在多个表中的记录数据 ...

  2. MySQL删除或清空表内数据的方法

    MySQL删除或清空表内数据的方法 一.使用MySQL清空表数据命令:truncate SQL语法为: truncate table 表名 注意: truncate该命令会直接将数据表内数据清空: t ...

  3. SQL查询从多个表返回数据

    本文翻译自:SQL query return data from multiple tables I would like to know the following: 我想知道以下内容: how t ...

  4. Mysql查询某字段值重复的数据个数

    说明:表:survey_consumer,字段:province ,统计字段:count 语句说明:查询出survey_consumer表中province字段两个及以上相同的数据(没有重复的数据不会 ...

  5. 规格选项表管理之查询获取规格选项表列表数据

    规格选项表管理 在规格选项表中我们需要对规格选项表数据进行增删改查操作,这时候我们可以借助于视图集中的ModelViewset来完成相应的操作 查询获取规格选项表列表数据 接口分析 请求方式: GET ...

  6. MySql 查询数据库中所有表名

    MySql 查询数据库中所有表名 查询数据库中所有表名 select table_name from information_schema.tables where table_schema='csd ...

  7. mysql查询第11到20条数据_数据库查询语句怎样查询一个表中的第15到第20条数据...

    展开全部 用row_number来查询. 具体方法如下:62616964757a686964616fe4b893e5b19e31333337613830 以sqlserver2008R2为例. 1.创 ...

  8. MySQL|(单表查询操作)emp表 员工信息表练习

    问题:利用emp表中的数据,完成如下查询需求: (1)查询20号部门的所有员工信息. select * from emp where deptno=20; (2)查询津贴(comm)高于月薪(sal) ...

  9. cmd命令窗口mysql查询表数据命令行_cmd 命令行模式操作数据库 添加查询 修改 删除 ( 表 字段 数据)...

    一 查看数据库.表.数据字段.数据 1 首先配置环境变量 进入mysql  或者通过一键集成工具 打开mysql命令行  或者mysql 可视化工具 打开命令行 进入这样的界面   不同的机器操作不同 ...

最新文章

  1. python元类的简单了解
  2. 对pthread_cond_wait()函数的理解
  3. Eclipse中10个最有用的快捷键组合(转)
  4. python多级目录import_你真的会用Python模块与工具包吗?
  5. linux 禁用smb服务,Samba 4.11 发布,更好的可扩展性与默认禁用SMB1
  6. 没有bug队——加贝——Python 练习实例 37,38
  7. 华硕笔记本没有无线服务器,华硕笔记本连不上无线网络怎么解决
  8. 1-9:学习shell之权限
  9. bzoj 1594: [Usaco2008 Jan]猜数游戏【二分+线段树】
  10. ajax 跨域 提交cookie,Ajax跨域请求COOKIE无法带上的完美解决办法
  11. PC端 二维码/条形码扫描器1.1-支持截图+摄像头+本地图片+扫描枪识别
  12. 应用程序无法正常启动(0xc0150002)
  13. 【绘图】Origin关闭加速模式(speed mode)
  14. ​5项人工智能实例,令人惊叹!
  15. Invalid bound statement (not found)出现的原因和解决方法
  16. win2008R2 不能访问局域网共享\局域网共享中无本机,解决办法
  17. android路由器,Android工程师面试该怎么准备?年薪50W
  18. 局域网访问文件提示服务器内存不足,“服务器存储空间不足”的问题
  19. 2019年(本命年)个人总结
  20. Automation Anywhere视频教程

热门文章

  1. idea下git 错误 error: unable to read askpass response from 'C:\Users\ASUS\.IntelliJIdea2019.1\system\tm
  2. 腾讯面试:《警察抓小偷逻辑题》
  3. 【VB6|第17期】16进制颜色值与RGB值互相转换(含源码)
  4. 写给想要开始跑步的人
  5. 微信的新消息一键标为已读.简单的微信脚本,使用autojs编写的安卓自动化脚本
  6. 如何除去暴风影音的左上边广告和下角动态广告
  7. Ubuntu 18.04 其他镜像的刻录
  8. 【开说正事】猿宵节灯谜,你知多少?
  9. 动画(Animation)来回变换
  10. 文涛短信通 v1.0 绿色