数据库day02

数据库——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值的比较不能使用 = !=   需要使用 isis 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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值