2026/10/10 1:50:30

Learn X in Y minutes 系列之 SQL 入门:乌克兰语版教程全解析(数据库操作从建库到查询实战)

Learn X in Y minutes 系列之 SQL 入门:乌克兰语版教程全解析(数据库操作从建库到查询实战) 文档教程【免费下载链接】learnxinyminutes-docsCode documentation written as code! How novel and totally my idea!项目地址https://gitcode.com/gh_mirrors/le/learnxinyminutes-docs点击查看免费下载本指南以 uk/sql.md 这一乌克兰语 SQL 教程为主体系统讲解结构化查询语言SQL的核心语法从创建/删除数据库、基础 SELECT 查询到 WHERE 过滤、聚合分组、多表 JOIN、UNION 集合运算再到 INSERT/UPDATE/DELETE 与建表删表等完整操作。读完本文你将掌握一套可对照 MySQL 员工示例数据库直接运行的实战命令并了解本仓库中该教程与其他语言版本sql.md、zh-cn/sql.md的组织方式与翻译规范。一、SQL 是什么声明式数据库查询语言SQLStructured Query Language结构化查询语言乌克兰语原文为 мова структурованих запитів意为结构化查询语言是一种用于操作关系型数据库的声明式语言你描述想要什么数据由数据库引擎决定如何取到这些数据。它由 ISO/IEC 9075 标准定义用于创建和管理以一组表table形式存储的数据库。需要特别注意的是标准只是底线几乎每个数据库实现MySQL、PostgreSQL、SQLite、Oracle、SQL Server 等都会在标准语言之上增加自己的扩展。原文档明确提示读者不同实现之间存在差异并建议查阅专门的实现对比资料如 MySQL 与 PostgreSQL 的对比、主流 SQL 产品差异对比来了解产品间的区别。因此本文的所有示例均以常见的 SQL 实现尤其是 MySQL 风格为基准迁移到其他数据库时个别命令如SHOW DATABASES、USE可能需要做小幅调整。二、运行环境命令行交互与脚本执行绝大多数 SQL 实现都提供两种执行方式交互式命令行在数据库提供的提示符下逐条输入命令即时查看结果。默认情况下解释器会把查询结果直接滚动打印到屏幕上。脚本文件执行把一系列命令保存为脚本文件再由命令行工具整体执行执行语法因实现而异通常是操作系统命令行下运行的某个实用程序。一个典型的非标准化细节是如何退出交互式命令行多数实现支持QUIT、EXIT两个关键字中的一个或全部但这并未写入标准因此使用时需以你所用的实现为准。三、准备示例数据员工示例数据库本文的大量查询示例涉及departments、titles、dept_emp、dept_manager、employees等表都假设你已加载了MySQL 官方示例员工数据库employee sample database——一个关于虚构公司员工数据的演示数据库。该示例库的仓库文件中包含的正是创建表并填充员工数据的 SQL 脚本与本文下文给出的命令类型相似。加载这些脚本后你可以得到如下典型表结构本文示例依赖的departments部门表含dept_no部门编号、dept_name部门名称两列titles职位表记录每位员工emp_no在某个时间段from_date至to_date内担任的职位titledept_emp员工-部门关联表记录员工emp_no所属部门dept_nodept_manager部门经理表含from_date等任职日期employees员工表含emp_no员工编号、first_name名、last_name姓等。准备好这份数据下面的每一条命令你都可以对照着亲手运行验证。四、SQL 基础注释与书写规范SQL 代码以注释和分号作为最基本的书写约定-- 注释以两个连字符开头。每条命令以分号结尾。 /* 多行注释 采用这种写法。 */ -- SQL 对关键字不区分大小写。但本文示例统一用大写书写关键字 -- 因为这样更容易把它们与数据库名、表名、列名区分开来。要点单行注释--之后到行尾的内容均为注释多行注释/* ... */包裹的区块关键字大小写不敏感select与SELECT等价但社区惯例是用大写关键字、小写标识符以提升可读性数据库名与表名大小写敏感这一点与关键字不同需按创建时的名字精确引用分号结尾每条命令以;结束虽然多数交互式客户端允许省略但脚本文件中强烈建议保留。五、数据库级操作创建、删除、查看与切换数据库Database乌克兰语原文缩写为 БД是表的上层容器。原文档给出的完整命令如下-- 创建和删除数据库БД。数据库名和表名大小写敏感。 CREATE DATABASE someDatabase; DROP DATABASE someDatabase; -- 显示可用的数据库。 SHOW DATABASES; -- 使用某个已经存在的数据库。 USE employees;逐个说明命令作用备注CREATE DATABASE someDatabase;创建名为someDatabase的新数据库若同名数据库已存在多数实现会报错DROP DATABASE someDatabase;删除数据库及其全部内容不可逆操作会连同其中所有表一并删除SHOW DATABASES;列出当前服务器上所有可用数据库MySQL 风格命令USE employees;切换到已存在的employees数据库后续未限定库名的表操作均针对该库USE之后后续的SELECT、CREATE TABLE等命令默认作用于employees库。六、SELECT 基础查询全表、选列与限量SELECT是最核心的查询命令用于从表中取数据。基础形态如下-- 从当前数据库的 departments 表中选择所有行、所有列。 -- 默认情况下解释器会把结果滚动显示在屏幕上。 SELECT * FROM departments; -- 获取 departments 表的所有行但只取 dept_no 和 dept_name 两列。 -- 一条命令可以跨越多行书写。 SELECT dept_no, dept_name FROM departments; -- 检索 departments 表的所有列但只返回前 5 行。 SELECT * FROM departments LIMIT 5;要点*表示所有列列名之间用逗号分隔可只选择需要的列命令可以跨越多行上例把列清单与FROM分两行写完全合法LIMIT n限制返回行数常用于大数据量表的快速预览结果默认滚动打印行数很多时可配合LIMIT控制输出量。七、条件过滤 WHERELIKE 通配符与模式匹配WHERE子句用于按条件筛选行。最常用的文本匹配工具是LIKE配合两个通配符%匹配任意长度的任意字符含零个字符_匹配恰好一个任意字符。-- 检索 departments 表中 dept_name 列值包含子串 en 的行。 SELECT dept_name FROM departments WHERE dept_name LIKE %en%; -- 检索 departments 表的所有列条件是 dept_name 列 -- 以字母 S 开头且其后恰好还有 4 个字符。 SELECT * FROM departments WHERE dept_name LIKE S____;逐一拆解LIKE %en%dept_name中任意位置出现en即命中如 Development、Finance 之类含en的部门名LIKE S____S后跟 4 个下划线即S 开头 恰好 4 个字符匹配长度为 5 的部门名例如示例库中的 Sales。LIKE是原文档演示最多的过滤方式后续的DELETE示例也会复用它lname LIKE M%表示姓氏以 M 开头。八、去重与排序DISTINCT 与 ORDER BY查询结果常含重复值用DISTINCT去重用ORDER BY排序-- 从 titles 表中选取 title 值不显示重复项。 SELECT DISTINCT title FROM titles; -- 与上一条相同但按 title 值排序大小写敏感。 -- 可通过追加 ASC升序或 DESC降序指定排序方向 -- 省略时默认按升序排列。 SELECT DISTINCT title FROM titles ORDER BY title ASC;说明DISTINCT保证结果中每个值只出现一次ORDER BY后跟排序列名ASC升序默认、DESC降序原文档特别注明此处排序是大小写敏感的取决于实现与排序规则。九、条件表达式比较运算符与 IN / NOT IN / BETWEENWHERE中可使用完整的比较与逻辑运算符组合-- 比较运算符、、、、、与逻辑关键字 -- AND、OR可用来精确细化查询条件。 SELECT * FROM departments WHERE dept_no d001 OR dept_no d002; -- 与上面等价IN 列出候选值集合。 SELECT * FROM departments WHERE dept_no IN (d001, d002); -- 与上面相反NOT IN 排除候选值。 SELECT * FROM departments WHERE dept_no NOT IN (d001, d002); -- 在指定范围内选择含边界。 SELECT * from departments WHERE dept_no BETWEEN d001 AND d002;要点汇总运算符含义、、、、、等于、大于、小于、大于等于、小于等于、不等于AND/OR逻辑与 / 逻辑或用于组合多个条件IN (v1, v2, ...)值属于给定集合NOT IN (v1, v2, ...)值不属于给定集合BETWEEN a AND b值在a与b之间闭区间注意dept_no d001 OR dept_no d002与IN (d001, d002)结果完全一致后者更简洁BETWEEN d001 AND d002在字符串类型列上同样适用按字典序比较。十、聚合与分组COUNT、GROUP BY、HAVING聚合函数对一组值计算出一个单一结果。最常用的五个是MIN()最小值、MAX()最大值、COUNT()计数、SUM()求和、AVG()平均值。GROUP BY按列值分组后对各组分别聚合HAVING则用于按聚合结果过滤分组注意WHERE过滤的是普通行HAVING过滤的是聚合后的分组-- 统计 departments 表中的行数。 SELECT COUNT(*) FROM departments; -- 统计 departments 表中 dept_name 值包含子串 en 的行数。 SELECT COUNT(*) FROM departments WHERE dept_name LIKE %en%; -- 聚合函数可与 GROUP BY 配合从一组值中计算单个结果。 -- 最常用的聚合函数MIN()、MAX()、COUNT()、SUM()、AVG()。 -- 用 HAVING 按聚合值过滤分组。 -- 按部门编号统计员工总数且只返回员工数超过 100 的部门。 SELECT dept_no, COUNT(dept_no) FROM dept_emp GROUP BY dept_no HAVING COUNT(dept_no) 100;深入理解COUNT(*)统计所有行COUNT(dept_no)统计该列非 NULL值的数量上例逻辑先按dept_no分组每组统计员工数再用HAVING COUNT(dept_no) 100剔除员工数 ≤ 100 的部门——这在找出规模超标的部门这类场景非常典型WHERE与HAVING的执行顺序不同WHERE在分组前过滤行HAVING在分组聚合后过滤分组。十一、别名 AS让列名与表名更可读用可选的AS关键字为列或表设置别名缩写表名后整个查询更简洁-- 用可选关键字 AS 为列名/表名设置别名。 SELECT COUNT(A.*) AS total_employees, COUNT(B.*) total_departments FROM employees AS A, departments B;要点AS total_employees给COUNT(A.*)的结果列起别名total_employeesCOUNT(B.*) total_departmentsAS可省略直接空格后跟别名FROM employees AS A把employees表简称为Adepartments B同理省略AS别名只在当前查询内生效不会改变真实表名。该示例同时演示了无 JOIN 条件的逗号分隔多表查询笛卡尔积它统计两个表中行数的乘积属于理解别名与多表引用的教学用例实际业务中多表组合查询应优先使用下一节的JOIN。十二、日期格式与日期比较SQL 中常见的日期书写格式为yyyy-mm-dd如1990-01-01但它会随实现、操作系统和会话的本地化设置而有所不同-- 常见日期格式为 yyyy-mm-dd。 -- 不过该格式可能因实现、操作系统以及会话的区域设置而异。 SELECT * FROM dept_manager WHERE from_date 1990-01-01;该查询返回dept_manager表中所有任职起始日期不早于 1990-01-01 的记录。实际项目中日期字符串与日期列的比较行为是否自动转换、时区处理在不同数据库中略有差异建议以所用实现的文档为准。十三、多表连接 JOIN用关联键合并信息真实业务的数据分散在多张表中JOIN通过关联键把它们合并成一份结果。原文档给出的示例非常典型——把员工的编号替换为姓名-- 用 JOIN 合并多张表的信息titles 表按员工编号记录每位员工 -- 在什么时间段from_date 至 to_date担任什么职位title。 -- 下面这条命令取前 10 行这类信息但不用员工编号 -- 而是以员工编号为关联键到 employees 表换取名与姓。 SELECT employees.first_name, employees.last_name, titles.title, titles.from_date, titles.to_date FROM titles INNER JOIN employees ON employees.emp_no titles.emp_no LIMIT 10;逐步拆解FROM titles INNER JOIN employees内连接两张表只保留匹配上的行ON employees.emp_no titles.emp_no连接条件——titles.emp_no与employees.emp_no相等才合并SELECT employees.first_name, ...列名前加表名前缀明确列来源两表都有emp_no不加前缀会产生歧义LIMIT 10只取前 10 行避免一次输出过多。INNER JOIN是最常用的连接类型只返回两边都匹配的行其他类型如LEFT JOIN保留左表全部行、RIGHT JOIN、FULL OUTER JOIN各实现支持度不同可在掌握内连接后进一步学习。十四、集合运算UNION 与 UNION ALLUNION把多个SELECT的结果纵向合并为一个结果集。二者的区别在于去重策略-- 合并多个查询的结果。 -- UNION 只返回唯一行UNION ALL 返回全部行包括重复的。 SELECT * FROM departments WHERE dept_no d001 UNION SELECT * FROM departments WHERE dept_no d002;UNION对合并结果去重若两个查询产生相同行只保留一份UNION ALL不去重全部返回性能通常优于UNION省去去重开销使用前提各SELECT的列数、列顺序和数据类型需一致或兼容。十五、SQL 语法顺序一句话记住完整查询骨架原文档用一行凝练了 SELECT 查询的完整书写顺序SELECT _ FROM _ JOIN _ ON _ WHERE _ GROUP BY _ HAVING _ ORDER BY _ UNION即一条完整查询的语法骨架为SELECT 列 FROM 表 JOIN 表 ON 连接条件 WHERE 行级过滤 GROUP BY 分组 HAVING 分组级过滤 ORDER BY 排序 UNION 集合合并记住这个顺序有两个实际价值写查询时按序组织避免遗漏子句或写错位置理解执行逻辑先FROM/JOIN确定数据来源WHERE过滤行GROUP BY分组HAVING过滤分组最后ORDER BY排序——各子句的执行顺序与书写顺序大体一致SELECT的列投影在最后才计算。十六、元数据查询INFORMATION_SCHEMA 列出所有表除各实现的快捷命令外标准化的方式是查询INFORMATION_SCHEMA信息模式它存储着数据库的元数据-- 列出所有数据库中的所有表。 -- 各实现通常也提供针对当前数据库的快捷命令。 SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPEBASE TABLE;说明INFORMATION_SCHEMA.TABLES标准化的表清单视图每行描述一张表WHERE TABLE_TYPEBASE TABLE只保留真正的数据表过滤掉视图VIEW等其他对象类型多数实现还提供自己的快捷命令如 MySQL 的SHOW TABLES;来列出当前库的表。十七、数据操作 DMLINSERT、UPDATE、DELETE查询之外增、改、删是日常操作的三板斧。原文档以一张临时表tablename1完整演示-- 在当前数据库内创建名为 tablename1 的表包含下面两个列。 -- 列可以指定数据类型及其他多种选项。 CREATE TABLE tablename1 (fname VARCHAR(20), lname VARCHAR(20)); -- 向表 tablename1 插入一行数据。 -- 这里假设表被定义为可接受这些值。 INSERT INTO tablename1 VALUES(Richard,Mutt); -- 在 tablename1 中把所有 lname 值为 Mutt 的行的 fname 改为 John。 UPDATE tablename1 SET fnameJohn WHERE lnameMutt; -- 从 tablename1 表中删除 lname 值以 M 开头的行。 DELETE FROM tablename1 WHERE lname LIKE M%; -- 删除 tablename1 中的所有行留下空表。 DELETE FROM tablename1; -- 删除整个表 tablename1。 DROP TABLE tablename1;分步要点命令作用注意INSERT INTO tablename1 VALUES(Richard,Mutt);插入一行按列顺序给出值值的个数与类型须与表定义匹配UPDATE tablename1 SET fnameJohn WHERE lnameMutt;按条件批量更新务必带WHERE否则更新全部行DELETE FROM tablename1 WHERE lname LIKE M%;按条件删除行LIKE M%即lname 以 M 开头DELETE FROM tablename1;清空表保留表结构不加WHERE即删除所有行DROP TABLE tablename1;删除整个表含结构不可逆表及数据一并消失这三个 DML 语句的共同纪律是UPDATE与DELETE前先确认WHERE条件避免误伤全表数据。十八、表结构 DDLCREATE TABLE 与列类型上一节的第一个命令就是建表语句单独展开看CREATE TABLE tablename1 (fname VARCHAR(20), lname VARCHAR(20));CREATE TABLE 表名 (列定义, 列定义, ...)VARCHAR(20)是可变长度字符串类型括号内为最大字符数除数据类型外列还支持主键PRIMARY KEY、非空NOT NULL、默认值DEFAULT、自增AUTO_INCREMENT等大量选项原文档提示列可以指定数据类型及其他多种选项——这些扩展选项是深入学习建表设计时的重点。十九、仓库视角本教程在多语言文档库中的组织与规范本教程来自 learnxinyminutes-docs 仓库——一个以代码形式编写的代码文档项目每篇教程都是带注释、可直接运行的有效代码边读边执行。相关要点多语言并行维护SQL 教程在仓库中有多个语言版本乌克兰语版即 uk/sql.md中文版见 zh-cn/sql.md英文原版见根目录 sql.md。各版本共享同一套 SQL 示例骨架仅讲解文字不同。Frontmatter 元数据规范每篇文档开头有 YAML 头信息frontmatter记录contributors作者与translators译者等字段。仓库提供了专门的校验脚本 lint/frontmatter.py会检查 frontmatter 的键名与类型是否合法允许的键包括name、category、filename、contributors、translators等并调用 yamllint 做 YAML 语法检查这保证了所有语言版本头部信息格式一致。编码与格式约束仓库的 lint/encoding.sh 会批量检查所有 Markdown 文件的编码必须为 UTF-8 或 US-ASCII 且不带 BOMCONTRIBUTING.md 则要求代码块行宽尽量控制在 80 字符内、多用代码示例少用文字铺陈、面向有经验的程序员——这正是本教程以带注释代码为主体、文字点到即止风格的来源。因此你在阅读 uk/sql.md 时看到的本质上是一份可运行的 SQL 速查脚本将其中的命令按序粘贴到数据库命令行即可复现全部演示效果。二十、进一步学习本教程覆盖了 SQL 最核心的日常操作面库管理、查询、过滤、聚合、连接、集合、增删改、建表。继续深入的方向包括在线交互式 SQL 练习平台边学边做的入门路径在线 SQL 沙箱/编译器支持多种数据库方言、可协作运行查询数据库系统理论教材中关于 SQL 的章节深入讲解概念与优化原理。结合你实际使用的数据库MySQL、PostgreSQL 或其他的官方文档逐一验证本文示例的方言差异是完成从读懂示例到熟练实操的最后一步。赞分享文档教程【免费下载链接】learnxinyminutes-docsCode documentation written as code! How novel and totally my idea!项目地址https://gitcode.com/gh_mirrors/le/learnxinyminutes-docs点击查看免费下载相关推荐Learn X in Y minutes乌克兰语版 Ruby 快速入门指南解读Learn X in Y minutes乌克兰语版 Ruby 快速入门指南解读 本指南以 learnxinyminutes docs 仓库中的 uk/ruby文档教程Learn X in Y Minutes 系列Cypher 查询语言实战指南Neo4j 图数据库Learn X in Y Minutes 系列Cypher 查询语言实战指南Neo4j 图数据库 Cypher 是 Neo4j 的图查询语言它复用 SQ文档教程Learn X in Y minutes 系列解读以乌克兰语 JSON 教程uk/json.md为核心的 JSON 数据交换格式全指南Learn X in Y minutes 系列解读以乌克兰语 JSON 教程uk/json.md为核心的 JSON 数据交换格式全指南 JSONJava文档教程上一篇Notepad--2024年跨平台文本编辑器的效率革命与国产替代方案下一篇Apache Pulsar File Source Connector 完全指南从文件目录到 Topic 的消息采集方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考