提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
提示:这里可以添加本文要记录的大概内容:
昨天说到了数据库的一些简单的入门级别的语句增、删、改、今天学习一下查询语句的使用以及规范。
提示:以下是本篇文章正文内容,下面案例可供参考
一、数据库查询语句
--查询不会对数据库中的数据进行修改.只是一种显示数据的方式
SELECT 列名 FROM 表名 [WHERE 条件表达式]
1) SELECT 命令可以读取一行或者多行记录。
2) 你可以使用星号(*)来代替其他字段,SELECT 语句会返回表的所有字段数
1.简答查询
1.1查询表所有行和列的数据
--是用* 表示所有列
select * from 表名;
--查询所有学生
select * from student;
1.2查询指定列
--查询指定列的数据,多个列之间以逗号分离
select 字段名1,字段名2,字段名3,......form 表名;
--查询student表中的name 和age 列
select name ,age from student;
2.指定列的别名进行查询
2.1使用关键字
使用别名的好处:显示的时候使用新的名字,并不修改表的结构。
2.2 语法
--对列指定别名
select 字段名称1 AS别名,字段名称2 AS别名...from表名;
对列和表同时指定别名
select 字段名1 AS 别名,字段名2 AS别名…from AS 表名;
2.3具体操作
--使用别名
select name as 姓名,age as 年龄 from student;
--表使用别名
select s.name as 姓名,age as 年龄 from student as s
表使用别名的原因:用与多表查询操作
3.清除重复值
3.1查询指定列并且结果不出现重复数据
select distinct 字段名from 表名;
3.2具体操作
--查询学生来自于哪些地方
select address from student;
--去掉重复的记录
select distinct address from student;
4 查询结果参与运算
4.1 某列数据和固定值运算
select 列名1+固定值 from表名;
4.2 某列数据和其他列数据参与运算
select 列名1+列名2 from表名;
注意:参与运算的必须是数值类型
4.3 示例
添加数学,英语成绩列,给每条记录添加对应的数学和英语成绩,查询的时候将数学和英语的成绩相加
select * from student;
– 给所有的数学加 5 分
select math+5 from student;
– 查询 math + english 的和
select * from student;
select ,(math+english) as 总成绩 from student; --as可以省略
select,(math+english)from student;
5.条件查询
5.1为什么要条件查询
如果没有查询条件,则每次查询所有的行。实际应用中,一般要指定查询的条件。对记录
进行过滤。
5.2语法
select 字段名from 表名 where 条件;
流程:取出表中的每条数据,满足条件的记录就返回,不满足条件的记录不返回
创建一个学生表如下
运算符
> ,<,>=,<=,=,<>
<>在sql中表示不等于,在sql中也可以使用!=
between…and
在一个范围之内,如between 100 and 200 相当于在100到200之间,包头又包尾
in(集合)相当于表示多个值,使用逗号分离
like ‘张%’ 模糊查询
is null 查询某一列为null的值,注:不能写=null
具体操作
--查询英语成绩大于90分的同学
SELECT *
FROM
student
WHERE
english > 90;
查询总分大于200分的所有同学
SELECT
*
FROM
student
WHERE
(math+chinese+english)>200;
逻辑运算符
1)and或&&
与,sql中建议使用前者,后者并不通用。
2)or或||
或
3)not 或!
非
示例
查询数学分>80并且语文分>80的同学
SELECT
*
FROM
student
WHERE math>80 && chinese>80;
in关键字
SELECT 字段名 FROM 表名 WHERE 字段 in (数据 1, 数据 2...);
in 里面的每个数据都会作为一次条件,只要满足条件的就会显示
示例
查询数学分数为89,90,91的同学。
SELECT
*
FROM
student
WHERE math IN (89, 90, 91) ;
范围查询
BETWEEN 值 1 AND 值 2
表示从值 1 到值 2 范围,包头又包尾
比如:age BETWEEN 80 AND 100 相当于: age>=80 && age<=100
示例
查询英语分数在 80-90之间的同学。
SELECT
*
FROM
student
WHERE
english BETWEEN 80 AND 90;
like关键字
LIKE 表示模糊查询
SELECT * FROM 表名
MySQL通配符
% 匹配多个字符串
_ 匹配一个字符串
示例
模糊查询 学生姓名中第二个字是化的学生所有信息
SELECT
*
FROM student3
WHERE
NAME LIKE '%_化_%';
6.查询语句进阶
6.1排序
通过 ORDER BY 子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中
数据的顺序)
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 [ASC|DESC];
ASC: 升序,默认值
DESC: 降 序
6.11 单列排序
什么是单列排序:
只按某一个字段进行排序,单列排序
示例
数学成绩升序排顺序
SELECT
*
FROM
student3
ORDER BY
math ASC;
6.1.2组合排序
同时对多个字段进行排序,如果第 1 个字段相等,则按第 2 个字段排序,依次类推。
组合排序的语法:
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名
示例
查询数学成绩降序,英语成绩是升序的学生信息
SELECT
*
FROM
student3
ORDER BY math DESC,english ASC;
6.2 聚合函数
之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数
查询是纵向查询, 它是对一列的值进行计算,然后返回一个结果值。聚合函数会忽略空
值 NULL
6.2.1 五个聚合函数
max(列名)求这一列最大值
min(列名) 求这一列最小值
avg(列名)求这一列平均值
count(列名)统计这一列有多少条记录
sum(列名)对这一列求综合
6.2.2语法
SELECT 聚合函数(列名) FROM 表名
示例
查询学生表中有多少条记录
SELECT
COUNT(id)
'总记录数'
FROM
student ;
示例
查询出英语成绩最高分的学生信息
SELECT
*
FROM
student
WHERE
english=(SELECT MAX(english) FROM student);
今日练习
先建库建表录入数据
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);
查询语句练习
– 1.查询表中所有学生的信息。
SELECT * FROM student;
– 2 查询表中所有学生的姓名和英语成绩。
SELECT
NAME ‘姓名’,
english ‘英语成绩’
FROM student;
– 3 过滤表中重复数据。(去重的关键字 distinct)
SELECT
DISTINCT math ,english,chinese
FROM
student;
– 4 统计每个学生的总分
SELECT
id ‘学生编号’,
NAME ‘学生姓名’,
(math + chinese + english) ‘总分’
FROM
student ;
– 5.在所有学生总分数上加10分特长分。
SELECT
id ‘学生编号’,
NAME ‘学生姓名’,
(math + chinese + english+10) ‘总分’
FROM
student ;
– 6.使用别名表示学生分数。
SELECT
s.id AS ‘编号’,
s.name
AS ‘姓名’,
s.chinese
AS ‘语文成绩’,
s.english
AS ‘英语成绩’,
s.math
AS ‘数学成绩’
FROM
student AS s ;
– 7.查询姓名为行哥的学生成绩
SELECT
*
FROM student
WHERE
NAME = ‘行哥’;
– 8.查询英语成绩大于90分的同学
SELECT *
FROM
student
WHERE
english > 90;
– 10.查询英语分数在 80-90之间的同学。
SELECT
*
FROM
student
WHERE
english BETWEEN 80 AND 90;
– 11.查询数学分数为89,90,91的同学。
SELECT
*
FROM
student
WHERE math IN (89, 90, 91) ;
– 12.查询所有姓白的学生英语成绩。
SELECT
english,
NAME
FROM
student
WHERE NAME LIKE’白%';
– 13.查询数学分>80并且语文分>80的同学
SELECT
*
FROM
student
WHERE math>80 && chinese>80;
– 14.查询英语>80或者总分>200的同学
SELECT
*
FROM
student
WHERE english>80||(math+chinese+english)>200;
– 15.对数学成绩升序排序
SELECT
*
FROM
student
ORDER BY
math ASC;
– 16.对总分降序排序,然后再按数学从高到低的顺序输出
SELECT
*
FROM
student
ORDER BY
(math+english+chinese) DESC, math ASC;
- 17.对姓白的学生成绩排序输出(排序规则自己定义)
– 语文升序,英语降序输出
SELECT
*
FROM
student
WHERE NAME LIKE ‘白%’
ORDER BY
chinese ASC,english DESC;
– 18.查询数学成绩大于等于平均分的所有学生信息
SELECT
*
FROM
student
WHERE
math>= (SELECT AVG(math) FROM student);
– 19.查询出英语成绩最高分的学生信息
SELECT
*
FROM
student
WHERE
english=(SELECT MAX(english) FROM student);
– 20.模糊查询出学生姓名中第二个字是金的学生信息
SELECT
*
FROM
student
WHERE NAME LIKE’金’;
– 21.查询出英语成绩平均分是多少
SELECT
AVG(english)
FROM
student;
– 22.查询出数学总分是多少
SELECT
SUM(math)
FROM
student;
– 23.查询学生表中有多少条记录
SELECT
COUNT(id)
‘总记录数’
FROM
student ;