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

来源:这里教程网 时间:2026-03-01 18:35: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” 的表的示例:

Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

上面的表包含三条记录(每条对应一个人)和五个列(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 BY 列1, 列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 列名称 BETWEEN 值1 AND 值2;

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

相关推荐