DML:对表中数据的增删
DQL:对表中数据的查询
DML:
-- 创建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,'女','深圳',66,78,'1998-09-01'),
(3,'马斯克',55,'男','香港',66,78,'1997-09-01'),
(4,'六百',20,'女','南京',66,78,'1996-09-01'),
(5,'留情',20,'男','天津',66,78,'1995-09-01'),
(6,'刘德华',78,'男','北京',66,NULL,'1994-09-01'),
(7,'马靴有',22,'女','杭州',66,78,'1993-09-01'),
(8,'德玛西亚',12,'男','湖南',66,78,'1991-09-01');
UPDATE stu SET hire_date ='2002-6-11' where name='马云';
SELECT * FROM stu;-- 尽量不要使用*,因为无法看出想要查询哪个数据
desc stu;
DQL:
-- 基础查询========================
SELECT name,age FROM stu;
select address FROM stu;
-- DISTINCT关键字可以去重
SELECT DISTINCT address FROM stu;
-- 可以给想要查询的列起别名,使用as关键字
SELECT name,math as 数学成绩,english as 英语成绩 FROM stu;
模糊查询:关键字like
_一个随机字符
%至少一个随机字符
select * from 试题表 where 题干 like %英语一%;
-- 条件查询=======================
-- 年龄大于20的
SELECT * FROM stu where age>20;
-- 年龄大于等于20
SELECT * FROM stu where age>=20;
-- 查找年龄大于等于20并且年龄小于等于30
SELECT * FROM stu where age>=20 AND age<=30;
SELECT * FROM stu where age BETWEEN 20 and 30;
-- 查询入学日期到1998-1-1到1999-1-1
SELECT * FROM stu WHERE hire_date BETWEEN '1998-1-1' AND '1999-1-1';
-- 查找18岁
SELECT * FROM stu where age=20;
-- 查找不等于18岁
SELECT * FROM stu where age !=20;
SELECT * FROM stu where age <>20;
-- 查找年龄18 20 22的
SELECT * FROM stu where age=18 or 20 or 22;
SELECT * FROM stu where age in(18,20,22);
-- 注意:NULL值的比较不可以使用等号或者不等号,只能使用is null后者is not null
排序查询
show DATABASEs;-- 查询都有什么数据库
show tables;-- 查询当前数据库下面都有什么表
desc stu; -- 查询表结构
SELECT * FROM stu;
-- 修改表中数据
update stu set
-- 查询学生信息,按照升序
-- desc从大到小 asc从小到大(默认)
SELECT * from stu ORDER BY age desc;
-- 如果数学成绩一样,按照英语成绩进行查询
-- 多个条件进行排序查询的时候,如果前面的条件相同,才会由后面的条件判断
SELECT * from stu ORDER BY math,english asc;
分组查询
聚合函数
什么是聚合函数:将一列作为一个整体进行纵向计算
-- 统计班里面一共有多少个学生
SELECT * FROM stu;
SELECT COUNT(age) FROM stu; -- 统计的列名不可以为NULL,建议()里面写*,只要这一行有一个数据不为空,就可以统计出来
SELECT COUNT(*) FROM stu;
-- 查询数学成绩的最高分
SELECT MAX(math) FROM stu;
-- 查询数学成绩的最低分
SELECT MIN(math) FROM stu;
-- 查询数学成绩的平均分
SELECT AVG(math) FROM stu;
分组查询
-- 查询男同学和女同学个各自的数学平均分
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;
-- 查询男同学和女同学各自的数学平均分,低于60的不参与分组
SELECT sex,AVG(math),COUNT(*) FROM stu WHERE math >70 GROUP BY sex;
-- 查询男同学和女同学各自的数学平均分,低于60的不参与分组,分组之后人数需要大于两个
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;
-- 启始索引等于 (当前页码-1)*每页显示的条数
-- 每页显示三条数据,查询第一页数据
SELECT * FROM stu LIMIT 0,3;
-- 每页显示三条数据,查询第二页数据
SELECT * FROM stu LIMIT 3,3;
-- 每页显示三条数据,查询第三页数据
SELECT * FROM stu LIMIT 6,3;