0


【MySQL】MySQL中表的增删改查——(基础篇)(超详解)

前言:

🌟🌟本期讲解关于MySQL中CDUD的基础操作,希望能帮到屏幕前的你。

🌈上期博客在这里:http://t.csdnimg.cn/fNldO

🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客

📚️1.内容简介

• 本期目标:(CRUD) Create, Retrieve,Update,Delete,即增加数据,修改数据,删除数据,查询数据;

• 注意在SQL语句中可以使用(--加空格+注解)来实现表示说明解释;

• 本期的重点是关于数据库表的查询内容,小编会注重讲解,以及本期的CRUD是基础操作,下期小编会进行CRUD的进阶操作;

📚️2.新增数据

2.1创建表

代码如下:

mysql> create table student(
    -> id int,name varchar(10),
    -> chinese decimal(3,1),
    -> math decimal(3,1),
    -> english decimal(3,1));
Query OK, 0 rows affected (0.01 sec)

注意:这里的decimal的后面括号是3长度,小数点后面1长度,这里的创建表小编就不再过多赘述了。

2.2非指定插入

SQL执行语句:insert into 表名 values(值,值,值......);

代码实例如下:

mysql> insert into student values(1,'孙悟空',66,77,88);
Query OK, 1 row affected (0.00 sec)

注意:这里的数据值的插入应该和上述创建表的列名因该一一对应,否则会发生报错。

2.3指定列插入

SQL执行语句:insert into 表名 (列名,列名....)values (值,值....);

代码实例如下:

mysql> insert into student(id,name) values(2,'唐三藏');
Query OK, 1 row affected (0.00 sec)

** 注意:这里加了指定列进行插入后,要按照指定的列进行插入,其余的列默认为NULL。**

2.4插入多行数据

SQL执行语句:insert into 表名 values(值,值...),(值,值...)....;

代码实例如下:

mysql> insert into student values(3,'猪八戒',67,56,87),
(4,'沙悟净',57,99,67.5),
(5,'白龙马',87,92,76);
Query OK, 3 rows affected (0.00 sec)

这里每行数据结束后,要用逗号分隔开来。

一般来说,在插入数据时,就用插入多行数据的操作,因为MySQL是服务器--客户端的程序,每次进行插入时都要进行数据的响应到客户端,所以一次性插入所有数据是提高效率的操作。

📚️3.查询数据(重点)

3.1全列查询

SQL执行语句:select * from 表名;

mysql> select * from student;
+------+-----------+---------+------+---------+
| id   | name      | chinese | math | english |
+------+-----------+---------+------+---------+
|    1 | 孙悟空    |    66.0 | 77.0 |    88.0 |
|    2 | 唐三藏    |    NULL | NULL |    NULL |
|    3 | 猪八戒    |    67.0 | 56.0 |    87.0 |
|    4 | 沙悟净    |    57.0 | 99.0 |    67.5 |
|    5 | 白龙马    |    87.0 | 92.0 |    76.0 |
+------+-----------+---------+------+---------+

注意:在全列查询中这里的( * )可以说是代表全部的列,但是全列查询是一个危险的操作,因为当数据太多时,会造成拥堵,尤其是在线上客户端时,会造成“拥堵”的情况,而使服务器挂掉。

所以在以后公司生产环境数据库中药谨慎使用;

3.2指定列查询

和上述的指定的列进行插入的理解差不多,都是查询或者增加指定的列,对指定的列进行操作。

SQL执行语句:select 列名,列名... from 表名;

代码实例如下:

mysql> select id,name from student;
+------+-----------+
| id   | name      |
+------+-----------+
|    1 | 孙悟空    |
|    2 | 唐三藏    |
|    3 | 猪八戒    |
|    4 | 沙悟净    |
|    5 | 白龙马    |
+------+-----------+
5 rows in set (0.00 sec)

**注意:这里的指定列名是和插入数据不一样,这不需要括号。 **

3.3表达式查询

表达式查询即在对列进行查询的时候可以对列进行计算:“+,-,*,/”;

SQL执行语句:select 表达式 from 表名;

实例代码如下:

mysql> select id,name,chinese+math+english from student;
+------+-----------+----------------------+
| id   | name      | chinese+math+english |
+------+-----------+----------------------+
|    1 | 孙悟空    |                231.0 |
|    2 | 唐三藏    |                 NULL |
|    3 | 猪八戒    |                210.0 |
|    4 | 沙悟净    |                223.5 |
|    5 | 白龙马    |                255.0 |
+------+-----------+----------------------+

注意:

• 这里的运算是列与列之间的运算。

• 在SQL语句中NULL参加的任何运算都是NULL。

• 这里的数据时数据库服务器进行的临时数据的查询不会影响到服务器原始的数据。

3.4带别名的查询

SQL执行语句:select 表达式 as 别名 from 表名;

代码实例如下:

mysql> select id,name,chinese+math+english as total from student;
+------+-----------+-------+
| id   | name      | total |
+------+-----------+-------+
|    1 | 孙悟空    | 231.0 |
|    2 | 唐三藏    |  NULL |
|    3 | 猪八戒    | 210.0 |
|    4 | 沙悟净    | 223.5 |
|    5 | 白龙马    | 255.0 |
+------+-----------+-------+
5 rows in set (0.00 sec)

可以看到这里的三列数据之和变成了总分这一列;

这里的as是可以省去的,但是小编是不建议省去的,第一是为了代码的可读性,第二是方便代码的编写,知道每个代码代表的什么~~~

注意:别名的汉语意思是为了用来表示比较复杂的表达式,方便阅读代码~~~

3.5去重查询

这里的distinct修饰的列,当有重复出现的数据时,会删去之一;

SQL执行语句:select distinct 列名 from 表名;

代码实例如下:

mysql> select id,name,math from student;
+------+-----------------+------+
| id   | name            | math |
+------+-----------------+------+
|    1 | 孙悟空          | 77.0 |
|    2 | 唐三藏          | NULL |
|    3 | 猪八戒          | 56.0 |
|    4 | 沙悟净          | 99.0 |
|    5 | 白龙马          | 92.0 |
|    6 | 女儿国国王      | 77.0 |
+------+-----------------+------+
6 rows in set (0.00 sec)

mysql> select distinct math from student;
+------+
| math |
+------+
| 77.0 |
| NULL |
| 56.0 |
| 99.0 |
| 92.0 |
+------+

这里可以看到单独判定重复时,可以删除其中一个77,但是当我们判定多个列时:

mysql> select distinct id,name,math from student;
+------+-----------------+------+
| id   | name            | math |
+------+-----------------+------+
|    1 | 孙悟空          | 77.0 |
|    2 | 唐三藏          | NULL |
|    3 | 猪八戒          | 56.0 |
|    4 | 沙悟净          | 99.0 |
|    5 | 白龙马          | 92.0 |
|    6 | 女儿国国王      | 77.0 |
+------+-----------------+------+

并没有删除第六项女儿国国王这项;

注意:

在进行去重查询时,判定列为一项时,如果这一列存在相同的数据,那么既删除其中一个;

若判定为多个列时,就要同时满足每个其中一行与另一行完全相同才可以进行去重,否则不去重;

3.6 查询时进行排序

SQL执行语句:select 列名,列名... from 表名 order by 列名 asc/desc;

代码实例如下:

mysql> select id,name,chinese from student order by chinese desc;
+------+-----------------+---------+
| id   | name            | chinese |
+------+-----------------+---------+
|    5 | 白龙马          |    87.0 |
|    3 | 猪八戒          |    67.0 |
|    6 | 女儿国国王      |    67.0 |
|    1 | 孙悟空          |    66.0 |
|    4 | 沙悟净          |    57.0 |
|    2 | 唐三藏          |    NULL |
+------+-----------------+---------+

这里小编用的是desc代表从上到下为降序排序,asc代表升序排序;

注意:

• 当我们没有规定按照某个排序规则进行排序时,会默认为asc升序排序;

• order by后面的列代表排序按照这里列进行排序,即这个列是排序的基准数据列;

• 这里的排序任然是针对临时数据进行排序的,不会对mysql服务器原始数据造成影响;

• 这里的排序也可以针对表达式(可以加入别名)进行排序;

• 指定多个列进行排序时,越靠近order by优先级越高,当排序时存在相同的数据时,则按照指定列下一级进行排序;

以下就是针对表达式加别名进行升序排序:

mysql> select id,name,chinese+math+english as total from student order by total ;
+------+-----------------+-------+
| id   | name            | total |
+------+-----------------+-------+
|    2 | 唐三藏          |  NULL |
|    3 | 猪八戒          | 210.0 |
|    4 | 沙悟净          | 223.5 |
|    1 | 孙悟空          | 231.0 |
|    6 | 女儿国国王      | 233.0 |
|    5 | 白龙马          | 255.0 |
+------+-----------------+-------+

当有多个列进行排序时:

mysql> select id,name,math,english from student order by math,english desc;
+------+-----------------+------+---------+
| id   | name            | math | english |
+------+-----------------+------+---------+
|    2 | 唐三藏          | NULL |    NULL |
|    3 | 猪八戒          | 56.0 |    87.0 |
|    8 | 二郎神          | 77.0 |    90.0 |
|    6 | 女儿国国王      | 77.0 |    89.0 |
|    1 | 孙悟空          | 77.0 |    88.0 |
|    7 | 玉皇大帝        | 77.0 |    70.0 |
|    5 | 白龙马          | 92.0 |    76.0 |
|    4 | 沙悟净          | 99.0 |    67.5 |
+------+-----------------+------+---------+

这里的设置就是先按照math进行升序排序,排列完成后按照desc进行降序排序(注意这里的降序排序是在math成绩相同时,math相同的进行降序排序);

3.7条件查询

SQL执行语句:select 列名 from 表名 where 条件;

以下是条件表:

** 1.大于,小于,等于**

代码实例:

mysql> select id,name,math from student where math<80;
+------+-----------------+------+
| id   | name            | math |
+------+-----------------+------+
|    1 | 孙悟空          | 77.0 |
|    3 | 猪八戒          | 56.0 |
|    6 | 女儿国国王      | 77.0 |
|    7 | 玉皇大帝        | 77.0 |
|    8 | 二郎神          | 77.0 |
+------+-----------------+------+
5 rows in set (0.00 sec)

mysql> select id,name,math from student where math=77;
+------+-----------------+------+
| id   | name            | math |
+------+-----------------+------+
|    1 | 孙悟空          | 77.0 |
|    6 | 女儿国国王      | 77.0 |
|    7 | 玉皇大帝        | 77.0 |
|    8 | 二郎神          | 77.0 |
+------+-----------------+------+

这里小编只列举了两个运算符:意思是数学小于80的同学,和数学等于77的同学;

2.and与or

mysql> select id,name,math,english from student where math>60 or english>80
    -> ;
+------+-----------------+------+---------+
| id   | name            | math | english |
+------+-----------------+------+---------+
|    1 | 孙悟空          | 77.0 |    88.0 |
|    3 | 猪八戒          | 56.0 |    87.0 |
|    4 | 沙悟净          | 99.0 |    67.5 |
|    5 | 白龙马          | 92.0 |    76.0 |
|    6 | 女儿国国王      | 77.0 |    89.0 |
|    7 | 玉皇大帝        | 77.0 |    70.0 |
|    8 | 二郎神          | 77.0 |    90.0 |
+------+-----------------+------+---------+
mysql> select id,name,math,english from student where math>60 and english>80;
+------+-----------------+------+---------+
| id   | name            | math | english |
+------+-----------------+------+---------+
|    1 | 孙悟空          | 77.0 |    88.0 |
|    6 | 女儿国国王      | 77.0 |    89.0 |
|    8 | 二郎神          | 77.0 |    90.0 |
+------+-----------------+------+---------+

and代表数学大于60并且英语成绩大于80的数据;

or代表数学成绩大于60,或者英语成绩大于80的数据;

3.between and

代码实例:

mysql> select id,name,math from student where math between 60 and 90;
+------+-----------------+------+
| id   | name            | math |
+------+-----------------+------+
|    1 | 孙悟空          | 77.0 |
|    6 | 女儿国国王      | 77.0 |
|    7 | 玉皇大帝        | 77.0 |
|    8 | 二郎神          | 77.0 |
+------+-----------------+------+

这里的between and代表数学成绩在60到90之间,这里的区间是闭区间;

4.in离散区间

代码实例:

mysql> select id,name,math from student where math in(93,92,99,56);
+------+-----------+------+
| id   | name      | math |
+------+-----------+------+
|    3 | 猪八戒    | 56.0 |
|    4 | 沙悟净    | 99.0 |
|    5 | 白龙马    | 92.0 |
+------+-----------+------+

这里in代表的是离散区间,当数学成绩等于括号里的内容时就进行打印;

5.like模糊区间

这的%代指任意个任意字符;

这里的_代指的一个任意字符;

代码实例:

mysql> select id,name from student where name like '孙%';
+------+-----------+
| id   | name      |
+------+-----------+
|    1 | 孙悟空    |
+------+-----------+

注意‘孙%’代表孙子开头,‘%孙%’代表内容包含孙,‘%孙’代表以孙结尾;

5.null的判断

代码实例:

mysql> select id,name,chinese,english from student where chinese is null;
+------+--------------+---------+---------+
| id   | name         | chinese | english |
+------+--------------+---------+---------+
|    2 | 唐三藏       |    NULL |    NULL |
|    9 | 红孩儿       |    NULL |    NULL |
|   10 | 金池长老     |    NULL |    98.0 |
+------+--------------+---------+---------+
3 rows in set (0.00 sec)

mysql> select id,name,chinese,english from student where chinese <=> english;
+------+-----------+---------+---------+
| id   | name      | chinese | english |
+------+-----------+---------+---------+
|    2 | 唐三藏    |    NULL |    NULL |
|    9 | 红孩儿    |    NULL |    NULL |
+------+-----------+---------+---------+
2 rows in set (0.00 sec)

注意:这里的"is null"代表的这一列,而"<=>"代表两边代表的数据相等,这里比“=”可以多判断一个null;

3.8分页查询

SQL执行语句:select 列名 from 表名 limit 页数 (offset 页数);

代码实例:

mysql> select id,name,chinese,math,english from student limit 3;
+------+-----------+---------+------+---------+
| id   | name      | chinese | math | english |
+------+-----------+---------+------+---------+
|    1 | 孙悟空    |    66.0 | 77.0 |    88.0 |
|    2 | 唐三藏    |    NULL | NULL |    NULL |
|    3 | 猪八戒    |    67.0 | 56.0 |    87.0 |
+------+-----------+---------+------+---------+

这里表示只显示三行数据,加入offest之后就从offest 指定的第几个数据+1开始查询;

例如显示7,8,9行时:

mysql> select id,name,chinese,math,english from student limit 3 offset 6;
+------+--------------+---------+------+---------+
| id   | name         | chinese | math | english |
+------+--------------+---------+------+---------+
|    7 | 玉皇大帝     |    56.0 | 77.0 |    70.0 |
|    8 | 二郎神       |    58.0 | 77.0 |    90.0 |
|    9 | 红孩儿       |    NULL | 99.0 |    NULL |
+------+--------------+---------+------+---------+

这里主要运用在显示数据给客户端时,数据过多从而进行分页的操作。当然这里也可以加入排序操作,小编就不在演示了;

📚️4.修改数据

SQL执行语句:update 表名 set 列名=值 where 条件

代码实例:

mysql> update student set english=66 where name='孙悟空';
Query OK, 1 row affected (0.00 sec)
mysql> select * from student limit 3;
+------+-----------+---------+------+---------+
| id   | name      | chinese | math | english |
+------+-----------+---------+------+---------+
|    1 | 孙悟空    |    66.0 | 77.0 |    66.0 |
|    2 | 唐三藏    |    NULL | NULL |    NULL |
|    3 | 猪八戒    |    67.0 | 56.0 |    87.0 |
+------+-----------+---------+------+---------+

如上图:此时的孙悟空的英语成绩就为66了。

当修改多个列时:

mysql> update student set english=80,math=80 where name='白龙马';
Query OK, 1 row affected (0.00 sec)

此时就能够进行多个列修改;

注意:如果update 后面不写任何的条件就表示对所有数据进行修改;

📚️5.删除数据

SQL执行语句:delete from 表名 where 条件;

代码实例:

mysql> delete from student where name='红孩儿';
Query OK, 1 row affected (0.00 sec)

这里就是代表删除名字是红孩儿的一行;

注意:

• 这里的删除表示的是删除一行数据,而不是一个数据;

• 当没有条件时,就会删除整张表的内容,但是表还在,而用drop 时就是数据和表这个框架• 一起删除。

📚️6.总结

💬💬本期小编主要讲解了关于数据库表的CRUD的操作,即增加数据,查询数据,修改数据和删除数据,每种操作的SQL语句,都做了罗列,并且附上代码方便小伙伴们学习了解;

🌅🌅🌅~~~~最后希望与诸君共勉,共同进步!!!


** 💪💪💪以上就是本期内容了, 感兴趣的话,就关注小编吧。**

** 😊😊 期待你的关注~~~**


本文转载自: https://blog.csdn.net/GGBond778/article/details/142023286
版权归原作者 GGBondlctrl 所有, 如有侵权,请联系我们删除。

“【MySQL】MySQL中表的增删改查——(基础篇)(超详解)”的评论:

还没有评论