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-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、创建数据库
//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 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编辑器或安装数据库管理系统(如MySQL, PostgreSQL等)进行实践。
- 创建一个简单的数据库和表,并执行插入、查询、更新和删除操作。
- 尝试使用不同的SQL函数和聚合函数进行数据操作。
- 练习使用子查询和连接查询来从多个表中检索数据。
- 学习如何创建和使用索引来优化查询性能。
通过一些简单的步骤和例子,希望看到这篇文章的你能够更好地理解SQL的基础知识,并开始使用它来管理和查询数据库。记住,实践是学习SQL的关键,因此请确保您有充足的机会来应用这些概念。
相关文章:
SQL 入门教程
SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系数据库管理系统的编程语言。它被设计用来查询、更新、插入和删除数据库中的数据。SQL是一种标准化的语言,尽管在不同的数据库系统中可能存在一些差异&…...

Java—装饰器模式
介绍 装饰器模式 装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许你动态地将行为添加到现有的对象中,而无需修改其代码。装饰器模式提供了比继承更灵活的功能扩展方式。 主要角色 Component:定义一个对…...

服务器远程桌面经常连接不上,造成远程桌面连接不上的原因都有哪些
服务器远程桌面连接不稳定或经常连接不上是一个较为常见的技术问题,其可能的原因涉及多个层面,包括网络设置、服务器配置、系统安全等方面。下面将详细探讨一些可能造成远程桌面连接问题的主要原因: 首先,网络连接不稳定是导致远…...

C#|Maui|BootstrapBlazor|Bootstrap Blazor 组件库改模板 | Bootstrap Blazor 组件库改布局,该怎么改?
先copy一个项目下来:Bootstrap Blazor 组件库 一套基于 Bootstrap 和 Blazor 的企业级组件库 发现不是很满足我的需求,我要把右下角的admin移动到左边去,该怎么移动? 先改代码 点进去到Layout.razor 文档,改成如下&am…...
【Linux】I/O多路复用
文章目录 I/O多路复用select()select()缺点 poll()poll()缺点 epoll()LT(水平触发模式)ET(边缘触发模式)具体函数 I/O多路复用 多进程和多线程实现并发会消耗大量的资源,主进程/线程用于监听和接受连接,再创建多个子进程/子线程来完成与连接的各个客户端…...
ubuntu20.0.4下安装PyTorch
参考文档 https://datawhalechina.github.io/thorough-pytorch/%E7%AC%AC%E4%B8%80%E7%AB%A0/1.2%20PyTorch%E7%9A%84%E5%AE%89%E8%A3%85.html 1:安装Anaconda 登录Anaconda | Individual Edition,https://www.anaconda.com/download/success ÿ…...

Android屏幕旋转流程(1)
(1)Gsensor的注册和监听 App -->I2C过程:App通过SensorManager.getSystemServer调用到SystemSensorManager,SystemSensorManager通过jni调用到SensorManager.cpp,后通过binder调用到SensorService。SensorService通…...
JS常见的运算符有哪些?
在JavaScript中,常见的运算符可以分为以下几类: 算术运算符: :加法-:减法*:乘法/:除法%:取余(模运算):递增--:递减**:幂运…...

【scikit-learn入门指南】:机器学习从零开始
1. 简介 scikit-learn是一款用于数据挖掘和数据分析的简单高效的工具,基于NumPy、SciPy和Matplotlib构建。它能够进行各种机器学习任务,如分类、回归和聚类。 2. 安装scikit-learn 在开始使用scikit-learn之前,需要确保已经安装了scikit-le…...

MEMS:Lecture 17 Noise MDS
讲义 Minimum Detectable Signal (MDS) Minimum Detectable Signal(最小可检测信号)是指当信号-噪声比(Signal-to-Noise Ratio, SNR)等于1时的输入信号水平。简单来说,MDS 是一个系统能够分辨出信号存在的最低输入信号…...

Windows运维:找到指定端口的服务
运维过windows的或多或少都遇到过需要找到一个端口对应的服务,或者是因为端口占用,或者是想看下对应的服务是哪个,那么如何操作呢?看看本文吧。 1、按照端口找到进程ID 例如想找8000端口的进程ID netstat -ano | findstr :8000 2…...

Linux文件系统讲解!
一、Linux文件系统历史 1、在早期的时候Linux各种不同发行版拥有自己各自自定义的文件系统层级结构。 2、当我用Red hat转向玩Debian时,我进入/etc我都是懵的。 3、后来Linux社区做了一个标准、FHS(文件系统标准层次结构)。来帮助Linux系统的…...
mysql集群,两主两从,使用mysql-proxy实现读写分离
主从复制 一、IP规划 服务器IP备注master1192.168.100.131master2的从master2192.168.100.132master1的从slave1192.168.100.134slave1的从slave2192.168.100.135slave2的从mysql-proxy192.168.100.137 二、具体配置 1.master1 配置ip:192.168.100.131 …...

Linux文本处理三剑客+正则表达式
Linux文本处理常用的3个命令,脚本或者文本处理任务中会用到。这里做个整理。 三者的功能都是处理文本,但侧重点各不相同,grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对…...

Linux启动KKfileview文件在线浏览时报错:启动office组件失败,请检查office组件是否可用
目录 1、导论 2、报错信息 3、问题分析 4、解决方法 4.1、下载 4.2、安装步骤 1、导论 今天进行项目部署时,遇到了一个问题。在启动kkfileview时,出现了报错异常: 2024-06-09 06:36:44.765 ERROR 1 --- [ main] cn.keking.service.Of…...
React <> </>的用法
React <> </>的用法 介绍为什么使用 <>?例子解释 关于顶级元素总结 介绍 在 React 中,使用 <> 表示一个空标签或片段(Fragment),这是一个简洁的方式来包裹一…...
is not null 、StringUtils.isNotEmpty和StringUtils.isNotBlank之间的区别?
这三者主要是针对对象是否为空、是否为空串和是否为空白字符串有不同的功能。 is not null 只是说明该对象不为空,没有考虑是否为空串和空白字符串。 StringUtils.isNotEmpty检查字符串是否不为 null且长度大于零,不考虑字符串中的空白字符。 StringU…...

Git使用-gitlab上面的项目如何整到本地的idea中
场景 一般我们在开发项目或者接手某个项目时,基本都要接触Git,比如上传项目代码,下载同事给你的交接代码等等。 这是一个基本功,小小整理一下日常操作中的使用。 第一步:在 GitLab 上找到你要克隆的项目,复…...

活体检验API在Java、Python、PHP中的使用教程
活体检验API是一种基于生物特征的身份验证技术,通过分析和识别用户的生物信息来确认其身份。这种技术广泛应用于各种领域,如金融、安全、社交媒体等,以提高身份验证的安全性和准确性。以下是描述”活体检验API”背景的一些关键点:…...

智能计算系统-概述
1、人工智能技术分层 2、人工智能方向人才培养 3、课程体系的建议 4、智能系统课程对学生的价值 5、智能计算系统对老师的价值 6、什么是智能计算系统 7、智能计算系统的形态 8、智能计算系统具有重大价值 9、智能计算系统的三大困难 10、开创深度学习处理器方向 11、寒武纪的国…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...