MySQL 数据库表操作与查询实战案例

在数据库学习过程中,熟练掌握表的创建、数据插入及各类查询操作是基础且重要的技能。本文将通过实际案例,详细介绍 MySQL 中数据库表的设计、数据插入以及常用的查询操作,帮助初学者快速上手。

项目一:产品相关数据库设计与创建

一、数据库及表结构设计

本项目主要创建产品相关的数据库及员工表、订单表、发票表,用于存储产品业务相关数据。

二、数据库与表的创建

  • 新建产品库 mydb6_product
mysql> create database mydb6_product;
Query OK, 1 row affected (0.00 sec)
mysql> use mydb6_product;
Database changed
  • 在该库中新建 4 张表,表结构要求如下:

    • employees 表:
      • 列 1:id,整型,主键
      • 列 2:name,字符串(最大长度 50 ),不能为空
      • 列 3:age,整型
      • 列 4:gender,字符串(最大长度 10 ),不能为空,默认值 unknown
      • 列 5:salary,浮点型
    mysql> create table employees(id int primary key,name varchar(50) not null,age int,gender varchar(10) not null default 'unknown',salary float);
    Query OK, 0 rows affected (0.02 sec)
    
    • orders 表:
      • 列 1:id,整型,主键
      • 列 2:name,字符串(最大长度 100 ),不能为空
      • 列 3:price,浮点型
      • 列 4:quantity,整型
      • 列 5:category,字符串(最大长度 50 )
    mysql> create table orders(id int primary key,name varchar(100) not null,price float,quantity int,category varchar(50));
    Query OK, 0 rows affected (0.01 sec)
    
    • invoices 表:
      • 列 1:number,整型,主键自增长
      • 列 2:order_id,整型,外键关联到 orders 表的 id
      • 列 3:in_date,日期型
      • 列 4:total_amount,浮点型,要求数据大于 0
mysql> create table invoices(number int primary key auto_increment, order_id int ,in_date date,itotal_amount float check(total_amount>0),foreign key (order_id) references orders(id));
Query OK, 0 rows affected (0.02 sec)

项目二:员工信息数据库操作实战

一、数据库及表结构创建

本项目创建员工信息数据库,实现员工信息的插入与各类查询操作。

-- 创建员工数据库
create database mydb8_worker;-- 使用员工数据库
use mydb8_worker;-- 创建员工表(t_worker)
create table t_worker(department_id int(11) not null comment '部门号',worker_id int(11) primary key not null comment '职工号',worker_date date not null comment '工作时间',wages float(8,2) not null comment '工资',politics varchar(10) not null default '群众' comment '政治面貌',name varchar(20) not null comment '姓名',borth_date date not null comment '出生日期' 
);

二、数据插入操作

insert into t_worker values (101,1001,'2015-5-4',7500.00,'群众','张春燕','1990-7-1');
insert into t_worker values (101,1002,'2019-2-6',5200.00,'团员','李名博','1997-2-8');
insert into t_worker values (102,1003,'2008-1-4',10500.00,'党员','王博涵','1983-6-8');
insert into t_worker values (102,1004,'2016-10-10',5500.00,'群众','赵小军','1994-9-5');
insert into t_worker values (102,1005,'2014-4-1',8800.00,'党员','钱有财','1992-12-30');
insert into t_worker values (103,1006,'2019-5-5',5500.00,'党员','孙菲菲','1996-9-2');

三、查询操作练习

  1. 查询所有员工信息
mysql> select * from t_worker;
+---------------+-----------+-------------+----------+----------+-----------+------------+
| department_id | worker_id | worker_date | wages    | politics | name      | borth_date |
+---------------+-----------+-------------+----------+----------+-----------+------------+
|           101 |      1001 | 2015-05-04  |  7500.00 | 群众     | 张春燕    | 1990-07-01 |
|           101 |      1002 | 2019-02-06  |  5200.00 | 团员     | 李名博    | 1997-02-08 |
|           102 |      1003 | 2008-01-04  | 10500.00 | 党员     | 王博涵    | 1983-06-08 |
|           102 |      1004 | 2016-10-10  |  5500.00 | 群众     | 赵小军    | 1994-09-05 |
|           102 |      1005 | 2014-04-01  |  8800.00 | 党员     | 钱有财    | 1992-12-30 |
|           103 |      1006 | 2019-05-05  |  5500.00 | 党员     | 孙菲菲    | 1996-09-02 |
+---------------+-----------+-------------+----------+----------+-----------+------------+
6 rows in set (0.00 sec)

2. 查询去重后的部门 ID

mysql> select distinct department_id from t_worker;
+---------------+
| department_id |
+---------------+
|           101 |
|           102 |
|           103 |
+---------------+
3 rows in set (0.01 sec)

3. 统计员工总数

mysql> select count(name) from t_worker;
+-------------+
| count(name) |
+-------------+
|           6 |
+-------------+
1 row in set (0.01 sec)

4. 查询最高工资和最低工资

mysql> select max(wages),min(wages) from t_worker;
+------------+------------+
| max(wages) | min(wages) |
+------------+------------+
|   10500.00 |    5200.00 |
+------------+------------+
1 row in set (0.00 sec)

5. 计算平均工资和工资总和

mysql> select avg(wages),sum(wages) from t_worker;
+-------------+------------+
| avg(wages)  | sum(wages) |
+-------------+------------+
| 7166.666667 |   43000.00 |
+-------------+------------+
1 row in set (0.00 sec)

6. 创建工作日期表

mysql> create table 工作日期 as select worker_id,name,worker_date from t_worker;
Query OK, 6 rows affected (0.02 sec)
Records: 6  Duplicates: 0  Warnings: 0mysql> select * from 工作日期;
+-----------+-----------+-------------+
| worker_id | name      | worker_date |
+-----------+-----------+-------------+
|      1001 | 张春燕    | 2015-05-04  |
|      1002 | 李名博    | 2019-02-06  |
|      1003 | 王博涵    | 2008-01-04  |
|      1004 | 赵小军    | 2016-10-10  |
|      1005 | 钱有财    | 2014-04-01  |
|      1006 | 孙菲菲    | 2019-05-05  |
+-----------+-----------+-------------+
6 rows in set (0.00 sec)

7. 查询党员的出生日期和姓名

mysql> select borth_date,name from t_worker where politics = '党员';
+------------+-----------+
| borth_date | name      |
+------------+-----------+
| 1983-06-08 | 王博涵    |
| 1992-12-30 | 钱有财    |
| 1996-09-02 | 孙菲菲    |
+------------+-----------+
3 rows in set (0.00 sec)

8. 查询工资在 4000 到 8000 之间的员工

mysql> select name,wages from t_worker where wages between 4000 and 8000;
+-----------+---------+
| name      | wages   |
+-----------+---------+
| 张春燕    | 7500.00 |
| 李名博    | 5200.00 |
| 赵小军    | 5500.00 |
| 孙菲菲    | 5500.00 |
+-----------+---------+
4 rows in set (0.01 sec)

9. 查询姓名以 “孙” 或 “李” 开头的员工

mysql> select name from t_worker where name like '孙%' or name like '李%';
+-----------+
| name      |
+-----------+
| 李名博    |
| 孙菲菲    |
+-----------+
2 rows in set (0.00 sec)

10. 查询非党员且部门为 102 或 103 的员工姓名和工号

mysql> select name,worker_id from t_worker where politics != '党员' and (department_id =102 or department_id = 103);
+-----------+-----------+
| name      | worker_id |
+-----------+-----------+
| 赵小军    |      1004 |
+-----------+-----------+
1 row in set (0.00 sec)

11. 按出生日期排序查询所有员工

mysql> select * from t_worker order by borth_date;
+---------------+-----------+-------------+----------+----------+-----------+------------+
| department_id | worker_id | worker_date | wages    | politics | name      | borth_date |
+---------------+-----------+-------------+----------+----------+-----------+------------+
|           102 |      1003 | 2008-01-04  | 10500.00 | 党员     | 王博涵    | 1983-06-08 |
|           101 |      1001 | 2015-05-04  |  7500.00 | 群众     | 张春燕    | 1990-07-01 |
|           102 |      1005 | 2014-04-01  |  8800.00 | 党员     | 钱有财    | 1992-12-30 |
|           102 |      1004 | 2016-10-10  |  5500.00 | 群众     | 赵小军    | 1994-09-05 |
|           103 |      1006 | 2019-05-05  |  5500.00 | 党员     | 孙菲菲    | 1996-09-02 |
|           101 |      1002 | 2019-02-06  |  5200.00 | 团员     | 李名博    | 1997-02-08 |
+---------------+-----------+-------------+----------+----------+-----------+------------+
6 rows in set (0.00 sec)

12. 按工资排序取前 3 名员工的工号和姓名

mysql> select worker_id,name from t_worker order by wages limit 3;
+-----------+-----------+
| worker_id | name      |
+-----------+-----------+
|      1002 | 李名博    |
|      1004 | 赵小军    |
|      1006 | 孙菲菲    |
+-----------+-----------+
3 rows in set (0.00 sec)

13. 按部门统计党员人数

mysql> select department_id,count(*) from t_worker where politics = '党员' group by department_id;
+---------------+----------+
| department_id | count(*) |
+---------------+----------+
|           102 |        2 |
|           103 |        1 |
+---------------+----------+
2 rows in set (0.00 sec)

14. 按部门统计工资总和及平均工资(保留 2 位小数)

mysql> select department_id,sum(wages),round(avg(wages),2) from t_worker group by department_id;
+---------------+------------+---------------------+
| department_id | sum(wages) | round(avg(wages),2) |
+---------------+------------+---------------------+
|           101 |   12700.00 |                6350 |
|           102 |   24800.00 |             8266.67 |
|           103 |    5500.00 |                5500 |
+---------------+------------+---------------------+
3 rows in set (0.00 sec)

15. 查询员工人数不少于 3 人的部门

mysql> select department_id,count(*) from t_worker group by department_id having count(*)>=3;
+---------------+----------+
| department_id | count(*) |
+---------------+----------+
|           102 |        3 |
+---------------+----------+
1 row in set (0.00 sec)

四、总结

本文通过实际案例介绍了 MySQL 数据库的基本操作,包括数据库和表的创建、数据插入以及各种常用查询。这些操作是数据库开发的基础,掌握这些技能可以帮助我们更好地处理和分析数据。在实际应用中,还需要根据具体业务场景灵活运用这些查询语句,结合索引优化等技术,提高查询效率。

希望本文对初学者有所帮助,后续可以继续深入学习多表连接查询、子查询、存储过程等更高级的数据库操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/93077.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93077.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/93077.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

THCV215一种高速视频数据收发器,采用低电压差分信号(LVDS)技术支持高速串行数据传输,支持1080p/60Hz高分辨率传输

THCV215 是一款符合 V-by-One HS 标准的 高速视频数据收发器。THCV215和THCV216被设计为支持主机和显示器之间的视频数据传输。该芯片组可以在20MHz至100MHz的LVDS时钟频率下,仅通过一根差分电缆传输39bit视频数据和3bit同步数据。该芯片组有两个高速数据通道&#…

Linux 系统下 VS Code 降级至 1.85 版本教程:通过历史版本网站解决兼容性问题

一、问题背景 当前使用的 VS Code 版本为 1.102.3,这一版本可能是未来版本、内部测试版或 Insiders 版本,而目前最新的稳定版属于 1.8x 系列。由于版本过新,可能导致与部分插件(如旧版 Remote-SSH)或系统环境不兼容。…

一个基于 PyTorch 的完整模型训练流程

一个基于 PyTorch 的完整模型训练流程 flyfish训练步骤具体操作目的1. 训练前准备设置随机种子、配置超参数(batch size、学习率等)、选择计算设备(CPU/GPU)确保实验可复现;统一控制训练关键参数;利用硬件加…

ffmpeg,ffplay, vlc,rtsp-simple-server,推拉流命令使用方法,及测试(二)

一、常用命令 ffmpeg 推流命令 : ffmpeg -re -i input.mp4 -c copy -f flv rtmp://39.105.129.233/myapp/ffmpeg -re -i input.mp4 -c copy -f flv rtsp://39.105.129.233/myapp/-re 读取流 -i 输入文件 -f # 指定推流formatffplay 拉流命令 : ffplay rtmp://39.105.129.233/m…

使用行为树控制机器人(三) ——通用端口

文章目录一、通用端口功能实现1. 功能实现1.1 头文件定义1.2 源文件实现1.3 main文件实现1.4 tree.xml 实现2. 执行结果使用行为树控制机器人(一) —— 节点使用行为树控制机器人(二) —— 黑板使用行为树控制机器人(三) —— 通用端口有了上述前两节我们已经可以实现节点间的通…

DataDome反爬虫验证技术深度解析:无感、滑块与设备验证全攻略

DataDome反爬虫验证技术深度解析:无感、滑块与设备验证全攻略 随着网络安全威胁的不断演进,企业对数据保护的需求日益增强。DataDome作为业界领先的反爬虫解决方案,以其三层防护机制在众多知名网站中得到广泛应用。本文将深入解析DataDome的…

RabbitMQ 消息转换器详解

RabbitMQ 消息转换器详解 一、为什么需要消息转换器? RabbitMQ 的消息传输协议只识别字节流: 发送对象时,需要序列化成字节数组接收消息时,需要将字节数组反序列化成对象 如果不使用消息转换器: 需要手动序列化和反序列…

内网穿透的应用-告别“现场救火”!用 cpolar远程调试让内网故障排查进入“云时代”

文章目录前言**常见困境与解决方案****实际应用价值**1. Remote JVM Debug2. 系统要求与环境准备2.1 服务器环境2.2 本地开发环境3. 内网服务器准备及开始3.1 安装cpolar配置支持远程ssh登录3.1.1 什么是cpolar?3.1.2 安装cpolar3.1.3 注册及配置cpolar系统服务3.1.…

Cherryusb UAC例程对接STM32内置ADC和PWM播放音乐和录音(下)=>UAC+STM32 ADC+PWM实现录音和播放

1. 程序基本框架整个程序框架, 与之前的一篇文章《Cherryusb UAC例程对接STM32内置ADC和DAC播放音乐和录音(中)>UACSTM32 ADCDAC实现录音和播放》基本一致, 只是这次将DAC替换成了PWM。因此这里不再赘述了。 2. audio_v1_mic_speaker_multichan_template.c的修改说明(略) 参…

1 JQ6500语音播报模块详解(STM32)

系列文章目录 文章目录系列文章目录前言1 JQ6500简介2 基本参数说明2.1 硬件参数2.2 模块管脚说明3 控制方式3.1 通信格式3.2 通信指令4 硬件设计5 软件设计5.1 main.c5.2 board_config5.2.1board_config.h5.2.2 board_config.c5.3 module_config5.3.1 module_config.h5.3.2 mo…

常用数据分析工具

Tableau丨Power BI丨FineBI丨SQL丨影刀丨Excel丨Python丨 参考视频:【戴师兄】数据分析有哪些必学工具?2023最新版!Tableau丨Power BI丨FineBI丨SQL丨影刀丨Excel丨Python丨课程教程自学攻略_哔哩哔哩_bilibili 文档资料: 【戴师兄…

OBOO鸥柏丨智能会议平板教学查询一体机交互式触摸终端招标投标核心标底参数要求

整机参数要求:55寸/65寸/75寸/85-86寸/98寸/100寸/110寸/115寸智能会议平板教学触控一体机/智慧黑板触摸屏招标投标核心标底参数要求1、整机屏幕采用≥采用超高清原厂原包原装工业LCD液晶屏面板;具有高色域,显示动态视频、web及3D动画时&…

无人机在环保监测中的应用:低空经济发展的智能监测与高效治理

一、行业背景与技术革新 随着全球环境问题日益严峻,传统环保监测手段已难以满足现代环境管理的需求。固定监测站点建设成本高、覆盖范围有限,地面巡查效率低下且存在安全风险。在此背景下,无人机技术凭借其独特的空间优势和技术特性&#xff…

PO、BO、VO、DTO、POJO、DAO、DO基本概念

一、图解二、相关概念 1、PO(Persistant Object - 持久化对象) 核心定位: 直接与数据库表结构一一映射的对象,通常用于 ORM(对象关系映射)框架(如 MyBatis、Hibernate)中。 特点&…

todoList清单(HTML+CSS+JavaScript)

🌏个人博客主页: 前言: 前段时间学习了JavaScript,然后写了一个todoList小项目,现在和大家分享一下我的清单以及如何实现的,希望对大家有所帮助 🔥🔥🔥文章专题&#xff…

Mac M1探索AnythingLLM+Ollama+知识库问答

AnythingLLM内置 RAG、AI Agent、可视化/无代码的 Agent 编排,支持多家模型与本地/云端向量库,并提供多用户与可嵌入的聊天组件,用来快速验证“知识 模型 工具”拼成的 AI 应用。 1 AnythingLLM、Ollama准备 1)AnythingLLM 打…

【 Navicat Premium 17 完全图形化新手指南(从零开始)】

Navicat Premium 17 完全图形化新手指南(从零开始) 一、准备阶段:清理现有环境 1. 删除已创建的测试数据库(如需重新开始)打开Navicat Premium 17 双击桌面图标启动程序在左侧连接面板中找到你的MySQL连接(…

Web学习笔记5

Javascript概述1、JS简介JS是运行在浏览器的脚本编程语言,最初用于Web表单的校验。现在的作用主要有三个:网页特效、表单验证、数据交互JS由三部分组成,分别是ECMAscript、DOM、BOM,其中ECMAscript规定了JS的基本语法和规则&#…

部署一个开源的证件照系统

以下数据来自官方网站,记录下来,方便自己 项目简介 🚀 谢谢你对我们的工作感兴趣。您可能还想查看我们在图像领域的其他成果,欢迎来信:zeyi.linswanhub.co. HivisionIDPhoto 旨在开发一种实用、系统性的证件照智能制作算法。 它利用一套完善的AI模型工作…

Linux客户端利用MinIO对服务器数据进行同步

接上篇 Windows客户端利用MinIO对服务器数据进行同步 本篇为Linux下 操作,先看下我本地的系统版本 所以我这里下载的话,是AMD64 文档在这 因为我这里只是需要用到客户端,获取数据而已,所以我只需要下载个MC工具用来数据获取就可以…