SQL 入门教程

        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、创建数据库
//CREATE DATABASE是固定的 ,后面的 exampleDB是数据库名,可根据自己需要起名。
CREATE DATABASE exampleDB;use exampleDB;
2、创建表
//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、插入数据
//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、查询数据
// *表示向Employees表查询所有数据SELECT * FROM Employees;// 表示向Employees表查询EmployeeID, FirstName 字段的数据SELECT EmployeeID, FirstName  FROM Employees;
5、更新数据
//将Employees表中EmployeeID为1的那一行数据的Salary列更新为75000。UPDATE Employees
SET Salary = 75000
WHERE EmployeeID = 1;
6、删除数据
//从Employees表中删除EmployeeID为1的那一行数据。DELETE FROM Employees
WHERE EmployeeID = 1;

三、高级操作

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;
2、子查询
//从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、聚合函数
//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、分组和排序
//从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中,索引是一种特殊的数据结构,它用于提高数据库查询的性能。索引可以加速对数据的搜索,因为它允许数据库快速定位到表中特定的行。

//创建了一个名为idx_lastname的索引,该索引基于Employees表的LastName列。
//创建索引后,数据库系统会在LastName列上存储一个数据结构,该结构有助于快速定位具有特定LastName值的行。CREATE INDEX idx_lastname ON Employees (LastName);

六、实践建议

  • 使用在线SQL编辑器或安装数据库管理系统(如MySQL, PostgreSQL等)进行实践。
  • 创建一个简单的数据库和表,并执行插入、查询、更新和删除操作。
  • 尝试使用不同的SQL函数和聚合函数进行数据操作。
  • 练习使用子查询和连接查询来从多个表中检索数据。
  • 学习如何创建和使用索引来优化查询性能。

通过一些简单的步骤和例子,希望看到这篇文章的你能够更好地理解SQL的基础知识,并开始使用它来管理和查询数据库。记住,实践是学习SQL的关键,因此请确保您有充足的机会来应用这些概念。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/27940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【TypeScript】类型守卫

跟着 小满zs 学ts&#xff0c;原文&#xff1a;学习TypeScript类型守卫_类型“{ rsfid: any; rsfname: any; cycletime: any; sor-CSDN博客 类型收缩(收窄) const isString (str: any) > typeof str string || str instanceof String;typeof 只能返回有限的字符串类型&am…

snap nextcloud 通过不被信任的域名访问

安装向导 — Nextcloud latest 管理手册 latest 文档 find / -name config.php trusted_domains >array (0 > localhost,1 > server1.example.com,2 > 192.168.1.50,3 > [fe80::1:50], ), vim /var/snap/nextcloud/42567/nextcloud/config/config.php vim /va…

pytorch--Pooling layers

文章目录 1.torch.nn.MaxPool1d()2.torch.nn.MaxPool2d3.torch.nn.AvgPool2d()4.torch.nn.FractionalMaxPool2d()5.torch.nn.AdaptiveMaxPool2d()6.torch.nn.AdaptiveAvgPool2d() 1.torch.nn.MaxPool1d() torch.nn.MaxPool1d() 是 PyTorch 库中的一个类&#xff0c;用于在神经网…

ISP图像算法面试准备(1)

ISP图像算法面试准备 ISP图像算法面试准备(1) 文章目录 ISP图像算法面试准备前言一、ISP流程二、重点关注1. AWB必须在Demosaic之后进行。2. Gamma矫正通常在CCM之前进行 三、如何实现ISP参数自动化调试四、AE&#xff0c;即自动曝光&#xff08;Auto Exposure&#xff09;总结…

【太原理工大学】软件系统安全—分析题

OK了&#xff0c;又是毫无准备的一场仗&#xff0c;我真是ありがとうございます 凸^o^凸 根据前几年传下来的信息&#xff0c;所谓“分析”&#xff0c;就是让你根据情节自行设计&#xff0c;例如如何设计表单等&#xff0c;这类多从实验中出&#xff0c;王老师强调好好做实验一…

【面经总结】Java集合 - List

ArrayList 要点 实现机制 数组 扩容机制 初始容量为空列表&#xff0c;第一次插入后扩容成默认大小 10。 添加元素时如果已满&#xff0c;会自动扩容为原始大小的 1.5 倍。 类定义 // 类定义 public class ArrayList<E> extends AbstractList<E>implements…

Mybatis框架中结果映射resultMap标签方法属性收录

Mybatis框架中结果映射resultMap标签收录 在MyBatis框架中&#xff0c;resultMap 是一种强大的机制&#xff0c;用于将数据库结果集映射到Java对象上。它允许你定义如何将查询结果中的列映射到Java对象的属性上&#xff0c;尤其是当数据库表的字段名与Java对象的属性名不一致时…

Web前端成绩查询:深入解析与实用指南

Web前端成绩查询&#xff1a;深入解析与实用指南 在数字化时代&#xff0c;成绩查询系统已成为学校、培训机构等教育场所不可或缺的一部分。而xWeb前端成绩查询系统&#xff0c;以其高效、便捷的特点&#xff0c;赢得了广大用户的青睐。本文将从四个方面、五个方面、六个方面和…

HTML静态网页成品作业(HTML+CSS)—— 明星吴磊介绍网页(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有5个页面。 二、作品演示 三、代…

小白月赛96

小白月赛96 a最小胜利数b最小操作次数c最多数组数量 a最小胜利数 最小胜利数 只要有一个超过6次&#xff0c;那么便不可能反败为胜求出两位选手的题目差1&#xff0c;即为反败为胜的条件 ac code #include<iostream> using namespace std; int main(){string a;cin&g…

TCP与UDP案例

udp不会做拆分整合什么的 多大就是多大

【Spine学习08】之短飘,人物头发动效制作思路

上一节说完了跑步的&#xff0c; 这节说头发发型。 基础过程总结&#xff1a; 1.创建骨骼&#xff08;头发需要在上方加一个总骨骼&#xff09; 2.创建网格&#xff08;并绑定黄线&#xff09; 3.绑定权重&#xff08;发根位置的顶点赋予更多总骨骼的权重&#xff09; 4.切换到…

Orange_Pi_AIpro运行蜂鸟RISC-V仿真

Orange_Pi_AIpro运行蜂鸟RISC-V仿真 突发奇想&#xff0c;试一试Orange Pi AIpro上运行蜂鸟RISC-V的仿真。 准备 默认已经有一个Orange Pi AIpro&#xff0c;并且对设备进行一定的初始化配置&#xff0c;可以参考上一篇博文开源硬件初识——Orange Pi AIpro&#xff08;8T&a…

FineReport简单介绍

一、介绍 官网 &#xff1a;FineReport产品简介- FineReport帮助文档 - 全面的报表使用教程和学习资料 报表是以表格、图表的形式来动态展示数据&#xff0c;企业通过报表进行数据分析&#xff0c;进而用于辅助经营管理决策。 FineReport 是一款用于报表制作&#xff0c;分析和…

短视频矩阵系统源码搭建--如何基于各平台原生态坏境做开发

短视频矩阵系统源码搭建是一个涉及多个技术层面的复杂过程&#xff0c;它要求开发者能够理解并利用不同平台的原生环境来开发和部署应用程序。以下是一些基于不同平台原生环境开发短视频矩阵系统的一般步骤和考虑因素&#xff1a; 1.需求分析&#xff1a;首先明确系统需要实现的…

抽奖系统源码_微信抽奖系统PHP源码开源

介绍&#xff1a; 微信抽奖系统源码是一个以php MySQL进行开发的手机抽奖系统源码。用途&#xff1a;适合做推广营销、直播、粉丝抽奖。 功能介绍&#xff1a; 1、后台可以设置每个抽奖用户的抽奖次数,后台添加设置奖品,适和企业和商场搞活动,后台添加用户&#xff0c;才能抽…

[RL9] Rocky Linux 9.4 搭载 PG 16.1

副标题&#xff1a;Rocky Linux 9.4 升级实录&#xff0c;及 PG 16 相关内容 背景 Rocky Linux 9.4 (以下简称 RL) 于5月9日正式发布&#xff0c;本文记录了从 RL 9.3 升级到 9.4 的过程&#xff0c;以及升级前后的一些变化。 之前介绍过 RL 9 的相关内容&#xff0c;请戳&…

学习笔记——网络管理与运维——SNMP(SNMP架构)

三、SNMP架构 1、SNMP结构概述 SNMP被设计为工作在TCP/IP协议族上&#xff0c;基于TCP/IP协议工作&#xff0c;对网络中支持SNMP协议的设备进行管理。所有支持SNMP协议的设备都提供SNMP这个统一界面&#xff0c;使得管理员可以使用统一的操作进行管理&#xff0c;而不必理会设…

个人网站制作 Part 25 添加实时聊天功能 | Web开发项目添加页面缓存

文章目录 &#x1f469;‍&#x1f4bb; 基础Web开发练手项目系列&#xff1a;个人网站制作&#x1f680; 添加实时聊天功能&#x1f528;使用聊天服务&#x1f527;步骤 1: 选择聊天服务&#x1f527;步骤 2: 安装Socket.io&#x1f527;步骤 3: 创建Socket.io服务器 &#x1…

GStreamer 源码编译,在 Clion 下搭建调试环境

前言 最近在学习 GStreamer&#xff0c;官方提供了一些教程&#xff0c;本人希望能够断点调试&#xff0c;以便学习代码逻辑。本文记录如何在 Clion 搭建 GStreamer 源码编译、调试环境 步骤 下载源码 git clone https://gitlab.freedesktop.org/gstreamer/gstreamer.gitCl…