CppGuide社区 CppGuide社区
首页
  • 🔥最新谷歌C++风格指南(含C++17/20)
  • 🔥C++17详解
  • 🔥C++20完全指南
  • 🔥C++23快速入门
🔥C++面试
  • 第1章 C++ 惯用法与Modern C++篇
  • 第2章 C++开发工具与调试进阶
  • 第3章 C++多线程编程从入门到进阶
  • 第4章 C++网络编程重难点解析
  • 第5章 网络通信故障排查常用命令
  • 第6章 网络通信协议设计
  • 第7章 高性能服务结构设计
  • 第8章 Redis网络通信模块源码分析
  • 第9章 服务其他模块设计
  • 🚀 全部章节.pdf 下载 (opens new window)
  • 🔥C++游戏编程入门(零基础学C++)
  • 🔥使用C++17从零开发一个调试器 (opens new window)
  • 🔥使用C++20从零构建一个完整的低延迟交易系统 (opens new window)
  • 🔥使用C++从零写一个C语言编译器 (opens new window)
  • 🔥从零用C语言写一个Redis
  • leveldb源码分析
  • libevent源码分析
  • Memcached源码分析
  • TeamTalk源码分析
  • 优质源码分享 (opens new window)
  • 🔥远程控制软件gh0st源码分析
  • 🔥Windows 10系统编程
  • 🔥Linux 5.x内核开发与调试 完全指南 (opens new window)
  • TCP源码实现超详细注释版.pdf (opens new window)
  • 高效Go并发编程
  • Go性能调优
  • Go项目架构设计
  • 🔥使用Go从零开发一个数据库
  • 🔥使用Go从零开发一个编译器 (opens new window)
  • 🔥使用Go从零开发一个解释器 (opens new window)
Rust编程指南
  • SQL零基础指南
  • MySQL开发与调试指南
GitHub (opens new window)
首页
  • 🔥最新谷歌C++风格指南(含C++17/20)
  • 🔥C++17详解
  • 🔥C++20完全指南
  • 🔥C++23快速入门
🔥C++面试
  • 第1章 C++ 惯用法与Modern C++篇
  • 第2章 C++开发工具与调试进阶
  • 第3章 C++多线程编程从入门到进阶
  • 第4章 C++网络编程重难点解析
  • 第5章 网络通信故障排查常用命令
  • 第6章 网络通信协议设计
  • 第7章 高性能服务结构设计
  • 第8章 Redis网络通信模块源码分析
  • 第9章 服务其他模块设计
  • 🚀 全部章节.pdf 下载 (opens new window)
  • 🔥C++游戏编程入门(零基础学C++)
  • 🔥使用C++17从零开发一个调试器 (opens new window)
  • 🔥使用C++20从零构建一个完整的低延迟交易系统 (opens new window)
  • 🔥使用C++从零写一个C语言编译器 (opens new window)
  • 🔥从零用C语言写一个Redis
  • leveldb源码分析
  • libevent源码分析
  • Memcached源码分析
  • TeamTalk源码分析
  • 优质源码分享 (opens new window)
  • 🔥远程控制软件gh0st源码分析
  • 🔥Windows 10系统编程
  • 🔥Linux 5.x内核开发与调试 完全指南 (opens new window)
  • TCP源码实现超详细注释版.pdf (opens new window)
  • 高效Go并发编程
  • Go性能调优
  • Go项目架构设计
  • 🔥使用Go从零开发一个数据库
  • 🔥使用Go从零开发一个编译器 (opens new window)
  • 🔥使用Go从零开发一个解释器 (opens new window)
Rust编程指南
  • SQL零基础指南
  • MySQL开发与调试指南
GitHub (opens new window)
  • 前言
    • 为什么要学习SQL?
    • 为什么选择这本书来学习SQL?
    • 内容结构
    • 详细目录
  • 第1章 一点背景知识
  • 第2章 创建和填充数据库
  • 第3章 查询入门
  • 第4章 数据过滤
  • 第5章 多表查询
  • 第6章 集合操作
  • 第7章 数据生成、转换与操作
  • 第8章 分组和聚合
  • 第9章 子查询
  • 第10章 再谈连接
  • 第11章 条件逻辑
  • 第12章 事务
  • 第13章 索引与约束
  • 第14章 视图
  • 第15章 元数据
  • 附录A 示例数据库的实体关系图
  • 附录B MySQL对SQL语言的扩展
  • 附录C 练习题答案
目录

前言

# 前言

Page Views Count (opens new window)

编程语言不断地推陈出新,如今仍在使用的编程语言中,很少有其起源能追溯到十多年前的。比如COBOL语言,它在大型机环境中仍被广泛使用;还有C语言,在操作系统、服务器开发以及嵌入式系统领域依然颇受欢迎。在数据库领域,SQL语言的起源可以一直追溯到20世纪70年代。

SQL是用于在关系型数据库中生成、操作和检索数据的语言。关系型数据库广受欢迎的原因之一在于,设计合理的关系型数据库能够处理海量数据。在处理大型数据集时,SQL就好比那些配备高倍变焦镜头的炫酷数码相机,你既可以用SQL查看大规模的数据集,也能聚焦到单个行数据(或者介于两者之间的任何粒度)。而其他数据库管理系统在负载过重时往往会崩溃,因为它们的关注点过于狭窄(就像变焦镜头被固定在最大倍率上),这就是为什么想要取代关系型数据库和SQL的尝试大多以失败告终。因此,尽管SQL是一门古老的语言,但它还会存在很长时间,并且前景光明。

本文为Alan_Beaulieu《Learning SQL-EN》的译本,首发于 cppguide.cn (opens new window)。

限于水平有限,如果您在阅读过程中有任何问题,可以联系小方(微信cppxiaofang),也欢迎加入小方的 技术交流群,群里面有很多技术高手,不定期发布招聘信息,加群请备注“加微信群”。

小方微信公众号【CppGuide】:

img

# 为什么要学习SQL?

如果你要使用关系型数据库,无论是编写应用程序、执行管理任务还是生成报告,都需要知道如何与数据库中的数据进行交互。即便你使用的是诸如报表工具这类能自动生成SQL的工具,有时也可能需要绕过自动生成功能,自己编写SQL语句。

学习SQL还有一个额外的好处,那就是能促使你去面对并理解用于存储组织信息的数据结构。当你对数据库中的表越来越熟悉时,可能会发现自己想要对数据库模式(database schema)提出修改或添加的建议。

# 为什么选择这本书来学习SQL?

SQL语言分为几个类别。用于创建数据库对象(表、索引、约束等)的语句统称为SQL模式语句(SQL schema statements)。用于创建、操作和检索数据库中存储的数据的语句被称为SQL数据语句(SQL data statements)。如果你是一名管理员,那么你会同时用到SQL模式语句和SQL数据语句。如果你是一名程序员或报表编写人员,可能只需要使用(或只被允许使用)SQL数据语句。虽然本书展示了许多SQL模式语句,但主要聚焦于编程特性。

SQL数据语句仅包含少数几个命令,看起来简单得让人掉以轻心。在我看来,许多现有的SQL书籍只是对这门语言所能实现的功能浅尝辄止,从而助长了这种错误认知。然而,如果你要使用SQL,就应该全面了解这门语言的功能,以及如何将不同的特性组合起来以产生强大的效果。我认为这本书是唯一一本详细介绍SQL语言,同时又不会厚得像“门挡”(你懂的,那些长达1250页的“完整参考手册”,往往在人们的办公隔间书架上积满灰尘)的书。

虽然本书中的示例可以在MySQL、Oracle数据库和SQL Server上运行,但我必须从这些产品中选择一个来承载示例数据库,并对示例查询返回的结果集进行格式化。在这三者之中,我选择了MySQL,因为它可以免费获取,安装方便,管理也简单。对于使用其他服务器的读者,我建议你下载并安装MySQL,加载示例数据库,这样就能运行示例并对数据进行试验。

# 内容结构

本书分为15章和3个附录:

  • 第1章“一点背景知识”,探讨计算机化数据库的历史,包括关系模型和SQL语言的兴起。
  • 第2章“创建并填充数据库”,展示如何创建一个MySQL数据库,创建本书示例中使用的表,并向表中填充数据。
  • 第3章“查询入门”,介绍select语句,并进一步展示最常用的子句(select、from、where)。
  • 第4章“筛选”,展示可以在select、update或delete语句的where子句中使用的不同类型的条件。
  • 第5章“查询多个表”,展示查询如何通过表连接(table joins)来使用多个表。
  • 第6章“集合操作”,介绍数据集以及它们在查询中如何相互作用。
  • 第7章“数据生成、转换和操作”,展示几个用于操作或转换数据的内置函数。
  • 第8章“分组和聚合”,展示如何对数据进行聚合。
  • 第9章“子查询”,介绍子查询(这是我个人最喜欢的部分),并展示在何处以及如何使用它们。
  • 第10章“再谈连接”,进一步探讨各种类型的表连接。
  • 第11章“条件逻辑”,探讨如何在select、insert、update和delete语句中使用条件逻辑(即if-then-else)。
  • 第12章“事务”,介绍事务并展示如何使用它们。
  • 第13章“索引和约束”,探讨索引和约束。
  • 第14章“视图”,展示如何构建一个接口,让用户避开数据的复杂性。
  • 第15章“元数据”,展示数据字典的实用之处。
  • 附录A“示例数据库的ER图”,展示本书所有示例使用的数据库模式。
  • 附录B“MySQL对SQL语言的扩展”,展示MySQL的SQL实现中一些有趣的非ANSI特性。
  • 附录C“练习答案”,展示各章练习的答案。

# 详细目录

  • 前言
  • 第1章 一点背景知识
    • 数据库简介
    • 非关系型数据库系统
    • 关系模型
    • 一些术语
    • 什么是SQL?
    • SQL语句分类
    • SQL:一种非过程化语言
    • SQL示例
    • 什么是MySQL?
    • 内容概览
  • 第2章 创建并填充数据库
    • 创建MySQL数据库
    • 使用mysql命令行工具
    • MySQL数据类型
      • 字符数据
      • 数字数据
      • 时间数据
    • 表的创建
      • 步骤1:设计
      • 步骤2:细化
      • 步骤3:构建SQL模式语句
    • 填充和修改表
      • 插入数据
      • 更新数据
      • 删除数据
    • 当正确的语句出错时
      • 主键不唯一
      • 外键不存在
      • 列值违规
      • 无效的日期转换
    • 银行模式
  • 第3章 查询入门
    • 查询机制
    • 查询子句
      • select子句
      • 列别名
      • 去除重复项
      • from子句
      • 表
      • 表链接
      • 定义表别名
      • where子句
      • group by和having子句
      • order by子句
      • 升序与降序排序顺序
      • 通过表达式排序
      • 通过数字占位符排序
    • 知识测验
  • 第4章 筛选
    • 条件求值
    • 使用括号
    • 使用not运算符
    • 构建条件
    • 条件类型
      • 相等条件
      • 范围条件
      • 成员条件
      • 匹配条件
      • NULL:那个四个字母的单词
    • 知识测验
  • 第5章 查询多个表
    • 什么是连接?
    • 笛卡尔积
    • 内连接
    • ANSI连接语法
    • 连接三个或更多表
    • 使用子查询作为表
    • 两次使用同一个表
    • 自连接
    • 等值连接与非等值连接
    • 连接条件与筛选条件
    • 知识测验
  • 第6章 集合操作
    • 集合论入门
    • 集合论实践
    • 集合运算符
      • union运算符
      • intersect运算符
      • except运算符
    • 集合操作规则
    • 对复合查询结果进行排序
    • 集合操作优先级
    • 知识测验
  • 第7章 数据生成、转换和操作
    • 处理字符串数据
      • 字符串生成
      • 字符串操作
    • 处理数字数据
      • 执行算术函数
      • 控制数字精度
      • 处理有符号数据
    • 处理时间数据
      • 处理时区
      • 生成时间数据
      • 操作时间数据
    • 转换函数
    • 知识测验
  • 第8章 分组和聚合
    • 分组概念
    • 聚合函数
    • 隐式分组与显式分组
    • 统计不同值的数量
    • 使用表达式
    • 处理NULL值
    • 生成组
      • 单列分组
      • 多列分组
      • 通过表达式分组
    • 生成汇总
    • 组筛选条件
    • 知识测验
  • 第9章 子查询
    • 什么是子查询?
    • 子查询类型
      • 非相关子查询
      • 多行单列子查询
      • 多列子查询
      • 相关子查询
      • exists运算符
      • 使用相关子查询进行数据操作
    • 何时使用子查询
    • 子查询作为数据源
    • 筛选条件中的子查询
    • 子查询作为表达式生成器
    • 子查询总结
    • 知识测验
  • 第10章 再谈连接
    • 外连接
    • 左外连接与右外连接
    • 三向外连接
    • 自外连接
    • 交叉连接
    • 自然连接
    • 知识测验
  • 第11章 条件逻辑
    • 什么是条件逻辑?
    • Case表达式
      • 搜索Case表达式
      • 简单Case表达式
    • Case表达式示例
    • 结果集转换
    • 选择性聚合
    • 检查存在性
    • 除零错误
    • 条件更新
    • 处理NULL值
    • 知识测验
  • 第12章 事务
    • 多用户数据库
    • 锁定
    • 锁定粒度
    • 什么是事务?
    • 开始事务
    • 结束事务
    • 事务保存点
    • 知识测验
  • 第13章 索引和约束
    • 索引
      • 索引创建
      • 索引类型
      • 索引的使用方式
      • 索引的缺点
    • 约束
      • 约束创建
      • 约束和索引
      • 级联约束
    • 知识测验
  • 第14章 视图
    • 什么是视图?
    • 为什么使用视图?
      • 数据安全性
      • 数据聚合
      • 隐藏复杂性
      • 连接分区数据
    • 可更新视图
      • 更新简单视图
      • 更新复杂视图
    • 知识测验
  • 第15章 元数据
    • 关于数据的数据
    • Information_Schema
    • 使用元数据
      • 模式生成脚本
      • 部署验证
      • 动态SQL生成
    • 知识测验
  • 附录A 示例数据库的ER图
  • 附录B MySQL对SQL语言的扩展
  • 附录C 练习答案
第1章 一点背景知识

第1章 一点背景知识→

最近更新
01
C++语言面试问题集锦 目录与说明
03-27
02
第四章 Lambda函数
03-27
03
第二章 关键字static及其不同用法
03-27
更多文章>
Copyright © 2024-2025 沪ICP备2023015129号 张小方 版权所有
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式