首页 > 数据库 > MySQL > SQL入门教程:从基础到精通,一篇搞定!
导读: SQL语言自问世以来已有超过40年的历史,几乎无处不在。我们每一次的支付记录、用户信息收集、信息传递等,都是依赖数据库及其相关产品来存储,而操控这些数据库的语言正是 SQL!
在现代互联网公司的研发和生产岗位中,SQL几乎是必备技能。如果你不会 SQL,很多工作可能无法进行。可以把 SQL 看作一项工具,利用它可以帮助你高效地完成工作,创造价值。
SQL 是一种用于访问和管理数据库的标准计算机语言。
SQL 可以与多种数据库程序协同工作,如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 及其他数据库系统。然而,由于不同数据库的出现,导致了 SQL 的多个不同版本。为了与 ANSI 标准兼容,它们必须在某些主要的关键字(如 SELECT、UPDATE、DELETE、INSERT、WHERE 等)上保持一致,这些就是我们学习 SQL 的基础内容。
SQL 可以分为两个主要部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
SQL 是一门 ANSI 的标准语言,用于访问和操作数据库系统。SQL 语句用于检索和更新数据库中的数据。
数据库是一个存放数据的容器。 就像每个家庭都有冰箱用于存放食物,数据库则是用来存储数据的地方。正因如此,我们能够方便地查找所需数据。例如,您每天通过余额宝查看账户收益,实际上就是从数据库中读取相关数据。
最常见的数据库类型是关系型数据库管理系统(RDBMS),它是 SQL 的基础,同时也是现代数据库系统的根基。例如:
在 RDBMS 中,数据存储在称为表(tables)的数据库对象中。表是相关数据项的集合,由列和行组成。由于本文主要关注 SQL 基础内容,因此对数据库的详细解释将较少,只需对其有个大致了解即可。
让我们直接开始学习 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、姓、名、地址和城市)。 有了表,才能进行查询,那我们如何创建这样的表呢?
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 语句向空表中插入数据。
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 语句进行数据查询。
SELECT 语句用于从表中提取数据,结果存储在一个称为结果集的表中。
语法:
SELECT * FROM 表名称;
我们也可以指定要查询的列:
SELECT 列名称 FROM 表名称;
注意: SQL 语句对大小写不敏感,SELECT 与 select 等效。
实例:
SELECT * FROM Persons;
注意: 星号(*)表示选择所有列。如果需要获取名为 “LastName” 和 “FirstName”的列的内容,可以使用以下 SELECT 语句:
SELECT LastName, FirstName FROM Persons;
如果一张表中存在多行重复数据,可以使用 DISTINCT 来去重。
语法:
SELECT DISTINCT 列名称 FROM 表名称;
实例: 如果想从 “LastName” 列中选取所有值,可以使用:
SELECT LastName FROM Persons;
如果想仅选取唯一不同的值,则需使用:
SELECT DISTINCT LastName FROM Persons;
若要从表中选取特定数据,可在 SELECT 语句中添加 WHERE 子句。
语法:
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值;
可在 WHERE 子句中使用以下运算符:
| 操作符 | 描述 |
|---|---|
| = | 等于 |
| <> | 不等于 |
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
| BETWEEN | 在某个范围内 |
| LIKE | 搜索某种模式 |
实例: 如果只希望选取居住在 “Beijing” 的人:
SELECT * FROM Persons WHERE City='Beijing';
AND 和 OR 可在 WHERE 子句中结合两个或多个条件。
语法: 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';
ORDER BY 语句用于根据指定的列对结果集进行排序,默认按升序排序;若需按降序排序,可使用 DESC 关键字。
语法:
SELECT * FROM 表名称 ORDER BY 列1, 列2 DESC;
实例: 以字母顺序显示 LastName 名称:
SELECT * FROM Persons ORDER BY LastName;
UPDATE 语句用于修改表中的数据。
语法:
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值;
实例: 更新某一行中的列:
UPDATE Persons SET FirstName = 'Fred' WHERE LastName = 'Wilson';
DELETE 语句用于删除表中的行。
语法:
DELETE FROM 表名称 WHERE 列名称 = 值;
实例: 删除 Persons 表中 LastName 为 “Wilson” 的行:
DELETE FROM Persons WHERE LastName = 'Wilson';
如果只需删除表内的数据而不删除表本身,使用 TRUNCATE TABLE 命令(仅删除表格中的数据):
语法:
TRUNCATE TABLE 表名称;
DROP TABLE 语句用于删除表(包括表的结构、属性及索引)。
语法:
DROP TABLE 表名称;
LIKE 操作符用于在 WHERE 子句中搜索列中的特定模式。
语法:
SELECT 列名/(*) FROM 表名称 WHERE 列名称 LIKE 值;
示例: 从上面的 “Persons” 表中选取居住在以 “N” 开头的城市里的人:
SELECT * FROM Persons WHERE City LIKE 'N%';
IN 操作符允许在 WHERE 子句中指定多个值。
语法:
SELECT 列名/(*) FROM 表名称 WHERE 列名称 IN (值1, 值2, 值3);
示例: 从 Persons 表中选取姓氏为 Adams 和 Carter 的人:
SELECT * FROM Persons WHERE LastName IN ('Adams', 'Carter');
BETWEEN … AND 操作符用于选取介于两个值之间的数据范围。
语法:
SELECT 列名/(*) FROM 表名称 WHERE 列名称 BETWEEN 值1 AND 值2;
通过 SQL,可以为列名和表名指定别名(Alias),使查询更易读。
语法:
SELECT 列名称/(*) FROM 表名称 AS 别名;
JOIN 用于根据两个或多个表中列之间的关系查询数据。
语法:
SELECT 列名 FROM 表A INNER|LEFT|RIGHT|FULL JOIN 表B ON 表A主键列 = 表B外键列;
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
语法:
SELECT 列名 FROM 表A UNION SELECT 列名 FROM 表B;
NOT NULL 约束强制列不接受 NULL 值。
语法:
CREATE TABLE 表 ( 列 int NOT NULL );
视图是基于 SQL 语句的结果集的可视化表。
语法:
CREATE VIEW 视图名 AS SELECT 列名 FROM 表名 WHERE 查询条件;
SQL 提供了多种内建函数用于计数和计算。
函数的使用语法:
SELECT function(列) FROM 表;
AVG 函数返回数值列的平均值。
语法:
SELECT AVG(列名) FROM 表名;
COUNT() 函数返回匹配指定条件的行数。
语法:
SELECT COUNT(*) FROM 表名;
MAX 函数返回一列中的最大值。
语法:
SELECT MAX(列名) FROM 表名;
MIN 函数返回一列中的最小值。
语法:
SELECT MIN(列名) FROM 表名;
SUM 函数返回数值列的总和。
语法:
SELECT SUM(列名) FROM 表名;
GROUP BY 语句结合合计函数,根据一个或多个列对结果集进行分组。
语法:
SELECT 列名A, 统计函数(列名B) FROM 表名 WHERE 查询条件 GROUP BY 列名A;
HAVING 子句用于与合计函数结合使用。
语法:
SELECT 列名A, 统计函数(列名B) FROM 表名 WHERE 查询条件 GROUP BY 列名A HAVING 统计函数(列名B) 查询条件;
UCASE/UPPER 函数将字段值转换为大写。
语法:
SELECT UPPER(列名) FROM 表名;
LCASE/LOWER 函数将字段值转换为小写。
语法:
SELECT LOWER(列名) FROM 表名;
LEN/LENGTH 函数返回文本字段中值的长度。
语法:
SELECT LENGTH(列名) FROM 表名;
ROUND 函数将数值字段舍入为指定的小数位数。
语法:
SELECT ROUND(列名, 精度) FROM 表名;
NOW/SYSDATE 函数返回当前的日期和时间。
语法:
SELECT SYSDATE FROM 表名;
如果您对网络安全感兴趣,我们提供了最新的学习路线和资源,帮助您快速入门并深入研究。希望您喜欢这篇文章,欢迎点赞和分享! 一站自学网站:xuesql.cn
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70049428/viewspace-3109184/ ,如需转载,请注明出处,否则将追究法律责任。