云计算主题 什么是SQL?

什么是SQL?

更新时间: 2024-08-02 11:13:30

SQL(Structured Query Language,即结构化查询语言)是一种用来操作数据库系统的编程语言,也是与数据库通信的指令,可以在数据库中对数据进行查询、插入、更新、删除等操作。

SQL可以用来做什么?

  • 从数据库中查询需要的数据

  • 创建新的数据库或在数据库中新建表

  • 更新数据库,在数据库中添加新的记录或删除某条记录

  • 设置数据库或表的访问权限

SQL与数据库有什么关系?

SQL是数据库操作的标准语言,专用于管理和操作数据库系统,执行对数据的增删改查操作,或实现更复杂的数据处理需求。通常关系型数据库(如MySQL、PostgreSQL等)都支持SQL语法,部分非关系型数据库(如Lindorm、TableStore等)也支持使用SQL作为查询和操作语言。

为什么需要使用SQL?

SQL语言还具有以下优势:

  • 高兼容性、通用性

    众多开源数据库项目和商业化的数据库产品都支持SQL。无论您的企业使用哪种类型的数据库,您企业的运维人员或数据库管理人员都可以使用同一套SQL语法进行相关操作。

  • 强大的查询能力

    • 支持海量数据查询、分析和提取。

    • 支持更快的查询处理速度。仅需执行简单的SQL命令,可在海量数据中快速找到您所需要的数据,提升了查询性能。

    • 支持复杂的数据计算和处理。SQL支持JOIN、子查询及多种计算函数。

  • 简单、易用

    • SQL语言是一种高度结构化的语言,SQL中的关键词基本都是常见的英文单词(如SELECT、WHERE、ORDER BY等),且大部分关键字与该英文单词的愿意相同或接近,非常易于理解。

    • SQL是一种声明性语言,用户仅需要通过简单的语法描述希望获取的结果,简化了数据库的查询过程。

    • 此外,SQL的核心功能为数据查询、插入、更新、删除等基本操作,用户掌握了这些基础命令后就能处理数据库大部分日常的操作。

谁会需要经常使用SQL?

  • 数据库DBA:通过使用SQL对数据库系统进行日常维护、权限控制、性能优化、数据备份恢复等。

  • 数据工程师:通过使用SQL对数据库的结构进行优化等。

  • 数据分析人员:通过使用SQL统计和分析企业业务数据或运营数据,并生成可视化数据,便于进行数据分析和制作相关报告。

  • 软件开发人员:对涉及依赖数据库的应用场景时,可通过SQL读写数据或进行数据库设计。

SQL的工作原理是什么?

SQL提供了丰富且易于操作的语法和功能来查询、插入、更新数据库中的数据。SQL语言的工作机制主要是针对数据库对SQL语言的执行,主要包含以下方面:

  1. 建立连接

    用户通过客户端与要查询的数据库建立连接。连接器会负责验证用户的登录凭证和权限信息。

  2. 语法解析

    支持SQL的数据库首先会通过分析器对接收到的SQL语句进行解析,理解这条SQL语句的目标是什么,并验证该语句语法是否正确。

  3. 查询优化

    SQL语法被验证准确无误后,数据库会通过优化器对查询语句进行优化(如通过索引优化等功能),来选择一个最优的查询路径,以提高查询性能和降低资源的消耗(如减少磁盘I/O等)。

  4. 执行SQL语句

    数据库根据查询优化的结果,通过执行器来生成查询执行计划,即需要按什么样的顺序(数据访问路径)、采用什么样的数据库连接方式等来执行这条SQL指令。执行器开始读取表的数据并进行相应操作(如连接表、筛选、分组过滤等)。

  5. 返回结果

    执行器将查询结果返回给客户端。

SQL分为哪几类?

根据SQL语法可实现的不同功能,SQL语法被分为以下几类:

  • DDL

    即数据定义语言。用于定义和修改数据库中的对象,如数据库、表、函数等。

    常见的DDL类子句有:CREATE、USE、DROP、SHOW等。

  • DCL

    即数据控制语言。用来设置或修改数据库事务、操作权限等。

    常见的DCL类子句有:COMMIT、GRANT、REVOKE等。

  • DML

    即数据操作语言。用于对数据库表中的数据进行操作,如修改数据、删除数据、插入数据等。

    常见的DML类子句有INSERT、UPDATE等。

  • DQL

    即数据查询语言。用于查询数据库内的数据。

    常见的DQL类子句有SELECT。

常见的SQL子句有哪些以及该如何使用?

SQL使用关键字、表名、列名等SQL语法结构组合成一条SQL语句,用来描述需要执行的指令。

以下是常见的SQL子句(不同的数据库类型语法可能会有所差异)及其用法示例:

SQL子句

功能

是否必选

常见用法示例

SELECT

查询数据。

通常与FROM子句一起使用,表示从哪张表中查询数据。

SELECT * FROM <表名称>;

表示从某张数据表中查询并返回全部字段。

FROM

指定查询的数据来源。

SELECT * FROM <表名称>;

表示从某张数据表中查询并返回全部字段。

WHERE

设置筛选条件。

用于在SELECTUPDATEDELETE等语句中指定筛选条件。

SELECT * FROM sheet1
WHERE age > 20;

表示从名称为“sheet1”的数据表中筛选并返回“age”大于20的行。

GROUP BY

对查询结果集中的数据进行分组。

GROUP BY经常与 COUNT()SUM()AVG()MAX()MIN()等子句配合使用,可以基于指定的一列或多列的值(如总数、平均值、最大值、最小值等),对表行进行分类汇总。

SELECT * FROM sheet1 
GROUP BY name

表示对名称为“sheet1”的数据表,按相同“name”值进行分组聚合并返回该数据。

HAVING

HAVINGGROUP BY子句结合使用,用来过滤分组后的结果。

SELECT * FROM sheet1 
GROUP BY name
HAVING age > 20;

表示对名称为“sheet1”的数据表,按相同“name”值进行分组聚合后,筛选并返回“age”大于20的行。

ORDER BY

对查询结果进行排序。

根据指定的一行或多行的值,对查询返回的数据按升序或降序排列。

ORDER BY语句中可以添加ASC(升序)或DESC(降序)关键字指定排序的逻辑,如未添加,则默认为升序排序。

SELECT * FROM sheet1 
ORDER BY age DESC;

表示查询名称为“sheet1”的数据表,并返回所有数据,且数据按“age”一列的值降序排列。

LIMIT

用于限制查询结果返回的行数。

SELECT * FROM revenue 
ORDER BY age DESC;
Limit 5;

表示查询名称为“revenue”的数据表,按“age”一列的值降序排列,并返回前5行数据。

阿里云如何为您提供SQL查询方面的支持?

阿里云为您提供一系列支持SQL语法的云数据库服务和大数据服务,允许您通过运行SQL命令完成数据操作和数据库维护等任务。

支持SQL语法的产品

以下阿里云数据库类产品支持SQL语法:

  • 数据库产品

    • 云数据库RDS MySQL版

      基于阿里巴巴的MySQL源码分支,经过双十一高并发、大数据量的考验,拥有优良的性能。RDS MySQL支持实例管理、账号管理、数据库管理、备份恢复、白名单、透明数据加密以及数据迁移等基本功能,还支持读写分离、SQL审计、多可用区集群等高级功能。

      详细介绍,请参见常用 SQL 命令(MySQL)

    • 云数据库RDS PostgreSQL版

      完全兼容开源PostgreSQL,基于云原生架构,软硬协同优化,提供稳定可靠、高性价比的数据库服务。通过丰富的插件拓展,支撑各领域场景化业务,如自研Ganos多维多模时空引擎及开源PostGIS地理信息引擎、向量引擎、时序引擎等百余款插件。

    • 云数据库PolarDB MySQL版

      是阿里云完全自主研发的产品,100%兼容MySQL。产品具有多主多写、多活容灾、HTAP等特性,交易性能最高可达开源数据库的6倍,分析性能最高可达开源数据库的400倍,TCO低于自建数据库50%。

    • 云数据库RDS SQL Server版

      是一种稳定可靠、可弹性伸缩的在线数据库服务,拥有微软SQL Server正版授权许可,支持复杂SQL查询,广泛应用于新零售、医疗、房地产等行业。

    • 云数据库RDS MariaDB版

      是全球流行的开源数据库,支持包括MySQL InnoDB等多种存储引擎,为不同需求的用户提供灵活的选择。

    • 云原生数据库PolarDB PostgreSQL版

      是阿里云完全自主研发的云原生关系型数据库产品,100%兼容PostgreSQL,高度兼容Oracle语法。为用户提供快速弹性、高性能、海量存储、安全可靠的数据库服务,同时支持阿里云自研Ganos多维多模时空信息引擎及开源PostGIS地理信息引擎。

    • 云原生数据库PolarDB分布式版

      是阿里云自主设计研发的高性能云原生分布式数据库产品,为用户提供高吞吐、大存储、低延时、易扩展和超高可用的云时代数据库服务。

    • 云原生数据仓库AnalyticDB MySQL版

      云原生数据仓库 AnalyticDB MySQL 版是基于湖仓一体架构打造的实时数仓,高度兼容MySQL,支持毫秒级更新,亚秒级查询。

      无论是数据湖中的非结构化或半结构化数据,还是数据库中的结构化数据,您都可使用AnalyticDB for MySQL构建企业的数据分析平台,同时完成高吞吐离线处理和高性能在线分析,实现降本增效。

      详细介绍,请参见SQL语法

    • 云原生数据仓库AnalyticDB PostgreSQL版

      云原生数据仓库 AnalyticDB PostgreSQL 版 (以下简称AnalyticDB for PostgreSQL)是一款兼容ANSI SQL 2003、兼容PostgreSQL/Oracle数据库生态的MPP数据库。它具备完整的事务处理、高吞吐写入和流批一体引擎,通过全自研计算引擎及行列混合存储提供高性能数据处理和在线分析能力。自研的企业级特性,尤其在安全增强、数据集成、资源隔离、冷热分层、高可用等方面已有丰富的行业落地经验。它可以帮助企业构建离在线一体、流批一体综合数据分析平台,采用同一引擎即可满足离线批处理、流式计算,交互式分析三种场景。AnalyticDB for PostgreSQL在数仓中内置AI能力,提供向量检索、一站式RAG服务,以及企业知识库、文搜图、图搜图等解决方案,帮助企业快速构建AI应用,一键开启Data+AI新范式。

      详细介绍,请参见SQL语法

    • 云数据库ClickHouse

      是开源列式数据库ClickHouse的云上托管服务,数据库内核完全兼容开源社区版本。阿里云提供了一套企业级数据库管理平台,增强了数据安全、集群动态扩容、监控运维等企业级功能,与云上其他数据产品打通,可以便捷地构建云上海量数据分析平台。详细介绍,请参见SQL语法

    • 云数据库SelectDB版

      云数据库SelectDB版是新一代实时数据仓库SelectDB在阿里云上的全托管服务,您可以在阿里云上便捷地购买SelectDB数仓服务,满足海量数据分析需求。

      云数据库SelectDB版支持标准的SQL语法。详细介绍,请参见SQL语法

    • 云原生多模数据库Lindorm

      Lindorm是面向物联网、互联网、车联网等设计和优化的云原生多模超融合数据库,支持宽表、时序、文本、对象、流、空间等多种数据的统一访问和融合处理,并兼容SQL、HBase/Cassandra/S3、TSDB、HDFS、Solr、Kafka等多种标准接口和无缝集成三方生态工具,适用于日志、监控、账单、广告、社交、出行、风控等场景,Lindorm也是为阿里巴巴核心业务提供支撑的数据库之一。

      详细介绍,请参见云原生多模数据库Lindorm SQL查询

    • 表格存储

      表格存储(Tablestore)面向海量结构化数据提供Serverless表存储服务,同时针对物联网场景深度优化提供一站式的IoTstore解决方案。适用于海量账单、IM消息、物联网、车联网、风控、推荐等场景中的结构化数据存储,提供海量数据低成本存储、毫秒级的在线数据查询和检索以及灵活的数据分析能力。

      可通过表格存储SQL查询功能对表格存储中的数据进行复杂的查询和高效的分析。

  • 大数据产品

    • 云原生大数据计算服务MaxCompute

      是一种快速、完全托管的TB/PB级数据仓库解决方案。MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速地解决用户海量数据计算问题,有效降低企业成本,并保障数据安全。

    • 实时数仓Hologre

      Hologres是阿里巴巴自主研发的一站式实时数仓引擎(Real-Time Data Warehouse),支持海量数据实时写入、实时更新、实时加工、实时分析,支持标准SQL(兼容PostgreSQL协议和语法,支持大部分PostgreSQL函数),支持PB级数据多维分析(OLAP)与即席分析(Ad Hoc),支持高并发低延迟的在线数据服务(Serving),支持多种负载的细粒度隔离与企业级安全能力,与MaxComputeFlinkDataWorks深度融合,提供企业级离在线一体化全栈数仓解决方案。

    • 开源大数据平台E-MapReduce(EMR)

      是运行在阿里云平台上的一种大数据处理的系统解决方案,基于开源的Apache Hadoop和Apache Spark,让您可以方便地使用Hadoop和Spark生态系统中的其他周边系统分析和处理数据。EMR还可以与阿里云其他的云数据存储系统和数据库系统(例如,阿里云OSS和RDS等)进行数据传输。

    • 实时计算Flink版

      阿里云实时计算Flink版是一种全托管Serverless的Flink云服务,开箱即用,计费灵活。具备一站式开发运维管理平台,支持作业开发、数据调试、运行与监控、自动调优、智能诊断等全生命周期能力。100%兼容Apache Flink,支持开源Flink平滑迁移上云,核心企业级增强Flink引擎较开源Flink有约两倍性能的提升。拥有Flink CDC、企业级复杂事件处理(CEP)等企业级增值功能,并内置丰富上下游连接器,助力企业构建高效、稳定和强大的实时数据应用。

其他云产品支持的命令

部分云产品不支持SQL语法,但阿里云提供了其他类型的命令:

产品名称

产品简介

支持的查询语法

云数据库Redis版

云数据库Redis版(ApsaraDB for Redis)是兼容开源Redis协议标准的数据库服务,基于双机热备架构及集群架构,可满足高吞吐、低延迟及弹性变配等业务需求。

云原生内存数据库Tair

云原生内存数据库Tair是阿里云国产自研的云原生内存数据库。在完全兼容Redis的基础上,提供了丰富的数据模型和企业级能力来帮助客户构建实时在线场景。同时,Tair与新型存储介质——持久内存的高效结合,相比内存型,成本降低30%以上,并能做到数据持久化和提供近似于内存的性能。目前,Tair已广泛应用于政务、金融、制造、医疗和泛互联网等各行业客户,满足客户的高速查询和计算场景。

云数据库MongoDB版

云数据库 MongoDB 版是完全兼容 MongoDB 协议、高度兼容 DynamoDB 协议的在线文档型数据库服务,支持单节点、双节点、副本集和分片集群四种部署架构,能够满足不同的业务场景需要,在互联网(游戏、资讯、社交、电商、直播)、新零售、在线教育、金融、物联网、政企等行业都有广泛的应用。

MongoDB命令

最佳实践

  1. 表数据较多的情况下,查询数据时尽量避免使用SELECT *

    • 使用SELECT *会降低查询速度。由于SELECT *会需要解析更多字段、属性等内容,在SQL语句复杂、硬解析较多的情况下(硬解析会让数据库消耗更多的CPU和内存),会给数据库的资源负载造成较大的负担。

    • 会增加网络开销。SELECT *会带上很多无用字段,导致数据传输量急剧增加,这可能会增加您的网络带宽费用。

  2. 优化查询性能,对慢SQL进行标识和治理。

    慢SQL是指执行时间过长的SQL语句,会占用过多的系统资源,是数据库系统中性能瓶颈的主要原因之一。慢SQL需要进行持续的监控和定期治理,以提升数据库的整体性能。

    阿里云提供了数据库自治服务DAS,支持对阿里云的多种数据库进行性能监控、管理和日常运维。

  3. 监控和审计在数据库中执行的SQL语句,以自动识别高危SQL、SQL注入等安全风险。

    不少云数据库产品会提供SQL相关的审计能力,例如云数据库RDS支持SQL洞察和审计,可有效识别SQL注入等风险,并对指定的SQL进行健康诊断等。