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;