提交 8a09c7fc 编写于 作者: 彭世瑜's avatar 彭世瑜

fix

上级 2868487d
......@@ -31,3 +31,9 @@
[表关系](blog/php-mysql/sql-relation.md)
[高级数据操作-新增数据](blog/php-mysql/sql-senior-add.md)
[高级数据操作-更新数据](blog/php-mysql/sql-senior-update.md)
[高级数据操作-删除数据](blog/php-mysql/sql-senior-delete.md)
[高级数据操作-查询数据](blog/php-mysql/sql-senior-select.md)
# 高级数据操作-删除数据
1、删除数据应该使用where进行条件控制
```sql
delete from 表名 where 条件;
```
2、删除数据可以使用limit来限制删除数量
```sql
delete from 表名 where 条件 limit 数量;
```
delete删除数据,无法重置auto_increment
要重置auto_increment,可以使用truncate
```sql
truncate 表名;
-- 等价于: drop + create
```
# 高级数据操作-查询数据
完整的查询指令
```sql
select 选项 字段列表
from 数据源
where 条件
group by 分组
having 条件
order by 排序
limit 限制;
```
## 1、select选项
处理查询到的结果
- all 默认值,表示保存所有记录
- distinct 去重,只保留一条(所有字段都相同认为重复)
```sql
create table my_select(
name varchar(10)
);
insert into my_select (name) values ('A'), ('A'), ('A'), ('B');
mysql> select all * from my_select;
+------+
| name |
+------+
| A |
| A |
| A |
| B |
+------+
mysql> select distinct * from my_select;
+------+
| name |
+------+
| A |
| B |
+------+
```
## 2、字段列表
多张表获取数据,可能存在不同表中有同名字段,需要使用别名alias
```sql
字段名 [as] 字段别名;
```
```sql
select distinct name as name1, name as name2 from my_select;
+-------+-------+
| name1 | name2 |
+-------+-------+
| A | A |
| B | B |
+-------+-------+
```
## 3、from数据源
为前面的查询提供数据
数据源只要是一个符合二维表结构的数据即可
### 3.1、单表数据
```sql
from 表名;
select * from my_select;
```
### 3.2、多表数据
基本语法
```sql
from 表名1, 表名2...;
```
```sql
mysql> select * from my_select;
+------+
| name |
+------+
| A |
| B |
+------+
2 rows in set (0.00 sec)
mysql> select * from my_student;
+----+--------+
| id | name |
+----+--------+
| 1 | 刘备 |
| 2 | 李四 |
| 3 | 王五 |
+----+--------+
3 rows in set (0.00 sec)
mysql> select * from my_select, my_student;
+------+----+--------+
| name | id | name |
+------+----+--------+
| A | 1 | 刘备 |
| B | 1 | 刘备 |
| A | 2 | 李四 |
| B | 2 | 李四 |
| A | 3 | 王五 |
| B | 3 | 王五 |
+------+----+--------+
6 rows in set (0.00 sec)
```
结果是两张表记录数据相乘,字段数拼接
本质:从第一张表取出一条记录,去拼凑第二张表所有记录,保留所有结果
笛卡尔积,会给数据库造成压力,尽量避免
### 3.3、动态数据
from后面不是一个实体表,而是一个从表中查询出来得到的二维结果表(子查询)
基本语法
```sql
from (select 字段列表 from 表名) as 别名
```
```sql
mysql> select * from (select * from my_student) as t1;
+----+--------+
| id | name |
+----+--------+
| 1 | 刘备 |
| 2 | 李四 |
| 3 | 王五 |
+----+--------+
```
group
having
order
limit
聚合函数
https://www.bilibili.com/video/BV1Vx411g7uJ?p=36&spm_id_from=pageDriver
# 高级数据操作-更新数据
1、通常一定是跟随条件更新
```sql
update 表名 set 字段名 = 新值 where 判断条件;
```
2、如果没有条件,是全表更新。可以使用limit来显示控制更新的数量
```sql
update 表名 set 字段名 = 新值 [ where 判断条件 ] limit 数量;
create table my_update(
id int primary key auto_increment,
name varchar(10)
);
insert into my_update (name) values ('A'), ('A'), ('A'), ('A');
mysql> select * from my_update;
+----+------+
| id | name |
+----+------+
| 1 | A |
| 2 | A |
| 3 | A |
| 4 | A |
+----+------+
update my_update set name = 'B' where name = 'A' limit 2;
mysql> select * from my_update;
+----+------+
| id | name |
+----+------+
| 1 | B |
| 2 | B |
| 3 | A |
| 4 | A |
+----+------+
```
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册