当前位置: 首页 > news >正文

MySQL 练习题

MySQL 练习题

一、表结构与数据准备

(一)部门表(dept)

1. 创建表
CREATE TABLE dept (deptno INT(2) NOT NULL PRIMARY KEY,dname VARCHAR(14),loc VARCHAR(13));
2. 插入数据
INSERT INTO dept (deptno, dname, loc) VALUES(10, 'ACCOUNTING', 'NEW YORK'),(20, 'RESEARCH', 'DALLAS'),(30, 'SALES', 'CHICAGO'),(40, 'OPERATIONS', 'BOSTON');

(二)员工表(emp)

1. 创建表(含外键关联 dept 表)
CREATE TABLE emp (empno INT(4) NOT NULL PRIMARY KEY,ename VARCHAR(10),job VARCHAR(9),mgr INT(4),hiredate DATE,sal FLOAT(7,2),comm FLOAT(7,2),deptno INT(2),CONSTRAINT fk_emp_dept FOREIGN KEY (deptno) REFERENCES dept(deptno));
2. 插入数据
INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES(7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800.00, NULL, 20),(7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600.00, 300.00, 30),(7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250.00, 500.00, 30),(7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975.00, NULL, 20),(7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250.00, 1400.00, 30),(7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850.00, NULL, 30),(7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450.00, NULL, 10),(7788, 'SCOTT', 'ANALYST', 7566, '1987-07-13', 3000.00, NULL, 20),(7839, 'KING', 'PRESIDENT', NULL, '1981-11-07', 5000.00, NULL, 10),(7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500.00, 0.00, 30),(7876, 'ADAMS', 'CLERK', 7788, '1987-07-13', 1100.00, NULL, 20),(7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950.00, NULL, 30),(7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000.00, NULL, 20),(7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300.00, NULL, 10);

(三)工资等级表(salgrade)

1. 创建表
CREATE TABLE salgrade (grade INT(11),losal INT(11),hisal INT(11));
2. 插入数据
INSERT INTO salgrade (grade, losal, hisal) VALUES(1, 700, 1200),(2, 1201, 1400),(3, 1401, 2000),(4, 2001, 3000),(5, 3001, 9999);

二、查询练习题及解答

1. 计算员工工资 + 奖金(处理 NULL 奖金)

需求:查询员工姓名、工资、奖金,以及工资与奖金的总和(奖金为 NULL 时按 0 计算)。

SELECTename 姓名,sal 工资,comm 奖金,sal + IFNULL(comm, 0) 工资加奖金FROM emp;

说明:IFNULL(comm, 0) 将 NULL 奖金转为 0,避免计算结果为 NULL。

2. 拼接员工姓名与工号

需求:将员工姓名和工号拼接为 “姓名_工号” 格式(如 SMITH_7369)。

SELECT CONCAT(ename, '_', empno) AS 姓名_工号 FROM emp;

说明:CONCAT 函数用于字符串拼接。

3. 关联查询员工与部门信息

需求:查询员工编号、姓名及所属部门名称。

SELECTe.empno 员工编号,e.ename 姓名,d.dname 部门名称FROM emp eJOIN dept d ON e.deptno = d.deptno;

说明:通过 deptno 外键关联员工表与部门表。

4. 查询工资高于 SCOTT 的员工

需求:找出工资比 SCOTT 高的员工姓名和工资。

SELECT ename 姓名, sal 工资FROM empWHERE sal > (SELECT sal FROM emp WHERE ename = 'SCOTT');

结果:仅 KING(工资 5000.00)高于 SCOTT(工资 3000.00)。

5. 统计 SALES 部门人数

需求:查询 SALES 部门的员工数量。

SELECT COUNT(*) SALES部门人数FROM emp eJOIN dept d ON e.deptno = d.deptnoWHERE d.dname = 'SALES';

结果:SALES 部门有 6 人。

6. 查询工资最低的员工信息

需求:找出工资最低的员工姓名、工资及所属部门。

SELECTe.ename 姓名,e.sal 工资,d.dname 部门FROM emp eJOIN dept d ON e.deptno = d.deptnoWHERE e.sal = (SELECT MIN(sal) FROM emp);

结果:SMITH,工资 800.00,部门 RESEARCH。

7. 筛选普通员工(非领导)

需求:查询没有下属的普通员工(mgr 字段未被其他员工引用)。

SELECT ename 普通员工FROM empWHERE empno NOT IN (SELECT DISTINCT mgr FROM emp WHERE mgr IS NOT NULL);

说明:子查询获取所有领导的工号,外层查询排除这些工号对应的员工。

8. 按岗位调整工资(CASE 语句)

需求:SALESMAN 岗位涨薪 1000,ANALYST 岗位涨薪 2000,其他岗位薪资不变,查询调整后薪资。

SELECTename 姓名,sal 旧薪资,job 岗位,CASEWHEN job = 'SALESMAN' THEN sal + 1000WHEN job = 'ANALYST' THEN sal + 2000ELSE salEND 新薪资FROM emp;

说明:CASE 语句实现多条件薪资调整。

http://www.dtcms.com/a/390111.html

相关文章:

  • 推客小程序二级分销机制设计与实现:从0到1搭建裂变增长引擎
  • 【C++】多态(上)
  • uos中创建自定义Ip (192.168.137.1)的热点的方法
  • 【每日算法】搜索插入位置 LeetCode
  • vue+springboot+ngnix前后端分离项目部署
  • sward入门到实战(1) - 安装教程
  • 独立站的优势有哪些
  • Java学习历程18——哈希表的使用
  • 机械传动里的名词——传动比
  • qiankun 主子应用部署教程(Nginx 小白版)
  • 开启视觉奇旅:走进《计算机图形学》的世界
  • 光伏组件IV曲线测试仪的功能
  • MySQL MHA
  • 【试题】信息安全管理员考试题库
  • 硬件(十四)SPI通信协议
  • 大模型学习:使用FastText工具进行文本分类
  • pip 指令大全
  • 计算机基础·MySQL
  • 22-29、深度学习知识手册:从全连接到生成模型的融会贯通指南
  • 【FastCAEFlow案例分享】软件在汽车场景中的应用
  • Python二进制数据读取与可变缓冲区操作详解:从基础到高阶应用
  • 面向对象编程(OOP):Java 的核心思想(详细笔记)
  • I2C 通信、AT24C02 EEPROM及LM75温度传感器的配置
  • Halcon中的并行编程(二)
  • Gin框架参数绑定完全指南:从基础到实战最佳实践
  • TF 坐标旋转的方向如何确定
  • C++基础(16)——用红黑树封装出map和set
  • 前端编程工具有哪些?常用前端编程工具推荐、前端编程工具对比与最佳实践分享
  • 换网络这事, Comcast 销户了
  • Day26_【深度学习(6)—神经网络NN(1.2)前向传播的搭建案例】