数据库——DML
DDL(Data Manipulation Language)语句: 数据操纵语言,主要是对数据进行增加、删除、修改操作。
查询所有数据
select * from stu;
stu 是举例表表名;
添加(insert)修改(update)删除(delete)
添加
给指定列添加数据
insert into 表名(列名1,列名2,...) values(值1,值2,...);
insert into stu(id,name) values(1,'张三');
给全部列添加数据
insert into 表名 values(值1,值2,...);
举例
insert into stu(id,name,sex,birthday,score,email,tel,status) values(2,'李四','男',‘1999-11-11’,88.88.'lisi@itcast.cn','12341342532',1);
insert into stu values(2,'李四','男',‘1999-11-11’,8.88.'lisi@itcast.cn','12341342532',1);
如果给所有行添加数据,可以省略列名的列表
但是在真正开发过程中,不建议省略;省略的缺点:在只有数据的情况下难以确定数据所对应的内容,容易出错,且仅看代码难以理解代码含义,不易寻找错漏之处
Navicat有个美化sql的功能,将代码格式整洁化,便于添加注释等等,增强阅读性
批量添加数据
insert into 表名(列名1,列名2,...) values(值1,值2,...),(值1,值2,...),(值1,值2,...)
insert into 表名 values(值1,值2,...),(值1,值2,...),(值1,值2,...)
修改
update 表名 set 列名1=值1,列名2=值2,... [where 条件];
update stu set sex='女' where name =’张三‘;
update stu set birthday = '1999-12-12',score = 99.99 where name =’张三‘;将张三的生日改为1999-12-12,成绩改为99.99
注意:修改语句中如果不加条件,则将所有数据都修改
删除
delete from 表名 [where 条件];
注意:修改语句中如果不加条件,则将所有数据都修改
delete from stu where name =’张三‘;#删除张三记录
DQL
DQL(Data Query Language)语句:数据查询语言,主要是对数据进行查询操作。
基础查询
1.查询多个字段
select 字段列表 from 表名;
select * from 表名 ;#查询所有数据
2.去除重复记录
select distinct 字段列表 from 表名;
3.起别名
as:as 也可以省略
提前写好一张学生表
查询name 、age 这两列
select name,age from stu;
查询所有列的数据,列名的列表可以用*替代
select * from stu;
“”在实际开发过程中不要使用,在开发过程中,使用“”不利于添加注释,对于显示出来的表的内容不清楚,容易出现问题
查询地址信息
select address from stu;
有重复无用数据时,使用DISTINCT可以去除重复记录
select DISTINCT address from stu;
查询姓名,数学成绩,英语成绩
select name,math,english from stu;
select name,math as 数学成绩,english as 英语成绩 from stu;
条件查询
select 字段列表 from 表名 where 条件列表;
1.查询年龄大于20岁的学员信息
select * from stu where age > 20;
2.查询年龄大于等于20岁的学员信息
select * from stu where age >= 20;
3.查询年龄 大于等于20岁 并且 年龄小于30岁 的学员信息
select * from stu where age >= 20 && age <= 30;
select * from stu where age >= 20 and age <= 30;
select * from stu where age between 20 and 30;
上述三种效果等同
4.查询入学日期在‘1998-09-01’到‘1999-09-01’之间的学员信息
select * from stu where hire_date between '1998-09-01' and '1999-09-01';
5.查询年龄等于18岁的学员信息
select * from stu where age = 18;
6.查询年龄不等于18岁的学员信息
select * from stu where age != 18;
select * from stu where age <> 18;
7.查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于22岁的学员信息
select * from stu where age = 18 or age = 20 or age = 22;
select * from stu where age in (18,20,22);
8.查询英语成绩为 null 的学员信息
注意:null值的比较不能使用 = != 需要使用 is 或 is not
select * from stu where english is null;
select * from stu where english is not null;
模糊查询like
通配符:
1._:代表单个任意字符
2.%:代表任意个数字符
1.查询姓‘马’的学员信息;姓马,第一个字是马
select * from stu where name like '马%';
2.查询第二个字是‘花’的学员信息;第一个字不需要知道是什么,所以_,第二个字是花,之后有没有字无所谓
select * from stu where name like '_花%';
3.查询名字中包含‘德’德学员信息;只需要知道包含德,不需要知道德之前之后有没有其他的字,所以用%
select * from stu where name like '%德%';
排序查询
select 字段列表 from 表名 order by 排序字段名1[排序方式1],排序字段名2[排序方式2]...;
排序方式:
asc:升序排列(默认值)
desc:降序排列
1.查询学生信息,按照年龄升序排列
select * from stu order by age asc;
select * from stu order by age ;#等同效果
2.查询学生信息,按照数学成绩降序排列
select * from stu order by math desc;
3.查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列
select * from stu order by math desc,english asc;
注意:如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序
分组查询
聚合函数:将一列数据作为一个整体,进行纵向计算
聚合函数
select 聚合函数名(列名) from 表;
聚合函数分类:
count:统计数量
取值:1.主键:非空且唯一
2.:所有,一行数据只要有一个不为空,那么就能够统计出来;如果全为空,那么不用统计。在新版本中,写会计算速度最快的那一列,会拿到那一列,进行count(*)的统计
max:求最大值
min:求最小值
sum:求和
avg:求平均值
1.统计班级一共有多少个学生
select count(id) from stu;#count统计的列名不能为null,统计非空数据
2.查询数学成绩的最高分
select max(math) from stu;
3.查询数学成绩的最低分
select min(math) from stu;
4.查询数学成绩的总分
select sum(math) from stu;
5.查询数学成绩的平均分
select avg(math) from stu;
6.查询英语成绩的最低分
select min(english) from stu;#因为数据中,英语成绩有一行是null,查询出来最小值的结果不是null,而是其余数据中的最小值
注意:null值不参与所有聚合函数的运算,所以null值排除在外
select 字段列表 from 表名 [where 分组前条件限定] group by 分组字段名 [having 分组后条件过滤];
注意:分组后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
where 和 having 区别:
1.执行时机不一样:where是分组之前进行限定,不满足where条件,则不参与分组;而having是分组之后对结果进行过滤。
2.可判断的条件不一样:where不能对聚合函数进行判断;having可以
执行顺序:where > 聚合函数 > having
1.查询男同学和女同学各自的数学平均分
select sex,avg(math) from stu group by sex;#加上sex便于分辨男女生的各自平均分
#注意:分组后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
2.查询男同学和女同学各自的数学平均分,以及各自人数
select sex,avg(math),count(*) from stu group by sex;
3.查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组
select sex,avg(math),count(*) from stu where math > 70 group by sex;
4.查询男同学和女同学各系的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2
select sex,avg(math),count(*) from stu where math > 70 group by sex having count(*) > 2;
分页查询
select 字段列表 from 表名 limit 起始索引,查询条目数;
起始索引:从0开始
计算公式:起始索引=(当前页码-1)*每页显示的条数
tips:
1.分页查询limit是mysql数据库的方言
2.Oracle分页查询使用rownumber
3.sql server分页查询使用top
1.从0开始查询,查询3条数据
select * from stu limit 0,3;
2.每页显示3条数据,查询第一页数据
select * from stu limit 0,3;
3.每页显示3条数据,查询第2页数据
select * from stu limit 3,3;
4.每页显示3条数据,插叙第3页数据
select * from stu limit 6,3;