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、寒武纪的国…...
SM5101 SOP-8 充电+触摸+发执丝控制多合一IC触摸打火机专用IC
SM5101 SOP-8 2.7V 涓流充电 具电池过充过放 触摸控制 发热丝电流控制多功能为一体专用芯片 昱灿-海川 SM5101 SOP-8 充电触摸发执丝控制多合一IC触摸打火机方案 !!! 简介: SM5101是一款针对电子点烟器的专用芯片,具…...
Mysql-题目02
下面列出的( DBMS )是数据库管理系统的简称。 A、DB(数据库) B、DBA C、DBMS(数据库管理系统) D、DBS(数据库系统) 以下选项中,( 概念模式 )面向数据库设计人员&…...
Swift开发——循环执行方式
本文将介绍 Swift 语言的循环执行方式 01、循环执行方式 在Swift语言中,主要有两种循环执行控制方式: for-in结构和while结构。while结构又细分为当型while结构和直到型while结构,后者称为repeat-while结构。下面首先介绍for-in结构。 循环控制方式for-in结构可用于区间中的…...
Navicat和SQLynx产品功能比较一(整体比较)
Navicat和SQLynx都是数据库管理工具,在过去的二十年中,国内用户主要是使用Navicat偏多,一般是个人简单开发需要,数据量一般不大,开发相对简单。SQLynx是最近几年的数据库管理工具,Web开发,桌面版…...
pip 配置缓存路径
在windows操作平台,默认情况,pip下使用的系统目录 C:\Users\用名名称\AppData\Local\pip C盘是系统盘,如果常常使用pip安装会占用大量的空间很快就满,这时候就有必要变更一下缓存保存路径了。 pip 配置缓存路径: Win…...
大数据开发语言Scala(一) - Scala入门
引言 在当今的大数据时代,数据量和数据处理的复杂性不断增加,传统的编程语言已经难以满足需求。Scala作为一门新兴的编程语言,以其简洁、强大和高效的特性,迅速成为大数据开发的热门选择。本文将详细介绍Scala语言的基础知识&…...
大模型中的计算精度——FP32, FP16, bfp16之类的都是什么???
大模型中的计算精度——FP32, FP16, bfp16之类的都是什么??? 这些精度是用来干嘛的??混合精度 mixed precision training什么是混合精度?怎么转换呢? 为什么大语言模型通常使用FP32精度训练量化…...
在矩池云使用GLM-4的详细指南(无感连GitHubHuggingFace)
GLM-4-9B 是智谱 AI 推出的最新一代预训练模型 GLM-4 系列中的开源版本,在多项测试中表现出超越已有同等规模开源模型的性能,它能兼顾多轮对话、网页浏览、代码执行、多语言、长文本推理等多种功能,性能更加强大。其多模态语言模型GLM-4V-9B在…...
大模型日报2024-06-15
大模型日报 2024-06-15 大模型资讯 新技术提升大型语言模型推理能力 摘要: 一种新技术使得像GPT-4这样的大型语言模型能够通过编写Python代码,更准确地解决数值或符号推理任务。 大型语言模型革命性提升蛋白质序列理解 摘要: 研究人员将蛋白质序列与自然语言进行类比…...
【YOLO系列】YOLOv1学习(PyTorch)原理加代码
论文网址:https://arxiv.org/pdf/1506.02640 训练集博客链接:目标检测实战篇1——数据集介绍(PASCAL VOC,MS COCO)-CSDN博客 代码文件:在我资源里,但是好像还在审核,大家可以先可以,如果没有的…...
怎么做代刷网站长/福州关键词优化平台
思想:主要是EnableAutoConfiguration在启动的时候会扫描spring.factories并加载 1在resource下面新建META-INF/spring.factories 2在spring.factories中添加自动装载的类 3其他项目引用既OK 1.新建一个starter的Maven项目A,pom文件修改 <parent>&l…...
创建网页用什么软件/深圳网站设计专业乐云seo
在这个例子中,主要会用到python内置的和OS模块的几个函数:os.walk() : 该方法用来遍历指定的文件目录,返回一个三元tuple(dirpath, dirnames, filenames) ,其中dirpath为当前目录路径,dirnames为当前路径下…...
企业网站推广的收获与启示/软件培训
as3 flash和android java类似,都是加一个一个的监听器,然后在回调函数里面处理事务win32的开发,是直接去扫描句柄信号做判断,as3 还有android java,相当于对句柄写好了可以录入函数的接口,等待你录入回调函…...
网站 个人 公司 区别/查关键词热度的网站
9月6日匆匆返回学校参加阿里和华为的面试和笔试。阿里直接一面杯具,华为杯具的提交错文件,肯定0分了。还得墙面。 这份题目是9月7日下午最后一批的上机题,应该是两天来笔试中难度最大的,第一天和第二天上午的题都比较简单…...
建设雅马哈官方网站/全自动引流推广软件
今天给大家分享一个轻量级Vue.js全屏滚动进度条组件VueScrollProgress。vue-scroll-progress 一款基于vue.js构建的页面滚动进度条组件,非常小巧,GZIP压缩后不到1KB。安装$ npm i vue-scroll-progress -S也支持通过CDN引入使用。引入组件// 在main.js中引…...
wordpress区块链导航类网站/东莞网络公司排行榜
spring配置datasource三种方式1、使用org.springframework.jdbc.datasource.DriverManagerDataSource说明:DriverManagerDataSource建立连接是只要有连接就新建一个connection,根本没有连接池的作用。${jdbc.driverClassName}${jdbc.url}${jdbc.username}${jdbc.pas…...