操作数据-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中,以下是查询语句中各个关键字的执行顺序:
-
FROM
:指定要从哪个表中检索数据。 -
WHERE
:使用条件来筛选需要满足的行。 -
GROUP BY
:将结果集按指定的列进行分组。 -
HAVING
:使用条件来筛选分组后的结果。 -
SELECT
:选择要检索的列。 -
ORDER BY
:按指定的列进行排序。 -
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];
-
==注意事项==
-
分组之后查询的字段:分组字段、聚合函数
-
where
和having
的区别?-
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) * 每页显示的条数