PostgreSQL核心之SQL基础学习

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
简介: PostgreSQL核心之SQL基础学习

一、SQL简介

SQL(Structured Query Language)是结构化查询语言的简称,是操作数据库的语言

SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统。

SQL 可与数据库管理系统协同工作,比如 DB2、MS SQL Server、Oracle等

SQL 语句用于取回和更新数据库中的数据,原则上SQL语句都会使用分号结尾。

SQL根据操作目的可以分为DDL、DML和DCL。

(一)SQL语句及其种类

SQL 用关键字、表名、列名等组合而成的一条语句(SQL 语句)来描述操作的内容。根据对RDBMS 赋予的指令种类的不同,SQL 语句可以分为DML、DCL、DDL三类。

1、DDL

DDL(Data Definition Language,数据定义语言) 用来创建或者删除存储

数据用的数据库以及数据库中的表等对象。DDL 包含以下几种指令。

CREATE:创建数据库和表等对象

DROP:删除数据库和表等对象

ALTER:修改数据库和表等对象的结构

2、DML

DML(Data Manipulation Language,数据操纵语言) 用来查询或者变更表中的记录。

DML 包含以下几种指令:

SELECT:查询表中的数据

INSERT:向表中插入新数据

UPDATE:更新表中的数据

DELETE:删除表中的数据

3、DCL

DCL(Data Control Language,数据控制语言) 用来确认或者取消对数据库中的数据进行的变更。

除此之外,还可以对RDBMS 的用户是否有权限。操作数据库中的对象(数据库表等)进行设定。

DCL 包含以下几种指令:

COMMIT:确认对数据库中的数据进行的变更

ROLLBACK:取消对数据库中的数据进行的变更

GRANT:赋予用户操作权限

REVOKE:取消用户的操作权限

(二)SQL 的基本书写规则

常数的书写方式是固定的。字符串和日期常数需要使用单引号(’)括起来。

数字常数无需加注单引号(直接书写数字即可)。

字符串格式 ‘abc’

日期格式有多种(’26 Jan 2010’ 或’10/01/26’ 等),建议格式’2010-01-26’

数字格式不需要使用任何符号标识,写成1000 这样即可

单词需要用半角空格或者换行来分隔

SQL 语句的单词之间需使用半角空格或换行符来进行分隔。

如下这种未加分隔的语句会发生错误,无法正常执行。

○ CREATE TABLE Product()

× CREATETABLE Product

× CREATE TABLEProduct

但是不能使用全角空格作为单词的分隔符,否则会发生错误,出现无法预期的结果。

(三)标准SQL和特定的SQL

每隔几年,ANSI(美国国家标准协会)或ISO(国际标准化组织)等便会修订SQL 的标准,进行语法的修订并追加新功能。

1986 年,ANSI 首次制定了SQL 的标准,之后又进行了数次修订。

修订后的标准以修订年份来命名,例如SQL:1999、SQL:2003、SQL:2008 等。

以这些标准为基准的SQL 就是标准SQL。

SQL 的标准并不强制“每种RDBMS 都必须使用”。虽然支持标准SQL的RDBMS 越来越多,但还是存在标准SQL 无法执行的情况。这时就需要使用只能在特定RDBMS 中使用的特殊SQL 语句。

1、SELECT

PostgreSQL可以通过SQL命令select来完成用户数据的查询,基本语法如下:

  1.    select ColumnName from TableName [where] ;

关于该命令,继续扩展常见使用:

1、字段输出别名:columnname可以使用as关键字定义输出时的别名

2、过滤:表名之后可以跟where条件进行过滤

3、分组、排序:可以通过group by、order by完成输出的分组、排序

4、限制输出:可以通过 limit .. offset ..完成输出个数的限制

列和表别名(Aliases)可以提高复杂SQL的可读性,可以减少输入量

示例:

  1. SELECT ename, dname FROM emp e, dept d  WHERE e.deptno = d.deptno;

2、INSERT

在PostgreSQL可以通过SQL命令insert into来完成用户数据的插入

基本语法如下:

  1. insert into TableName (Column1,..) values (Value1,..);

备注:该命令中可以不写Column,在表名后直接跟Value关键字,这表示insert插入的数据按照创建表时定义的column顺序依次插入,这种情况下允许value值的个数小于字段个数,缺少的字段值以null替代插入

3、UPDATE

在PostgreSQL可以通过SQL命令update来完成用户数据的更新

基本语法如下:

  1. update TableName set ColumnName = NewValue,…… [Where conditions];

关于该命令:

1、若不使用where条件进行过滤,则update命令会完成所有的目标字段值的更新

2、ColumnName = NewValue可以设置多组,相互之间以逗号分隔,从而同时完成多条更新

4、DELETE

在PostgreSQL可以通过SQL命令delete来完成用户数据的插入,基本语法如下:

  1.    delete from TableName [Where conditions];

可以使用where条件过滤,这表示删除该表中的所有数据

(四)标识符和关键字

数据库名是一个标识符,表名也是一个标识符,还有一种标识符是:分隔符和引号。是由引号包围的任意字符组成的。

分隔符也是一种标识符,不是一个关键字,所以”select”可以作为一个表名或者列名。没有引号的select是一个关键字,当作为一个表名或列名的时候会导致解析错误。

引号标识符能包含任何的字符,除了编码为0的字符。

示例:以下两句sql是等效的。

UPDATE my_table SET a = 5;

UPDATE “my_table” SET “a” = 5;

(五)SQL Functions

可以在 SELECT 语句以及WHERE 中使用,包括

  1. String Functions
  2. Format Functions
  3. Date & Time Fuctions
  4. Aggregate Functions
  5. **示例**
  6. SELECT lower(name) FROM departments;
  7. SELECT * FROM departments WHERE lower(name) = 'development';

(六)常量的转义

在字符串前写字母E (大写或者小写)的方法声明C风格的转义字符串常量

例如:SELECT E’\tfoo’; 将返回“__foo”

例如:select E’\‘; 将返回“\” 请问:SELECT ‘\’;返回什么?

位串常量:以B开头加单引号包括的0和1组成位串常量

例如:SELECT B’1001’::int; 将返回9

以X开头加十六进制数组成

请问:SELECT X’0B’::int; 将返回11

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
2月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
5月前
|
SQL 关系型数据库 MySQL
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
465 62
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
|
5月前
|
SQL 关系型数据库 PostgreSQL
CTE vs 子查询:深入拆解PostgreSQL复杂SQL的隐藏性能差异
本文深入探讨了PostgreSQL中CTE(公共表表达式)与子查询的选择对SQL性能的影响。通过分析两者底层机制,揭示CTE的物化特性及子查询的优化融合优势,并结合多场景案例对比执行效率。最终给出决策指南,帮助开发者根据数据量、引用次数和复杂度选择最优方案,同时提供高级优化技巧和版本演进建议,助力SQL性能调优。
564 1
|
11月前
|
SQL 存储 关系型数据库
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
本文详细介绍了MySQL中的SQL语法,包括数据定义(DDL)、数据操作(DML)、数据查询(DQL)和数据控制(DCL)四个主要部分。内容涵盖了创建、修改和删除数据库、表以及表字段的操作,以及通过图形化工具DataGrip进行数据库管理和查询。此外,还讲解了数据的增、删、改、查操作,以及查询语句的条件、聚合函数、分组、排序和分页等知识点。
1021 55
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
|
9月前
|
SQL 关系型数据库 OLAP
云原生数据仓库AnalyticDB PostgreSQL同一个SQL可以实现向量索引、全文索引GIN、普通索引BTREE混合查询,简化业务实现逻辑、提升查询性能
本文档介绍了如何在AnalyticDB for PostgreSQL中创建表、向量索引及混合检索的实现步骤。主要内容包括:创建`articles`表并设置向量存储格式,创建ANN向量索引,为表增加`username`和`time`列,建立BTREE索引和GIN全文检索索引,并展示了查询结果。参考文档提供了详细的SQL语句和配置说明。
281 2
|
SQL 安全 前端开发
Web学习_SQL注入_联合查询注入
联合查询注入是一种强大的SQL注入攻击方式,攻击者可以通过 `UNION`语句合并多个查询的结果,从而获取敏感信息。防御SQL注入需要多层次的措施,包括使用预处理语句和参数化查询、输入验证和过滤、最小权限原则、隐藏错误信息以及使用Web应用防火墙。通过这些措施,可以有效地提高Web应用程序的安全性,防止SQL注入攻击。
439 2
|
SQL 存储 数据库
SQL学习一:ACID四个特性,CURD基本操作,常用关键字,常用聚合函数,五个约束,综合题
这篇文章是关于SQL基础知识的全面介绍,包括ACID特性、CURD操作、常用关键字、聚合函数、约束以及索引的创建和使用,并通过综合题目来巩固学习。
453 1
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)

推荐镜像

更多