23篇大数据系列(三)sql基础知识,Python系列学习进阶视频

本文介绍了关系型数据库中的表结构、数据类型(如数值类型、日期类型和字符串类型)、主键、外键、索引、表之间的关系以及SQL查询的基本语法,包括关键字、过滤、分组聚合、去重、排序和常用函数等内容。
摘要由CSDN通过智能技术生成

1.2  表

关系型数据库中的表,通常是指由行和列组成的用于存储数据的二维表。表是数据存储的直接载体,我们的数据通常都需要存储在表中。数据库基本上都是通过表来组织数据的。所以,表也是我们查询并获取数据最直接的对象。

对于表而言,有以下几个特性:

a. 表是由存在关联性的多列组成的,可以存储N多行数据,每行数据称为一条记录,行和列的交叉点唯一确定一个单元格

b. 表中的列名不重复,即列名需唯一

c. 表中的任意一列都只能存储一种数据类型的数据

1.3  数据类型

在不同的数据库管理系统中,支持的数据类型会略有差异,本文就以MySQL为例,介绍几种最常用的数据类型,分别如下所示:

数值类型

类型(有符号)

大小

范围

描述

TINYINT

1字节

(-128 ~ 127)

小整型,通常用于存储一些整型枚举值

INT

4字节

(-2,147,483,648 ~ 2,147,483,647)

整型,使用频率较高

BIGINT

8字节

(-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807)

长整型,通常存储比较大的数值

FLOAT(n,d)

4字节

与n和d的值有关

单精度浮点数(不精准表达)

DOUBLE(n,d)

8字节

与n和d的值有关

双精度浮点数(不精准表达)

DECIMAL(p,d)

与p和d

的值有关

与p和d的值有关

定点数(精准表达)

日期类型

类型

示例

描述

DATE

2019-05-01

日期

TIME

12:23:34

时间

DATETIME

2019-05-01 12:23:34

日期时间

字符串类型

类型

范围

描述

CHAR(n)

n <= 255

定长字符串

VARCHAR(n)

n <= 65535

变长字符串

TEXT

0 - 65535字节

长文本数据

MEDIUMTEXT

0 - 16,777,215字节

中等长度文本数据

上面只是罗列出了几种最常用的数据类型,如果大家接触到了其他不常用的类型,可以自己在网上搜索一下相关的信息。

1.4  主键

主键是一列或多列的组合,用于标识表中唯一的一条记录。所以,它天然的一个属性就是不重复性,也不允许为NULL值。通常我们会使用自增的整型值来作为主键,由数据库管理系统来维护,既能保证唯一性,又使用起来很方便。一个表的主键,通常也会作为其他表引用的对象,即后面要讲到的外键。

1.5  外键

外键通常用来建立两张表之间的关联关系,一个表的外键通常是与之关联的另一个表的主键。这样在进行关联查询时,就可以通过两个表外键和主键之间的关系,将两张表连接起来,形成一张中间表,将两张表的信息融合,产生更大的价值。

1.6  索引

如果你想快速找到一本书中,你感兴趣的部分,你就会去查找目录,目录可以帮你快速定位到你想看的内容在哪一页。对于数据库中的表来说,索引就相当于是表的目录。**其存在的主要目的就是为了加快查询速度。**当然,索引也还有一些其他用途,其设计原理也是非常巧妙,我们会在下一篇SQL进阶文章中,详细讲解这块内容。

1.7  表关系

在关系型数据库中,表和表之间的关系通常有三种,1对1、1对多、多对多。为方便描述,我们假定有两张表,分别为表A和表B。

  • 1对1,是指表A和表B通过某字段关联后,表A中的一条记录最多对应表B中的一条记录,表B中的一条记录也最多对应表A中的一条记录。

  • 1对多,是指表A和表B通过某字段关联后,表A中的一条记录可能对应表B中的多条记录,而表B中的一条记录最多对应表A中的一条记录。

  • 多对多,是指表A和表B通过某字段关联后,表A中的一条记录可能对应表B中的多条记录,而表B中的一条记录可能对应表A中的多条记录。

1对1 和 1对多关系,通常使用外键引用对应表的主键就可以表达。而多对多关系,通常需要使用中间表来表达,中间表中记录了两张表的主键的对应关系。

1.8  视图

如果一条SQL的结果在日常查询中经常被用到,我们通常就会考虑使用视图将其存储起来,下次再使用时直接读取视图,就会执行视图对应的SQL语句,非常地简洁方便。所以,视图就是一张虚拟的表。不过,值得注意的是,视图存储的是SQL语句,而不是SQL执行后的结果,其结果是每次执行时动态生成的,可能每次读取都会有变化。

1.9  集合

集合在数学领域表示“(各种各样的)事物的总和”,在数据库领域表示记录的集合。具体来说,表、视图和查询的执行结果都是记录的集合。是集合,就可以进行集合运算,如求并集、交集、差集等。另外,查询的执行结果也是集合,那么就可以把查询的结果再当做一个表,继续基于这个表做分析。这个便是子查询的理论基础。在第4部分,我们会详细讲到子查询。

2  SQL查询的基本语法


SQL是结构化查询语言(Structural Query Language)的简称,是开发者与数据库管理系统对话的语言。SQL用关键字、表名、列名、操作符等组合而成的一条语句,用来描述操作的内容。SQL是有国际标准的,因此其通用性不言而喻。

2.1  关键字

SQL有很多关键字,每个关键字的含义和用法都不相同。本文只罗列出在数据分析工作中与查询分析相关的常用的基础关键字及其含义,其中有一些会在下面的段落中详细讲解,如下表格所示:

关键字

描述

SELECT

后面跟用户想获取的列或计算公式

FROM

后面跟要读取数据的表

LEFT/RIGHT/INNER JOIN

后面跟要进行关联的表

ON

后面跟关联条件

WHERE

后面跟过滤条件,只有满足条件的行才会保留下来

GROUP BY

后面跟用来分组的列或计算公式

HAVING

后面跟分组后的过滤条件

ORDER BY

后面跟用于排序的列或计算公式

LIMIT

从结果中选取前N行,后面跟具体行数

DISTINCT

对后面跟的列进行去重

COUNT

对指定的一列或多列计数,会忽略掉NULL值

SUM

对指定的列求和,会忽略掉NULL值

AVG

对指定的列求平均值,会忽略掉NULL值

MIN

求指定列的最小值

MAX

求指定列的最大值

ASC/DESC

ASC表示升序排列,DESC表示降序排列,与ORDER BY配合使用

[NOT] IN

多条件搜索

[NOT] LIKE

模糊匹配

REGEXP

正则匹配

AND/OR/NOT

逻辑判断符

[NOT] BETWEEN AND

区间限定

[NOT] EXISTS

判断集合是否为空

IS [NOT] NULL

判断是否为NULL值

UNION/UNION ALL

求两个集合的并集,UNION会剔除结果集中的重复记录,UNION ALL则会保留重复记录

AS

取别名或用于使用查询结果集创建表

*

单独出现或出现在"."后面表示表中的所有列,出现在两个字段间表示乘法

2.2  书写规则

SQL的书写规则非常简单灵活,但是如果不注意,也是很容易犯错的,工作中常用的规则如下:

a. 关键字、表名和列名等大小写不敏感;

b. 使用全英文半角(关键字、空格、符号)来书写;

c. SQL语句以分号结尾;

d. SQL语句的单词及运算符之间需使用半角空格或换行符来进行分隔;

e. 函数名和括号是一个整体,中间不能有空格,空参数函数括号不能省略;

f. 数字常量直接书写,如 20 ;

g. 日期和字符串常量需要使用英文单引号包裹起来,如 ‘2002-10-01 12:23:21’,‘Lily’;

h. 注释的三种写法:单行注释(#,–)和多行注释(/* */)。单行注释推荐使用"–"。

2.3  简单查询

最简单的查询语句莫过于"SELECT * FROM A",其中A表示数据表名A,这条

SQL的含义是从表A中查询出所有列的所有数据。"*"代表表A中的所有列,是一种简写形式。我们就从这条最简单的SQL开始,逐渐添加关键字,最后变成一条复杂的SQL。

接下来我们要讲解的简单查询,都是针对单个表的查询。针对单表的查询虽然比较简单,但是却是复杂查询的基础。为了方便演示,我们先定义一个数据表student,用于存储学生的信息,表里的数据如下所示:

图片

从左到右列的含义依次为学号、姓名、年龄、英语成绩、数学成绩、总成绩。

2.4  过滤

如果要对表中的数据进行过滤,只保留满足我们需求的数据,那就要用到WHERE关键字了。WHERE关键字后跟的是由逻辑运算符连接的一个或多个表达式,每个表达式的最终结果为TRUE或FALSE,只保留表达式结果为TRUE的行。

例如,我们要获取英文成绩不合格的学生姓名和学号,则对应的SQL为

SELECT sno, name FROM student WHERE eng_score < 60运行结果如下:

sno

name

22270202

Lily

22270203

Tom

2.5  运算符

运算符,顾名思义就是用于做运算的符号。常见的运算符有三种,比较运算符、算术运算符和逻辑运算符。

比较运算符

含义

=

等值比较

>

大于

<

小于

>=

大于或等于

<=

小于或等于

<>

不等于

不等于的判断,目前绝大部分的数据库管理系统厂商也都支持了"!=“运算符,与”<>"表达的含义相同。

算术运算符

含义

+

加法运算

-

减法运算

*

乘法运算

/

除法运算

算术运算符在书写时可以紧挨着字段名写,如eng_score-math_score,所以字段名和表名的命名中不能使用中划线(“-”),否则它会被误判为是在做减法运算的。

逻辑运算符

含义

AND

与,并且

OR

或,或者

NOT

非,取反

当存在多种逻辑运算符时,为了避免歧义,需要使用括号来界定执行的先后顺序,使用括号组织的表达式,可读性也会更强。建议大家不要去记忆逻辑运算符的优先级,容易记混,而且写出的SQL可读性比较差,最好是使用括号,来厘清多个逻辑条件的关系,清晰易懂,可读性强,不容易出错。

了解了上面这些运算符,我们便可以通过组合各种运算符,书写出WHERE后面复杂的表达式,来满足我们的过滤需求了。

2.6  分组聚合

分组聚合是指,我们可以将表中的数据,根据某一列或多列进行分组,然后将其他列的值进行聚合计算,如计数、求和和求平均值等。用到的关键字是GROUP BY,对于分组后的计算结果,我们还可以使用HAVING进行过滤。

例如,从student表中,求出不同年龄的人数、英语总成绩和数学成绩的平均值,且过滤掉。对应的SQL为

SELECT age, COUNT(sno) AS student_num, SUM(eng_score) AS sum_eng_score,`` AVG(math_score) AS avg_math_score``FROM student``GROUP BY age``HAVING avg_math_score >= 60

运行后结果如下所示:

age

student_num

sum_eng_score

avg_math_score

10

2

138

70.5

12

1

89

82

这里需要注意的是,出现在group by后面的字段或计算公式,必须出现在对应的select的后面,并且除了这些字段或计算公式外,select后面不能有其他字段,只能使用聚合函数。

2.7  去重

DISTINCT关键字用于对一列或多列去重,返回剔除了重复行的结果。DISTINCT对多列去重时,必须满足每一列都相同时,才认为是重复的行进行剔除。DISTINCT不会过滤掉NULL值,但去重后的结果只会保留一个NULL值。

例如,从student表中,找出有几种年龄的学生,即求出去重后的年龄。对应的SQL为

SELECT DISTINCT age FROM student

运行后的结果如下所示:

age

10

11

12

2.8  排序

日常生活场景里,我们经常对各种各样的排名比较感兴趣,比较关注排在前面的内容。在数据库中,求出排名,就需要用到ORDER BY子句。ORDER BY通常配合ASC和DESC使用,可以根据一列或多列,进行升序或降序排列,之后使用LIMIT取出满足条件的前N行。

例如,从student表中,求出数学成绩最好的前3名学生的姓名、年龄和其数学成绩。对应的SQL如下:

SELECT name, age, math_scoreFROM studentORDER BY math_score DESC``LIMIT 3

运行后的结果为:

name

age

math_score

Jack

12

82

Alice

10

76

Tom

10

65

2.9  增加常量列

增加常量列,即把某一固定的常量值做为一列添加到我们的结果数据中。这种做法的应用场景,通常是结果集中所有的行在某个属性上值是相同的,这时便可以通过增加常量列的方式,来增加这一列。我们通过下面的例子来演示其语法形式。

例如,从student表中,查询英语成绩大于80分的学生的姓名和学号,并把他们都分入A班。对应的SQL如下:

SELECT sno, name, ‘A’ AS class FROM student WHERE eng_score > 80

运行后的结果为:

sno

name

class

22270201

Alice

A

22270204

Jack

A

从示例中可以看出,直接通过"常量 AS 新列名"的方式就可以增加常量列,非常地方便。

3  数据库函数、谓词和CASE表达式


SQL之所以具有强大的分析表达能力,其中一个重要原因,就是它具备丰富的函数,通过这些函数的组合可以实现对数据的复杂处理,最终得到我们想要的数据。另外一方面,SQL也有丰富的谓词来对数据进行判断,匹配出符合我们需求的数据。CASE表达式是一种多条件判断表达式,可以根据不同条件返回不同的值,类似于编程语言中的IF ELSE。

3.1  聚合函数

聚合函数,又称分析函数,是将一组值通过聚合分析后得到一个值,因此得名聚合函数。使用频率最高的聚合函数有5个,如下表所示

函数名

含义

COUNT

计数

SUM

求和

AVG

求平均值

MIN

求最小值

MAX

求最大值

聚合函数有一个共同的特点,即在计算过程中都会忽略掉NULL值,因为对NULL的聚合是没有任何意义的。COUNT、SUM和AVG三个函数还可以和DISTINCT配合使用,其含义为先对目标列进行去重,之后再对去重后的结果聚合。SUM和AVG只能应用于一列,且列的数据类型为数值型。MIN和MAX也是只能应用于一列,不过除了支持数值型外,还支持字符串类型和日期类型。COUNT可以应用于一列或多列,而且不限制列的类型。

3.2  算术函数

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56iL5bqP5aqb56eD56eD,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值