赞
踩
SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系数据库管理系统的编程语言。它被设计用来查询、更新、插入和删除数据库中的数据。SQL是一种标准化的语言,尽管在不同的数据库系统中可能存在一些差异,但其基本语法和核心功能是通用的。
目录
一、SQL基础概念
数据库是一个存储有组织的数据的集合。它通常由一个或多个表组成,每个表都包含了一系列的数据记录。
表是数据库中用于存储数据的结构,它由行(记录)和列(字段)组成。每一列都有特定的数据类型,而每一行都代表一个单独的记录。
表中的每一行代表一个记录,它包含了该记录的所有信息。在SQL中,行也被称为元组。
表中的每一列代表一个字段,它包含了所有记录在该字段的值。列也被称为属性。
主键是表中的一个或多个字段,用于唯一地标识表中的每一行。主键的值必须是唯一的,并且不能为NULL。
外键是一个字段或一组字段,用于在两个表之间建立关系。它是一个指向另一个表的主键的字段,用于保持数据的一致性和完整性。
SQL支持多种数据类型,用于定义表中的列可以存储的数据种类。常见的数据类型包括:
INT
: 整数类型FLOAT
: 浮点类型VARCHAR(n)
: 可变长度字符串,最多包含n个字符CHAR(n)
: 固定长度字符串,总是包含n个字符DATE
: 日期类型,格式为 YYYY-MM-DDDATETIME
: 日期和时间类型,格式为 YYYY-MM-DD HH:MM:SS
约束用于限制表中数据的规则,以确保数据的准确性和一致性。常见的约束包括:
PRIMARY KEY
: 唯一标识表中的每一行FOREIGN KEY
: 用于建立表之间的关系UNIQUE
: 保证列中的所有值都是唯一的NOT NULL
: 确保列不能有NULL值
二、SQL基本操作
SQL基本操作包括对数据库和表进行创建、查询、更新、插入和删除等。
SQL语句是用于执行数据库操作的语言指令。常见的SQL语句包括:
SELECT
: 用于查询数据INSERT
: 用于插入新数据UPDATE
: 用于更新现有数据DELETE
: 用于删除数据CREATE
: 用于创建数据库、表等ALTER
: 用于修改数据库结构DROP
: 用于删除数据库、表等
- //CREATE DATABASE是固定的 ,后面的 exampleDB是数据库名,可根据自己需要起名。
- CREATE DATABASE exampleDB;
-
- use exampleDB;
- //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
- );
- //INSERT INTO是固定写法, Employees (EmployeeID, FirstName, LastName, Salary)是插入数据的那个表。然后对应哪些字段要插入数据。
- //VALUES (1, 'John', 'Doe', 70000),插入的数据,插入的数据是字符串类型的话,要有引号,不然回报错。
-
- INSERT INTO Employees (EmployeeID, FirstName, LastName, Salary)
- VALUES (1, 'John', 'Doe', 70000);
- // *表示向Employees表查询所有数据
-
- SELECT * FROM Employees;
-
-
- // 表示向Employees表查询EmployeeID, FirstName 字段的数据
-
- SELECT EmployeeID, FirstName FROM Employees;
- //将Employees表中EmployeeID为1的那一行数据的Salary列更新为75000。
-
- UPDATE Employees
- SET Salary = 75000
- WHERE EmployeeID = 1;
- //从Employees表中删除EmployeeID为1的那一行数据。
-
- DELETE FROM Employees
- WHERE EmployeeID = 1;
三、高级操作
- //从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;
- //从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');
- //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;
- //从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中,索引是一种特殊的数据结构,它用于提高数据库查询的性能。索引可以加速对数据的搜索,因为它允许数据库快速定位到表中特定的行。
- //创建了一个名为idx_lastname的索引,该索引基于Employees表的LastName列。
- //创建索引后,数据库系统会在LastName列上存储一个数据结构,该结构有助于快速定位具有特定LastName值的行。
-
- CREATE INDEX idx_lastname ON Employees (LastName);
六、实践建议
通过一些简单的步骤和例子,希望看到这篇文章的你能够更好地理解SQL的基础知识,并开始使用它来管理和查询数据库。记住,实践是学习SQL的关键,因此请确保您有充足的机会来应用这些概念。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。