DML 增删改表中数据 重点!!!
一.添加数据
语法:insert into 表名(列名1,列名2,...列名n)values(值1,值2..值n)
注意事项:1.列名和值要一一对应。
2.除了数字,其他类型需要添加引号(单双都可以)引起来
2.如果表明后,不定义列名,则默认给所有列添加值
insert into 表名values(值1,值2..值n)
二.删除数据
语法:delete from 表名[where 条件]
delete from db1 where id=1
注意:1如果不加条件,则删除表中所有记录。
truncate table stu; --删除表,然后在创建一个一模一样的空表。
2.如果要删除记录,delete from 表名;不建议,有多少条记录就会执行多少次删除操作
truncate table表名; --删除表,然后在创建一个一模一样的空表。
三.修改数据
update 表名 set 列名1 = 值1,列名2 = 值2,...【where 条件
】
注意:如果不加条件,表中的所有的数据都会改变。 ******DQL查询表中的记录:select * from 表名;
DQL:查询语句
1.语法:select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定2.基础查询:
1.多个字段的查询
2.去除重复
3.计算列
4.起别名
SELECT * FROM student3; --查询学生三 *代表全部
SELECT NAME,age FROM student3;--只查询name和age
SELECT address FROM student3;--这样会造成有重复记录,去除重复结果集:
SELECT DISTINCT address FROM student3;--去除重复
--计算math和english分数之和
SELECT NAME,math,english,math + english FROM student3;
--如果有null参与运算,计算结果都是null,因此采用ifnull
SELECT NAME,math,english,math +IFNULL(english,0) FROM student3;
因为难看 所以可以把math +IFNULL(english,0)叫做总分,as也可以写空格
SELECT NAME,math,english,math +IFNULL(english,0) AS 总分 FROM student3;
3.条件查询
1.where语句后面跟条件
2.运算符
>、<、<=、>=、=、<> : <>在 SQL 中表示不等于,在 mysql 中也可以使用!= 没有==
BETWEEN...AND 在一个范围之内,如:between 100 and 200 相当于条件在 100 到 200 之间,包头又包尾
IN(集合) 集合表示多个值,使用逗号分隔
LIKE '张%' 模糊查询
IS NULL 查询某一列为 NULL 的值,注:不能写=NULL--查询年龄大于30岁 如果需要同时 可以在中间家&&或者and
SELECT * FROM student3 WHERE age >=30;
SELECT * FROM student3 WHERE age BETWEEN 20 AND 30;--查询20-30岁
SELECT * FROM student3 WHERE age = 20 OR age =22 OR age = 30;--查询年龄这些岁数 也可以这么写
SELECT * FROM student3 WHERE age IN (22,18,25);
SELECT * FROM student3 WHERE english IS NOT NULL;--不是0分的 --模糊查询 查询姓马的
SELECT * FROM student3 WHERE NAME LIKE '马%';
--查询姓名中第二个字是化的人
SELECT * FROM student3 WHERE NAME LIKE '_化%';
--查询姓名是三个字的人;
SELECT * FROM student3 WHERE NAME LIKE '___';--三个_
--查询姓名中包含马
SELECT * FROM student3 WHERE NAME LIKE '%马%';--%代表0或者多个_ 匹配一个字符DQL 查询语句:
1.排序查询
语法:order by 子句
order by 排序字段1 排序方式1,排序字段2 排序方式2,排序方式:
ASC:升序 默认的
DESC 降序
SELECT * FROM student3 ORDER BY math ASC;--默认升序 asc可以不输入
SELECT * FROM student3 ORDER BY math DESC;--降序
如果数学成绩排名,如果数学成绩一样,则按照英语成绩排名
SELECT * FROM student3 ORDER BY math ,english ASC;--先按数学 如果数学成绩相同时然后按英语;
只有第一方式相同的情况下 才会 进行第二方式 2.聚合函数:将一列数据作为一个整体,进行纵向的计算。就是列的纵向计算
1.count 计算个数
SELECT COUNT(NAME) FROM student3;--注意聚合函数的计算会排除NULL值,如果想解决就需要采用innull函数
SELECT COUNT(IFNULL(einglish,0) FROM student3;
2.max
3.min
4.sum
5.avg计算平均值 3.分组查询
1.语法:group by 分组字段;
2.注意:分组之后查询的字段 要么是分组字段 要么是分段函数
--按照性别分组,分别查询男女同学的平均分
SELECT sex,AVG(math) FROM student3 GROUP BY sex;--按照性别分组,分别查询男女同学的平均分,分别的人数
SELECT sex,AVG(math),COUNT(id) FROM student3 GROUP BY sex;
--按照性别分组,分别查询男女同学的平均分,分别的人数,低于70分不要
SELECT sex,AVG(math),COUNT(id) FROM student3 WHERE math >70 GROUP BY sex;
--按照性别分组,分别查询男女同学的平均分,分别的人数,低于70分不要,分组之后人数要大于2个人
SELECT sex,AVG(math),COUNT(id) FROM student3 WHERE math >70 GROUP BY sex HAVING COUNT(id) >2;
SELECT sex,AVG(math),COUNT(id) 人数 FROM student3 WHERE math >70 GROUP BY sex HAVING 人数 >2;where 和having区别:
where作用位置不同 where在分组之前进行限定,如果不满足条件,则不参与分组;having 在分组之后参与限定,如果不满足结果,则不会被查询出来。
2.where后不可以跟聚合函数,having可以进行聚合函数的判断 4.分页查询
语法:limit 开始的索引 ,每页查询的条数每页显示三条记录
SELECT * FROM student3 LIMIT 0,3;-- 第一页
SELECT * FROM student3 LIMIT 3,3;-- 第二页--公式:开始的索引 = (当前的页码-1)*每页显示的条数
limit分页是一个mysql“方言”,用来完成分页的 约束: 对 表中个 数据进行过限定,保证数据的正确性 有效性 完整性
分类:1.主键约束:primary key
2.非空约束:not null
3.唯一约束:unique null
4.外键约束:foreign非空约束:not null
CREATE TABLE stu1(
id INT,
NAME VARCHAR(20) NOT NULL -- name为非空约束
);
-- 删除name 的非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20);
--创建表之后,添加非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;3.唯一约束:unique null
创建表时,添加唯一约束
CREATE TABLE stu(
id int,
phone_numbei VARCHAR(20) UNIQUE-- 添加了唯一约束,但是null值时可以的
);
-- 删除唯一约束
ALTER TABLE stu DROP INDEX phone_numbei
ALTER TABLE stu MODIFY phone_numbei VARCHAR(20) UNIQUE;-- 在创建表后,添加唯一约束