PostgreSQL核心之SQL基础学习

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
29天前
|
SQL 安全 前端开发
Web学习_SQL注入_联合查询注入
联合查询注入是一种强大的SQL注入攻击方式,攻击者可以通过 `UNION`语句合并多个查询的结果,从而获取敏感信息。防御SQL注入需要多层次的措施,包括使用预处理语句和参数化查询、输入验证和过滤、最小权限原则、隐藏错误信息以及使用Web应用防火墙。通过这些措施,可以有效地提高Web应用程序的安全性,防止SQL注入攻击。
52 2
|
2月前
|
SQL 存储 数据库
SQL学习一:ACID四个特性,CURD基本操作,常用关键字,常用聚合函数,五个约束,综合题
这篇文章是关于SQL基础知识的全面介绍,包括ACID特性、CURD操作、常用关键字、聚合函数、约束以及索引的创建和使用,并通过综合题目来巩固学习。
47 1
|
3月前
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
|
4月前
|
SQL 存储 关系型数据库
新手如何入门学习PostgreSQL?
新手如何入门学习PostgreSQL?
|
4月前
|
SQL 安全 关系型数据库
PostgreSQL SQL注入漏洞(CVE-2018-10915)--处理
【8月更文挑战第8天】漏洞描述:PostgreSQL是一款自由的对象关系型数据库管理系统,支持多种SQL标准及特性。存在SQL注入漏洞,源于应用未有效验证外部输入的SQL语句,允许攻击者执行非法命令。受影响版本包括10.5及更早版本等。解决方法为升级PostgreSQL
304 2
|
4月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
480 0
|
6月前
|
SQL 存储 Java
SQL数据库学习指南:从基础到高级
SQL数据库学习指南:从基础到高级
|
5月前
|
SQL 存储 关系型数据库
关系型数据库PostgreSQL学习
【7月更文挑战第4天】
459 2
|
5月前
|
SQL 存储 关系型数据库
关系型数据库SQL Server学习
【7月更文挑战第4天】
85 2
|
6月前
|
SQL 数据库
零基础学习数据库SQL语句之操作表中数据的DML语句
零基础学习数据库SQL语句之操作表中数据的DML语句
63 0
零基础学习数据库SQL语句之操作表中数据的DML语句