飞道的博客

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

425人阅读  评论(0)

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


前言:

大家好,我是拳击哥,今天给大家讲解的是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;来查看


  
  1. mysql > show databases;
  2. + --------------------+
  3. | Database |
  4. + --------------------+
  5. | information_schema |
  6. | mysql |
  7. | performance_schema |
  8. | sys |
  9. + --------------------+
  10. 4 rows in set ( 0.00 sec)

 窗口显示为:

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


2.1创建一个数据库

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

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


  
  1. mysql > create database student_m;
  2. Query OK, 1 row affected ( 0.00 sec)
  3. mysql > show databases;
  4. + --------------------+
  5. | Database |
  6. + --------------------+
  7. | information_schema |
  8. | mysql |
  9. | performance_schema |
  10. | student_m |
  11. | sys |
  12. + --------------------+
  13. 5 rows in set ( 0.00 sec)

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

 


2.2 创建一个表

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

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


  
  1. mysql > use student_m;
  2. Database changed
  3. mysql > create table student (
  4. - > id INT,
  5. - > sn int comment '学号',
  6. - > name varchar( 30) comment '姓名',
  7. - > e_mail varchar( 20) comment '邮箱'
  8. - > );
  9. 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)

比如我要插入两条记录。


  
  1. mysql > insert into student values ( 1001, 10001, 'Bob', NULl);
  2. Query OK, 1 row affected ( 0.00 sec)
  3. mysql > insert into student values ( 1002, 10002, 'Tom', null);
  4. Query OK, 1 row affected ( 0.00 sec)
  5. mysql > select * from student;
  6. + ------+-------+------+--------+
  7. | id | sn | name | e_mail |
  8. + ------+-------+------+--------+
  9. | 1001 | 10001 | Bob | NULL |
  10. | 1002 | 10002 | Tom | NULL |
  11. + ------+-------+------+--------+
  12. 2 rows in set ( 0.00 sec)

 窗口显示为:

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


2.4多行数据的指定列插入

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

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


  
  1. mysql > insert into student (id,sn,name) values
  2. - > ( 1003, 10003, 'Mimi'),
  3. - > ( 1004, 10004, 'Py');
  4. Query OK, 2 rows affected ( 0.00 sec)
  5. Records: 2 Duplicates: 0 Warnings: 0
  6. mysql > select * from student;
  7. + ------+-------+------+--------+
  8. | id | sn | name | e_mail |
  9. + ------+-------+------+--------+
  10. | 1001 | 10001 | Bob | NULL |
  11. | 1002 | 10002 | Tom | NULL |
  12. | 1003 | 10003 | Mimi | NULL |
  13. | 1004 | 10004 | Py | NULL |
  14. + ------+-------+------+--------+
  15. 4 rows in set ( 0.00 sec)

窗口显示为:

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


3、简单查询

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

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


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

 窗口显示为:


3.1全列查询

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

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


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

 窗口显示为:


3.2指定列查询

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

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


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

窗口显示为:

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


3.3查询字段为表达式

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

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


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

窗口显示为:

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


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


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

 窗口显示为:

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


3.4给字段起别名

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

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


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

 窗口显示为:

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


3.5去重DISTINCT

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

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


  
  1. --去重前
  2. mysql > select chinese from student_grade;
  3. + ---------+
  4. | chinese |
  5. + ---------+
  6. | 76.0 |
  7. | 65.0 |
  8. | 76.0 |
  9. | 64.0 |
  10. | 66.0 |
  11. + ---------+
  12. 5 rows in set ( 0.00 sec)
  13. --去重后
  14. mysql > select distinct chinese from student_grade;
  15. + ---------+
  16. | chinese |
  17. + ---------+
  18. | 76.0 |
  19. | 65.0 |
  20. | 64.0 |
  21. | 66.0 |
  22. + ---------+
  23. 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。


  
  1. mysql > select name,chinese from student_grade order by chinese;
  2. + --------+---------+
  3. | name | chinese |
  4. + --------+---------+
  5. | Bob | 64.0 |
  6. | Rorric | 65.0 |
  7. | Tom | 66.0 |
  8. | Turr | 76.0 |
  9. | Coline | 76.0 |
  10. + --------+---------+
  11. 5 rows in set ( 0.00 sec)

窗口显示:

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


4.2降序排序

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

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


  
  1. mysql > select name,chinese from student_grade order by chinese desc;
  2. + --------+---------+
  3. | name | chinese |
  4. + --------+---------+
  5. | Turr | 76.0 |
  6. | Coline | 76.0 |
  7. | Tom | 66.0 |
  8. | Rorric | 65.0 |
  9. | Bob | 64.0 |
  10. + --------+---------+
  11. 5 rows in set ( 0.00 sec)

窗口显示:

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


4.3 使用表达式及别名排序

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


  
  1. mysql > select name,chinese + math + english from student_grade
  2. - > order by chinese + math + english;
  3. + --------+--------------------------+
  4. | name | chinese + math + english |
  5. + --------+--------------------------+
  6. | Coline | 175.0 |
  7. | Tom | 193.0 |
  8. | Turr | 197.0 |
  9. | Rorric | 207.0 |
  10. | Bob | 207.0 |
  11. + --------+--------------------------+
  12. 5 rows in set ( 0.00 sec)

 窗口显示:

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


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


  
  1. mysql > select name,chinese + math + english from student_grade
  2. - > order by chinese + math +english desc;
  3. + --------+--------------------------+
  4. | name | chinese + math + english |
  5. + --------+--------------------------+
  6. | Rorric | 207.0 |
  7. | Bob | 207.0 |
  8. | Turr | 197.0 |
  9. | Tom | 193.0 |
  10. | Coline | 175.0 |
  11. + --------+--------------------------+
  12. 5 rows in set ( 0.00 sec)

 窗口显示为:


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


  
  1. mysql > select name,chinese + math + english sum from student_grade
  2. - > order by sum;
  3. + --------+-------+
  4. | name | sum |
  5. + --------+-------+
  6. | Coline | 175.0 |
  7. | Tom | 193.0 |
  8. | Turr | 197.0 |
  9. | Rorric | 207.0 |
  10. | Bob | 207.0 |
  11. + --------+-------+
  12. 5 rows in set ( 0.00 sec)

 窗口显示:

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


4.4对多个字段排序

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


  
  1. mysql > select name,chinese,math,english from student_grade
  2. - > order by math desc,chinese,english;
  3. + --------+---------+------+---------+
  4. | name | chinese | math | english |
  5. + --------+---------+------+---------+
  6. | Rorric | 65.0 | 77.0 | 65.0 |
  7. | Tom | 66.0 | 74.0 | 53.0 |
  8. | Bob | 64.0 | 66.0 | 77.0 |
  9. | Turr | 76.0 | 66.0 | 55.0 |
  10. | Coline | 76.0 | 56.0 | 43.0 |
  11. + --------+---------+------+---------+
  12. 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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场