数据库SQL查询(一)

2023-10-27

本文介绍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 = '陈鹏' ) 
	)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库SQL查询(一) 的相关文章

  • 在 Oracle 行的多个列上使用透视

    我在 Oracle 表中有以下示例数据 tab1 我正在尝试将行转换为列 我知道如何在某一列上使用 Oracle 数据透视表 但是否可以将其应用于多个列 样本数据 Type weight height A 50 10 A 60 12 B 4
  • 如何找到多个列中的最小值

    我在我的 DB 3 col 中有一个值 我想在所有这些值中找到一个值 如下所述 表名 MyTable id col1 col2 col3 1 200 300 400 2 100 150 300 3 800 102 20 4 80 80 0
  • MySQL - 从临时表插入

    这看起来非常简单 但我坚持使用简单的插入语句 见下文 begin work CREATE TEMPORARY TABLE IF NOT EXISTS insert table AS select r resource id fr file
  • MySql 5.7 ORDER BY 子句不在 GROUP BY 子句中并且包含非聚合列

    我试图在不禁用 my ini 中的 only full group by 的情况下弄清楚 这是我的查询 SELECT p title COUNT t qty AS total FROM payments t LEFT JOIN produc
  • PL/pgSQL SELECT 到数组中

    这是我的函数声明和主体的一部分 CREATE OR REPLACE FUNCTION access update RETURNS void AS DECLARE team ids bigint BEGIN SELECT INTO team
  • Linq To SQL - 拥有和分组依据

    我下面这个查询工作正常 不过我想使用 Linq 来实现它 select u ID u NAME from Task t join BuildingUser bu ON bu ID BUILDING t ID BUILDING join Us
  • 只获取倒数第二条记录 - mysql-query

    我有一个如下表记录 my table id rating description 1 0 0 bed 2 1 0 good 3 0 0 bed 4 1 0 good 5 0 0 bed 6 0 0 bed 7 0 0 bed 现在我通过评级
  • 可以使用表通配符创建 sql 查询吗?

    这可能是一个简单的问题 但我无法在网上找到解决方案 任何帮助将不胜感激 我正在尝试在 PHP 中创建一个 SQL 查询 并希望以某种方式将通配符应用于 TABLE 过滤器 可能是这样的 select from table 但是 到目前为止我
  • 加密数据库字段的好方法?

    我被要求加密数据库中的各种数据库字段 问题是这些字段在读取后需要解密 我在用着Django and SQL Server 2005 有什么好主意吗 See 在 SQL Server 2005 数据库中使用对称加密 https web arc
  • sql查询获取从一月到当月的所有数据,即使没有记录

    我不擅长 sql 所以任何帮助世界都很棒 我有一个 SQL 查询 可以获取从一月到当月注册的记录 我的代码示例 SELECT DatePart YEAR p createStamp as TheYear DatePart MONTH p c
  • H2 用户定义的聚合函数 ListAgg 不能在第一个参数上使用 DISTINCT 或 TRIM()

    所以我有一个 DB2 生产数据库 我需要在其中使用可用的函数 ListAgg 我希望使用 H2 的单元测试能够正确测试此功能 不幸的是H2不直接支持ListAgg 但是 我可以创建一个用户定义的聚合函数 import java sql Co
  • 如何通过 SQL 表关联 SQL 中的实体

    我是数据库设计的初学者 我需要为项目创建数据库 我可以用面向对象的术语解释我想要做什么 值得庆幸的是 数据库专家会很友善地向我解释如何在数据库方面处理这个问题 我想创建一个与位置实体 州 城市 有关系的用户 ID 名称 实体 所以在编程语言
  • 提高第一个查询的性能

    如果执行以下数据库 postgres 查询 则第二次调用要快得多 我猜第一个查询很慢 因为操作系统 linux 需要从磁盘获取数据 第二个查询受益于文件系统级别和 postgres 中的缓存 有没有一种方法可以优化数据库以快速获得结果fir
  • 获取带有计数的不同记录

    我有一张桌子personid and msg列 personid msg 1 msg1 2 msg2 2 msg3 3 msg4 1 msg2 我想得到总计msg对于每个personid 我正在尝试这个查询 select distinct
  • 如何在 DB2 中创建返回序列值的函数?

    如何在 DB2 中创建一个从序列中获取值并返回该值的函数 应该可以在 select 或 insert 语句中使用该函数 例如 select my func from xxx insert into xxx values my func 基本
  • 从 Getdate() 获取时间

    我想采取Getdate 结果 例如 2011 10 05 11 26 55 000 into 11 26 55 AM 我看过其他地方并发现 Select RIGHT CONVERT VARCHAR GETDATE 100 7 这给了我 11
  • mysql自动存储记录创建时间戳

    mysql 有什么方法可以在创建记录时自动将时间戳存储在记录行中 我试图使用时间戳 数据类型 和 current timestamp 作为默认值 但后来意识到每次更新记录时都会更新 我只需要一些可以存储创建时间戳的东西 Thanks Set
  • 如何使用 BigQuery 有效地选择另一个表中匹配子字符串的记录?

    我有一个包含数百万个字符串的表 我想将其与包含大约两万个字符串的表进行匹配 如下所示 standardSQL SELECT record FROM record JOIN fragment ON record name LIKE CONCA
  • Spark SQL 中的 SQL LIKE

    我正在尝试使用 LIKE 条件在 Spark SQL 中实现联接 我正在执行连接的行看起来像这样 称为 修订 Table A 8NXDPVAE Table B 4 8 NXD V 在 SQL Server 上执行联接 A revision
  • SQL 更新 - 更新选定的行

    我正在使用 SQL Server 2008 我有一个名为MYTABLE有两列 ID STATUS 我想编写一个存储过程来返回其记录STATUS是 0 但是这个存储过程必须更新STATUS返回行数为 1 如何在单个查询中执行此选择和更新操作

随机推荐

  • 视图库——公安视频侦查数据处理应用中心

    随着城市视频监控系统的不断完善和扩建 视频已经成为社会数据量最大的一类数据 网络甚至流传这样一个段子 电视台新闻行业应该给视频监控行业颁发 最佳素材奖 原因是电视台播放的新闻中 有四分之一的素材来自于视频监控 当然这只是个段子 但无疑也再次
  • 【.NET 6】使用EF Core 访问Oracle+Mysql+PostgreSQL并进行简单增改操作与性能比较

    前言 唠嗑一下 都在说去O或者开源 但是对于数据库选型来说 很多人却存在着误区 例如 去O 狭义上讲 是去Oracle数据库 但是从广义上来说 是去Oracle公司产品或者具有漂亮国垄断地位和需要商业授权的数据库产品 去O 目前国内有一个现
  • DBA 面试题

    一 SQL tuning 类 1 列举几种表连接方式 2 不借助第三方工具 怎样查看sql的执行计划 3 如何使用CBO CBO与RULE的区别 4 如何定位重要 消耗资源多 的SQL 5 如何跟踪某个session的SQL 6 SQL调整
  • echarts分享(四):双y轴图表刻度均匀分布问题

    今天分享一个小问题 内容不多 双y轴图表中 为了图表的美观 经常会隐藏一侧的y轴刻度线 仅显示一侧的刻度线 那么问题就来了 两个y轴的数据数值大小不同 常常会导致刻度线的刻度分布不均匀 该如何解决呢 这里分享下我在项目中所作的处理 首先是要
  • ESP32彩屏开发板(WT32-SC01),除了买买买,你还可以参与一起设计了

    基于ESP32彩屏的开发板已在Git Hub平台上开源给所有的开发者了 硬件参数 显示屏 3 5 英尺 LCD 屏幕 分辨率 320 480 SoC ESP32 WROVER B 模组 CPU 双核 Xtensa 32 bit LX6 MC
  • ESP8266测试Wi-Fi通讯安全

    创建Arduino Sketch include
  • 5.荔枝派 zero(全志V3S)-buildroot配置播放视频

    上面是我的微信和QQ群 欢迎新朋友的加入 1 开启ALSA和MPLAY 编译烧录 2 测试 amixer c 0 sset Headphone 0 100 unmute cd usr bin mplayer root test mp4 3
  • is too old (format 10, created by Subversion 1.6)的解决方案

    svn Working copy E aliyun spirit spiritmap0916 is too old format 10 created by Subversion 1 6 解决方案 对项目进行upgrade 等待刷新完成即可
  • Android SDK+Appium安装及环境配置

    Android SDK环境搭建Xmind思维导图 一 安装SDK先配置环境变量 1 创建 JAVA HOME D Program Files Java jdk1 8 0 05 2 创建 CLASSPATH D Program Files J
  • uniapp 拍照和从相册选择的弹窗

    1 在common创建一个vue 把下列代码复制进去
  • linux安装 MySQL 5.7

    我的是CentOS 7 虚拟机 因为之前一直安装失败 浪费了不少时间 特此记录一下正确安装步骤 亲测可用 1 下载命令 wget https dev mysql com get mysql57 community release el7 9
  • 微信小程序云开发——图片展示,视频播放案例

    这次是帮朋友写的一个简单的小程序 考虑到成本和页面简单的问题 我就决定用小程序云开发来进行开发 后来实际开发的时候发现 页面用到图片实在是太多 CDN流量一个月5G根本不够用 但是我看到了数据库一天可以免费访问5万次 我就决定用base64
  • 区块链存证原理

    公证通 Factom公证通 一本由共识算法维护的账本 网录科技 网录科技CTO汪波 区块链做存证的原理及方式 专注区块链技术开发 网录科技千万级天使轮融资 Blockstack 官网 https blockstack org 白皮书 htt
  • 用python编写daemon监控进程并自动恢复

    用python编写daemon监控进程并自动恢复 下面这个程序是用于python编写daemon监控进程并自动恢复 参考http pythonhosted org KiTT modules kitt daemon html usr bin
  • mac下 docker 挂载目录权限问题(operation not permitted)

    在docker run 或者 docker compose yml 添加privileged true privileged的含义是让容器内的root拥有真正root用户的权限 否则它只是一个名为root的普通用户 但是在macos下 即使
  • select函数使用时应注意的问题

    问题一 fd set和timeval的重置 select函数的使用一般分为以下几步 1 FD ZERO fd set 2 FD SET int fd fd set 3 int select int n fd set readfds fd s
  • VSCode批量代码比较

    前言 最近因为工作原因 需要找出一个工程里面修改过的地方 VSCode里自带代码比较功能 可以高亮代码不同的地方 然而手动一个个打开文件来比较显然非常的繁琐 在网上检索后发现并没有相关的方法 因此 为了解决这个问题 在查阅了官方文档后 决定
  • 操作系统笔记整理12——磁盘存储器的管理

    点此链接可跳转到 操作系统笔记整理 目录索引页 参考书籍 计算机操作系统 第四版 汤小丹等编著 文章目录 点此链接可跳转到 操作系统笔记整理 目录索引页 外存的组织方式 连续组织方式 链接组织方式 隐式链接 显示链接 FAT File Al
  • [架构之路-200]- 性能需求与性能分析:影响性能的主要因素

    目录 前言 关于性能的几点说明 第一章 性能需求 提出各种性能指标 1 1 可靠性或可用性 stablity 1 2 处理能力或效率 Performance 1 2 1 指标是吞吐率 1 2 2 指标是响应时间 1 2 3 指标是资源利用率
  • 数据库SQL查询(一)

    本文介绍SQL查询 如何在海量数据中筛选想要数据 数据库管理系统选择 关系型数据库mysql 数据库管理工具选择 navicat 本文中查询语句和查询案例参考自 https edu csdn net course detail 27673