SQL 入门教程

news/2024/10/17 22:29:38/

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

目录

一、SQL基础概念

1、数据库(Database)

2、表(Table)

3、行(Row)

4、列(Column)

5、主键(Primary Key)

6、外键(Foreign Key)

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


http://www.ppmy.cn/news/1469523.html

相关文章

2024全新仿麻豆视频苹果cms源码v10影视模板

下载地址&#xff1a;2024全新仿麻豆视频苹果cms源码v10影视模板 高端大气的设计&#xff0c;适合做电影、连续剧、综艺、动漫、微电影、纪录片、海外剧等视频网站

基于深度学习的红外船舶检测识别分类完整实现数据集8000+张

随着遥感技术的快速发展&#xff0c;包括无人机、卫星等&#xff0c;红外图像在船舶检测识别中的作用日益凸显。相对于可见光图像&#xff0c;红外图像具有在夜晚和恶劣天气条件下高效检测识别船舶的天然优势。近年来&#xff0c;深度学习作为一种强大的图像处理技术&#xff0…

IDEA2023.1.4配置springboot项目

新建“Spring Initializr”项目 勾选以下三个依赖项即可。 springboot分为代码层、资源层和测试层。 代码层 根目录&#xff1a;src/main/java 入口启动类及程序的开发目录。在这个目录下进行业务开发、创建实体层、控制器层、数据连接层等。 资源层 根目录&#xff1a;src…

MEMS:Lecture 16 Gyros

陀螺仪原理 A classic spinning gyroscope measures the rotation rate by utilizing the conservation of angular momentum. 经典旋转陀螺仪通过利用角动量守恒来测量旋转速率。 Coriolis Effect and Coriolis Force 科里奥利效应是一种出现在旋转参考系中的现象。它描述了…

Qt实现信号与槽,模拟Qt的信号与槽,观察者模式

运行在VS2022&#xff0c;x86&#xff0c;Debug下 33. Qt信号与槽 实现原理&#xff1a;观察者模式&#xff0c;即当一个对象被修改时&#xff0c;就会自动通知依赖它的对象。应用&#xff1a;对象间的通信。 33.1. Qt实现信号与槽&#xff0c;代码如下。 #include <QOb…

【设计模式】行为型设计模式之 策略模式学习实践

介绍 策略模式&#xff08;Strategy&#xff09;&#xff0c;就是⼀个问题有多种解决⽅案&#xff0c;选择其中的⼀种使⽤&#xff0c;这种情况下我们 使⽤策略模式来实现灵活地选择&#xff0c;也能够⽅便地增加新的解决⽅案。⽐如做数学题&#xff0c;⼀个问题的 解法可能有…

设计模式:从接口的角度切入静态工厂模式

面向接口编程的意义 所谓面向接口去编程的核心含义就是为了——“封装隔离” 通常的封装&#xff0c;是指对数据结构的封装&#xff0c;将几种数据类型整到一块&#xff0c;组成一个新的数据类型&#xff1b;而java中的封装&#xff0c;包含对数据和行为进行抽象&#xff0c;…

重新学习STM32(1)GPIO

概念简介 GPIO 是通用输入输出端口的简称&#xff0c;简单来说就是 STM32 可控制的引脚。STM32 芯片通过 GPIO 引脚与外部设备连接起来&#xff0c;从而实现与外部通讯、控制以及数据采集的功能。 GPIO被分成很多组&#xff0c;比如 GPIOA和GPIOB等。所有的 GPIO引脚都有基本的…