SQL-DML、DQL查询数据

1 DML
DML主要是对数据进行增(insert)删(delete)改(update)操作。
1.1 添加数据
-  给指定列添加数据 INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…);
-  给全部列添加数据 INSERT INTO 表名 VALUES(值1,值2,…);
-  批量添加数据 INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…; -- 给所有列添加数据,列名的列表可以省略的 INSERT INTO 表名 VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
1.2 修改数据
- 修改表数据
UPDATE 表名 SET 列名1=值1,列名2=值2,… [WHERE 条件] ;
注意:
- 修改语句中如果不加条件,
则将所有数据都修改!- 像上面的语句中的中括号,表示在写sql语句中可以省略这部分
-  练习 -  将张三的性别改为女 update stu set sex = '女' where name = '张三';
-  将张三的生日改为 1999-12-12 分数改为99.99 update stu set birthday = '1999-12-12', score = 99.99 where name = '张三';
-  注意:如果update语句没有加where条件,则会将表中所有数据全部修改! update stu set sex = '女';
 
-  
1.3 删除数据
-  删除数据 DELETE FROM 表名 [WHERE 条件] ;
-  练习 -- 删除张三记录 delete from stu where name = '张三'; -- 删除stu表中所有的数据 delete from stu;
2 DQL
2.1 基础查询
-  查询多个字段 SELECT 字段列表 FROM 表名; SELECT * FROM 表名; -- 查询所有数据 但不建议使用
-  去除重复记录( DISTINCT)SELECT DISTINCT 字段列表 FROM 表名;
-  起别名( AS)AS: AS 也可以省略 但字段名与别名中间至少一个空格
2.2 条件查询 ( WHERE )
-  语法 SELECT 字段列表 FROM 表名 WHERE 条件列表;
-  条件 条件列表可以使用以下运算符 符号 功能 > 大于 < 小于 >= 大于等于 <= 小于等于 = 等于 <> 或 != 不等于 BETWEEN … AND … 在某个范围之内(都包含) IN(…) 多选一 LIKE 占位符 模糊查询 _单个任意字符%多个任意字符IS NULL 是 NULL IS NOT NULL 不是 NULL AND 或 &&并且 OR 或 ||或者 NOT 或 ! 非,不是 
- 练习
-  查询年龄大于20岁的学员信息 select * from stu where age > 20;
-  查询年龄大于等于20岁 并且 年龄 小于等于 30岁 的学员信息 select * from stu where age >= 20 && age <= 30; select * from stu where age >= 20 and age <= 30;上面语句中 &&和and都表示并且的意思。建议使用and。也可以使用 between … and 来实现上面需求 select * from stu where age BETWEEN 20 and 30;
-  查询年龄不等于18岁的学员信息 select * from stu where age != 18; select * from stu where age <> 18;
-  查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于22岁的学员信息 select * from stu where age = 18 or age = 20 or age = 22; select * from stu where age in (18,20 ,22);
-  查询英语成绩为 null的学员信息 null值的比较不能使用 = 或者 != 。需要使用 is 或者 is not select * from stu where english = null; -- 这个语句是不行的 select * from stu where english is null; select * from stu where english is not null;
2.3 模糊查询
模糊查询使用
like关键字,可以使用通配符进行占位:(1)
_: 代表单个任意字符(2)
%: 代表任意个数字符
-  查询姓’马’的学员信息 select * from stu where name like '马%';
-  查询第二个字是’花’的学员信息 select * from stu where name like '_花%';
-  查询名字中包含 ‘德’ 的学员信息 select * from stu where name like '%德%';
2.4 排序查询 ( ORDER BY )
-  语法 SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;
-  排序方式 - ASC : 升序排列 (默认值)
- DESC : 降序排列
 注意: 
 如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序
-  练习 -  查询学生信息,按照年龄升序排列 select * from stu order by age ;
-  查询学生信息,按照数学成绩降序排列 select * from stu order by math desc ;
-  查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列 select * from stu order by math desc , english asc ;
 
-  
2.5 聚合函数
-  概念 将一列数据作为一个整体,进行纵向计算。 
-  聚合函数分类 函数名 功能 count(列名)统计数量(一般选用不为null的列) max(列名)最大值 min(列名)最小值 sum(列名)求和 avg(列名)平均值 
-  语法 SELECT 聚合函数名(列名) FROM 表;
-  练习 -  统计班级一共有多少个学生 select count(id) from stu;上面语句根据某个字段进行统计,如果该字段某一行的值为null的话,将不会被统计。所以可以在count(*) 来实现。* 表示所有字段数据,一行中也不可能所有的数据都为null,所以建议使用 count(*) select count(*) from stu;
-  查询数学成绩的最高分 select max(math) from stu;
 
-  
2.6 分组查询( GROUP BY )
-  语法 SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义 
-  where和having区别- 执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。
- 可判断的条件不一样:where 不能对聚合函数进行判断,having 可以。
 
-  练习 -  查询男同学和女同学各自的数学平均分 select sex, avg(math) from stu group by sex;
-  查询男同学和女同学各自的数学平均分,以及各自人数 select sex, avg(math),count(*) from stu group by sex;
-  查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组 select sex, avg(math),count(*) from stu where math > 70 group by sex;
-  查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的 select sex, avg(math),count(*) from stu where math > 70 group by sex having count(*) > 2;
 
-  
2.7 分页查询( LIMIT )
-  语法 SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查询条目数;注意: 上述语句中的起始索引是从0开始 
-  起始索引计算公式: 起始索引 = (当前页码 - 1) * 每页显示的条数
-  练习 -  从0开始查询,查询3条数据 select * from stu limit 0 , 3;
-  每页显示10条数据,查询第1页数据 select * from stu limit 0 , 10; select * from stu limit (1-1)*10 , 10;
-  每页显示10条数据,查询第2页数据 select * from stu limit 10 , 10; select * from stu limit (2-1)*10 , 10;
-  每页显示10条数据,查询第3页数据 select * from stu limit 20 , 10; select * from stu limit (3-1)*10 , 10;
 
-  



















