首页 > 数据库 >MySQL单表查询练习(条件_模糊_分组_聚合_排序)

MySQL单表查询练习(条件_模糊_分组_聚合_排序)

时间:2023-06-20 11:33:45浏览次数:52  
标签:INSERT emp INTO VALUES 单表 MySQL 分组 SELECT EMP


练习所用数据表

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

    习题&答案

    使用emp表进行查询

    • 查询出部门编号为30的员工
    SELECT * FROM emp WHERE DEPTNO =30;
    • 查询所有销售员的姓名、编号、部门编号
    SELECT ENAME, EMPNO, DEPTNO FROM emp WHERE JOB='SALESMAN';
    • 找出奖金高于工资的员工
    SELECT * FROM emp WHERE COMM>SAL;
    • 找出奖金高于工资60%的员工
    SELECT * FROM emp WHERE COMM>SAL*0.6;
    • 找出部门编号为10的所有经理, 和部门编号为20的所有销售员的详细资料
    SELECT * FROM emp WHERE (DEPTNO=10 AND JOB='MANAGER') OR (DEPTNO=20 and JOB='SALESMAN');
    • 找出部门编号为10的所有经理, 和部门编号为20的所有销售员,还有既不是经理也不是销售员但工资大于或等于2000的所有员工的详细资料
    SELECT * FROM emp WHERE (DEPTNO=10 AND JOB='MANAGER') OR (DEPTNO=20 AND JOB='SALESMAN') OR (NOT JOB IN('MANAGER', 'SALESMAN')AND SAL>2000);
    • 无奖金或奖金低于100的员工
    SELECT * FROM emp WHERE COMM<100 OR COMM IS NULL;
    • 查询名字为五个字符的员工
    SELECT * FROM emp WHERE ENAME LIKE '_____';
    • 查询1981年入职的员工
    SELECT * FROM emp WHERE HIREDATE LIKE '1981%';
    • 查询所有员工的详细信息,使用编号升序排列
    SELECT * FROM EMP ORDER BY EMPNO ASC;
    • 查询所有员工的详细信息,用工资降序排序, 如果工资相同则使用入职日期升序排序
    SELECT * FROM emp ORDER BY SAL DESC,HIREDATE ASC;
    • 查询每个部门的平均工资
    SELECT DEPTNO,AVG(SAL) FROM emp GROUP BY DEPTNO;
    • 查询每个部门的员工数量
    SELECT DEPTNO, COUNT(*) FROM emp GROUP BY DEPTNO;
    • 查询每种工作的最高工资、最低工资、人数,并按照人数升序排列,若人数相同则按照最低工资降序排列
    SELECT JOB, MAX(SAL),MIN(SAL), COUNT(SAL) FROM emp GROUP BY JOB ORDER BY COUNT(SAL), MIN(SAL) DESC;


    标签:INSERT,emp,INTO,VALUES,单表,MySQL,分组,SELECT,EMP
    From: https://blog.51cto.com/u_16165815/6521643

    相关文章

    • 解决PostgreSQL分组聚合时SELECT中字段必须在group或聚合函数中的问题(转自知乎仅供自
      PG的分组函数是比较严格的。你的select字段必须得存在于group子句、或者聚合函数中才行。假设场景是这样的:表结构name、class、score我现在要按照name分组,聚合score数据,还能查出额外的这个class字段如果是MySQL,你可以直接groupname然后selectclass,avg(score),但是你在P......
    • Mysql - 统计数据
      QA统计数据是做什么的?为了解释器在计算代价时,选择最优的方案.这个值如果与实际值差距过大,会导致执行顺序的变更.统计数据有哪些?对表的统计数据-mysql.innodb_table_stats对表索引的统计数据-mysql.innodb_index_stats统计数据存在哪?有两种方式,一种存在磁盘,一种存在......
    • MySql InnoDB 存储引擎表优化
      一、InnoDB表存储优化1、OPTIMIZETABLE适时的使用OPTIMIZETABLE语句来重组表,压缩浪费的表空间。这是在其它优化技术不可用的情况下最直接的方法。OPTIMIZETABLE语句通过拷贝表数据并重建表索引,使得索引数据更加紧凑,减少空间碎片。语句的执行效果会因表的不同而不同。过大......
    • 什么是MySQL
      什么是MySQLMySQL是一个关系型数据库,它采用表的形式来存储数据。你可以理解成是Excel表格,既然是表的形式存储数据,就有表结构(行和列)。行代表每一行数据,列代表该行中的每个值。列上的值是有数据类型的,比如:整数、字符串、日期等等。数据库的三大范式第一范式1NF确保数据库表字段......
    • 宝塔面板中使用Mysql命令快速导入大容量数据库
      在宝塔面板中,文件栏目中打开/www/backup/database文件夹,把我们的数据库上传到此文件夹中。(一般导入的数据库都会上传到这个文件夹,方便以后管理)点击旁边的终端,打开宝塔终端界面。输入账号及密码进入终端管理。(如果忘记密码,在软件商店里面找到Linux工具箱1.4里面可以设置......
    • MySQL的卸载、下载、安装详细讲解
      MySQL的卸载、下载、安装、环境变量配置、Navicat安装目录:本文比较长,详细说明了MySQL的卸载、下载、安装、环境变量配置、Navicat安装;顺序以目录为准。一、彻底卸载删除数据库二、下载MySQL数据库三、安装MySQL数据库——3.1,MySQL5.5.49版本的数据库——3.......
    • MySQL 基本语句总结
      MySQL语句,需要知道一下~总结的一些MySQL语句,仅供参考创建数据库createdatabasemydb1;createdatabaseifnotexistsmydb2charactersetGBK;#(不为空,字符集)createdatabasemydb3charactersetGBKcollategbk_chinese_ci;#(字符集,级别)查看所有数据库showdatab......
    • 错误:“java.lang.ClassNotFoundException: com.mysql.jdbc.Driver“ 如何解决?
      ——运行项目时遇到java.lang.ClassNotFoundException:com.mysql.jdbc.Driver问题,解决方案:错误如下:java.lang.ClassNotFoundException:com.mysql.jdbc.Driver atorg.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1358) atorg.......
    • MySQL入门基础知识
      1MySQL基础1.1常用命令启动服务:netstart服务名停止服务:netstop服务名启动MySQL服务器:MySQL【-h主机名-P端口号】-u用户名-p密码查看MySQL版本:MySQL--version或MySQL–V或登录到MySQL服务端使用selectversion();1.2语法规范每条命令最好用分号结尾每条......
    • MySQL DQL语法汇总
      1数据准备1.1建表语句创建四个表:地址表、部门表、职位表和员工表:CREATETABLE`locations`(`location_id`INTNOTNULLAUTO_INCREMENT,`street_address`VARCHAR(40)DEFAULTNULL,`postal_code`VARCHAR(12)DEFAULTNULL,`city`VARCHAR(30)DEFAULTNULL,......