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;-- 在创建表后,添加唯一约束