目录
一、定义
SELECT查询语句:
✔数据查询是指数据库管理系统按照用户指定的条件,从数据库相关表中检索满足条件的数据的过程。
✔SELECT语句主要用于数据的查询检索,是SQL语言的核心,也是使用频率最高的一条语句。 ✔SELECT语句可以让数据库服务器根据用户的要求,从数据库的表中检索出所需要的数据,并按照用户指定的格式进行整理并返回。
二、SELECT语句基本语法
⇱SELECT语句的语法格式如下:
SELECT [ALL | DISTINCT] * | 字段列表
FROM 表名
[WHERE 查询条件]
[GROUP BY 分组字段 [HAVING 分组条件]]
[ORDER BY 排序字段 [ASC | DESC] ]
[LIMIT [初始位置,] 记录数];
三、SELECT语句
⇱select选择字段
1.选择所有字段 SELECT * FROM 表名;
2.选择指定字段 SELECT 字段名1 [, 字段名2, … , 字段名n] FROM 表名;
3.定义字段别名 SELECT 字段名1 [AS] 列标题1 [ , 字段名2 [AS] 列标题2, …] FROM 表名;
四、简单查询
1.WHERE子句
●在实际工作中,大部分查询并不是针对表中所有数据记录的查询,而是要找出满足某些条件的数据记录。此时我们可以在SELECT语句中使用
●WHERE子句,其语法格式如下: SELECT * | 字段列表 FROM 表名 WHERE 查询条件;
下面为大家展示where子句的用法,首先创建一个拥有字段名学号,姓名,专业,年龄,性别的表,表名为"学生表",然后再根据查询条件进行查询。
#查询学生表中学号为12的学生的全部信息;
select * from 学生表 where 学号='12';
#查询学生表中学号不是为12的学生的全部信息;
select * from 学生表 where 学号 !='12';
#查询学生表中专业为'计算机'学生的学号,姓名,专业;
select 学号,姓名,专业 from 学生表 where 专业='计算机';
#查询学生表中专业为'计算机'学生的平均年龄;
select avg(age) from 学生表 where 专业='计算机';
当然,where子句也进行条件组合查询:
#查询学生表中年龄小于20岁,性别为'男'的全部信息;
select * from 学生表 where 年龄<20 and 性别='男';
#查询学生表中专业为'计算机'或是年龄大于20岁的学生的性别,专业,年龄信息;
select 性别,专业,年龄 from 学生表 where 专业='计算机' or 年龄>20;
五、IN 查询
🔺使用IN进行范围比对查询
●如果字段的取值范围不是一个连续的区间,而是一些离散的值,可以使用IN关键字进行范围比对。
语法格式如下: …… where 字段名 [NOT] IN ( 值1 [, 值2, 值3, …])
🔺当我们查询条件的字段是重复的,用where子句就会很麻烦,例如:
#查询学生表中学号为'11''12''13'的学生的全部信息;
select * from 学生表 where 学号='11' or 学号='12' or 学号='13';
而使用IN查询明显要快捷很多:
select * from 学生表 where 学号 in('11','12','13');
如果我们想查询学号不为'11''12''13'的学生的全部信息也可以:
select * from 学生表 where 学号 not in('11','12','13');
六、BETWEEN AND查询
🔺使用BETWEEN AND进行范围比较查询
●用BETWEEN … AND … 对字段的某一范围内的数据进行比较查询,与使用“>=”且“<=”的功能一样。
语法格式如下: …… where 字段名 [NOT] BETWEEN 值1 AND 值2
例1:查询年龄在18~20(含18、20)之间的学生信息。(and连接 和 between … and … 两种方法)
select * from 学生表 where 年龄>=18 and 年龄<=20;
select * from 学生表 where 年龄 between 18 and 20;
例2:查询年龄不在18~20(含18、20)之间的学生信息。(and连接 和 between … and … 两种方法)
select * from 学生表 where 年龄<18 or 年龄>20;
select * from 学生表 where 年龄 not between 18 and 20;
总结,当进行范围比较查询,使用BETWEEN AND比较快捷。
七、Like查询
🔺使用LIKE进行模糊查询
●LIKE关键字与“%”和“”两个通配符的使用,可以对数据表中的数据进行模糊查询。这两个通配符的含义如下所示: 百分号(%):表示匹配0个或者任意多个字符。 下划线(_):表示匹配任意一个字符。
举例:
#查询学生表中姓"李"的学生的总人数;
select count(*) from 学生表 where 姓名 like '李%';
#查询学生表中姓"李"的学生的性别和姓名;
select 姓名,性别 from 学生表 where 姓名 not like '李%';
#查询学生表中姓"李"的姓名只有两个字的学生的性别和姓名;
select 姓名,性别 from 学生表 where 姓名 like '李_';
#查询学生表中名字带"文"字的学生的性别和姓名;
select 姓名,性别 from 学生表 where 姓名 like '%文%';
八、order by 排序
🔺order by子句:
●将查询的结果进行排序,其语法格式为: SELECT 字段名1 [, 字段名2, …] FROM 表名 [WHERE 查询条件] order by 字段名1 [, 字段名2, …];
●排序方式分为升序和降序,表示为:
升序排序:order by 列名 [asc]
降序排序:order by 列名 desc
举例:
#查询学生表中计算机专业的学生信息,按年龄降序、学号升序排序;
select * from 学生表 where 专业='计算机' order by 年龄 decs,学号 acs;
九、group by 分组汇总
🔺group by子句:
●将查询结果显示为分组的汇总数据,其语法格式为:
SELECT 字段名1 [, 字段名2, …],
统计函数 FROM 表名 [WHERE 查询条件] group by 字段名1 [, 字段名2, …];
举例:
#查询学生表中每个专业的人数;
select count(*) from 学生表 group by 专业;
#查询学生表中每个年龄段的学生人数,显示年龄、学生人数;
select 年龄,count(*) from 学生表 group by 年龄;
🔺group by子句的总结: 语法:select 列名 from 表名 where 条件式 group by 列名
🔺注意:
①如果select中有聚合函数,查询结果将按group by中的列名分组汇总;
②如果select中没有聚合函数,查询结果将按group by中的列名显示并去 掉重复值。
③有where时,从左至右先执行where条件,后执行group by ,即先筛选 出满足条件的记 录,再对这些记录进行分组汇总。
④group by 后面跟着多个分组列名时,列名之间用英文逗号 , 隔开。
十、聚合函数条件
🔺having条件子句: 将查询结果显示为分组的汇总数据。
其语法格式为: SELECT 字段名1 [, 字段名2, …],
统计函数 FROM 表名 [WHERE 查询条件] group by 字段名1 [, 字段名2, …] having 分组条件;
举例:
#查询学生表中计算机专业的学生人数,显示专业名称、人数”;
select 专业,count(*) from 学生表 group by 专业 having='计算机';
#查询成绩表中选修人数达到了4人的课程,列出课程编号、对应人数;
select 课程编号,count(*) from 成绩表 group by 课程编号 having=count(*)>=4;
#查询成绩表中有4门课程以上及格的学生,列出学号、及格课程门数、总成绩
select 学号,count(*),sum(成绩) from 成绩表 where 成绩>=60 group by 学号 having=count(课程编号)>=4;
🔺having子句的总结: 语法:select 列名 from 表名 where 条件式 group by 列名having 聚合条件 🔺注意:
①having子句紧跟在group by子句后面,如果有多个聚合条件时,用 and/or连接;
②当对聚合函数值有条件时,只能在having中列出,不能在where中 列出;
③having中可以放聚合条件,也可以放普通条件;where中只能放入 普通条件,不可放聚合条件。
④有order by时,将order by子句放在最后(语法:select 列名 from 表名 where 条件式 group by 列名 having 聚合条件 order by 列名)。