1.查询全表数据
写法1:
SELECT * FROM 表名;
讯享网
写法2:
讯享网select 字段名称1, 字段名称2, ... 字段名称n from 表名;
写法3:给表起别名,同时给字段起别名,as可以省略
select 关键字段1 AS'别名1', 关键字段2 AS'别名2', ... 关键字段n AS'别名n' from 表名 AS'别名';
查询指定字段
讯享网select 关键字段1, 关键字段2, 关键字段 from 表名;
2.冗余数据去掉
select distinct 关键字段 from 表名;
3.查询时,可以将关键字段为整数类型进行求和
讯享网select 关键字段1, 关键字段2, (关键字段3+关键字段4), ... from 表名; 如果关键字段的值为null,进行数据运算时,需要给他赋一个期望值,ifnull(字段名称,期望值) select 关键字段1, 关键字段2, (关键字段3+ifnull(关键字段4,0)), ... from 表名;
4.带条件查询
-- select指定字段名称 from 表名 where 条件;
-- where 后面可以使用 赋值运算符=,比较运算符<;<=,>,>=,!=
-- 查询关键字段大于某个值的记录 select 关键字段1, 关键字段2 ... from 表名 where 关键字段>值; -- mysql里面判断某个条件不等于,<>(不等于) --查询关键字段不等于某个值的记录 select 关键字段1, 关键字段2 ... from 表名 where 关键字段<>值;
-- where后面跟多个条件,并列条件或或者的条件
-- 并列条件
讯享网-- and 值1<关键字段的值<值2的记录 select 关键字段1, 关键字段2 ... from 表名 where 关键字段>值1 and 关键字段<值2; -- && 值1<关键字段的值<值2的记录 select 关键字段1, 关键字段2 ... from 表名 where 关键字段>值1 && 关键字段<值2; -- between and --关键字段的值在值1和值2之间的记录 select 关键字段1, 关键字段2 ... from 表名 where 关键字段 between 值1 and 值2;
-- 或条件
-- || 关键字段的值=值1或者=值2的记录 select * from 表名 where 关键字段=值1 || 关键字段=值2; -- or关键字段的值=值1或者=值2的记录 select * from 表名 where 关键字段=值1 or 关键字段=值2; -- in 关键字段的值=值1或者=值2的记录 select * from 表名 where 关键字段 in( 值1 , 值2);
-- where条件后面可以跟某个字段为null或者部位null的格式
讯享网-- 关键字段=null的记录 select * from 表名 where 关键字段 is null; -- 关键字段!=null的记录 select * from 表名 where 关键字段 is not null;
5.模糊查询
关键字like
select 指定字段列表 from 表名 where 字段名称 like '%字符%';
-- 需求:模糊查询所有姓为马的学生所有信息 SELECT * FROM student3 WHERE NAME LIKE '%马%' ; -- 需求:查询出姓名是两个字符的学生的所有信息 -- where 条件后面 字段名称 like '__' ; SELECT * FROM student3 WHERE NAME LIKE '__' ; -- 需求:模糊查询 学生姓名中第二个字是化的学生所有信息 SELECT * FROM student3 WHERE NAME LIKE '%_化%'; -- 需求:查询学生姓名是否三个字符的人 SELECT * FROM student3 WHERE NAME LIKE '___' ;
6.聚合函数查询
-- 语法 select 聚合函数(字段名称) from 表名;
讯享网-- count(字段名称):查询当前表的记录数 -- 一般非业务字段 id,如果业务字段的有些值null,数据存在漏洞的! select count(字段名称) from 表名; -- sum(字段名称):求和,针对某列字段值进行求和(整数) select sum(字段名称) from 表名; -- avg(字段名称):平均分函数 select avg(字段名称) from 表名; --max(字段名称):最大值函数 select max(字段名称) from 表名; -- min(字段名称):最小值函数 select min(字段名称) from 表名;
-- 复杂查询和聚合函数一块使用
-- 条件查询嵌套聚合函数,数学成绩大于平均分的记录 SELECT * FROM student3 WHERE math > (SELECT AVG(math) FROM student3) ;
7.排序查询
-- 关键字order by
--语法:select 字段列表 from 表名 order by 字段名称 排序规则
--排序规则:asc:升序(默认值) desc:降序
讯享网-- 数学成绩升序排序 select * from student order by math asc; -- 英语成绩降序排序 select * from student order by english desc;
-- 多个字段排序
-- 语法:select 字段列表 from 表名 order by 字段名称1 排序规则1 ,字段名称2 排序规则2 ;
-- 需求:查询数学成绩降序,英语成绩是升序的所有学生信息
-- 如果数学成绩相同,按照英语成绩排序规则进行操作
-- 数学成绩降序排序,英语成绩升序排序 select * from student order by math desc,english asc;
8.字符编码格式
show variables like '%character%';
set character_set_client=gbk;
9.分组查询
分组查询的时候,使用select可以查询出分组的字段
select 字段列表(包括字段分组) from 表名 group by 分组字段名称;
按照性别分组,计算出他们组的数学平均分
select sex '性别',avg(math) '数学平均分' from student group by sex;
group by和where一块使用
--where 条件必须置于group by 之前,先满足条件,才能分组
-- group by的后面不能使用聚合函数
10.筛选having
-- having和group by:having 后面可以使用聚合函数,而且group by 不能使用聚合函数
-- where 在前面,下来group by,再是having筛选
数学成绩不大于70分的人不参与分组,筛选出总人数大于2的一组
select sex '性别' ,avg(math) '数学平均分',count(id) '总人数' from student
where math>70 group by sex having count(id)>2;
11.分页查询limit
-- select 字段列表 from 表名 limit 起始行数,每页显示的条数;
-- 起始行数=(当前页码-1)*每页显示的条数
已知参数:每页显示条数3条,查询第一页的数据
select * from student limit 0,3;
-- 第二页数据
select * from student limit 3,,3;
作业:
讯享网USE ee_2204_02; CREATE TABLE student( id INT, -- id编号 NAME VARCHAR(20), -- 姓名 chinese INT, -- 语文 english INT, -- 英语 math INT -- 数学 ); INSERT INTO student(id,NAME,chinese,english,math) VALUES(1,'行哥',89,78,90); INSERT INTO student(id,NAME,chinese,english,math) VALUES(2,'潘金莲',67,53,95); INSERT INTO student(id,NAME,chinese,english,math) VALUES(3,'凤姐',87,78,77); INSERT INTO student(id,NAME,chinese,english,math) VALUES(4,'旺财',88,98,92); INSERT INTO student(id,NAME,chinese,english,math) VALUES(5,'白小黑',82,84,67); INSERT INTO student(id,NAME,chinese,english,math) VALUES(6,'白小黄',55,85,45); INSERT INTO student(id,NAME,chinese,english,math) VALUES(7,'范蹦蹦',75,65,30); -- 查询表中所有学生的信息 SELECT* FROM student; -- 查询表中所有学生的姓名和英语成绩 SELECT NAME,english FROM student; -- 过滤表中重复数据(去重关键字distinct) SELECT DISTINCT english FROM student; -- 统计每个学生的总分 SELECT id '编号', NAME '姓名', (chinese+english+math)'总分' FROM student; -- 总分数上加上10分特长分 SELECT id '编号', NAME '姓名', (chinese+english+math+10)'总分' FROM student; -- 使用别名表示学生分数 SELECT s.`id` '编号', s.`name` '姓名', s.`chinese`'语文', s.`english` '英语', s.`math` '数学', (chinese+english+math+10)'总分' FROM student s; -- 查询姓名为行哥的学生成绩 SELECT * FROM student WHERE NAME='行哥'; -- 查询英语成绩大于90分的同学 SELECT * FROM student WHERE english>90; -- 查询总分大于200分的所有同学 SELECT * FROM student WHERE (chinese+english+math)>200; -- 查询英语分数在80-90之间的同学 SELECT * FROM student WHERE english BETWEEN 80 AND 90; -- 查询数学分数为89,90,91的同学 SELECT * FROM student WHERE math IN(89,90,91); -- 查询所有姓白的同学的英语成绩 SELECT NAME '姓名', english '英语成绩' FROM student WHERE NAME LIKE '%白%' ; -- 查询数学分>80并且语文分>80的同学 SELECT * FROM student WHERE math>80 AND chinese>80; -- 查询英语>80或者总分>200的同学 SELECT * FROM student WHERE english>80 OR (chinese+english+math)>200; -- 对数学成绩升序排序 SELECT * FROM student ORDER BY math ASC; -- 对总分降序排序,然后再按数学从高到低的顺序输出 SELECT * FROM student ORDER BY (chinese+english+math) DESC,math DESC; -- 对姓白的学生成绩排序输出(排序规则自己定义) SELECT * FROM student WHERE NAME LIKE '%白%' ORDER BY math ASC; -- 查询数学成绩大于等于平均分的所有学生信息 SELECT * FROM student WHERE math>=(SELECT AVG(math) FROM student); -- 查询出英语成绩最高分的学生信息 SELECT * FROM student WHERE english=(SELECT MAX(english) FROM student); -- 模糊查询出学生姓名中第二个字是金的学生信息 SELECT * FROM student WHERE NAME LIKE '%_金%'; -- 查询出英语成绩平均分是多少 SELECT AVG(english) FROM student; -- 查询出数学总分是多少 SELECT SUM(math) FROM student; -- 查询学生表中有多少条记录 SELECT COUNT(id) FROM student;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/28678.html