数据库SQL查询(一)

本文详细介绍了SQL查询的基础知识,包括查询语句的基本结构、重命名列、各种运算符(如不等于、为空、属于、正则表达式)、排序、聚合函数(如最大值、平均值、计数、求和)、分组查询(GROUPBY和HAVING子句)以及嵌套查询的使用。通过实例演示了如何在MySQL数据库中使用Navicat工具进行高效的数据筛选和分析。
摘要由CSDN通过智能技术生成

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

目录

基本结构

示例(重命名 AS)

运算符

比较运算符:

示例(不等于 !=)

示例(为空 IS NULL)

示例(属于 IN)

示例(正则表达式 REGEXP)

排序

示例(ORDER BY)

聚合函数

示例(最大值 MAX)

示例(平均值 AVG)

示例(计数 COUNT)

示例(求和 SUM)

分组查询

示例(分组 GROUP BY)

示例(分组后筛选 HAVING)

示例(分组前筛选 WHERE)

嵌套查询

示例(in)


基本结构

select -- 查询什么,列筛选,其中*表示所有列

from   -- 在哪个表查询,主要连接要查询的表名称

where -- 满足什么条件,行筛选

示例(重命名 AS)

As可以为列重命名

-- 查询出姓名为“陈鹏”的学号、手机号码和邮箱地址并重命名

SELECT
	sno AS '学号',
	mobileno AS '手机号码',
	stuemail AS '邮箱地址' 
FROM
	Student 
WHERE
	sname = '陈鹏'

运算符

参考:SQL学习之运算符_sql运算符有哪些_heart-szu的博客-CSDN博客

比较运算符

比较运算符用来对表达式左边的操作数和右边的操作数进行比较,比较的结果为真则返回1,比较的结果为假则返回0,其他情况则返回NULL。
比较运算符经常被用来作为SELECT 查询语句的条件来使用,返回 符合条件的结果记录。

=                                       等于

<>     !=                            不等于

>=      >       <=       <       大于  大于等于   小于   小于等于

is null, is not null           null不能使用比较运算符

示例(不等于 !=)

-- 查询出姓名不是“陈鹏”的学生的所有信息

SELECT
	* 
FROM
	Student 
WHERE
	sname != '陈鹏'

示例(为空 IS NULL)

-- 查询哪些学生没有填写“年龄 ”信息

SELECT
	SNo,
	SName 
FROM
	Student 
WHERE
	sage IS NULL

示例(属于 IN)

-- 查询出“陈鹏”、”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降序 ;不写默认是升序;

示例(ORDER BY)

-- 对Student表按照年龄升序排序,如果年龄一样,女生排在男生前面

SELECT
	* 
FROM
	Student 
ORDER BY
	sage ASC,
	sex ASC       -- mysql中是ASCII码排序,转换后女排在男前面,所以是升序

聚合函数

聚合函数对一组值执行计算并返回单一的值;

COUNT:求所选记录行数(可与distinct连用,消除重复值再计数)

AVG:求所选记录的平均值

SUM:为所选记录求和

MAX:求所选记录的最大值

MIN:求所选记录的最小值

示例(最大值 MAX)

-- 查询年龄最大值

SELECT
	MAX( sage ) 
FROM
	Student                

 

示例(平均值 AVG)

-- 查询男生的平均年龄

SELECT
	AVG( sage ) 
FROM
	Student 
WHERE
	sex = '男'

 

示例(计数 COUNT)

 -- 查询有多少位学生借书

SELECT
	COUNT( DISTINCT sno ) 
FROM
	BorrowBook  

 

示例(求和 SUM)

-- 查询计算机类的图书总共有多少本

SELECT
	SUM( bookincoming ) 
FROM
	Book 
WHERE
	booktypeid = ( SELECT id FROM BookType WHERE typename = '计算机' )

 

分组查询

“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个数据集划分成若干个小区域,然后针对若干个小区域进行数据处理

分组前筛选--where

分组后筛选--having

示例(分组 GROUP BY)

-- 查询出男女生姓名、人数、平均年龄、年龄和

SELECT
	Sex,
	GROUP_CONCAT( sname ) AS '学生姓名',   -- GROUP_CONCAT可以把多个值显示到一起
	Count(*) AS '人数',
	avg( sage ) AS '平均年龄',
	sum( sage ) AS '年龄和' 
FROM
	Student 
GROUP BY
	Sex                                   -- 按照性别分组

示例(分组后筛选 HAVING)

-- 查询出借的最多的那本书的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 
	)

示例(分组前筛选 WHERE)

-- 统计出一月份哪些区域的哪些商品销售低于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

嵌套查询

在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的 WHERE子句 或 HAVING短语 的条件中的查询称为嵌套查询;

先处理内查询,由内向外处理;

连接关键字

如果子查询确定就一个值,可以使用 = 或者 in 连接

如果子查询是多个值,需要用 in 连接

in , = any , = some 效果一样

any 满足一个就是真, all 满足所有的才是真

in 判断是否存在于集合,exists 是否有结果

示例(in)

-- 查询陈鹏借了哪些书

表关系如下图所示:

student表中通过sname匹配sno,作为条件传给borrowbook表

borrowbook表中通过sno匹配bookID,作为条件传给book表

book表中通过bookID匹配bookname

SELECT
	bookname 
FROM
	Book 
WHERE
	bookid IN (
	SELECT
		bookid 
	FROM
		BorrowBook 
	WHERE
	sno = ( SELECT sno FROM Student WHERE sname = '陈鹏' ) 
	)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值