✍️
炼码教程 - SQL 边学边练
  • License
  • 介绍 Introduction
    • 目录 Content
  • Level 1
    • Hello SQL
    • 简单的 SELECT 语句
    • 简单的 INSERT 语句
    • 简单的 UPDATE 语句
    • 简单的 DELETE 语句
  • Level 2
    • 简单的数据库和数据表操作
      • 创建数据库
      • 创建数据表
      • 删除数据表
      • 删除数据库
    • 约束
      • 主键约束
      • 自增长约束
    • 常见数据类型
  • Level 3
    • SELECT进阶
      • WHERE 条件子句
      • ORDER BY 与 LIMIT
      • SELECT DISTINCT
    • Function 函数
      • AVG()
      • COUNT()
      • MAX()
      • MIN()
      • SUM()
      • ROUND()
      • NULL()
  • Level 4
    • Level 4 时间
  • Level 5
    • Level 5 多表单联合
    • 外键
    • 别名
    • 多表联结
      • INNER JOIN
      • LEFT JOIN
      • RIGHT JOIN
      • OUTER JOIN
  • Level 6
    • Level 6 临时表单
    • GROUP BY
    • HAVING
    • 子查询
      • SELECT 语句中的子查询
      • INSERT 语句中的子查询
      • UPDATE 语句中的子查询
      • DELETE 语句中的子查询
      • 多行子查询
      • 多列子查询
      • HAVING 子句中的子查询
      • 内联视图子查询
  • Level 7
    • Level 7 索引
  • Level 8
    • Level 8 事务 Transaction
  • Level 9
    • Level 9 复杂的SQL查询
  • Level MAX
    • Level 10 变量和循环
  • 附录 Appendix
    • 数据类型参考手册
    • 函数 Function
    • 通配符
    • 演示数据库
    • common
    • Bug 001
Powered by GitBook
On this page
  • 写在前面
  • 1. 什么是数据库
  • 2. SQL 是什么
  • 3. SQL 能做什么?
  • 4. 此外
  • 5. 关于本教程
  • 6. 安装教程
  • MAC
  • Win
  • Linux

Was this helpful?

  1. Level 1

Hello SQL

写在前面

本教程所有代码均可在线执行测试,通过Lintcode学习平台即可在线学习、测试,并提供在线练习题方便练习,从而让你更高效、熟练得掌握SQL语句相关知识。

1. 什么是数据库

update 2021/03/10

(改成简洁版本,先验知识不要太多,任务驱动,学到哪儿再详解该部分知识)

在学习数据库之前,我们先需要简单的了解下什么是数据库。

数据库(Database)简单理解就是一个存储数据的仓库,为了方便数据的存储和管理,它能将数据按照特定的规律存储在磁盘上。

而通过数据库管理系统,我们可以有效地组织和管理存储在数据库中的数据。

如今数据库已经无处不在了。一个网站需要有数据库来存储网站信息;一个学校需要用数据库来存储学生和教师的信息;一个公司需要用数据库来存储员工和公司的资料。

以你正在使用的炼码(Lintcode)为例,Lintcode 是一个面向未来的学习编程技术网站,是为了让你终生学习的一款 All in One 在线学习平台。我们有大量的练习和正在开发中的项目,也有从事相关教程(Tutorial)研发的教师,以及正在开发中的课程。

根据以上信息

我们来设计一个简单的数据库 — Lintcode

用来存放我们 Lintcode 相关信息

在 Lintcode 数据库中,有两张表——课程表 courses 和 教师表 teachers

courses 表中存放着课程的信息 ,包括课程的名称(name)、学生数量(student_count)、开课日期(created)以及授课老师id(teacher_id)

teachers 表中存放着教师的信息,包括教师的姓名(name)、邮箱(email)、年龄(age)以及国籍(country)

演示数据库

以上的两个表就是我们的教师表和课程表的展现形式,与我们常见的 excel 表格别无二致。

下面我们对上述两个表格做些简单的介绍,方便大家后续课程的理解:

  • 数据库:数据库是一些关联表的集合。Lintcode 就是我们用来存放课程表 courses 和教师表 teachers 的数据库。

  • 数据表:表是数据的矩阵。课程表 courses 和 教师表 teachers 就是数据表,看起来像一个简单的 excel 表格。

  • 列:一列(数据元素)包含了相同类型的数据。例如教师表 teachers 中的姓名(name)就是一个列,这一列中的教师姓名都是用字符方式存储

  • 行:一行数据(可以元组,或记录)是一组相关的数据。例如教师表每一行都对应一位教师信息

此外,大家是否注意到,我们在教师表 teachers 和课程表 courses 中,有一个额外的列,叫作 id,这个列是什么作用呢?

这个名为 id 的列,是我们用来唯一标识每行数据的,称为主键。实际上,教师的姓名是不能唯一标识一条记录的(因为教师姓名可能会有相同),所以我们使用额外的一列来唯一标识每行。这个列我们一般取名为 id,即 identification 的缩写,也可以取别的名称。此外,需要注意的是,一个数据表只能有一个主键。

此外,在教师表 courses 中,我们发现有一列数据 teacher_id 和教师表 teachers 中的 id 相关联,即每个 teacher_id 都指向教师表中的某一个教师记录,这种用于关联其它表某一列的列,我们称为外键(foreign key)。

2. SQL 是什么

SQL(Structured Query Language)中文全称为”结构化查询语句“,在1986年成为 ANSI(American National Standards Institute 美国国家标准化组织)的一项标准,在 1987 年成为国际标准化组织(ISO)标准。

SQL 是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

简单理解就是对我们数据库和数据库中的表进行”增删改查“操作的编程语言。

3. SQL 能做什么?

SQL 具体能完成下面功能:

  • SQL 面向数据库执行查询

  • SQL 可从数据库取回数据

  • SQL 可在数据库中插入新的记录

  • SQL 可更新数据库中的数据

  • SQL 可从数据库删除记录

  • SQL 可创建新数据库

  • SQL 可在数据库中创建新表

  • SQL 可在数据库中创建存储过程

  • SQL 可在数据库中创建视图

  • SQL 可以设置表、存储过程和视图的权限

总结起来,其实就“增删改查”四大功能,但是实际上我们平时用到最多的是查询,因此本教程在涵盖“增删改”的基础上,重点将通过练习的方式,帮助大家融会贯通从基础到困难,共10个难度等级的SQL常见知识点和面试题。

4. 此外

虽然 SQL 是一门 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言,但是仍然存在着多种不同版本的 SQL 语言。

然而,为了与 ANSI 标准相兼容,它们必须以相似的方式共同地来支持一些主要的命令(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。

5. 关于本教程

本教程将演示如何使用MySQL编写SQL语句,并且也会介绍其他常用数据库的语法,以便无须修改或者少量修改就能够在这些平台运行。

6. 安装教程

如果你希望在本地演示数据库,下面是不同平台的mysql安装教程可供参考。在安装完mysql后,可以通过下载我们的sql文件来在本地创建数据库,并使用source的方式在本地创建courses和teachers两个表

MAC

Win

Linux

Previous目录 ContentNext简单的 SELECT 语句

Last updated 4 years ago

Was this helpful?

以上表单命名参考

课程表 👈点击下载

教师表 👈点击下载

商业关系型数据库已经存在几十年,几种最成熟和流行的商业产品包括: 甲骨文公司的Oracle Database、Mircrosoft公司的SQL Server等。这些数据库服务器的功能十分类似,而且都遵循了最新的ANSI SQL标准。而除了商业级数据库,开源社区也为创建商业数据库在努力,比如拥有大量用户的 ,该服务器软件的下载和安装都非常简单。

Lintcode数据表命名规范
courses.sql
teachers
MySQL
courses.sql
teachers.sql
https://zhuanlan.zhihu.com/p/129366085
https://zhuanlan.zhihu.com/p/37152572
https://zhuanlan.zhihu.com/p/37152572