本文介绍SQL查询,如何在海量数据中筛选想要数据;
数据库管理系统选择:关系型数据库mysql
数据库管理工具选择:navicat
本文中查询语句和查询案例参考自:https://edu.csdn.net/course/detail/27673?ops_request_misc=&request_id=&biz_id=105&utm_term=SQL&utm_medium=distribute.pc_search_result.none-task-course-2~course~sobaiduweb~default-3-27673.pc_edu_default&spm=1018.2226.3001.4453
目录
基本结构
示例一
运算符
示例一
示例二
示例三
模糊查询
示例一
排序
示例一
聚合函数
示例一
示例二
示例三
示例四
分组查询
示例一
示例二
示例三
基本结构
select -- 查询什么,列筛选,其中*表示所有列
from -- 在哪个表查询,主要连接要查询的表名称
where -- 满足什么条件,行筛选
示例一
As可以为列重命名
-- 查询出姓名为“陈鹏”的学号、手机号码和邮箱地址并重命名
SELECT SNO AS '学号',MobileNO AS '手机号码',StuEMail AS '邮箱地址'
FROM Student
where SName = '陈鹏'
运算符
算术运算符:+ - * /
比较运算符:= <> != >= > <= <
括号:()提高优先级
null不能使用比较运算符,使用is null, is not null
逻辑运算符:not取反,and, or, 括号()提高优先级
示例一
-- 查询出姓名不是“陈鹏”的学生的所有信息
select SNO,SName,Sage,Sex,MobileNO,StuEMail
from Student
where SName != '陈鹏'
示例二
-- 查询哪些学生没有填写“年龄 ”信息
SELECT SNo,SName
FROM Student
WHERE Sage is null
示例三
-- 查询出“陈鹏”、”Alice”、”Bob”的学号,年龄
select SNo,SName
FROM Student
where SName in ('陈鹏','Alice','Bob')
模糊查询
REGEXP正则表达式
示例一
-- 查询出手机号码133或者134开头,倒数第二位为不是2也不是4的学生
select *
from Student
WHERE mobileno REGEXP '^[1][3][34][0-9]{1,}[^24][0-9]$'
排序
通过Order by 进行排序
ASC升序 DESC降序 不写默认是升序
示例一
-- 对Student表按照年龄升序排序,如果年龄一样,女生排在男生前面
SELECT *
FROM Student
ORDER BY sage ASC, sex ASC -- mysql中是ASCII码排序,转换后女排在男前面,所以是升序
聚合函数
聚合函数对一组值执行计算并返回单一的值;
COUNT:求所选记录行数(可与distinct连用,消除重复值再计数)
AVG:求所选记录的平均值
SUM:为所选记录求和
MAX:求所选记录的最大值
MIN:求所选记录的最小值
示例一
-- 查询年龄最大值
SELECT MAX(sage)
from Student
示例二
-- 查询男生的平均年龄
select AVG(sage)
from Student
where sex = '男'
示例三
-- 查询有多少位学生借书
select COUNT(distinct sno)
from BorrowBook
示例四
-- 查询计算机类的图书总共有多少本
select SUM(bookincoming)
from Book
where booktypeid = (select id from BookType where typename = '计算机')
分组查询
“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个数据集划分成若干个小区域,然后针对若干个小区域进行数据处理
分组前筛选--where
分组后筛选--having
示例一
-- 查询出男女生姓名、人数、平均年龄、年龄和
Select Sex, GROUP_CONCAT(sname) As '学生姓名', Count(*) AS '人数', avg(sage) As '平均年龄',sum(sage) As '年龄和' -- GROUP_CONCAT可以把多个值显示到一起
from Student
Group by Sex -- 按照性别分组
示例二
-- 查询出借的最多的那本书的Id
Select BookID, COUNT(*) As '被借次数'
from BorrowBook
Group by BookId -- 按照ID分组
Having COUNT(*) = -- 分组后筛选借书最多值
(
Select COUNT(*)
from BorrowBook
Group by BookId
order by COUNT(*) DESC
LIMIT 1
)
示例三
-- 统计出一月份哪些区域的哪些商品销售低于1000件, 按照倒序排列
Select PArea As '区域', PName As '名称', SUM(PSaleNo) As '销售量'
from SalesTable
Where PMonth= '一月' -- 分组前筛选一月份数据:Where
Group by PArea, PName -- 按照区域和商品分组
Having SUM(PSaleNo) < 1000 -- 分组后筛选低于1000件数据:having
Order by SUM(PSaleNo) DESC