一文吃透 SQL 语法

✅作者简介:2022年博客新星 第八位的Java后端开发者。
个人主页:Java Fans的博客。
个人信条:不 forgiveness, 不犯错。小知识, 大智慧。
当前专栏:Java案例分享专栏。
特色专栏:国学周更-心性养成之路。
文章内容:服务器虚拟化技术详解。
文章目录
- 1、基础概念
- 2、基础语法结构
- 3、筛选条件设置
- 4、排序与分组操作
- 5、数据关联操作
- 6、子查询机制应用
- 7、数据汇总方法采用
- 8、表的创建与管理流程规划

缩写为Structured Query Language(SQL)的语言形式的一种结构化查询工具,在计算机科学领域中被广泛用作管理关系型数据库系统的标准化语言和方法论体系。通过使用SQL进行操作时,程序人员能够完成一系列基本操作,包括但不限于插入数据、检索数据、更新数据以及删除数据等任务;此外,还可以执行更为复杂的运算,如计算函数运算以及建立索引等操作,从而实现对大量数据的有效管理和快速检索;这种编程范式允许程序人员编写一系列命令来控制计算机系统的行为,并能够对存储于磁盘上的信息进行组织与管理;由于其强大的功能特性以及易学易用的特点,这种方法论体系在大型企业IT基础设施构建中发挥着关键作用
1、基本概念
在涉及数据库查询语言的讨论中,我们可以深入探讨这些基础概念。
数据库(Database):数据库充当了一个有序组织的数据存储容器。它整合了多种功能模块如数据管理、查询优化等,并支持多种类型的数据存储结构。表(Table):表构成了数据库中数据的组织形式。它由多行多列构成,并通过特定规则实现了数据的一致性和完整性。行(Row):行则代表了一个具体的记录实例。每一行都包含一组相关的属性值,并且这些属性值与整个系统的业务逻辑紧密相关。列(Column):列代表着一组具有相同数据类型的属性值集合。它们共同构成了一个表中的一个维度,并为用户提供了一种结构化的数据表现形式。主键(Primary Key):主键则唯一标识了一个表中的每一行记录。其值必须严格唯一且不能为空,并通过约束机制保证了数据的安全性。外键(Foreign Key):外键则用于关联另一个表中的主键信息。通过这种关联机制实现了不同表之间的信息集成与共享。
相关SQL操作语句:
- 创建表(CREATE TABLE) :用于在数据库中创建新的表。语法如下:
CREATE TABLE 表名 (
列1 数据类型 约束条件,
列2 数据类型 约束条件,
...
PRIMARY KEY (主键列名),
FOREIGN KEY (外键列名) REFERENCES 关联表名(关联列名)
);
sql
这条语句将生成一个新的表,并对每一列的数据类型以及相应的约束条件进行说明或规定。该语句明确主键属性并配置外键关系。
改写后的内容
ALTER TABLE 表名
ADD PRIMARY KEY (列名);
sql
这条语句将为指定表添加主键约束,确保指定列的值唯一且非空。
在数据库设计中,在关系型数据库中,默认情况下每个字段都是非主的单值型字段,默认取值为NULL值。主关键字必须是字符串类型或数值类型的关键字字段,并且必须唯一约束以确保数据的唯一性。在关系型数据库中,默认情况下每个字段都是非主的单值型字段,默认取值为NULL值
ALTER TABLE 子表名
ADD CONSTRAINT 外键约束名
FOREIGN KEY (外键列名) REFERENCES 父表名(主键列名);
sql
此语句将配置子表上的外键约束。该外键字段将对应父表中的主键字段,并以确保数据完整性作为基础进行设置。
- 删除主键(DROP PRIMARY KEY): 用于从表中删除主键约束。语法如下:
ALTER TABLE 表名
DROP PRIMARY KEY;
sql
这条语句将从指定表中删除主键约束。
- 删除外键(DROP FOREIGN KEY): 用于从表中删除外键约束。语法如下:
ALTER TABLE 子表名
DROP FOREIGN KEY 外键约束名;
sql
这条语句将从子表中删除指定的外键约束。
2、基本语句
- SELECT语句: SELECT语句用于从数据库中检索数据。语法如下:
SELECT 列名1, 列名2, ... FROM 表名 WHERE 条件;
sql
这条语句将从指定的表中选择指定的列,满足指定条件的行。
- INSERT语句: INSERT语句用于向数据库中插入新的行。语法如下:
INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);
sql
这条语句将在指定的表中插入新的行,指定要插入的列和对应的值。
- UPDATE语句: UPDATE语句用于更新数据库中的现有行。语法如下:
UPDATE 表名 SET 列名1 = 值1, 列名2 = 值2 WHERE 条件;
sql
这条语句将更新指定表中满足条件的行的指定列的值。
- DELETE语句: DELETE语句用于从数据库中删除行。语法如下:
DELETE FROM 表名 WHERE 条件;
sql
这条语句将从指定表中删除满足条件的行。
3、条件筛选
在SQL查询中该部分扮演着至关重要的角色。通过指定明确的筛选标准来进行数据筛选操作,在此过程中我们可以有效地提取所需信息。以下是关于使用WHERE子句进行条件筛选的详细阐述:
- 基本语法: WHERE子句通常紧跟在SELECT语句之后,用于指定筛选条件。基本语法如下:
SELECT 列1, 列2, ...
FROM 表名
WHERE 条件;
sql
在WHERE子句中,条件包含多种类型:比较操作(例如等于号=)、逻辑操作(例如AND与OR)以及IN和BETWEEN等关键字;这些操作用于查询结果中符合条件的结果行。
-
比较运算符: * 等于:=
- 不等于:<>
- 大于:>
- 小于:<
- 大于等于:>=
- 小于等于:<=
-
逻辑运算符: * AND:同时满足两个条件
- OR:满足其中一个条件
- NOT:不满足条件
-
IN运算符: IN运算符用于指定多个可能的值,类似于多个OR条件的简写形式。例如:
WHERE 列名 IN (值1, 值2, 值3);
sql
- BETWEEN运算符: BETWEEN运算符用于指定一个范围内的值。例如:
WHERE 列名 BETWEEN 值1 AND 值2;
sql
用 WHERE 子语言过滤特定条件下的信息。借助 WHERE 子语言执行特定操作可选择性提取所需数据记录。通过 WHERE 子语言可有效识别并筛选出符合指定标准的信息条目。选择合适的 WHERE 子语言有助于精准提取所需数据记录;应用 WHERE 子语言可优化数据库查询流程;正确设置 WHERE 子语言能确保只返回符合要求的结果条目;合理配置 WHERE 子语言有助于提升数据库查询的整体效率;正确应用 WHERE 子语言可准确提取所需的数据记录;充分运用 WHERE 子语言能显著提升数据库搜索速度;合理应用 WHERE 子语言有助于优化数据库查询性能;适当设置 WHERE 子语言能有效减少资源消耗;充分运用 WHERE 子语言能显著提升数据库搜索速度;合理应用 WHERE 子项目能显著提高数据库操作效率;正确配置 WHERE 子项目有助于提升整体系统性能;合理运用 Where 项目能显著提升 databases 操作 efficiency.
4、排序和分组
在SQL查询中,在数据处理时通常会涉及两种重要的操作:排序与分组。这两种操作有助于我们对查询结果进行有序排列以及按特定条件将数据划分为不同的类别。以下将详细介绍如何通过ORDER BY实现数据排序以及通过GROUP BY实现数据分类。
- ORDER BY排序功能项: ORDER BY指令用于对查询结果按照指定的列进行排序,并可按升序(ASC,默认情况下)或降序(DESC)排列顺序。其基本语法如下所示:
SELECT 列1, 列2, ...
FROM 表名
ORDER BY 列名1 [ASC|DESC], 列名2 [ASC|DESC], ...;
sql
例如,要按照某个列的值进行升序排序:
SELECT * FROM 表名
ORDER BY 列名 ASC;
sql
- GROUP BY分组: GROUP BY子句用于将查询结果按照指定的列进行分组,通常与聚合函数(如SUM、COUNT、AVG等)一起使用。基本语法如下:
SELECT 列1, 聚合函数(列2)
FROM 表名
GROUP BY 列1;
sql
例如,要按照某个列进行分组,并计算每组的总和:
SELECT 列1, SUM(列2)
FROM 表名
GROUP BY 列1;
sql
- HAVING子句: 该HAVING子 clause 常与GROUP BY配合使用, 用于筛选分组后的数据结果. 其功能类似于WHERE 子 clause, 但其作用并非仅限于原始数据而是适用于分组后的数据结果. 基本语法如下:
SELECT 列1, 聚合函数(列2)
FROM 表名
GROUP BY 列1
HAVING 条件;
sql
例如,要筛选出总和大于某个值的分组:
SELECT 列1, SUM(列2)
FROM 表名
GROUP BY 列1
HAVING SUM(列2) > 值;
sql
5、连接
该技术允许我们在SQL环境中通过定义明确的关联条件将多张表格结合起来以便检索所需的数据。
- 内连接(INNER JOIN): 内连接根据两个表之间的关联条件,只返回满足条件的行。基本语法如下:
SELECT 列1, 列2, ...
FROM 表1
INNER JOIN 表2 ON 表1.关联列 = 表2.关联列;
sql
例如,要连接两个表并检索相关数据:
SELECT *
FROM 表1
INNER JOIN 表2 ON 表1.关联列 = 表2.关联列;
sql
- 左连接(LEFT JOIN): 左连接返回左表中的所有行,以及右表中与左表匹配的行。如果右表中没有匹配的行,则返回NULL。基本语法如下:
SELECT 列1, 列2, ...
FROM 表1
LEFT JOIN 表2 ON 表1.关联列 = 表2.关联列;
sql
- 外连接(RIGHT JOIN): 外连接会返回右边表格中的全部记录,并同时包含左边表格中与之匹配的记录。
- 如果左边表格中没有对应的记录,则结果为空。
- 基本语法如下:
SELECT 列1, 列2, ...
FROM 表1
RIGHT JOIN 表2 ON 表1.关联列 = 表2.关联列;
sql
- 全面联结(FULL JOIN): 全面联结将返回左表与右表的所有行组合。当任一表格中不存在匹配的记录时,则会返回NULL值。基本语法形式如下所示:
SELECT 列1, 列2, ...
FROM 表1
FULL JOIN 表2 ON 表1.关联列 = 表2.关联列;
sql
通过采用JOIN语句的方式,则能够将多个表格连接在一起,在满足特定关联条件下实现更为复杂的数据分析需求的满足。在实际应用中,若能合理应用不同种类的JOIN操作,则有助于我们获取所需数据的同时深入理解各表之间的相互关系。
6、子查询
nested queries as a powerful tool for solving complex SQL problems, enabling the embedding of one query within another to address intricate data retrieval needs. Such techniques allow for operations like data extraction, result filtering, and comparative analysis. This section provides an in-depth exploration of nested queries:
- 单行子查询:单行子查询返回单一的具体值,常用于进行数值比较或数据筛选。其基本语法形式如下:
SELECT 列1
FROM 表名
WHERE 列2 = (SELECT 列3 FROM 另一张表 WHERE 条件);
sql
例如,要检索满足某个条件的数据:
SELECT 姓名
FROM 学生
WHERE 年龄 = (SELECT MAX(年龄) FROM 学生);
sql
- 多行子查询: 多行子查询返回多个值,通常用于IN子句或EXISTS子句中。基本语法如下:
SELECT 列1
FROM 表名
WHERE 列2 IN (SELECT 列3 FROM 另一张表 WHERE 条件);
sql
例如,要检索属于某个列表的数据:
SELECT 姓名
FROM 学生
WHERE 年龄 IN (SELECT 年龄 FROM 其他学生 WHERE 成绩 > 90);
sql
- 嵌套式子查询: 子查询可层层嵌套从而实现更为复杂的逻辑处理。基本语法如下:...
SELECT 列1
FROM 表名
WHERE 列2 = (SELECT 列3 FROM (SELECT 列4 FROM 另一张表 WHERE 条件) AS 子查询表);
sql
例如,要在子查询中使用聚合函数:
SELECT 姓名
FROM 学生
WHERE 年龄 = (SELECT MAX(年龄) FROM (SELECT * FROM 学生 WHERE 成绩 > 90) AS 子查询表);
sql
借助子查询技术,在一个查询中可以包含另一个查询。这将促进灵活的数据检索与复杂的数据分析。恰当地应用子查询技术有助于解决各种复杂的查询问题,并且能够提高数据检索效率和准确性。
7、聚合函数
该方法被广泛应用于数据处理过程中,在数据查询时被用来完成汇总计算的任务。例如,在数据库查询中我们可以通过调用SUM(求和)、AVG(平均值)、COUNT(计数)等运算符来完成基本的数据统计需求。通过应用聚合函数技术能够有效地执行数据统计分析并为用户提供有价值的信息。以下将详细介绍如何利用这些功能完成复杂的汇总计算操作
- SUM函数: SUM函数用于计算指定列的总和。基本语法如下:
SELECT SUM(列名)
FROM 表名;
sql
例如,要计算销售额的总和:
SELECT SUM(销售额)
FROM 销售表;
sql
- AVG函数: AVG函数用于计算指定列的平均值。基本语法如下:
SELECT AVG(列名)
FROM 表名;
sql
例如,要计算学生的平均成绩:
SELECT AVG(成绩)
FROM 学生成绩表;
sql
- COUNT函数用于计算指定列的行数(不包括NULL值)。基本语法如下:
SELECT COUNT(列名)
FROM 表名;
sql
例如,要计算学生表中的记录数:
SELECT COUNT(*)
FROM 学生表;
sql
注
SELECT MAX(列名)
FROM 表名;
SELECT MIN(列名)
FROM 表名;
sql
例如,要找出销售表中的最高销售额和最低销售额:
SELECT MAX(销售额)
FROM 销售表;
SELECT MIN(销售额)
FROM 销售表;
sql
借助聚合函数的应用来完成数据汇总计算,并生成相应的统计结果。这些结果有助于我们更加深入地理解和分析数据。适当运用聚合函数能够生成具有价值的数据见解和支持决策的依据。
借助聚合函数的应用来完成数据汇总计算,并生成相应的统计结果。这些结果有助于我们更加深入地理解和分析数据。适当运用聚合函数能够生成具有价值的数据见解和支持决策的依据。
8、创建和管理表
在关系型数据库环境中进行数据操作是一项关键任务,在这一过程中建立并维护表格是不可或缺的环节。具体而言,在设计数据库架构时需要考虑字段配置、主键设置以及索引构建等多方面因素以保证数据的一致性和高效运行。下面将详细阐述如何实现这些核心功能
建立一个表: 建立一个数据库中的新表涉及定义其结构和字段。基本语法包括以下内容:
CREATE TABLE 表名 (
列1 数据类型 约束,
列2 数据类型 约束,
...
);
sql
例如,创建一个名为“学生”的表:
CREATE TABLE 学生 (
学号 INT PRIMARY KEY,
姓名 VARCHAR(50) NOT NULL,
年龄 INT,
成绩 DECIMAL(5, 2)
);
sql
当建立数据库表时, 为了保证数据完整性的一致性而设置必要的限制条件, 这些限制条件主要包括以下几种: 1) 主键 (Primary Key), 确保每条记录具有唯一的标识; 2) 非空 (Non-Empty), 确保字段不允许为空; 3) 唯一 (Unique), 确保字段中的值在整个表中唯一; 4) 外键 (Foreign Key), 定义不同表之间的关联关系; 5) 校验 (Check), 规定字段值的变化范围或满足特定条件
- 添加索引: 索引可以提高数据检索的速度,特别是在大型表中。可以在表的一个或多个列上创建索引。基本语法如下:
CREATE INDEX 索引名 ON 表名 (列名);
sql
例如,在学生表的姓名列上创建索引:
CREATE INDEX idx_name ON 学生 (姓名);
sql
- 管理表: 除了建立表之外, 还可以通过ALTER TABLE语句对表结构进行调整, 增减列内容, 调整约束设置等. 或者使用DROP TABLE语句将表删除.
通过建立并维护表格结构, 我们能够规划数据库架构, 以保证信息的一致性和完整性, 并提高信息检索的速度. 恰当地设定约束条件以及增加索引结构有助于提升数据库运行效率, 并加快查询响应时间.
码文实在费时费力,这篇就到这里为止了,如若想深入了解Java相关知识,请点此关注博主,通过我的讲解带你从零开始掌握Java技能。同时,对日常生活中的问题感兴趣的朋友不妨阅读我的《国学周更—心性养成之路》专栏:]()

