Notes 操作数据-DML语句

本文详细介绍了MySQL中的DML语句,包括如何使用INSERT插入数据(单值、多值、指定字段和省略主键),DELETE删除数据(全表和有条件),UPDATE修改数据,以及SELECT查询语句的完整语法、分组、排序、分页和聚合函数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

操作数据-DML语句

使用命令窗口登录数据库

显示登陆 mysql -u用户名 -proot密码

隐士登录 mysql -u 用户名 -p

添加数据

语法

insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n); 
几种添加形式
​
INSERT INTO student(`id`,`name`,`birthday`) VALUES (1,'李四1','2018-11-11');
​
-- 添加数据 一一对应
insert INTO emp3 ( id, NAME, sex, job, salary )VALUES ( NULL, 'rose', "女", '测试', 4000 );
​
-- 添加数据 省略主键
insert INTO emp3 ( NAME, sex, job, salary )VALUES ( 'yiyi', "女", 'php', 24000 );
​
-- 添加数据 指定字段
insert INTO emp3 ( NAME, sex, salary )VALUES ( 'yiyan', "女", 90000 );
​
-- 添加数据 省略字段,字段全写
insert into emp3 values( NULL, 'tom', "男", '抓老jerry', 1000);
​
-- 批量添加
INSERT INTO stu1(id,name,birthday) VALUES
(1,'李四1','2020-11-11'),
(2,'李四2','2020-11-11'),
(3,'李四3','2020-11-11'),
(4,'李四4','2020-11-11');

注意

除了数字类型,其他都需要用引号引起来 (单双引号都可以) ,建议使用单引号

删除数据

语法

delete from 表名 [where 条件]  

注意事项

==如果不加条件,则删除表中所有记录。==

delete from student; -- 删除所有的记录

==如果要删除所有记录==

delete from 表名;      -- 不推荐使用。有多少条记录就会执行多少次删除操作
truncate table 表名;   -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表

修改数据

语法

update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];

注意事项

如果不加任何条件,则会将表中所有记录全部修改。

DQL语句

查询完整语法

select
    字段列表
from
    表名列表
where
    条件列表
group by
    分组字段
having
    分组之后的条件
order by
    排序
limit
    分页限定

注意

在MySQL中,以下是查询语句中各个关键字的执行顺序:

  1. FROM:指定要从哪个表中检索数据。

  2. WHERE:使用条件来筛选需要满足的行。

  3. GROUP BY:将结果集按指定的列进行分组。

  4. HAVING:使用条件来筛选分组后的结果。

  5. SELECT:选择要检索的列。

  6. ORDER BY:按指定的列进行排序。

  7. LIMIT:设置检索结果的行数限制。

请注意,这只是查询语句中关键字的执行顺序的一般规则。 如果在实际中碰到特殊情况,可能不会按照此顺序执行

select特点

  • * select 可以查询 表中的字段 表达式  常量值  函数
    * 查询出的结果是一个虚拟表 不影响实际表中的数据

简单查询

查询所有记录

语法:
    SELECT * FROM 表名;

查询单个或多个记录

-- 查看表中学生对应的数学成绩
select name,math from stu;

条件查询

-- 查看jack的所有成绩
select * from stu where name = 'jack'

对查询后的数据进行改动,并不会队员表格数据有影响

-- 给所有学生数据成绩加10分
select id , name , math + 10 from stu;

去重复

语法:
    对单一项去重
    select distinct 字段名1,FROM 表名;
    
    对多项去重
    语法:
    select distinct 字段名1,字段名2... FROM 表名;
    注意
    必须保证去重的多项是完全一样的才能进行去重

Ifnull

ifnull(表达式1,表达式2)

ifnull(参数1,参数2) 
​
如果参数1有值,就走参数1 ,如果参数1为null,就走参数2
SELECT name, chinese + ifnull(english,0) + math FROM stu;

为什么使用ifnull,因为 null参与运算结果一定为null

别名

可以是列别名 也可以是表别名

列别名
select id as '学号' from stu;
表别名
select s.id ,s.name ,s.chinese from stu s;

注意

在起别别名时注意

​
​
在MySQL查询语句中,给列名起别名时,根据以下情况需要考虑是否加引号:
​
情况一:列名不包含特殊字符或关键字时,不需要加引号。例如,给列名"age"起别名为"Age",不需要加引号:
SELECT age AS Age FROM table_name;
```
​
情况二:列名包含特殊字符或关键字时,需要加引号来区分别名和特殊字符。特殊字符可能包括空格、逗号、点号等。例如,给列名"first name"起别名为"First Name",需要加引号:
```
SELECT `first name` AS `First Name` FROM table_name;
```
​
情况三:列名大小写敏感时,需要加引号来确保别名的大小写与原始列名一致。例如,给列名"username"起别名为"UserName",需要加引号:
```
SELECT `username` AS `UserName` FROM table_name;
```
​
总结起来,一般来说,为了避免歧义和错误,建议给列名起别名时都加上引号,尤其是当列名包含特殊字符、关键字或大小写敏感时。
​

使用别名注意

在使用列名别名时,不需要在别名周围加引号。别名只是为了提供一个更友好、易读或易记的名称,它们不需要像列名一样在使用时加上引号。

条件查询

运算符

运算符说明
> 、< 、<= 、>= 、= 、<> !=<>在 SQL 中表示不等于,在 mysql 中也可以使用!= 没有==
BETWEEN...AND在一个范围之内,小的范围在前 大的在外面
IN( 集合)集合表示多个值,使用逗号分隔
IS NULL 不为空 is not null查询某一列为 NULL 的值,注:不能写=NULL
LIKE模糊查询 占位符: _:单个任意字符 %:多个任意字符
AND 或 &&与,SQL 中建议使用前者,后者并不通用。
OR 或 ||
NOT 或 !

DQL高级查询

排序查询

语法

SELECT 字段名 FROM 表名 [WHERE条件] ORDER BY 字段名 [ASC|DESC];

ASC: 升序,默认值

DESC: 降序

注意事项

如果有多个排序条件的话,后面的排序要在前面的基础上进行排序

聚合(集)函数

函数sql语法

SELECT 聚合函数(列名) FROM 表名;

常见聚合函数

聚合函数说明
count(*) | count(主键)计算表中的总记录数
max计算最大值
min计算最小值
sum计算和
avg计算平均值

分组查询

语法

SELECT 字段 1,字段 2... FROM 表名 [where条件] GROUP BY 分组字段 [HAVING 条件] [order by];

  • ==注意事项==

    • 分组之后查询的字段:分组字段、聚合函数

    • wherehaving的区别?

      • where 在分组之前进行过滤。having在分组之后进行过滤。

      • where 后不可以跟聚合函数,having可以进行聚合函数。

      • having 不能脱离 group by ,如果脱离group by 不能直接使用,一般与group by 一块使用

      • 换句话说,WHERE子句用于过滤行,而HAVING子句用于过滤组

    • where: 操作的数据源: 原始表

    • having: 操作的数据源: 结果集

分页查询

语法

SELECT * 字段列表 [as 别名] FROM 表名 [WHERE 子句] [GROUP BY 子句][HAVING 子句][ORDER BY 子句][LIMIT 子句];

limit语法格式

LIMIT offset,length;
  • offset:起始行数,从 0 开始计数,如果省略,默认就是 0

  • length:显示的条数

计算公式

开始的索引 = (当前的页码 - 1) * 每页显示的条数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值