SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系数据库管理系统的编程语言。它被设计用来查询、更新、插入和删除数据库中的数据。SQL是一种标准化的语言,尽管在不同的数据库系统中可能存在一些差异,但其基本语法和核心功能是通用的。
目录
[5、主键(Primary Key)](#5、主键(Primary Key))
[6、外键(Foreign Key)](#6、外键(Foreign Key))
[7、数据类型(Data Types)](#7、数据类型(Data Types))
一、SQL基础概念
1、数据库(Database)
数据库是一个存储有组织的数据的集合。它通常由一个或多个表组成,每个表都包含了一系列的数据记录。
2、表(Table)
表是数据库中用于存储数据的结构,它由行(记录)和列(字段)组成。每一列都有特定的数据类型,而每一行都代表一个单独的记录。
3、行(Row)
表中的每一行代表一个记录,它包含了该记录的所有信息。在SQL中,行也被称为元组。
4、列(Column)
表中的每一列代表一个字段,它包含了所有记录在该字段的值。列也被称为属性。
5、主键(Primary Key)
主键是表中的一个或多个字段,用于唯一地标识表中的每一行。主键的值必须是唯一的,并且不能为NULL。
6、外键(Foreign Key)
外键是一个字段或一组字段,用于在两个表之间建立关系。它是一个指向另一个表的主键的字段,用于保持数据的一致性和完整性。
7、数据类型(Data Types)
SQL支持多种数据类型,用于定义表中的列可以存储的数据种类。常见的数据类型包括:
INT
: 整数类型FLOAT
: 浮点类型VARCHAR(n)
: 可变长度字符串,最多包含n个字符CHAR(n)
: 固定长度字符串,总是包含n个字符DATE
: 日期类型,格式为 YYYY-MM-DDDATETIME
: 日期和时间类型,格式为 YYYY-MM-DD HH:MM:SS
8、约束(Constrains)
约束用于限制表中数据的规则,以确保数据的准确性和一致性。常见的约束包括:
PRIMARY KEY
: 唯一标识表中的每一行FOREIGN KEY
: 用于建立表之间的关系UNIQUE
: 保证列中的所有值都是唯一的NOT NULL
: 确保列不能有NULL值二、SQL基本操作
SQL基本操作包括对数据库和表进行创建、查询、更新、插入和删除等。
SQL语句是用于执行数据库操作的语言指令。常见的SQL语句包括:
SELECT
: 用于查询数据INSERT
: 用于插入新数据UPDATE
: 用于更新现有数据DELETE
: 用于删除数据CREATE
: 用于创建数据库、表等ALTER
: 用于修改数据库结构DROP
: 用于删除数据库、表等
1、创建数据库
sql
//CREATE DATABASE是固定的 ,后面的 exampleDB是数据库名,可根据自己需要起名。
CREATE DATABASE exampleDB;
use exampleDB;
2、创建表
sql
//CREATE TABLE固定语法, Employees是表名,可根据自己的需要起名。
//EmployeeID,FirstName ,LastName,Salary是字段名,也就是最后创建的表头。
//INT,VARCHAR(50),VARCHAR(50)这些是数据类型。
//PRIMARY KEY这个是主键
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Salary INT
);
3、插入数据
sql
//INSERT INTO是固定写法, Employees (EmployeeID, FirstName, LastName, Salary)是插入数据的那个表。然后对应哪些字段要插入数据。
//VALUES (1, 'John', 'Doe', 70000),插入的数据,插入的数据是字符串类型的话,要有引号,不然回报错。
INSERT INTO Employees (EmployeeID, FirstName, LastName, Salary)
VALUES (1, 'John', 'Doe', 70000);
4、查询数据
sql
// *表示向Employees表查询所有数据
SELECT * FROM Employees;
// 表示向Employees表查询EmployeeID, FirstName 字段的数据
SELECT EmployeeID, FirstName FROM Employees;
5、更新数据
sql
//将Employees表中EmployeeID为1的那一行数据的Salary列更新为75000。
UPDATE Employees
SET Salary = 75000
WHERE EmployeeID = 1;
6、删除数据
sql
//从Employees表中删除EmployeeID为1的那一行数据。
DELETE FROM Employees
WHERE EmployeeID = 1;
三、高级操作
1、连接查询
sql
//从Employees表和Departments表中检索数据,并返回一个结果集
//其中包含每个员工的FirstName、LastName以及他们所在部门的DepartmentName。
//只有当Employees表中的DepartmentID与Departments表中的DepartmentID相匹配时,才会包含在结果集中。
SELECT Employees.FirstName, Employees.LastName, Departments.DepartmentName
FROM Employees
JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
2、子查询
sql
//从Employees表中选择所有EmployeeID、FirstName和LastName列
//其中DepartmentID与子查询返回的DepartmentID列表相匹配,而这个列表是Departments表中所有Location为'New York'的部门的DepartmentID。
//简而言之,这个查询返回了所有在纽约部门工作的员工的ID、名字和姓氏。
SELECT EmployeeID, FirstName, LastName
FROM Employees
WHERE DepartmentID IN (SELECT DepartmentID FROM Departments WHERE Location = 'New York');
3、聚合函数
sql
//COUNT(EmployeeID)用于计算Employees表中EmployeeID列的行数。这个函数返回表中的记录数。
SELECT COUNT(EmployeeID) FROM Employees;
//SUM(Salary)用于计算Employees表中Salary列的所有值之和。这个函数返回所有员工薪水之和。
SELECT SUM(Salary) FROM Employees;
//AVG(Salary)用于计算Employees表中Salary列的平均值。这个函数返回所有员工薪水的平均值。
SELECT AVG(Salary) FROM Employees;
//MAX(Salary)用于找出Employees表中Salary列的最大值。这个函数返回最高薪水。
SELECT MAX(Salary) FROM Employees;
//MIN(Salary)用于找出Employees表中Salary列的最小值。这个函数返回最低薪水。
SELECT MIN(Salary) FROM Employees;
4、分组和排序
sql
//从Employees表中选择DepartmentID和每个部门的员工数量,然后按照员工数量降序排序。
//结果将显示每个部门的DepartmentID和对应的员工数量,从最多员工的部门到最少员工的部门。
SELECT DepartmentID, COUNT(EmployeeID) AS NumberOfEmployees
FROM Employees
GROUP BY DepartmentID
ORDER BY NumberOfEmployees DESC;
四、事务管理
事务管理是数据库管理的重要组成部分,它确保了一组数据库操作要么全部成功,要么全部失败。在SQL中,事务通常通过以下命令进行管理:BEGIN TRANSACTION
、COMMIT
和ROLLBACK
。
BEGIN TRANSACTION
: 开始一个新事务COMMIT
: 提交当前事务,使其更改永久化ROLLBACK
: 回滚当前事务,撤销所有未提交的更改
下面是一个简单的事务管理例子,展示了如何使用这些命令来确保数据的一致性。
假设我们有一个银行账户表
Accounts
,其中有两列:AccountID
和Balance
。我们想要从一个账户转移一定金额到另一个账户。这个操作需要两个步骤:从第一个账户扣除金额,然后将相同金额添加到第二个账户。如果任一步骤失败,整个操作应该回滚,以确保不会出现资金的不一致。-- 开始一个新事务 BEGIN TRANSACTION; -- 从账户1扣除1000元 UPDATE Accounts SET Balance = Balance - 1000 WHERE AccountID = 1; -- 检查账户1是否有足够的余额 IF (SELECT Balance FROM Accounts WHERE AccountID = 1) < 0 BEGIN -- 如果余额不足,回滚事务 ROLLBACK TRANSACTION; -- 抛出错误或返回信息 PRINT '余额不足,转账失败'; END; -- 将1000元添加到账户2 UPDATE Accounts SET Balance = Balance + 1000 WHERE AccountID = 2; -- 如果没有错误发生,提交事务 COMMIT TRANSACTION; -- 提示转账成功 PRINT '转账成功';
在这个例子中,我们首先使用
BEGIN TRANSACTION
开始一个新的事务。然后,我们尝试从账户1扣除1000元,并检查账户1是否有足够的余额。如果余额不足,我们使用ROLLBACK TRANSACTION
回滚事务,并打印出错误信息。如果余额充足,我们继续将1000元添加到账户2。 最后,如果没有错误发生,我们使用COMMIT TRANSACTION
提交事务,并打印出成功信息。五、索引
在SQL中,索引是一种特殊的数据结构,它用于提高数据库查询的性能。索引可以加速对数据的搜索,因为它允许数据库快速定位到表中特定的行。
sql
//创建了一个名为idx_lastname的索引,该索引基于Employees表的LastName列。
//创建索引后,数据库系统会在LastName列上存储一个数据结构,该结构有助于快速定位具有特定LastName值的行。
CREATE INDEX idx_lastname ON Employees (LastName);
六、实践建议
- 使用在线SQL编辑器或安装数据库管理系统(如MySQL, PostgreSQL等)进行实践。
- 创建一个简单的数据库和表,并执行插入、查询、更新和删除操作。
- 尝试使用不同的SQL函数和聚合函数进行数据操作。
- 练习使用子查询和连接查询来从多个表中检索数据。
- 学习如何创建和使用索引来优化查询性能。
通过一些简单的步骤和例子,希望看到这篇文章的你能够更好地理解SQL的基础知识,并开始使用它来管理和查询数据库。记住,实践是学习SQL的关键,因此请确保您有充足的机会来应用这些概念。