SQL 入门教程

SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系数据库管理系统的编程语言。它被设计用来查询、更新、插入和删除数据库中的数据。SQL是一种标准化的语言,尽管在不同的数据库系统中可能存在一些差异,但其基本语法和核心功能是通用的。

目录

一、SQL基础概念

1、数据库(Database)

2、表(Table)

3、行(Row)

4、列(Column)

[5、主键(Primary Key)](#5、主键(Primary Key))

[6、外键(Foreign Key)](#6、外键(Foreign Key))

[7、数据类型(Data Types)](#7、数据类型(Data Types))

8、约束(Constrains)

二、SQL基本操作

1、创建数据库

2、创建表

3、插入数据

4、查询数据

5、更新数据

6、删除数据

三、高级操作

1、连接查询

2、子查询

3、聚合函数

4、分组和排序

四、事务管理

五、索引

六、实践建议


一、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-DD
  • DATETIME: 日期和时间类型,格式为 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 TRANSACTIONCOMMITROLLBACK

  • BEGIN TRANSACTION: 开始一个新事务
  • COMMIT: 提交当前事务,使其更改永久化
  • ROLLBACK: 回滚当前事务,撤销所有未提交的更改

下面是一个简单的事务管理例子,展示了如何使用这些命令来确保数据的一致性。

假设我们有一个银行账户表Accounts,其中有两列:AccountIDBalance。我们想要从一个账户转移一定金额到另一个账户。这个操作需要两个步骤:从第一个账户扣除金额,然后将相同金额添加到第二个账户。如果任一步骤失败,整个操作应该回滚,以确保不会出现资金的不一致。

-- 开始一个新事务
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的关键,因此请确保您有充足的机会来应用这些概念。

相关推荐
coderWangbuer3 小时前
基于springboot的高校招生系统(含源码+sql+视频导入教程+文档+PPT)
spring boot·后端·sql
数据龙傲天4 小时前
1688商品API接口:电商数据自动化的新引擎
java·大数据·sql·mysql
cyt涛5 小时前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok
与衫6 小时前
掌握嵌套子查询:复杂 SQL 中 * 列的准确表列关系
android·javascript·sql
我明天再来学Web渗透21 小时前
【hot100-java】【二叉树的层序遍历】
java·开发语言·数据库·sql·算法·排序算法
知识分享小能手1 天前
mysql学习教程,从入门到精通,SQL 修改表(ALTER TABLE 语句)(29)
大数据·开发语言·数据库·sql·学习·mysql·数据分析
F_D_Z1 天前
【SQL】未订购的客户
数据库·sql·mysql
x-cmd1 天前
[241005] 14 款最佳免费开源图像处理库 | PostgreSQL 17 正式发布
数据库·图像处理·sql·安全·postgresql·开源·json
AI人H哥会Java1 天前
【PostgreSQL】实战篇——使用 PostgreSQL 进行数据分析与报表生成
数据库·sql·postgresql