MySQL数据库基础知识总结(二)

DML:

给全部列添加数据的话就可以不用写列名了,但是最好还是写上比较好。 

          

 

 

DML用来操作数据,修改、添加、删除 

若不加where,则全部修改

  

DQL:

 

 

#如果存在就删除表stu
drop table if exists stu;
#创建表stu 
create table stu(
id int,
name varchar(20),
age int,
sex varchar(5),
address varchar(100),
math double (5,2),
english double(5,2),
hire_date date
);
#向表中插入数据
insert into stu (id,name ,age,sex,address, math ,english,hire_date)
values (1,'马云', 55,'男', '杭州',66,78,'1995-09-01'),
(2,'马化腾',45,'女','深圳',98,87,'1998-09-01'),
(3,'马斯克',55,'男','香港',56,77,'1999-09-02'),
(4,'柳白',20,'女', '湖南', 76,65,'1997-09-05'),
(5,'柳青',20,'男','湖南',86,Null,'1998-09-01'),
(6,'刘德华',57, '男','香港',99,99,'1998-09-01'),
(7,'张学友',22,'女','香港',99,99,'1998-09-01'),
(8,'德玛西亚',18,'男', '南京',56,65,'1994-09-02');
查询表中的数据
SELECT * from stu 


#基础查询
#查询name 和age两列
select name, age from stu
#查询所有列的成绩,可以用*来代替,但大部分公司不让使用。
select * from stu ;
#产生了重复地址
select address from stu
#去除重复记录
select distinct address from stu 
#查询姓名,数学成绩,英语成绩
select name,math as 数学成绩,english as 英语成绩 from stu



 #条件查询
#查询年龄大于20岁的学员信息
select * from stu where age>20
#查询年龄大于等于20岁并且小于等于30岁的学员信息(三种形式)
select * from stu where age>=20 and age <=30
select * from stu where age>=20 && age <=30
select * from stu where age between 20 and 30
#查询入学日期在'1998-09-01'到'1999-09-01'之间的学员信息
select * from stu where hire_date between '1998-09-01' and '1999-09-01';
#查询年龄等于18岁的学员信息
select * from stu  where age =18 
#查询年龄不等于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 is not null  
select * from stu where english is null
#模糊查询like
#通配符
#_:代表单个任意字符
#%:代表任意个数字符
#1.查询姓马的学员信息
select * from stu where name like '马%'
#2.查询第二个字是带'花'的学员信息
select * from stu where name like '_化%'
#查询名字中带'德'的学员信息
select * from stu where name like '%德%'

 #排序方式
#asc 升序排列(默认)
#desc 降序排列
#查询学生信息,按照年龄升序排列
select * from stu order by age 
#按照数学成绩降序排列
select * from stu order by math desc 
#按照数学成绩降序排列,如果相同,就按照英语成绩升序排序
select * from  stu order by math desc ,english asc;

SELECT * FROM `stu`
#聚合函数
#count;统计数量
		#1.主键
		#2.*
#统计有多少个学生
select count(id) from stu #count统计的列名不能有null 
select count(*) from stu 
#查询数学成绩的最高分
select max(math) from stu  
#查询数学成绩的最低分
select min(math) from stu 
#查询数学成绩的总分
select sum(math) from stu
#查询数学成绩的平均分
select avg(math) from stu 
#查询英语成绩的最低分,#null值不参与运算
select min(english) from stu 

count,原本就是一列一列的计算,查询所有数据,但数据中不能有null,否则会统计不上那一个数据,最后结果就会减1, 建议用*,当一行中有一个数据就会被统计上,若一行中一个数据也没有就不会被统计上。

null值不参与所有聚合函数的运算 

#查询男同学和女同学的各自的数学平均分
select sex, avg(math) from stu group by sex 
#注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无意义,比如多查询了一个名字,但算的是平均分,要名字是没有什么用的。
select name, 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个的。这就会导致男同学的的成绩不存在了,男生大于70的就两个,就是分组后加了一个限制,人数必须大于二
select sex,avg(math),count(*) from stu where math >70 group by sex having count(*)>2


#select 字段列表 from 表名 limit 起始索引,查询条目数
select * from stu
#从0开始查询,查询三条消息
select * from stu limit 0,3
#每页显示三条数据,查询第一页数据
select * from stu limit 0,3
#每页显示三条数据,查询第二页数据
select * from stu limit 3,3
#每页显示三条数据,查询第三页数据
select * from stu limit 6,3
#动态显示(当前页码减一)*每页显示的条数

上面的3改成6

起始索引=(当前页码减一)*每页显示的条数

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值