SQL 入门到精通:掌握数据库管理(一)
- 数据库
- 8天前
- 8热度
- 0评论
SQL(Structured Query Language,结构化查询语言)是用于管理和操作关系型数据库的标准编程语言。通过 SQL,你可以轻松地执行数据查询、插入、更新和删除等操作。本文将详细介绍 SQL 的基本概念、常用命令和最佳实践,帮助你快速掌握这门强大的数据库管理语言。
什么是 SQL?
SQL 是一种用于管理关系型数据库管理系统(RDBMS)的编程语言。它通过一系列的语句和命令来执行数据定义、数据查询、数据操作和数据控制等功能。SQL 语言采用英语关键词,使其易于阅读和编写,并且得到了国际标准化组织(ISO)和美国国家标准协会(ANSI)的标准化认证。
SQL 的主要功能
- 数据查询:从数据库中检索数据。
- 数据插入:向数据库中添加新记录。
- 数据更新:修改数据库中的现有记录。
- 数据删除:从数据库中移除记录。
- 数据库结构管理:创建、修改和删除数据库及表结构。
- 数据访问控制:设置表、存储过程和视图的权限。
SQL 的标准化与扩展
尽管 SQL 是一种标准化的计算机语言,但不同的数据库系统(如 MySQL、SQL Server、Oracle 等)都有各自的扩展和优化。为了保持兼容性,这些系统必须支持一些主要的 SQL 命令(如 SELECT、UPDATE、DELETE、INSERT、WHERE 等)。
如何在网站中使用 SQL
要在网站中使用 SQL,你需要以下几个组件:
- RDBMS 数据库程序:如 MS Access、SQL Server、MySQL 等。
- 服务器端脚本语言:如 PHP、ASP 等。
- SQL 语句:用于从数据库中获取所需数据。
- HTML/CSS:用于展示数据。
关系型数据库管理系统(RDBMS)
RDBMS 是 SQL 的基础,也是所有现代数据库系统的核心。常见的 RDBMS 包括 MS SQL Server、IBM DB2、Oracle、MySQL 和 Microsoft Access。在 RDBMS 中,数据存储在称为表的数据库对象中,表由行和列组成。
SQL 发展历史
1970年代:起源与早期发展
- 1970年:埃德加·科德(Edgar F. Codd)发表了《A Relational Model of Data for Large Shared Data Banks》论文,提出了关系数据库的概念,为 SQL 的发展奠定了理论基础。
- 1973-1974年:IBM 的研究人员 Donald D. Chamberlin 和 Raymond F. Boyce 开发了一种名为 SEQUEL(Structured English Query Language)的语言,用于操作和管理 IBM 的 System R 关系数据库。
- 1976年:SEQUEL 更名为 SQL(Structured Query Language)。
1980年代:标准化与商业化
- 1981年:IBM 推出了商用关系数据库系统 SQL/DS 和 DB2。
- 1986年:ANSI 发布了第一个 SQL 标准 ANSI SQL-86。
- 1987年:ISO 采纳了 ANSI SQL-86 作为国际标准。
1990年代:扩展与改进
- 1992年:发布 SQL-92 标准,显著扩展了 SQL 语言的功能。
- 1999年:发布 SQL:1999 标准,引入了对象关系数据库(ORDBMS)特性、递归查询、触发器和用户定义函数。
2000年代:持续演进与新特性
- 2003年:发布 SQL:2003 标准,引入了 XML 相关特性和窗口函数。
- 2006年:发布 SQL:2006 标准,增强对 XML 的支持。
- 2008年:发布 SQL:2008 标准,进一步改进语法和性能优化。
2010年代:新功能与大数据支持
- 2011年:发布 SQL:2011 标准,增加对时间数据类型和时间旅行(temporal data)的支持。
- 2016年:发布 SQL:2016 标准,引入 JSON 数据类型和相关操作函数,适应 NoSQL 数据库和大数据处理需求。
2020年代:现代化与标准更新
- 2023年:最新的 SQL 标准持续改进,增加了对更现代化的数据库需求和特性的支持。
数据库表
一个数据库通常包含一个或多个表,每个表有一个唯一的名称标识。表由行和列组成,行代表记录,列代表字段。例如,我们在 MySQL 的 RUNOOB 数据库中创建了一个名为 Websites 的表,用于存储网站记录。
mysql> use RUNOOB;
Database changed
mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM Websites;
+----+--------------+---------------------------+-------+---------+
| id | name | url | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao.com/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob.com/ | 4689 | CN |
| 4 | 微博 | http://weibo.com/ | 20 | CN |
| 5 | Facebook | https://www.facebook.com/ | 3 | USA |
+----+--------------+---------------------------+-------+---------+
5 rows in set (0.01 sec)解析
- use RUNOOB;:选择数据库。
- set names utf8;:设置字符集。
- *SELECT FROM Websites;**:查询表中的所有记录。
SQL 语句
SQL 语句是用于在数据库上执行各种操作的命令。以下是一些最重要的 SQL 命令及其用法:
SELECT 语句
SELECT 语句用于从数据库中查询数据。例如,从 Websites 表中查询所有记录:
SELECT * FROM Websites;INSERT INTO 语句
INSERT INTO 语句用于向数据库表中插入新数据。例如,向 Websites 表中插入一条新记录:
INSERT INTO Websites (name, url, alexa, country)
VALUES ('Twitter', 'https://www.twitter.com/', 8, 'USA');UPDATE 语句
UPDATE 语句用于更新数据库表中的现有数据。例如,更新 Websites 表中某个记录的 URL:
UPDATE Websites
SET url = 'https://www.newgoogle.com/'
WHERE id = 1;DELETE 语句
DELETE 语句用于从数据库表中删除数据。例如,删除 Websites 表中某个记录:
DELETE FROM Websites
WHERE id = 1;CREATE DATABASE 语句
CREATE DATABASE 语句用于创建新数据库。例如,创建一个名为 MyDB 的新数据库:
CREATE DATABASE MyDB;CREATE TABLE 语句
CREATE TABLE 语句用于创建新表。例如,创建一个名为 Users 的新表:
CREATE TABLE Users (
id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);ALTER TABLE 语句
ALTER TABLE 语句用于修改现有表的结构。例如,向 Users 表中添加一个新列:
ALTER TABLE Users
ADD age INT;DROP TABLE 语句
DROP TABLE 语句用于删除表。例如,删除 Users 表:
DROP TABLE Users;CREATE INDEX 语句
CREATE INDEX 语句用于创建索引,以加快查询速度。例如,为 Users 表的 email 列创建索引:
CREATE INDEX idx_email
ON Users (email);DROP INDEX 语句
DROP INDEX 语句用于删除索引。例如,删除 Users 表的 idx_email 索引:
DROP INDEX idx_email
ON Users;WHERE 子句
WHERE 子句用于指定查询条件。例如,查询 Websites 表中 country 为 'USA' 的记录:
SELECT * FROM Websites
WHERE country = 'USA';ORDER BY 子句
ORDER BY 子句用于对结果集进行排序。例如,按 alexa 列降序排列 Websites 表中的记录:
SELECT * FROM Websites
ORDER BY alexa DESC;GROUP BY 子句
GROUP BY 子句用于将结果集按一列或多列进行分组。例如,统计 Websites 表中每个国家的网站数量:
SELECT country, COUNT(*) AS num_websites
FROM Websites
GROUP BY country;HAVING 子句
HAVING 子句用于对分组后的结果集进行筛选。例如,筛选出 Websites 表中网站数量大于 1 的国家:
SELECT country, COUNT(*) AS num_websites
FROM Websites
GROUP BY country
HAVING COUNT(*) > 1;JOIN 子句
JOIN 子句用于将两个或多个表的记录结合起来。例如,将 Websites 表和 Users 表进行内连接:
SELECT Websites.name, Users.name
FROM Websites
INNER JOIN Users
ON Websites.id = Users.id;DISTINCT 关键字
DISTINCT 关键字用于返回唯一不同的值。例如,查询 Websites 表中所有不同的国家:
SELECT DISTINCT country
FROM Websites;最佳实践
- 使用有意义的表名和列名:确保表名和列名具有描述性,便于理解和维护。
- 合理使用索引:索引可以显著提高查询性能,但过多的索引会增加写入操作的开销。
- **避免使用 SELECT ***:尽量指定需要的列,减少不必要的数据传输。
- 使用事务:对于涉及多个操作的复杂任务,使用事务可以确保数据的一致性和完整性。
- 定期备份:定期备份数据库,防止数据丢失。
总结
通过本文,你已经了解了 SQL 的基本概念、常用命令和最佳实践。SQL 是一种强大而灵活的数据库管理语言,掌握它将使你在数据管理和操作方面更加得心应手。希望本文能帮助你在 SQL 学习的道路上更进一步。