先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
正文
SQL语言由用于处理数据库和数据库对象的命令和函数组成:
- DDL(data definition language)数据定义语言,用户定义和管理sql数据库中所有对象的语言。 主要命令:create、alter、drop等
- DML(data manipulation language)数据操作语言。 主要命令:select、update、insert、delete等
- DCL(date control language)数据库控制功能。主要命令:grant、deny、revoke、commit、savepoint、rollback等
2**、SQL的特点******
- SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体
- 面向集合的语言
- 非过程语言
- 类似自然语言,简洁易用
- 自含式语言,又是嵌入式语言。可独立使用,也可嵌入到宿主语言中。
3**、SQL发展简史******
SQL发展简史如下:
- 1986年,ANSI X3.135-1986,ISO/IEC 9075:1986,SQL-86
- 1989年,ANSI X3.135-1989,ISO/IEC 9075:1989,SQL-89
- 1992年,ANSI X3.135-1992,ISO/IEC 9075:1992,SQL-92(SQL2)
- 1999年,ISO/IEC 9075:1999,SQL:1999(SQL3)
- 2003年,ISO/IEC 9075:2003,SQL:2003(SQL4)
- 2011年,ISO/IEC 9075:200N,SQL:2011(SQL5)
//注:
ANSI是美国国家标准学会(American National Standards Institute)的英文简称,成立于1918年。
ISO:国际标准化组织(International Organization for Standardization)。
IEC:国际电工委员会(International Electrotechnical Commission)。
//
二、openGauss数据库的“SQL******”******
openGauss数据库支持的SQL标准,默认支持SQL2、SQL3和SQL4的主要特性。当然了, 一般说到数据库的SQL语句,就离不开两个方面: 一是数据类型,二是sql语句基本语法。下文就此简单阐述一下:
1、数据类型(常用)
openGauss数据库支持的数据类型涵盖非常广, 几乎包含所有形式的数据类型,如:数值类型、货币类型、布尔类型、字符类型、二进制类型、日期/时间类型、几何类型、网络地址类型、位串类型、文本搜索类型、UUID类型、JSON/JSONB类型、HLL数据类型、范围类型、对象标识符类型、伪类型、列存表支持的数据类型、XML类型、账本数据库使用的数据类型等。 但是实际业务场景中大部分类型用到的比较少,具体遇到时可参考官方文档说明。
下文参考并整理了日常应用开发中常用的主要数据类型,主要包含:数值类型、货币类型、布尔类型、字符类型、日期/时间类型等。
数值类型
表1:整数数据类型
名称 | 描述 | 存储空间 | 范围 |
TINYINT | 微整数,别名为INT1。 | 1字节 | 0 ~ 255 |
SMALLINT | 小范围整数,别名为INT2。 | 2字节 | -32,768 ~ +32,767 |
INTEGER | 常用的整数,别名为INT4 / BINARY_INTEGER。 | 4字节 | -2,147,483,648 ~ +2,147,483,647 |
BIGINT | 大范围的整数,别名为INT8。 | 8字节 | -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 |
int16 | 十六字节的大范围证书,目前不支持用户用于建表等使用。 | 16字节 | -170,141,183,460,469,231,731,687,303,715,884,105,728 ~ +170,141,183,460,469,231,731,687,303,715,884,105,727 |
****说明:****TINYINT、SMALLINT、INTEGER、BIGINT和INT16类型存储各种范围的数字,也就是整数。试图存储超出范围以外的数值将会导致错误。
常用的类型是INTEGER,因为它提供了在范围、存储空间、性能之间的最佳平衡。一般只有取值范围确定不超过SMALLINT的情况下,才会使用SMALLINT类型。而只有在INTEGER的范围不够的时候才使用BIGINT,因为前者相对快得多。
表********2:任意精度型
名称 | 描述 | 存储空间 | 范围 |
NUMERIC[(p[,s])], DECIMAL[(p[,s])] | 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 说明: p为总位数,s为小数位数。 | 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 | 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 |
NUMBER[(p[,s])] | NUMERIC类型的别名。 | 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 | 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 |
****说明:****与整数类型相比,任意精度类型需要更大的存储空间,其存储效率、运算效率以及压缩比效果都要差一些。在进行数值类型定义时,优先选择整数类型。当且仅当数值超出整数可表示最大范围时,再选用任意精度类型。
使用Numeric/Decimal进行列定义时,建议指定该列的精度p以及标度s。
表3:序列整型
名称 | 描述 | 存储空间 | 范围 |
SMALLSERIAL | 二字节序列整型。 | 2字节 | -32,768 ~ +32,767 |
SERIAL | 四字节序列整型。 | 4字节 | -2,147,483,648 ~ +2,147,483,647 |
BIGSERIAL | 八字节序列整型。 | 8字节 | -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 |
LARGESERIAL | 默认插入十六字节序列整形,实际数值类型和numeric相同。 | 变长类型,每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 | 小数点前最大131,072位,小数点后最大16,383位。 |
说明:
SMALLSERIAL、SERIAL、BIGSERIAL和LARGESERIAL类型不是真正的类型,只是为在表中设置唯一标识做的概念上的便利。因此,创建一个整数字段,并且把它的缺省数值安排为从一个序列发生器读取。应用了一个NOT NULL约束以确保NULL不会被插入。在大多数情况下用户可能还希望附加一个UNIQUE或PRIMARY KEY约束避免意外地插入重复的数值,但这个不是自动的。最后,将序列发生器从属于那个字段,这样当该字段或表被删除的时候也一并删除它。目前只支持在创建表时候指定SERIAL列,不可以在已有的表中,增加SERIAL列。另外临时表也不支持创建SERIAL列。因为SERIAL不是真正的类型,也不可以将表中存在的列类型转化为SERIAL。
表4:浮点类型
名称 | 描述 | 存储空间 | 范围 |
REAL, FLOAT4 | 单精度浮点数,不精准。 | 4字节 | -3.402E+38~3.402E+38,6位十进制数字精度。 |
DOUBLE PRECISION, FLOAT8 | 双精度浮点数,不精准。 | 8字节 | -1.79E+308~1.79E+308,15位十进制数字精度。 |
FLOAT[§] | 浮点数,不精准。精度p取值范围为[1,53]。 说明: p为精度,表示总位数。 | 4字节或8字节 | 根据精度p不同选择REAL或DOUBLE PRECISION作为内部表示。如不指定精度,内部用DOUBLE PRECISION表示。 |
BINARY_DOUBLE | 是DOUBLE PRECISION的别名。 | 8字节 | -1.79E+308~1.79E+308,15位十进制数字精度。 |
DEC[(p[,s])] | 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 说明: p为总位数,s为小数位位数。 | 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 | 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 |
INTEGER[(p[,s])] | 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 | 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 | - |
货币类型
货币类型存储带有固定小数精度的货币金额
名称 | 存储容量 | 描述 | 范围 |
money | 8 字节 | 货币金额 | -92233720368547758.08 到 +92233720368547758.07 |
布尔类型
名称 | 描述 | 存储空间 | 取值 |
BOOLEAN | 布尔类型 | 1字节。 | * true:真 |
- false:假
- null:未知(unknown)
|
说明:
“真”值的有效文本值是:
TRUE、‘t’、‘true’、‘y’、‘yes’、‘1’ 、‘TRUE’、true、整数范围内12^63-1、整数范围内-1-2^63。
“假”值的有效文本值是:FALSE、‘f’、‘false’、‘n’、‘no’、‘0’、0、‘FALSE’、false。
使用TRUE和FALSE是比较规范的用法(也是SQL兼容的用法)。
字符类型
名称 | 描述 | 存储空间 |
CHAR(n) CHARACTER(n) NCHAR(n) | 定长字符串,不足补空格。n是指字节长度,如不带精度n,默认精度为1。 | 最大为10MB。 |
VARCHAR(n) CHARACTER VARYING(n) | 变长字符串。PG兼容模式下,n是字符长度。其他兼容模式下,n是指字节长度。 | 最大为10MB。 |
VARCHAR2(n) | 变长字符串。是VARCHAR(n)类型的别名。n是指字节长度。 | 最大为10MB。 |
NVARCHAR2(n) | 变长字符串。n是指字符长度。 | 最大为10MB。 |
NVARCHAR(n) | 变长字符串。是NVARCHAR2(n)类型的别名。n是指字符长度。 | 最大为10MB。 |
TEXT | 变长字符串。 | 最大为1GB-1,但还需要考虑到列描述头信息的大小, 以及列所在元组的大小限制(也小于1GB-1),因此TEXT类型最大大小可能小于1GB-1。 |
CLOB | 文本大对象。是TEXT类型的别名。 | 最大为1GB-1,但还需要考虑到列描述头信息的大小, 以及列所在元组的大小限制(也小于1GB-1),因此CLOB类型最大大小可能小于1GB-1。 |
日期**/时间**类型
名称 | 描述 | 存储空间 |
DATE | 日期和时间。 | 4字节(兼容模式A下存储空间大小为8字节) |
TIME [§] [WITHOUT TIME ZONE] | 只用于一日内时间。 p表示小数点后的精度,取值范围为0~6。 | 8字节 |
TIME [§] [WITH TIME ZONE] | 只用于一日内时间,带时区。 p表示小数点后的精度,取值范围为0~6。 | 12字节 |
TIMESTAMP[§] [WITHOUT TIME ZONE] | 日期和时间。 p表示小数点后的精度,取值范围为0~6。 | 8字节 |
TIMESTAMP[§][WITH TIME ZONE] | 日期和时间,带时区。TIMESTAMP的别名为TIMESTAMPTZ。 p表示小数点后的精度,取值范围为0~6。 | 8字节 |
SMALLDATETIME | 日期和时间,不带时区。 精确到分钟,秒位大于等于30秒进一位。 | 8字节 |
INTERVAL DAY (l) TO SECOND § | 时间间隔,X天X小时X分X秒。* l:天数的精度,取值范围为0~6。兼容性考虑,目前未实现具体功能。 |
- p:秒数的精度,取值范围为0~6。小数末尾的零不显示。
| 16字节 |
| INTERVAL [FIELDS] [ § ] | 时间间隔。* fields:可以是YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、DAY TO HOUR、DAY TO MINUTE、DAY TO SECOND、HOUR TO MINUTE、HOUR TO SECOND、MINUTE TO SECOND。 - p:秒数的精度,取值范围为0~6,且fields为SECOND、DAY TO SECOND、HOUR TO SECOND或MINUTE TO SECOND时,参数p才有效。小数末尾的零不显示。
| 12字节 |
| reltime | 相对时间间隔。格式为: X years X mons X days XX:XX:XX。 采用儒略历计时,规定一年为365.25天,一个月为30天,计算输入值对应的相对时间间隔,输出采用POSTGRES格式。 | 4字节 |
| abstime | 日期和时间。格式为: YYYY-MM-DD hh:mm:ss+timezone 取值范围为1901-12-13 20:45:53 GMT~2038-01-18 23:59:59 GMT,精度为秒。 | 4字节 |
2**、openGauss数据库S**QL基本语法
SQL 语法主要分为三个类型DDL、DML、DCL,对应13个动词:
- DDL(data definition language)数据定义语言,用户定义和管理sql数据库中所有对象的语言。 主要命令:create、alter、drop等
- DML(data manipulation language)数据操作语言。 主要命令:select、update、insert、delete等
- DCL(date control language)数据库控制功能。主要命令:grant、deny、revoke、commit、savepoint、rollback等
常见语法示例,主要包括: 创建用户、创建和管理数据库、创建表、插入数据、更新数据、查看数据、删除数据等
******创建用户(**CREATE USER)
–创建用户jim,登录密码为xxxxxxxxx。
openGauss=# CREATE USER jim PASSWORD ‘xxxxxxxxx’;
说明:必须至少8个字符,且至少包含3种字符(要符合常规密码安全度设置要求)。
–下面语句与上面的等价。
openGauss=# CREATE USER kim IDENTIFIED BY ‘xxxxxxxxx’;
–如果创建有“创建数据库”权限的用户,则需要加CREATEDB关键字。
openGauss=# CREATE USER dim CREATEDB PASSWORD ‘xxxxxxxxx’;
–将用户jim的登录密码由xxxxxxxxx修改为Abcd@123。
openGauss=# ALTER USER jim IDENTIFIED BY ‘Abcd@123’ REPLACE ‘xxxxxxxxx’;
说明:新密码不能使用之前用过的密码。
–为用户jim追加CREATEROLE权限。
openGauss=# ALTER USER jim CREATEROLE;
–将enable_seqscan的值设置为on, 设置成功后,在下一会话中生效。
openGauss=# ALTER USER jim SET enable_seqscan TO on;
–重置jim的enable_seqscan参数。
openGauss=# ALTER USER jim RESET enable_seqscan;
–锁定jim帐户。
openGauss=# ALTER USER jim ACCOUNT LOCK;
–删除用户。
openGauss=# DROP USER kim CASCADE;
openGauss=# DROP USER jim CASCADE;
openGauss=# DROP USER dim CASCADE;
说明:CASCADE,删除用户关联的所有对象。
创建和管理数据库
–使用如下命令创建一个新的数据库db_tpcc。
openGauss=# CREATE DATABASE db_tpcc;
–查看数据库
使用\l元命令查看数据库系统的数据库列表。
openGauss=# \l
使用如下命令通过系统表pg_database查询数据库列表。
openGauss=# SELECT datname FROM pg_database;
注:数据库名称遵循SQL标识符的一般规则。当前角色自动成为此新数据库的所有者。
如果一个数据库系统用于承载相互独立的用户和项目,建议把它们放在不同的数据库里。
如果项目或者用户是相互关联的,并且可以相互使用对方的资源,则应该把它们放在同一个数据库里,但可以规划在不同的模式中。模式只是一个纯粹的逻辑结构,某个模式的访问权限由权限系统模块控制。
创建数据库时,若数据库名称长度超过63字节,server端会对数据库名称进行截断,保留前63个字节,因此建议数据库名称长度不要超过63个字节。
–修改数据库
用户可以使用如下命令修改数据库属性(比如:owner、名称和默认的配置属性)。
使用以下命令为数据库设置默认的模式搜索路径。
openGauss=# ALTER DATABASE db_tpcc SET search_path TO pa_catalog,public;
–使用如下命令为数据库重新命名。
openGauss=# ALTER DATABASE db_tpcc RENAME TO human_tpcds;
–删除数据库
用户可以使用DROP DATABASE命令删除数据库。这个命令删除了数据库中的系统目录,并且删除了磁盘上带有数据的数据库目录。用户必须是数据库的owner或者系统管理员才能删除数据库。当有人连接数据库时,删除操作会失败。删除数据库时请先连接到其他的数据库。
使用如下命令删除数据库:
openGauss=# DROP DATABASE db_tpcc;
创建表(CREATE TABLE)
–表是建立在数据库中的,在不同的数据库中可以存放相同的表。甚至可以通过使用模式在同一个数据库中创建相同名称的表。创建表前请先规划存储模型。
openGauss=# CREATE TABLE customer_t1
(
c_customer_sk integer,
c_customer_id char(5),
c_first_name char(6),
c_last_name char(8)
);
当结果显示为如下信息,则表示创建成功。
CREATE TABLE
其中c_customer_sk 、c_customer_id、c_first_name和c_last_name是表的字段名,integer、char(5)、char(6)和char(8)分别是这四字段名称的类型。
向表中插入数据
–向表中插入数据前,意味着表已创建成功。
向表customer_t1中插入一行:
数据值是按照这些字段在表中出现的顺序列出的,并且用逗号分隔。通常数据值是文本(常量),但也允许使用标量表达式。
openGauss=# INSERT INTO customer_t1(c_customer_sk, c_customer_id, c_first_name) VALUES (3769, ‘hello’, ‘Grace’);
如果用户已经知道表中字段的顺序,也可无需列出表中的字段。例如以下命令与上面的命令效果相同。
openGauss=# INSERT INTO customer_t1 VALUES (3769, ‘hello’, ‘Grace’);
如果用户不知道所有字段的数值,可以忽略其中的一些。没有数值的字段将被填充为字段的缺省值。例如:
openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_first_name) VALUES (3769, 'Grace');
openGauss=# INSERT INTO customer_t1 VALUES (3769, 'hello');
用户也可以对独立的字段或者整个行明确缺省值:
openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', DEFAULT);
openGauss=# INSERT INTO customer_t1 DEFAULT VALUES;
如果需要在表中插入多行,请使用以下命令:
openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES
(6885, 'maps', 'Joes'),
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)**
![img](https://img-blog.csdnimg.cn/img_convert/089e3483251fed9df06a86c8c0e402ae.png)
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
用户也可以对独立的字段或者整个行明确缺省值:
openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', DEFAULT);
openGauss=# INSERT INTO customer_t1 DEFAULT VALUES;
如果需要在表中插入多行,请使用以下命令:
openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES
(6885, 'maps', 'Joes'),
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)**
[外链图片转存中...(img-LH9p832i-1713327037386)]
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**