MySQL数据库—数据操作(増、删、改、查)


我们可以对数据库中的数据表进行一些操作:插入数据、删除数据、更新数据、查找数据

一、插入数据:insert into

可以使用INSERT INTO语句来插入数据

现有如下一个数据表格:

mysql> desc student;
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| id    | int(11)  | NO   | PRI | NULL    | auto_increment |
| name  | char(20) | YES  |     | NULL    |                |
| sex   | char(5)  | YES  |     | NULL    |                |
| score | int(11)  | YES  |     | NULL    |                |
+-------+----------+------+-----+---------+----------------+
4 rows in set (0.48 sec)

具体插入数据的方法有如下几种:

1. 全列插入

格式如下:

insert into table_name values(value1,value2,...valueN);

例:在student表中插入数据

mysql> insert into student values(0,'叶无道','男',98);
Query OK, 1 row affected (0.01 sec)

注意:主键列id是自动增长的,在全列插入时通常需要使用0来进行占位,插入成功以后以实际数据为准;当然id列也可以自己写入,但要求不能与之前表中的id重复

2. 缺省插入

格式如下:

insert into table_name(1,2,……) values(1,2,……);

使用缺省插入在student表中插入数据:

mysql> insert into student(name,sex,score) values('慕容雪痕','女',95);
Query OK, 1 row affected (0.01 sec)
3. 同时插入多条数据

格式如下:

insert into table_name values(...),(...)...;

例:同时在student表中插入数据

mysql> insert into student values(0,'苏惜水','女',80),(4,'燕清舞','女',85);
Query OK, 2 rows affected (0.04 sec)
Records: 2  Duplicates: 0  Warnings: 0
二、删除数据:delete from

可以使用DELETE FROM语句来删除数据表中的数据

格式如下:

delete from 表名 [where 条件]; 

说明:

  1. 可以使用where子句指定删除满足条件的数据
  2. 没有指定where子句,数据表中的所有数据将被删除,所以要慎用

例:删除student表中id=4的数据

mysql> delete from student where id=4;
Query OK, 1 row affected (0.06 sec)
三、更新数据:update

我们需要修改或更新数据表中的数据时,可以使用UPDATE语句来操作

格式如下:

update 表名 set1=1,2=2,…… where 条件;

说明:

  1. 可以同时更新一个或多个字段
  2. 需要更新数据表中指定行的数据时可以使用WHERE 子句
  3. 没有指定条件则全部列都修改,慎用

例:将id=5的数据修改为:name=陈破虏,sex=男

mysql> update student set name='陈破虏',sex='男' where id=5;
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0
四、查找数据:select

可以使用SELECT语句来查询数据

1. 基本语法

格式如下:

select 列名 from 表名;

说明:

  1. from关键字后面是表名,表示数据来源于这张表
  2. select后面写表中的列名,如果是*表示在结果集中显示表中的所有列
  3. 如果要查询多个列,之间使用逗号分隔
  4. 在select后面的列名部分,可以使用as为列名起别名,这个别名显示在结果集中

例1:查询student表中所有的列

mysql> select * from student;
+----+--------------+------+-------+
| id | name         | sex  | score |
+----+--------------+------+-------+
|  1 | 叶无道       ||    98 |
|  2 | 慕容雪痕     ||    95 |
|  3 | 苏惜水       ||    80 |
|  4 | 燕清舞       ||    85 |
|  5 | 陈破虏       ||    75 |
|  6 | 叶凡         ||    82 |
+----+--------------+------+-------+
6 rows in set (0.00 sec)

例2:查询student表中name和score

mysql> select name,score from student;
+--------------+-------+
| name         | score |
+--------------+-------+
| 叶无道       |    98 |
| 慕容雪痕     |    95 |
| 苏惜水       |    80 |
| 燕清舞       |    85 |
| 陈破虏       |    75 |
| 叶凡         |    82 |
+--------------+-------+
6 rows in set (0.00 sec)

例3:查询student表中的score,并为其取个别名

mysql> select score as 颜值 from student;
+--------+
| 颜值   |
+--------+
|     98 |
|     95 |
|     80 |
|     85 |
|     75 |
|     82 |
+--------+
6 rows in set (0.00 sec)
2. 条件查询

可以使用WHERE子句有条件地从表中选取数据

格式如下:

select 列名 from 表名 where 条件;

我们可以使用比较运算符和逻辑运算符进行条件判断

例1:查询student表中score值大于等于90的所有数据

mysql> select * from student where score >= 90;
+----+--------------+------+-------+
| id | name         | sex  | score |
+----+--------------+------+-------+
|  1 | 叶无道       ||    98 |
|  2 | 慕容雪痕     ||    95 |
+----+--------------+------+-------+
2 rows in set (0.00 sec)

注意:不等于,我们使用 !=或<>

例2:查询student表中score值大于等于85的女生

mysql> select * from student where score >= 85 and sex = '女';
+----+--------------+------+-------+
| id | name         | sex  | score |
+----+--------------+------+-------+
|  2 | 慕容雪痕     ||    95 |
|  4 | 燕清舞       ||    85 |
+----+--------------+------+-------+
2 rows in set (0.00 sec)
3. 模糊查询:like

在WHERE子句中使用LIKE子句可以进行一个模糊查询

注意:

  1. 使用%表示任意多个任意字符
  2. 使用_表示一个任意字符

例1:查询student表中姓叶的学生

mysql> select * from student where name like '叶%';
+----+-----------+------+-------+
| id | name      | sex  | score |
+----+-----------+------+-------+
|  1 | 叶无道    ||    98 |
|  6 | 叶凡      ||    82 |
+----+-----------+------+-------+
2 rows in set (0.00 sec)

例2:查询student表中姓叶且名字为两个字的学生

mysql> select * from student where name like '叶_';
+----+--------+------+-------+
| id | name   | sex  | score |
+----+--------+------+-------+
|  6 | 叶凡   ||    82 |
+----+--------+------+-------+
1 row in set (0.00 sec)
4. 范围查询:in和between…and…

(1) in:表示在一个非连续的范围内

例:查询student表中score值为85,95的所有数据

mysql> select * from student where score in (85,95);
+----+--------------+------+-------+
| id | name         | sex  | score |
+----+--------------+------+-------+
|  2 | 慕容雪痕     ||    95 |
|  4 | 燕清舞       ||    85 |
+----+--------------+------+-------+
2 rows in set (0.00 sec)

(2) between…and…: 表示在一个连续的范围内

例:查询student表中score值从90到100的所有数据

mysql> select * from student where score between 90 and 100;
+----+--------------+------+-------+
| id | name         | sex  | score |
+----+--------------+------+-------+
|  1 | 叶无道       ||    98 |
|  2 | 慕容雪痕     ||    95 |
+----+--------------+------+-------+
2 rows in set (0.00 sec)
5. 空判断:is null和is not null

(1) is null:判断空

例:查询student表中score值为空的所有数据

mysql> select * from student where score is null;
Empty set (0.00 sec)

(2) is not null:判断非空

例:查询student表中score值不为空的所有数据

mysql> select * from student where score is not null;
+----+--------------+------+-------+
| id | name         | sex  | score |
+----+--------------+------+-------+
|  1 | 叶无道       ||    98 |
|  2 | 慕容雪痕     ||    95 |
|  3 | 苏惜水       ||    80 |
|  4 | 燕清舞       ||    85 |
|  5 | 陈破虏       ||    75 |
|  6 | 叶凡         ||    82 |
+----+--------------+------+-------+
6 rows in set (0.00 sec)

注意:null与""是不同

6. 优先级

优先级:() > 比较运算符 > not > and > or

建议:尽可能多的使用小括号

例:查询student表中score值大于90或者姓燕的女生

mysql> select * from student where (score > 90 or name like '燕%') and sex = '女';
+----+--------------+------+-------+
| id | name         | sex  | score |
+----+--------------+------+-------+
|  2 | 慕容雪痕     ||    95 |
|  4 | 燕清舞       ||    85 |
+----+--------------+------+-------+
2 rows in set (0.01 sec)
7. 聚合(count,max,min,sum,avg)

为了快速得到统计数据,提供了5个聚合函数:

聚合函数含义
count()表示计算总行数,括号中可以写*和列名
max(列)表示求此列的最大值
min(列)表示求此列的最小值
sum(列)表示求此列的和
avg(列)表示求此列的平均值

例1:查询student表的学生数

mysql> select count(*) from student;
+----------+
| count(*) |
+----------+
|        6 |
+----------+
1 row in set (0.00 sec)

例2:查询score值最大的数据

mysql> select max(score) from student;
+------------+
| max(score) |
+------------+
|         98 |
+------------+
1 row in set (0.00 sec)
8. 排序:order by

格式如下:

select * from 表名 order by1 asc|desc,2 asc|desc...;

说明:

  1. 将数据按照列1进行排序,如果某些列1的值相同,则按照列2进行排序
  2. 默认按照从小到大的顺序排序
  3. asc升序
  4. desc降序

例:按照score值对student表进行排序

mysql> select * from student order by score desc;
+----+--------------+------+-------+
| id | name         | sex  | score |
+----+--------------+------+-------+
|  1 | 叶无道       ||    98 |
|  2 | 慕容雪痕     ||    95 |
|  4 | 燕清舞       ||    85 |
|  6 | 叶凡         ||    82 |
|  3 | 苏惜水       ||    80 |
|  5 | 陈破虏       ||    75 |
+----+--------------+------+-------+
6 rows in set (0.07 sec)

例:按照name对student表进行升序排序

mysql> select * from student order by name,id desc;
+----+--------------+------+-------+
| id | name         | sex  | score |
+----+--------------+------+-------+
|  6 | 叶凡         ||    82 |
|  1 | 叶无道       ||    98 |
|  2 | 慕容雪痕     ||    95 |
|  4 | 燕清舞       ||    85 |
|  3 | 苏惜水       ||    80 |
|  5 | 陈破虏       ||    75 |
+----+--------------+------+-------+
6 rows in set (0.00 sec)
9. 分组:group by

按照字段分组,表示此字段相同的数据会被放到一个集合中。分组后,只能查询出相同的数据列,对于有差异的数据列无法显示在结果集中,可以对分组后的数据进行统计,做聚合运算

(1) 对单个字段进行分组

mysql> update student set score=85 where id=3;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select sex,count(*) from student group by sex;
+------+----------+
| sex  | count(*) |
+------+----------+
||        3 |
||        3 |
+------+----------+
2 rows in set (0.00 sec)

(2) 对多个字段进行分组

mysql> select sex,score,count(*) from student group by sex,score;
+------+-------+----------+
| sex  | score | count(*) |
+------+-------+----------+
||    85 |        2 |
||    95 |        1 |
||    75 |        1 |
||    82 |        1 |
||    98 |        1 |
+------+-------+----------+
5 rows in set (0.00 sec)

交换字段顺序对记录进行分组,结果如下:

mysql> select score,sex,count(*) from student group by score,sex;
+-------+------+----------+
| score | sex  | count(*) |
+-------+------+----------+
|    75 ||        1 |
|    82 ||        1 |
|    85 ||        2 |
|    95 ||        1 |
|    98 ||        1 |
+-------+------+----------+
5 rows in set (0.00 sec)

(3) 与having结合在一起使用

使用having字句可以对分组后的数据进行筛选

mysql> select max(score),sex from student group by sex;
+------------+------+
| max(score) | sex  |
+------------+------+
|         95 ||
|         98 ||
+------------+------+
2 rows in set (0.02 sec)

mysql> select max(score),sex from student group by sex having max(score)>95;
+------------+------+
| max(score) | sex  |
+------------+------+
|         98 ||
+------------+------+
1 row in set (0.00 sec)

where与having的区别:

  1. where是对from后面指定的表进行筛选,属于对原始数据的筛选
  2. having是对group by的结果进行筛选
10. 分页:limit

limit子句可以被用于强制select语句返回指定的记录数

格式如下:

#count = page_num
#start = (page - 1) * page_num
select * from 表名 limit start,count;

注意:start索引从0开始

例如:

mysql> select * from student limit 0,3;
+----+--------------+------+-------+
| id | name         | sex  | score |
+----+--------------+------+-------+
|  1 | 叶无道       ||    98 |
|  2 | 慕容雪痕     ||    95 |
|  3 | 苏惜水       ||    85 |
+----+--------------+------+-------+
3 rows in set (0.00 sec)

mysql>  select * from student limit 3,3;
+----+-----------+------+-------+
| id | name      | sex  | score |
+----+-----------+------+-------+
|  4 | 燕清舞    ||    85 |
|  5 | 陈破虏    ||    75 |
|  6 | 叶凡      ||    82 |
+----+-----------+------+-------+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值