本文介绍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



![[学习笔记] [机器学习] 12. [下] HMM 隐马尔可夫算法(马尔科夫链、HMM 三类问题、前后后向算法、维特比算法、鲍姆-韦尔奇算法、API 及实例)](https://img-blog.csdnimg.cn/2e81c06446854ac7bd9487b754fd3c4d.png#pic_center)















