SQL入门教程:从基础到精通,一篇搞定!

3 阅读10分钟

SQL入门教程:从基础到精通,一篇搞定!

前言

导读: SQL语言自问世以来已有超过40年的历史,几乎无处不在。我们每一次的支付记录、用户信息收集、信息传递等,都是依赖数据库及其相关产品来存储,而操控这些数据库的语言正是 SQL!

在现代互联网公司的研发和生产岗位中,SQL几乎是必备技能。如果你不会 SQL,很多工作可能无法进行。可以把 SQL 看作一项工具,利用它可以帮助你高效地完成工作,创造价值。

01 SQL 介绍

1. 什么是 SQL

SQL 是一种用于访问和管理数据库的标准计算机语言。

  • SQL 代表结构化查询语言(Structured Query Language)
  • SQL 使我们能够与数据库进行交互
  • SQL 是 ANSI(美国国家标准协会)认可的标准语言

SQL 可以与多种数据库程序协同工作,如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 及其他数据库系统。然而,由于不同数据库的出现,导致了 SQL 的多个不同版本。为了与 ANSI 标准兼容,它们必须在某些主要的关键字(如 SELECT、UPDATE、DELETE、INSERT、WHERE 等)上保持一致,这些就是我们学习 SQL 的基础内容。

2. SQL 的类型

SQL 可以分为两个主要部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。

  • 数据查询语言(DQL: Data Query Language)
  • 数据操纵语言(DML: Data Manipulation Language)

3. 学习 SQL 的意义

SQL 是一门 ANSI 的标准语言,用于访问和操作数据库系统。SQL 语句用于检索和更新数据库中的数据。

  • SQL 可用于执行数据库查询
  • SQL 可从数据库中提取数据
  • SQL 可在数据库中插入新记录
  • SQL 可更新数据库中的现有数据
  • SQL 可从数据库中删除记录
  • SQL 可创建新的数据库
  • SQL 可在数据库中生成新表
  • SQL 可创建存储过程
  • SQL 可创建视图
  • SQL 可以设置表、存储过程和视图的权限

4. 数据库的定义

数据库是一个存放数据的容器。 就像每个家庭都有冰箱用于存放食物,数据库则是用来存储数据的地方。正因如此,我们能够方便地查找所需数据。例如,您每天通过余额宝查看账户收益,实际上就是从数据库中读取相关数据。

最常见的数据库类型是关系型数据库管理系统(RDBMS),它是 SQL 的基础,同时也是现代数据库系统的根基。例如:

  • MS SQL Server
  • IBM DB2
  • Oracle
  • MySQL
  • Microsoft Access

RDBMS 中,数据存储在称为表(tables)的数据库对象中。表是相关数据项的集合,由列和行组成。由于本文主要关注 SQL 基础内容,因此对数据库的详细解释将较少,只需对其有个大致了解即可。

让我们直接开始学习 SQL 吧!

02 SQL 基础语言学习

在了解 SQL 基础语句之前,我们先来讲讲 是什么。一个数据库通常包含一个或多个表,每个表通过一个名字标识(如“客户”或“订单”),表中包含带有数据的记录(行)。

以下是一个名为 “Persons” 的表的示例:

IdLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
3CarterThomasChangan StreetBeijing

上面的表包含三条记录(每条对应一个人)和五个列(Id、姓、名、地址和城市)。 有了表,才能进行查询,那我们如何创建这样的表呢?

1. CREATE TABLE – 创建表

CREATE TABLE 语句用于在数据库中创建表。

语法:

CREATE TABLE 表名称 (
    列名称1 数据类型,
    列名称2 数据类型,
    列名称3 数据类型,
    ....
);

数据类型(data_type)定义了列可以接受的具体数据类型。以下是 SQL 中一些常用数据类型的表格:

数据类型描述
integer(size), int(size), smallint(size)仅可存放整数,括号中规定数字的最大位数
decimal(size, d), numeric(size, d)可存放带小数的数字,“size”规定数字的最大位数,“d”规定小数点后最大位数
char(size)存放固定长度的字符串(可包含字母、数字及特殊字符),括号中规定字符串长度
varchar(size)存放可变长度的字符串(可包含字母、数字及特殊字符),括号中规定字符串的最大长度
date(yyyymmdd)存放日期

示例: 本例演示如何创建名为 “Persons” 的表,包含 5 个列,列名分别为:“Id_P”、“LastName”、“FirstName”、“Address” 和 “City”:

CREATE TABLE Persons (
    Id_P int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
);

在这个表中,Id_P 列的数据类型为 int,包含整数,其余四列的数据类型为 varchar,最大长度为 255 个字符。

空的 “Persons” 表示例:

| Id_P | LastName | FirstName | Address | City |
|------|----------|-----------|---------|------|

可以使用 INSERT INTO 语句向空表中插入数据。

2. INSERT – 插入数据

INSERT INTO 语句用于向表中添加新行。

语法:

INSERT INTO 表名称 VALUES (值1, 值2,....); 
我们也可以指定插入数据的列: 
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....);

示例: 以下是 “Persons” 表插入记录的两种方式: 1)插入新的行:

INSERT INTO Persons VALUES (1, 'Gates', 'Bill', 'Xuanwumen 10', 'Beijing');

2)在指定的列中插入数据:

INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees');

插入成功后,数据如下:

| Id_P | LastName | FirstName | Address          | City    |
|------|----------|-----------|-------------------|---------|
| 1    | Gates    | Bill      | Xuanwumen 10      | Beijing |
| 2    | Wilson   | NULL      | Champs-Elysees    | NULL    |

接下来,我们将通过 SELECT 语句进行数据查询。

3. SELECT – 查询数据

SELECT 语句用于从表中提取数据,结果存储在一个称为结果集的表中。

语法:

SELECT * FROM 表名称;

我们也可以指定要查询的列:

SELECT 列名称 FROM 表名称;

注意: SQL 语句对大小写不敏感,SELECT 与 select 等效。

实例:

SELECT * FROM Persons;

注意: 星号(*)表示选择所有列。如果需要获取名为 “LastName” 和 “FirstName”的列的内容,可以使用以下 SELECT 语句:

SELECT LastName, FirstName FROM Persons;

4. DISTINCT – 去除重复值

如果一张表中存在多行重复数据,可以使用 DISTINCT 来去重。

语法:

SELECT DISTINCT 列名称 FROM 表名称;

实例: 如果想从 “LastName” 列中选取所有值,可以使用:

SELECT LastName FROM Persons;

如果想仅选取唯一不同的值,则需使用:

SELECT DISTINCT LastName FROM Persons;

5. WHERE – 条件过滤

若要从表中选取特定数据,可在 SELECT 语句中添加 WHERE 子句。

语法:

SELECT 列名称 FROM 表名称 WHERE 列 运算符 值;

可在 WHERE 子句中使用以下运算符:

操作符描述
=等于
<>不等于
大于
<小于
>=大于等于
<=小于等于
BETWEEN在某个范围内
LIKE搜索某种模式

实例: 如果只希望选取居住在 “Beijing” 的人:

SELECT * FROM Persons WHERE City='Beijing';

6. AND & OR – 运算符

AND 和 OR 可在 WHERE 子句中结合两个或多个条件。

  • 使用 AND 运算符时,只有当两个条件都满足时,才会返回记录。
  • 使用 OR 运算符时,只需其中一个条件满足即可返回记录。

语法: AND 运算符示例:

SELECT * FROM 表名称 WHERE 列 运算符 值 AND 列 运算符 值;

OR 运算符示例:

SELECT * FROM 表名称 WHERE 列 运算符 值 OR 列 运算符 值;

实例: 假设 “Persons” 表已有多条数据,可以通过以下方式使用 AND 和 OR:

SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter';
SELECT * FROM Persons WHERE FirstName='Thomas' OR LastName='Carter';

7. ORDER BY – 排序

ORDER BY 语句用于根据指定的列对结果集进行排序,默认按升序排序;若需按降序排序,可使用 DESC 关键字。

语法:

SELECT * FROM 表名称 ORDER BY1, 列2 DESC;

实例: 以字母顺序显示 LastName 名称:

SELECT * FROM Persons ORDER BY LastName;

8. UPDATE – 更新数据

UPDATE 语句用于修改表中的数据。

语法:

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值;

实例: 更新某一行中的列:

UPDATE Persons SET FirstName = 'Fred' WHERE LastName = 'Wilson';

9. DELETE – 删除数据

DELETE 语句用于删除表中的行。

语法:

DELETE FROM 表名称 WHERE 列名称 = 值;

实例: 删除 Persons 表中 LastName 为 “Wilson” 的行:

DELETE FROM Persons WHERE LastName = 'Wilson';

10. TRUNCATE TABLE – 清除表数据

如果只需删除表内的数据而不删除表本身,使用 TRUNCATE TABLE 命令(仅删除表格中的数据):

语法:

TRUNCATE TABLE 表名称;

11. DROP TABLE – 删除表

DROP TABLE 语句用于删除表(包括表的结构、属性及索引)。

语法:

DROP TABLE 表名称;

03 SQL 高级语言学习

1. LIKE – 查找类似值

LIKE 操作符用于在 WHERE 子句中搜索列中的特定模式。

语法:

SELECT 列名/(*) FROM 表名称 WHERE 列名称 LIKE 值;

示例: 从上面的 “Persons” 表中选取居住在以 “N” 开头的城市里的人:

SELECT * FROM Persons WHERE City LIKE 'N%';

2. IN – 锁定多个值

IN 操作符允许在 WHERE 子句中指定多个值。

语法:

SELECT 列名/(*) FROM 表名称 WHERE 列名称 IN (值1, 值2, 值3);

示例:Persons 表中选取姓氏为 Adams 和 Carter 的人:

SELECT * FROM Persons WHERE LastName IN ('Adams', 'Carter');

3. BETWEEN – 选取区间数据

BETWEEN … AND 操作符用于选取介于两个值之间的数据范围。

语法:

SELECT 列名/(*) FROM 表名称 WHERE 列名称 BETWEEN1 AND2;

4. AS – 别名

通过 SQL,可以为列名和表名指定别名(Alias),使查询更易读。

语法:

SELECT 列名称/(*) FROM 表名称 AS 别名;

5. JOIN – 多表关联

JOIN 用于根据两个或多个表中列之间的关系查询数据。

语法:

SELECT 列名 FROM 表A INNER|LEFT|RIGHT|FULL JOIN 表B ON 表A主键列 = 表B外键列;

6. UNION – 合并结果集

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

语法:

SELECT 列名 FROM 表A UNION SELECT 列名 FROM 表B;

7. NOT NULL – 非空

NOT NULL 约束强制列不接受 NULL 值。

语法:

CREATE TABLE 表 ( 列 int NOT NULL );

8. VIEW – 视图

视图是基于 SQL 语句的结果集的可视化表。

语法:

CREATE VIEW 视图名 AS SELECT 列名 FROM 表名 WHERE 查询条件;

04 SQL 常用函数学习

SQL 提供了多种内建函数用于计数和计算。

函数的使用语法:

SELECT function(列) FROM 表;

1. AVG – 平均值

AVG 函数返回数值列的平均值。

语法:

SELECT AVG(列名) FROM 表名;

2. COUNT – 汇总行数

COUNT() 函数返回匹配指定条件的行数。

语法:

SELECT COUNT(*) FROM 表名;

3. MAX – 最大值

MAX 函数返回一列中的最大值。

语法:

SELECT MAX(列名) FROM 表名;

4. MIN – 最小值

MIN 函数返回一列中的最小值。

语法:

SELECT MIN(列名) FROM 表名;

5. SUM – 求和

SUM 函数返回数值列的总和。

语法:

SELECT SUM(列名) FROM 表名;

6. GROUP BY – 分组

GROUP BY 语句结合合计函数,根据一个或多个列对结果集进行分组。

语法:

SELECT 列名A, 统计函数(列名B) FROM 表名 WHERE 查询条件 GROUP BY 列名A;

7. HAVING – 句尾连接

HAVING 子句用于与合计函数结合使用。

语法:

SELECT 列名A, 统计函数(列名B) FROM 表名 WHERE 查询条件 GROUP BY 列名A HAVING 统计函数(列名B) 查询条件;

8. UCASE/UPPER – 大写

UCASE/UPPER 函数将字段值转换为大写。

语法:

SELECT UPPER(列名) FROM 表名;

9. LCASE/LOWER – 小写

LCASE/LOWER 函数将字段值转换为小写。

语法:

SELECT LOWER(列名) FROM 表名;

10. LEN/LENGTH – 获取长度

LEN/LENGTH 函数返回文本字段中值的长度。

语法:

SELECT LENGTH(列名) FROM 表名;

11. ROUND – 数值取舍

ROUND 函数将数值字段舍入为指定的小数位数。

语法:

SELECT ROUND(列名, 精度) FROM 表名;

12. NOW/SYSDATE – 当前时间

NOW/SYSDATE 函数返回当前的日期和时间。

语法:

SELECT SYSDATE FROM 表名;

题外话

如果您对网络安全感兴趣,我们提供了最新的学习路线和资源,帮助您快速入门并深入研究。希望您喜欢这篇文章,欢迎点赞和分享! 一站自学网站:xuesql.cn