你可以了解世间万物,但追根溯源的唯一途径便是亲身尝试。——《心灵捕手》
前言:
大家好,我是拳击哥,今天给大家讲解的是mysql表GRUD操作中的新增数据、查询数据以及表中数据的排序、去重等。因篇幅过长,分为两期来讲解。
目录
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
转载:https://blog.csdn.net/weixin_64916311/article/details/128147414