【MySQL】表的增删改查(一)

news2025/1/23 10:36:28

你可以了解世间万物,但追根溯源的唯一途径便是亲身尝试。——《心灵捕手》


前言:

大家好,我是拳击哥,今天给大家讲解的是mysql表GRUD操作中的新增数据、查询数据以及表中数据的排序、去重等。因篇幅过长,分为两期来讲解。


目录

1、什么是GRUD操作?

2、增加数据(create)

2.1创建一个数据库

2.2 创建一个表

2.3单行数据的全列插入

2.4多行数据的指定列插入

3、简单查询

3.1全列查询

3.2指定列查询

3.3查询字段为表达式

3.4给字段起别名

3.5去重DISTINCT

4、排序ORDER BY

4.1升序排序

4.2降序排序

4.3 使用表达式及别名排序

4.4对多个字段排序


1、什么是GRUD操作?

GRUD操作即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写。下面我就来讲解它们的用法。


2、增加数据(create)

首先我们来看我们有多少个数据库我们使用show databases;来查看

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

 窗口显示为:

我们可以看到有四个数据库这些数据库都是下载mysql后,mysql自带的数据库。


2.1创建一个数据库

创建一个数据库外面采用create database 数据库名;来创建。

比如我要创建一个名为student_m的数据库:

mysql> create database student_m;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| student_m          |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

我们再次显示所有数据库时,已经创建成功了

 


2.2 创建一个表

我要在刚刚创建好的student_m数据库里面创建一个表,我们使用create table 表名;来创建。

比如我要创建一个名为student的表:

mysql> use student_m;
Database changed
mysql> create table student (
    -> id INT,
    -> sn int comment '学号',
    -> name varchar(30) comment '姓名',
    -> e_mail varchar(20) comment '邮箱'
    -> );
Query OK, 0 rows affected (0.02 sec)

在数据库student_m中创建表,必须得先使用该数据库,我们使用use student_m;来使用该数据库。然后创建student表,student表里面包含id、sn、name、e_mail三个字段。此时的student表里面没有任何的值


2.3单行数据的全列插入

何为单行数据全列插入,就是一行一行的填入数据。填多少行取决于你。插入的数量必须和定义表的列的数量及顺序一致,格式为insert into 表名 values(字段1,字段n)

比如我要插入两条记录。

mysql> insert into student values (1001,10001,'Bob',NULl);
Query OK, 1 row affected (0.00 sec)

mysql> insert into student values (1002,10002,'Tom',null);
Query OK, 1 row affected (0.00 sec)

mysql> select * from student;
+------+-------+------+--------+
| id   | sn    | name | e_mail |
+------+-------+------+--------+
| 1001 | 10001 | Bob  | NULL   |
| 1002 | 10002 | Tom  | NULL   |
+------+-------+------+--------+
2 rows in set (0.00 sec)

 窗口显示为:

我们想要看表格的所有信息,可以使用select * from 表名;查询来看。注意,此查询仅限少量数据的表,在大量数据的表中不建议使用此方法查询,会造成数据的丢失,而且此方法执行效率低、可读性差


2.4多行数据的指定列插入

多行数据的指定根据你指定列数的数量来一行一行插入数据。格式为:insert into student (字段1,字段n) values (字段1,字段n);

比如我要插入两条记录,这两条记录我只插入前三个字段。那么()里面只能填三个数据,插入多少行也是取决于你。

mysql> insert into student (id,sn,name) values
    -> (1003,10003,'Mimi'),
    -> (1004,10004,'Py');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from student;
+------+-------+------+--------+
| id   | sn    | name | e_mail |
+------+-------+------+--------+
| 1001 | 10001 | Bob  | NULL   |
| 1002 | 10002 | Tom  | NULL   |
| 1003 | 10003 | Mimi | NULL   |
| 1004 | 10004 | Py   | NULL   |
+------+-------+------+--------+
4 rows in set (0.00 sec)

窗口显示为:

我们可以看到Mimi和Py分别在表后面插入进去了,e_mail没有给数据的话,它默认的是空(NULL)。


3、简单查询

上面我们讲到了select * from 表名;是查询表中所有信息。这就是一个简单的查询,下面我来讲解更多的简单查询。

我们首先来创建一个名为student_grade的成绩表:

mysql> create table student_grade(
    -> id int,
    -> name varchar(20),
    -> english decimal(3,1),
    -> math decimal(3,1),
    -> chinese decimal(3,1)
    -> );
Query OK, 0 rows affected (0.02 sec)
mysql> insert into student_grade (id,name,english,math,chinese) values
    -> (1,'Turr',55,66,76),
    -> (2,'Rorric',65,77,65),
    -> (3,'Coline',43,56,76),
    -> (4,'Bob',77,66,64),
    -> (5,'Tom',53,74,66);
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

 窗口显示为:


3.1全列查询

全列查询就是我们上方提到过的查询表的所有信息,格式为:select * from 表名;

比如我要查询名为student_grade的表:

mysql> select * from student_grade;
+------+--------+---------+------+---------+
| id   | name   | english | math | chinese |
+------+--------+---------+------+---------+
|    1 | Turr   |    55.0 | 66.0 |    76.0 |
|    2 | Rorric |    65.0 | 77.0 |    65.0 |
|    3 | Coline |    43.0 | 56.0 |    76.0 |
|    4 | Bob    |    77.0 | 66.0 |    64.0 |
|    5 | Tom    |    53.0 | 74.0 |    66.0 |
+------+--------+---------+------+---------+
5 rows in set (0.00 sec)

 窗口显示为:


3.2指定列查询

指定列查询,就是我想查询某一列或多列的数据。格式为:select 字段1,字段n from 表名;

比如我要查询student_grade表中的id,name,chinese这三个字段我可以这样做:

mysql> select id,name,chinese from student_grade;
+------+--------+---------+
| id   | name   | chinese |
+------+--------+---------+
|    1 | Turr   |    76.0 |
|    2 | Rorric |    65.0 |
|    3 | Coline |    76.0 |
|    4 | Bob    |    64.0 |
|    5 | Tom    |    66.0 |
+------+--------+---------+
5 rows in set (0.00 sec)

窗口显示为:

我们使用可以看到只有id、name、chinese这三个字段里面的数据显示出来了。


3.3查询字段为表达式

表达式包含一个字段,就是你查询的字段可以是表达式的形式。格式为:select 字段1,字段2+、-、*、/数字,字段n from 表名;

比如我查询student_grade中的id,name,english+10,我们可以这样做:

mysql> select id,name,english + 10 from student_grade;
+------+--------+--------------+
| id   | name   | english + 10 |
+------+--------+--------------+
|    1 | Turr   |         65.0 |
|    2 | Rorric |         75.0 |
|    3 | Coline |         53.0 |
|    4 | Bob    |         87.0 |
|    5 | Tom    |         63.0 |
+------+--------+--------------+
5 rows in set (0.00 sec)

窗口显示为:

我们可以看到,里面数据的值整体都增加了10,你可以翻到上面看看刚开始创建的表并与之对照。


表达式包含多个字段,通常用来求数据的总和或者使用多个数据增加。格式为:select 字段1+字段2+字段n from 表名;

mysql> select id,name,chinese + math + english from student_grade;
+------+--------+--------------------------+
| id   | name   | chinese + math + english |
+------+--------+--------------------------+
|    1 | Turr   |                    197.0 |
|    2 | Rorric |                    207.0 |
|    3 | Coline |                    175.0 |
|    4 | Bob    |                    207.0 |
|    5 | Tom    |                    193.0 |
+------+--------+--------------------------+
5 rows in set (0.00 sec)

 窗口显示为:

我们可以看到,chinese、math、english的值都加在了一起。


3.4给字段起别名

格式为:select 字段1,字段2,字段?+字段? 别名 from 表名;

上面我们讲到了,通过字段名的相加得出一些这些字段内数据的总数,但是如果这些字段的名字是表达式的形式就太冗长了,这时候我们可以给这些表达式起别名。比如我要将语文、数学、英语这三个字段的总和起名为sum:

mysql> select id,name,chinese + math + english sum from student_grade;
+------+--------+-------+
| id   | name   | sum   |
+------+--------+-------+
|    1 | Turr   | 197.0 |
|    2 | Rorric | 207.0 |
|    3 | Coline | 175.0 |
|    4 | Bob    | 207.0 |
|    5 | Tom    | 193.0 |
+------+--------+-------+
5 rows in set (0.00 sec)

 窗口显示为:

我们可以看到,起别名后原本的chinese+math+english变成了sum。


3.5去重DISTINCT

去重,就是某一列数据中的数据相同,我们可以用distinct命令来去重。达到该数据只剩下一个,格式为:select distinct 字段 from 表名;

比如我要将chinese里面的数据显示出来,并且不能出现相同数据:

--去重前
mysql> select chinese from student_grade;
+---------+
| chinese |
+---------+
|    76.0 |
|    65.0 |
|    76.0 |
|    64.0 |
|    66.0 |
+---------+
5 rows in set (0.00 sec)

--去重后
mysql> select distinct chinese from student_grade;
+---------+
| chinese |
+---------+
|    76.0 |
|    65.0 |
|    64.0 |
|    66.0 |
+---------+
4 rows in set (0.00 sec)

 窗口显示为:

我们可以看到chinese中的相同的两个76只剩下一个。


4、排序ORDER BY

格式为:select ... from table_name [where ...] order by column [asc\desc], [...];

  • ASC为升序(从小到大)
  • DESC为降序(从大到小)
  • ASC为默认

4.1升序排序

格式为:select 字段1,字段n from 表名 order by 字段;

查询同学name和chinese成绩,按chinese升序排序显示,order by默认为升序。因此字段后面不用加上asc。

mysql> select name,chinese from student_grade order by chinese;
+--------+---------+
| name   | chinese |
+--------+---------+
| Bob    |    64.0 |
| Rorric |    65.0 |
| Tom    |    66.0 |
| Turr   |    76.0 |
| Coline |    76.0 |
+--------+---------+
5 rows in set (0.00 sec)

窗口显示:

我们可以看到,整个表格按照chinese的升序排序。


4.2降序排序

降序就是使整个表格的数据随着某一字段降序显示,格式为:select 字段1,字段n from 表名 order by 字段 desc;

查询同学name和chinese成绩,按chinese降序排序显示 :

mysql> select name,chinese from student_grade order by chinese desc;
+--------+---------+
| name   | chinese |
+--------+---------+
| Turr   |    76.0 |
| Coline |    76.0 |
| Tom    |    66.0 |
| Rorric |    65.0 |
| Bob    |    64.0 |
+--------+---------+
5 rows in set (0.00 sec)

窗口显示:

我们也可以看到,整个表格的数据随着chinese降序排序。


4.3 使用表达式及别名排序

上面我讲到过,如何使用表达式查询。那么,需要将查询后的表达式按照升序或降序排列的话,我们只需要将order by 这些表达式就好了。比如我查询同学的总分,按照升序排列:

mysql> select name,chinese + math + english from student_grade
    -> order by chinese + math + english;
+--------+--------------------------+
| name   | chinese + math + english |
+--------+--------------------------+
| Coline |                    175.0 |
| Tom    |                    193.0 |
| Turr   |                    197.0 |
| Rorric |                    207.0 |
| Bob    |                    207.0 |
+--------+--------------------------+
5 rows in set (0.00 sec)

 窗口显示:

因为order by默认排序为升序asc,因此我们不需要加任何语句。


查询同学的总分,并降序排序。我们只需要在分号前加个desc(DESC)即可。

mysql> select name,chinese + math + english from student_grade
    -> order by chinese + math +english desc;
+--------+--------------------------+
| name   | chinese + math + english |
+--------+--------------------------+
| Rorric |                    207.0 |
| Bob    |                    207.0 |
| Turr   |                    197.0 |
| Tom    |                    193.0 |
| Coline |                    175.0 |
+--------+--------------------------+
5 rows in set (0.00 sec)

 窗口显示为:


使用别名查询同学的总分,并给总分取名为sum

mysql> select name,chinese + math + english sum from student_grade
    -> order by sum;
+--------+-------+
| name   | sum   |
+--------+-------+
| Coline | 175.0 |
| Tom    | 193.0 |
| Turr   | 197.0 |
| Rorric | 207.0 |
| Bob    | 207.0 |
+--------+-------+
5 rows in set (0.00 sec)

 窗口显示:

我们可以看到,sum的默认排序为升序。


4.4对多个字段排序

我们可以对多个字段进行排序,排序优先级随书写顺序查询每个同学各门成绩。比如我要依次按数学降序,英语升序,语文升序的方式显示。首先我们要select 字段1,字段2,字段n from 表名,然后在order by 字段1,字段2,字段n;字段后面升序还是降序由你决定。

mysql> select name,chinese,math,english from student_grade
    -> order by math desc,chinese,english;
+--------+---------+------+---------+
| name   | chinese | math | english |
+--------+---------+------+---------+
| Rorric |    65.0 | 77.0 |    65.0 |
| Tom    |    66.0 | 74.0 |    53.0 |
| Bob    |    64.0 | 66.0 |    77.0 |
| Turr   |    76.0 | 66.0 |    55.0 |
| Coline |    76.0 | 56.0 |    43.0 |
+--------+---------+------+---------+
5 rows in set (0.00 sec)

窗口显示:

我们看到是按照顺序来列举各个数据的,其中数学math也是降序排序。 


总结:

1、新增

1.1单行插入

insert into 表(字段1,...,字段n) values (valuel,...,value n);

1.2多行插入

insert into 表(字段1,...,字段n) values

(valuer,...),

(value2,...),

(value3,...);

2、查询

全列查询

select * from 表

指定列查询

select 字段1,字段2,... from 表

查询表达式

select 字段1+数字,字段2+字段3 from 表

起别名

select 字段1 别名1,字段2 别名2 from 表

去重distinct

select distinct 字段 from 表

排序order by

select * from 表 order by 排序字段


本期博客到这里就结束了,感谢您的阅读。

 Never Give Up


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux——匿名管道、命名管道及进程池概念和实现原理

目录 一.什么是匿名管道 二.如何使用匿名管道 (一).pipe原理 (二).pipe使用 三.命名管道概念及区别 (一).什么是命名管道 (二).与匿名管道的联系和区别 四.命名管道的使用 &…

Python——分支语句

1.bool 数据类型:真和假,只有两个值,就是True和False。 2.if语句使用的语法: 3.else语句:(同上) 4.比较运算符: a b:a和b是否相等 a ! b: a和b是否不相等 a…

【网络层】子网划分、无分类编址CIDR、构成超网、ARP协议

注:最后有面试挑战,看看自己掌握了吗 文章目录子网划分-----减少浪费IP----两级IP不够灵活-----变三级IP地址-----对外还是表现以前的网络号---------只是拿出部分主机号来做子网号子网划分实例-------对外不展示内部的子网划分----子网掩码---与运算---…

什么是【固件】?

文章目录一、软件 硬件 固件二、BIOS(Basic Input/output System)三、百度百科的解释四、固件的工作原理五、应用六、参考链接一、软件 硬件 固件 通常我们会将硬件和软件分开看待,二者协同工作为我们提供计算机的体验。硬件是摸得着的实体&…

[附源码]计算机毕业设计学生宿舍维修管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

假设检验(1)-假设检验的基本概念

数理统计的另一基本任务是对总体参数作某种假设,然后根据所得的样本,运用统计分析的方法来检验这一假设是否成立,从而作出接受或拒绝的决定. 这就是假设检验问题. 3. 1. 1 假设检验的基本思想和推理方法 我们先举一个…

C\C++刷题DAY5

目录 1.第一题 2.第二题 3.第三题 1.第一题 160. 相交链表 - 力扣(LeetCode) 思路分析: 看链表相不相交,是看链表的地址。把两个链表的地址一一比对,如有有相同的地址,那么相交,如果各不相同…

详解自监督发展趋势! 何恺明连获三年CVPR最高引用的秘诀是?

点击文末公众号卡片,不错过计算机会议投稿信息 0 引言 许多加了我好友的读者知道尼谟之前的研究方向是“自监督学习”,而最近我无意中发现,CVPR最近三年引用量最高的论文竟然都是来自监督学习领域的,且三篇论文的作者都包括Face…

(四)进程管理:进程基本概念

文章目录一. 进程的概念二. 进程的结构和特征1. 进程的结构2. 进程的特征三. 进程与【线程】1. 进程与线程的关系与区别2. 线程的实现方式1. 纯用户级方式(淘汰)2. 纯内核级方式3. 组合方式一. 进程的概念 进程(Process)&#xff…

C#,彩色图片转为灰度图的快速算法与源代码

彩色图转为灰度图的场景非常多,比如人工智能的训练与识别时,需要将彩色图片转为灰度图。 以下文字来自于: 彩色图像转灰度图像原理python_蜗牛的笨笨的博客-CSDN博客_python 彩色图转灰度图现在我们所接触到的图像绝大多数都是数字图像&…

[附源码]计算机毕业设计springboot疫情背景下社区互助服务系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

u-boot常用命令

u-boot常用命令查看u-boot所支持的命令查询命令u-boot版本环境变量板子相关信息环境变量操作内存操作网络操作EMMC和 SD卡操作FAT 格式文件系统操作EXT格式文件系统操作ubi格式文件系统操作boot 操作bootzbootmbootUMS 命令常用其他uboot环境变量:bootcmd和bootargs…

python基础语法15-网络编程理论

网络编程是指在程序中实现两台计算机之间的通信。 Python提供了大量的内置模块和第三方模块用于支持各种网络访问,而且Python语言在网络通信方面的优点特别突出,远远领先其他语言。 一、IP: 1.概念: IP:互联网协议地址(Internet Protocol Add…

CCNA-应试教育-思科网院-CCNAv7: Switching, Routing, and Wireless Essentials 交换、路由和无线基础。

CCNA-应试教育-思科网院-CCNAv7: Switching, Routing, and Wireless Essentials 交换、路由和无线基础。 拓扑 – SRWE 最终 PT 技能评估 (PTSA) 拓扑图这样连 题目 SRWE Final PT Skills Assessment (PTSA) A few things to keep in mind while co…

大淘营淘宝复制的“添加、删除、替换属性”功能如何使用?

一、添加属性添加属性填写的格式为“属性名称:属性值”,“”是添加的意思。举个例子,比如我要添加的属性为“AA”,属性值为“aa”,那么,在软件上需要填“AA:aa”。注:“:”是半角字符,中间不要有…

嵌入式 程序调试之gdb和gdbserver的交叉编译及使用

嵌入式 程序调试之gdb和gdbserver的交叉编译及使用 一、简述 记--交叉编译gdb、gdbserver并调试嵌入式程序。 gdb是功能非常强大的常用调试工具,可以直接下断点进行单步调试,是差错排错的利器。 常见三种不同使用场景的gdb: x86 pc端gdb(以下…

MyBatis ---- 自定义映射resultMap

MyBatis ---- 自定义映射resultMap1. resultMap处理字段和属性的映射关系2. 多对一映射处理a>级联方式处理映射关系b>使用association处理映射关系c>分布查询3. 一对多映射处理a>collectionb>分步查询1. resultMap处理字段和属性的映射关系 当实体类中的属性名…

一文详解数据链路相关技术

一文详解数据链路相关技术1.MAC地址2.共享介质型网络争用方式令牌传递3.非共享介质网络4.环路检测技术生成树方式源路由法5.VLAN1.MAC地址 MAC地址直译为媒体存取控制位址,也称为局域网地址(LAN Address),MAC位址,以太…

云服务器使用及Linux基本命令

文章目录前言一、Linux1.Linux发现版本2.Linux环境搭建方式云服务器使用终端软件连接Linux3.Linux基础命令(1)ls:列出该目录下的所有子目录与文件。(2)pwd:显示当前所在用户(3)cd :改…

终于来了

程序员求职简历,项目经验怎么写?免费修改简历、提供模板并内部推荐昨天我还在说"三年了,乌云还未散尽,仿佛若有光"。今天一大早,光就照进来了。深圳卫健委宣布公交、地铁、药店、公园、旅游景点等场所都不需…