抓取资料库数据 - SQL进阶语法

今天终於来到SQL的进阶篇!想要更加灵活的使用SQL,就必须要知道子查询的用法,今天就让我们来认识所谓的子查询吧~

子查询是什麽?

子查询的意思其实就是在原本的查询语句里面再放上一个查询语句,被放入的语句会使用(),用以区别outer query 和 inner query(subquery),而()内的就是子查询。

子查询可以在 SELECTINSERTUPDATEDELETE 语句中,同 =、<、>、>=、<=、IN等运算符一起使用。

由於我们都会是以查询资料为主,因此今天就让我们来学习以SELECT为主的子查询用法。

与WHERE一起使用

第一个常用的方法是结合资料的条件筛选。

当我们想要抓出某栏位大於均值的资料时可以这样写:

SELECT 栏位名1, 栏位名2, 栏位名3
FROM 表名
WHERE 栏位名2 > (SELECT AVG(栏位名2)
                 FROM 表名);

还有一种用法可以来查询两表之间的条件筛选:

SELECT 栏位名1, 栏位名2, 栏位名3
FROM 表1
WHERE 栏位名2 IN (SELECT DISTINCT 栏位名2
                 FROM 表2);

这边有一个新的用法DISTINCT,其用意是去重,让我们可以确保每一个资料的不重复。

除了可以放在条件筛选外,我们还可以在FROM中建立一个临时表来做查询,该怎麽做呢?

与FROM一起使用

将查询的结果作为另一个表的查询来源,当我们想要预先筛选某些资料时很常用到此方法。

SELECT 栏位名1, 栏位名2, 栏位名3
FROM (SELECT 栏位名1, 栏位名2, 栏位名3
      FROM 表名
      WHERE 条件 );

同时也可以套入刚刚学到与WHERE一起使用的子查询:

SELECT 栏位名1, 栏位名2, 栏位名3
FROM (SELECT 栏位名1, 栏位名2, 栏位名3
      FROM 表名
      WHERE 条件 )
WHERE 栏位名2 > (SELECT AVG(栏位名2)
                 FROM 表名);

哇~越写越长!是不是越来越有成就感了?(笑)

与SELECT一起使用

最後,子查询也一样可以放在SELECT里面,并传回单值,我们来看看用法~

SELECT 栏位名1, 栏位名2, 栏位名3,(SELECT (栏位名2/栏位名3) AS A
                                 FROM 表名
                                 WHERE A > 10)
FROM 表名;

这边与大家介绍简单和常用的3种,希望大家可以有一个初步的认识,如果想要知道更深入的用法可以参考下方的连结!

接下来我们就会进入的Python的学习,要开始写code啦!

既期待又紧张的烧脑环节,希望可以用轻松有趣的方式简单带大家回顾Python的基础用法~


参考资料:

https://sdwh.dev/posts/2021/02/SQL-Server-SubQuery/

https://chriskang028.medium.com/深入浅出-sql-的子查询-subquery-各项常用技巧-8887731717f3

https://www.mis.nsysu.edu.tw/db-book/PDF/Ch7.pdf

https://www.itread01.com/content/1562603163.html


<<:  DAY19-EXCEL统计分析:何谓变异数分析?

>>:  多容器编排与管理 Docker Compose简介

Day4.Cortex-M 系列 基础探讨

Overview ARM Architecture 从第七代开始,分为三种配置(Profile) A...

KVM介绍+陪看OpenWRT官网

接下来这几天来详细介绍VM并安装软路由,再利用软路由的特性在区网内部署网站和云端 unRaid的Hy...

成为工具人应有的工具包-04 VaultPasswordView

VaultPasswordView 今日来认识 VaultPasswordView ! 他是一个在 ...

自动化初步-试着用pyautogui操作一般软件

import pyautogui import pyperclip import time def ...

Day 9 - Rancher 丛集管理指南 - 架设 K8s(下)

本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...