首页 > 数据库 >10条sql语句掌握

10条sql语句掌握

时间:2023-06-01 13:47:50浏览次数:52  
标签:语句 10 原作者 sql SQL 数据 SELECT population

10个必须掌握的SQL常用语句

原创 RankFan 经济知识综合 2022-12-24 11:08 发表于福建 收录于合集 #sql1个 ## Medium翻译17个

世界上70%的相关性数据可以被储存为表格数据,即类似Excel,Csv类型的数据,如何去查询和分析相关性的数据?对于少量数据,我们可以使用Excel,更多一点数据,我们可以使用Python, pandas 处理大数据 ;那么亿万条数据,我们此时就需要借助 SQL,那么掌握常用的 SQL 需要对处理大型数据非常必要。

我们将介绍10个SQL中常用的分析技巧,参考 10 Core SQL Concepts Every Developer Needs to Know[1]

对SQL有兴趣的同学,想入门学的同学可以观看b站【中字】SQL进阶教程 | 史上最易懂SQL教程!10小时零基础成长SQL大师!![2]

1 SELECT all columns with LIMIT

一般,我们需要了解数据的大概,那么我们一般会选择前5行进行打印,看看具体内容包括哪些!SELECT 命令会选择所有的行、列,全部进行打印时,浪费时间、电脑内存,Limit命令可以查看数据中的前几行。

SELECT * FROM Customers LIMIT 3;
图片原作者提供

Limit在MySQL这种可以正常工作,在其他的SQL中可能需要使用TOP, FETCH FIRST ROWS ONLY

2 WHERE clause

WHERE可以对特定列的值进行过滤。例如,我们过滤来自西班牙的国家,并且返回对应的城市。

SELECT City 
FROM Customers
WHERE Country = "Spain";
图片原作者提供

我们也可以对城市进行 Unique:

SELECT DISTINCT City 
FROM Customers
WHERE Country = "Spain";
图片原作者提供

3 GROUP BY and HAVING clause

当我们想要对数据中相同观测值进行分组时,我们可以使用 GROUP BYHAVING 可以用来过滤加总的数据,常用的包括 sum、count。

HAVING 用来处理加总数据,而WHERE用来处理非加总数据。

我们有世界各国的数据,想要输出人口大于500,000,000的洲:

SELECT continent, SUM(population)
FROM world
GROUP BY continent
HAVING SUM(population)>500000000.  --filter the aggregated values
图片原作者提供

4 Order By clause

Order By 将数据按照选择的列进行升序或者排列:

将选择的数据按照人口降序排列:

SELECT name, population
FROM world
WHERE population > 200000000
ORDER BY population DESC;
图片原作者提供

5 Date Function

时间处理函数依赖于SQL的内核,不同SQL的时间处理函数有所差异,DATEPART 可以提取时间中的年月日。

提取时间中的年、月:

SELECT whn,
DATEPART(YEAR, whn) AS yr,
DATEPART(MONTH, whn) AS mnth
FROM eclipse
图片原作者提供

原作者给自己打的广告:Learn These 10 Python One-Liners to Improve Your Coding![3]

6 Joins

Joins 包括笛卡尔积、内积、外积、Self Join,接下来我们将介绍 Inner、left join 和 right join 。

图片inner

inner 可以输出两个表或者更多表中共同的行,类似数学中的韦恩图,取两个集合的交集。

当我们取两个集合共同id, 并且仅仅输出前五行:

SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID = Customers.CustomerID
LIMIT 5; 
图片原作者提供图片left join

left join 仅仅输出左边表中的所有行,输出结果中右边表不存在的值为Null。

左连表, 按照 Customers.CustomerName进行升序排列:

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName
LIMIT 5;
图片原作者提供图片right join

右连表与左连表相反,返回右表中的所有行,左表不存在的行将填充Null值。

SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
FROM Orders
RIGHT JOIN Employees
ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Orders.OrderID; 
图片原作者提供

如果觉得对连表了解过少,可以阅读:80% of Candidates Got This Join Concept Wrong In Interviews[4]

7 Case When clause

Case When 可以让我们根据现有的数据生成一些新的列,类似于Python、Exce中的if-else语法。

例如,基于国家人口数据,生成新列population_bucket:

SELECT name, population
      ,CASE WHEN population<1000000 THEN 'small'
            WHEN population<10000000 THEN 'medium'
            ELSE 'large'         --ELSE is executed if no condition is satisfied
      END as population_bucket   --name of the new column
FROM world
图片原作者提供

Remark: 没有else时,对应的输出将为 Null

8 Subqueries

子查询在SQL中尤为重要,一旦我们领悟,我们将读懂更为复杂的SQL语句。

例如,输出人口大于俄罗斯的国家的名字:

SELECT name FROM world
WHERE population >
(SELECT population FROM world
WHERE name='Russia')

9 Window function

窗口函数包括以下三种:

  • 加总函数(Aggregate functions):SUM, AVG, MAX, MIN等
  • 排序函数(Ranking functions):RANK, ROW_NUMBER等
  • 分析函数(Analytic functions):LEAD, LED等

另外,我们可以使用Over 语句去定义这些窗口函数,Over 语句和 PARTITION BY 常常联合使用。

例如,对每年每个党派的投票按照降序排列:

SELECT yr,party, votes,
RANK() OVER (PARTITION BY yr ORDER BY votes DESC) as posn
FROM ge
WHERE constituency = 'S14000021'
ORDER BY party,yr
图片原作者提供

更多SQL中窗口函数内容可以查看:Introduction to SQL Window Functions: Part 1[5]

10 Union

Union 常常用来竖直方向组合多个数据集,输入的数据应该具有以下两个特征:

  • 列的的名字和数量是形同的
  • 每列的数据类型是相同的
SELECT DISTINCT City
FROM 
(SELECT City FROM Customers
UNION
SELECT City FROM Suppliers)
LIMIT 5;

例如,组合消费者和供应者所在的城市:

图片原作者提供

END

参考资料

[1]

10 Core SQL Concepts Every Developer Needs to Know:https://medium.com/codex/10-core-sql-concepts-every-developer-needs-to-know-10ed6d1ebb67

[2]

【中字】SQL进阶教程 | 史上最易懂SQL教程!10小时零基础成长SQL大师!!:https://www.bilibili.com/video/BV1UE41147KC?p=4

[3]

Learn These 10 Python One-Liners to Improve Your Coding!:https://medium.com/codex/want-to-write-less-code-in-python-learn-these-10-one-liners-252a8eeacadd

[4]

80% of Candidates Got This Join Concept Wrong In Interviews:https://medium.com/codex/70-of-candidates-got-this-join-concept-wrong-in-interviews-631e4bdc658f

[5]

Introduction to SQL Window Functions: Part 1:https://towardsdatascience.com/fundato-sql-window-functions-part-1-ab61df519973

阅读原文 阅读 5354   经济知识综合 79篇原创内容 收藏此内容的人还喜欢   Linux中的firewalld和iptables怎么用     IT仔的笔记本 不看的原因   如何使用动态 SQL 透视数据     DearMrGao 不看的原因   SQL高级篇~视图和临时表     IT奋斗的青年 不看的原因      

标签:语句,10,原作者,sql,SQL,数据,SELECT,population
From: https://www.cnblogs.com/cherishthepresent/p/17448675.html

相关文章

  • Navicat远程链接mysql数据库问题
    问题描述:docker安装mysql数据后使用Navicat链接mysql后,创建数据库报“1044-Accessdenidforuser'root'...”解决方案:1.登录远程服务器,进入mysql容器dockerexec-itmysql/bin/bash2.mysql-uroot-p->grantallprivilegeson*.*to'root'@'%';->flush......
  • WEB漏洞—SQL注入之堆叠及WAF绕过注入
    1、堆叠查询注入stackedinjections(堆叠注入)从名词的含义就可以看到应该是一堆sql语句(多条)一起执行。在sql语句中以; 结束语句mysql>select*fromusers;+----+----------+------------+|id|username|password|+----+----------+------------+|1|Dumb......
  • 创建,增加,删除mysql表分区
    http://www.2cto.com/database/201503/380348.htmlhttps://wenku.baidu.com/view/629d6cf4ddccda38366baf57.htmlMySQL的表分区详解-查看分区数据量,查看全库数据量 SELECTpartition_namepart,partition_expressionexpr,partition_descriptiondescr,table_rows......
  • 在debian 11上新安装postgresql 13
    1、安装sudoaptinstallpostgresql-all2、建立用户sudosu-postgres,可以免密登录数据库createusermyuserwithpassword'111'CREATEDB;用新用户登录,不出意外应该会报PeerauthenticationfailedforuserXXX,原因是因为/etc/postgresql/13/main/pg_hba.conf中的locala......
  • SQL改写案例6(开窗函数取中位数案例)
    周总找我问个报表SQL实现逻辑的案例,废话不说给他看看。 原SQL:SELECTd.tname姓名,d.spname岗位,d.sum_cnt报单单量,d.min_cnt放款单量,d.date月份FROM(SELECT*FROM(SELECTa.zts_name......
  • sparkSQL原理和使用——一般在生产中,基本都是使用hive做数据仓库存储数据,然后用spark
    一、sparkSQL概述1.1什么是sparkSQLSparkSQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。类似于hive的作用。1.2sparkSQL的特点1、容易集成:安装Spark的时候,已经集成好了。不需要单独安装。2、统一的数据访问方......
  • fortinet sql注入 语义分析检测
    Syntax-basedSQLInjectionDetectionUsingregularexpressionbasedsignaturestodetectSQLinjectionattacksiscoretoaWAFsolutionhoweveritdoesnotgowithoutissues.DuetothenatureoftheSQLlanguagebeingsimilartotheEnglishgrammarfalse......
  • for循环语句——官网资料
     8.Compoundstatements—Python3.11.3documentation  ......
  • SQL语句获取当天,昨天,本周,上周,本月,上月的起始时间和结束时间
    目录今天昨天本周上周本月上月今天SELECTDATE_FORMAT(NOW(),'%Y-%m-%d00:00:00')AS'今天开始';SELECTDATE_FORMAT(NOW(),'%Y-%m-%d23:59:59')AS'今天结束';昨天SELECTDATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL1DAY),'%Y-%m-%d00:00:0......
  • SQL 语法笔记
    ➪SQL  ➪基本类型char/varchar/int/smallint/numeric/real,doubleprecision/float  ➪数据定义createtabledepartment//定义SQL关系 (dept_namevarchar(20),//属性名域buildingvarchar(15),budgetnumeric(12,2),primarykey(dept_name));//......