第2章:SQL基础
第2章:SQL基础
2.1 SQL语言介绍
2.1.1 SQL发展历史
- SQL的起源
- SQL标准的演变
- 不同数据库的SQL实现
2.1.2 SQL语言分类
- 数据定义语言 (DDL):用于定义和修改数据库的结构,包括数据库、表、索引、视图等对象的创建、修改和删除。
- 数据操作语言 (DML):用于对数据库中存储的数据进行操作,包括插入、删除、修改等。
- 数据查询语言 (DQL):用于从数据库中查询数据,包括SELECT语句、聚合函数、子查询等。
- 数据控制语言 (DCL):用于控制数据库的访问权限和安全性,包括授权、回收权限、创建用户等。
2.2 数据定义语言(DDL)
2.2.1 CREATE DATABASE
- 语法:
CREATE DATABASE <database_name> [CHARACTER SET <character_set>] [COLLATE <collation>]
- 指定字符集和排序规则,例如UTF-8和utf8mb4_unicode_ci
- 数据库命名规范,例如使用小写字母、数字和下划线,且以字母开头
2.2.2 CREATE TABLE
- 表结构定义
- 列类型和约束
- 创建复杂表结构
2.2.3.1 表结构定义
- 语法:
CREATE TABLE <table_name> (<column_name> <data_type> [NOT NULL][DEFAULT <value>][AUTO_INCREMENT], ...)
- 例如创建一个简单的用户表
users
,包含id
、name
、email
三个列
2.2.3 ALTER TABLE
- 修改表结构
- 添加、删除、修改列
- 重命名表
2.2.3.1 修改表结构
- 语法:
ALTER TABLE <table_name> ADD <column_name> <data_type> [NOT NULL][DEFAULT <value>][AUTO_INCREMENT]
- 例如添加一个
age
列到users
表中
2.2.4 DROP TABLE
- 删除表的方法
- 删除表的注意事项
- 级联删除
- 例如删除
users
表
主键和外键详解
主键(Primary Key)
- 定义:唯一标识表中每一行的列或列组合
- 特点:
- 每个表只能有一个主键
- 主键值必须唯一
- 不能包含NULL值
-- 创建带主键的表
CREATE TABLE users (id INT PRIMARY KEY, -- 单列主键username VARCHAR(50) NOT NULL
);-- 复合主键
CREATE TABLE order_items (order_id INT,product_id INT,PRIMARY KEY (order_id, product_id) -- 多列组成主键
);-- 自增主键
CREATE TABLE products (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100)
);
外键(Foreign Key)
- 定义:引用另一个表主键的列
- 作用:建立表与表之间的关联关系
- 特点:
- 确保数据引用的完整性
- 可以设置级联操作
-- 创建主表
CREATE TABLE departments (dept_id INT PRIMARY KEY,dept_name VARCHAR(50)
);-- 创建从表,使用外键
CREATE TABLE employees (emp_id INT PRIMARY KEY,emp_name VARCHAR(50),dept_id INT,FOREIGN KEY (dept_id) REFERENCES departments(dept_id)ON DELETE CASCADE -- 级联删除ON UPDATE RESTRICT -- 禁止更新
);
外键约束类型
- ON DELETE CASCADE:级联删除
- ON UPDATE RESTRICT:限制更新
- ON DELETE SET NULL:置空关联记录
最佳实践
- 选择合适的数据类型作为主键
- 避免使用可变列作为主键
- 考虑使用自增ID
- 为外键添加适当约束
- 注意性能影响
常见问题
- 主键不能重复
- 外键必须引用存在的主键
- 复合主键需要所有列的组合唯一
2.3 数据操作语言(DML)
2.3.1 INSERT
- 插入单行数据,例如插入一个新的用户记录
2.3.2 UPDATE
- 更新单行数据
- 更新多行数据
- 条件更新
2.3.3 DELETE
- 删除单行数据
- 删除多行数据
- 条件删除
- 删除与性能
2.4 数据查询语言(DQL)
2.4.1 SELECT基本查询
- 简单查询语法
- 查询指定列
- 去重查询
2.4.2 WHERE条件
- 比较运算符
- 逻辑运算符
- 模糊查询
- NULL值处理
2.4.3 ORDER BY排序
- 升序和降序排序
- 多列排序
- 排序性能优化
2.4.4 LIMIT分页
- 限制返回行数
- 分页查询
- 分页性能优化
代码实践
2.1 数据定义语言(DDL)实践
2.1.1 创建数据库
-- 创建新数据库
CREATE DATABASE IF NOT EXISTS bookstore;-- 使用数据库
USE bookstore;
2.1.2 创建表结构
-- 创建图书表
CREATE TABLE books (id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(100) NOT NULL,author VARCHAR(50),price DECIMAL(10, 2),stock INT DEFAULT 0,publish_date DATE
);-- 创建作者表
CREATE TABLE authors (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,country VARCHAR(50),birth_date DATE
);
2.1.3 修改表结构
-- 添加新列
ALTER TABLE books
ADD COLUMN isbn VARCHAR(20) UNIQUE;-- 修改列类型
ALTER TABLE books
MODIFY COLUMN price DECIMAL(12, 2);-- 删除列
ALTER TABLE books
DROP COLUMN stock;
2.2 数据操作语言(DML)实践
2.2.1 插入数据
-- 插入单行数据
INSERT INTO authors (name, country, birth_date)
VALUES ('刘慈欣', '中国', '1963-06-23');-- 批量插入数据
INSERT INTO books (title, author, price, publish_date, isbn)
VALUES
('三体', '刘慈欣', 39.80, '2008-01-01', '9787530216835'),
('流浪地球', '刘慈欣', 29.90, '2011-05-01', '9787536693968');
2.2.2 更新数据
-- 更新单行数据
UPDATE books
SET price = 45.50
WHERE title = '三体';-- 批量更新
UPDATE books
SET price = price * 1.1
WHERE author = '刘慈欣';
2.2.3 删除数据
-- 删除单行数据
DELETE FROM books
WHERE title = '流浪地球';-- 条件删除
DELETE FROM books
WHERE price < 20 AND stock = 0;
2.3 数据查询语言(DQL)实践
2.3.1 基本查询
-- 查询所有图书
SELECT * FROM books;-- 查询指定列
SELECT title, author, price FROM books;-- 去重查询
SELECT DISTINCT author FROM books;
2.3.2 条件查询
-- 使用WHERE条件
SELECT * FROM books
WHERE price > 30;-- 模糊查询
SELECT * FROM books
WHERE title LIKE '%三体%';-- 多条件查询
SELECT * FROM books
WHERE author = '刘慈欣' AND price < 50;
2.3.3 排序和分页
-- 按价格升序排序
SELECT * FROM books
ORDER BY price ASC;-- 多列排序
SELECT * FROM books
ORDER BY author ASC, price DESC;-- 分页查询(每页10条)
SELECT * FROM books
ORDER BY id
LIMIT 0, 10; -- 第一页
相关文章:
第2章:SQL基础
第2章:SQL基础 2.1 SQL语言介绍 2.1.1 SQL发展历史 SQL的起源SQL标准的演变不同数据库的SQL实现 2.1.2 SQL语言分类 数据定义语言 (DDL):用于定义和修改数据库的结构,包括数据库、表、索引、视图等对象的创建、修改和删除。数据操作语言 (DML):用于…...
Azkaban其一,介绍、体系架构和安装
目录 一、简介 二、Azkaban的体系结构 三、Azkaban的安装步骤 1、上传,解压 2、生成mysql的元数据 3、配置web-server 4、配置exec-server 5、修改所有的.sh 的执行权限 一、简介 遇到了什么问题才会使用Azkaban ?比如: 想启动hadoop集群先启动…...
Seata 使用教程:全面解锁分布式事务管理
Seata 使用教程:全面解锁分布式事务管理 在当今分布式系统蓬勃发展的时代,微服务架构被广泛应用,随之而来的是分布式事务管理的难题。Seata 作为一款开源的分布式事务解决方案,为保障分布式系统的数据一致性提供了强有力的支持。本文将详细讲解 Seata 的使用方法,深入剖析…...
《learn_the_architecture_-_aarch64_exception_model》学习笔记
1.当发生异常时,异常级别可以增加或保持不变,永远无法通过异常来转移到较低的权限级别。从异常返回时,异常级别可能会降低或保持不变,永远无法通过从异常返回来移动到更高的权限级别。EL0级不进行异常处理,异常必须在比…...
密码学原理技术-第十一章-Hash Functions
文章目录 总结Why we need hash functionsDigital Signature with a Hash FunctionBasic Protocol for Digital Signatures with a Hash FunctionPrincipal input–output behavior of hash functions Security propertiesThe three security requirements of hash functionsWh…...
Golang 入门基础知识
快速入门 go 语言笔记,参考了各种大佬的 blog 。 一、下载安装 国内站点 :https://golang.google.cn IDE : Goland (2020.12月以后破解有些困难 见 zhile.io, 无法试用的话可以搜一个注册码,失效的也可以&…...
SQL把字符串按逗号分割成记录
在 SQL 中,可以通过以下方法将字符串按逗号分割,并将每个分割的值作为单独的记录插入到结果集中。以下是针对不同数据库系统的实现方法: 1. 使用 STRING_SPLIT(SQL Server 2016) STRING_SPLIT 是 SQL Server 提供的内置…...
HTML——26.像素单位
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>像素</title></head><body><!--像素:1.指设备屏幕上的一个点,单位px,如led屏上的小灯朱2.当屏幕分辨率固定时&…...
TIM的输出比较(PWM)
OC(Output Compare)输出比较 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形 每个高级定时器和通用定时器都拥有4个输出比较通道 初始化 1.开启RCC RCC_…...
李宏毅机器学习笔记-Transformer
目录 1. Seq2seq 2. encoder Transformer 中的 Block 结构 3. Decoder 4.Encoder和Decoder间的信息传递 5.Training 6.Tips 1. Seq2seq Transformer 是一个seq2seq的model。Seq2seq指的是input是一个序列,输出也是一个序列,输出的长度是由机器自己…...
【机器学习:三、常见的代价函数】
代价函数的选择与任务类型(回归、分类等)以及模型的具体目标密切相关。 回归任务中的代价函数 均方误差(Mean Squared Error, MSE) 公式: J ( θ ) 1 m ∑ i 1 m ( y i − y ^ i ) 2 J(\theta)\frac{1}{m}\sum_{i1}^m(y_i-\…...
React 数据是怎样传递的
写在前面 在 React 应用程序中,数据传递是非常重要的。它允许我们在组件之间共享信息和状态,从而构建出复杂的用户界面。本文将深入探讨 React 中的数据传递机制,包括 props、state 和 context API。我们还将通过实际例子来演示如何在项目中…...
Python入门教程 —— 高阶函数和装饰器
1.递归函数 什么是递归函数 如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。 递归函数的作用 举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n 解决办法1:使用循环来完成 def cal(num):result,i = 1,1while i <= num:result *= ii…...
RSA密码的安全性分析(简化版本)
RSA的安全性是基于分解大整数的困难性假定,之所以认为是假定是因为至今还未能证明大整数就是NP问题,也许有尚未发现的多项式时间分解算法。随着人类计算能力的不断提高,原来被认为是不可能分解的大数已经被成功分解。对于大整数的威胁除了人类…...
解决Vue中设置el-select的高度不生效问题
el-select是Element UI框架中的一个选择器组件,它允许用户从多个选项中选择一个或多个项目。但这里确存在一个小坑,我们可以看到直接修改el-select的高度是无法生效的 <template><div id"login"><el-select v-model"role…...
解决openpyxl操纵带公式的excel或者csv之后,pandas无法读取数值的问题
1 功能特点 openpyxl: 这是一个专门用于操作Excel文件(.xlsx/.xlsm)的库。它提供了丰富的功能来读取、写入和修改Excel文件的各个元素,如单元格、行、列、工作表等。例如,可以通过openpyxl轻松地创建一个新的Excel工作…...
高等数学学习笔记 ☞ 无穷小比较与等价无穷小替换
1. 无穷小比较 1. 本质:就是函数的极限趋于0时的速度,谁快谁慢的问题。 2. 定义:若是在同一自变量的变化过程中的无穷小,且,则: ①:若,则称是比的高阶无穷小,记作&…...
计算队列中的‘捣乱分子’对数:一种量化无序程度的方法
计算队列中的‘捣乱分子’对数:一种量化无序程度的方法 前言解题思路关键点实现代码时间复杂度分析前言 在日常生活中,我们经常会遇到需要排队的场景,比如买票、候车、就餐等。在理想的排队情况下,人们会按照某种顺序(如先到先服务)整齐地排成一列。然而,总有一些人不遵…...
如何在不丢失数据的情况下从 IOS 14 回滚到 IOS 13
您是否后悔在 iPhone、iPad 或 iPod touch 上安装 iOS 14?如果你这样做,你并不孤单。许多升级到 iOS 14 beta 的 iPhone、iPad 和 iPod touch 用户不再适应它。 如果您在正式发布日期之前升级到 iOS 14 以享受其功能,但您不再适应 iOS 14&am…...
提升汽车金融租赁系统的效率与风险管理策略探讨
内容概要 在汽车金融租赁系统这个复杂的生态中,提升整体效率是每个企业都渴望达成的目标。首先,优化业务流程是实现高效运行的基础。通过分析目前的流程,找出冗余环节并进行简化,能够帮助企业缩短审批时间,提高客户满…...
Git 入门(一)
git 工作流如下: 命令如下: clone(克隆): 从远程仓库中克隆代码到本地仓库checkout (检出):从本地仓库中检出一个仓库分支然后进行修订add(添加): 在提交前先将代码提交到暂存区com…...
pyinstaller冻结打包多进程程序的bug:无限创建进程直至系统崩溃
前面写过两篇相关的文章: PyQt应用程序打包Python自动按键 这两篇文章都没有提到下面的这个重要问题: 采用Pyinstaller冻结打包多进程程序时,必须非常小心。这个技术线在Windows上会有一个非常严重的Bug。直接运行打包后的程序会造成无限创…...
OSI模型的网络层中产生拥塞的主要原因?
( 1 )缓冲区容量有限;( 1.5 分) ( 2 )传输线路的带宽有限;( 1.5 分) ( 3 )网络结点的处理能力有限;( 1 分…...
服务器开发 的设计模式(Design Patterns)核心知识
服务器开发的设计模式(Design Patterns)核心知识 在现代软件开发中,设计模式是一组为解决特定问题而重用的解决方案。它们是经过时间考验的最佳实践,为开发人员提供了一种有效的解决方案来应对常见的软件设计问题。特别是在服务器…...
智能工厂的设计软件 应用场景的一个例子: 为AI聊天工具添加一个知识系统 之20 再次重建 之5 项目文件三大部 整“拼”项目文档总述
本文要点 ]本项目的项目文件中的三个Part终于“拼”出来的(个别用词可能还需斟酌,但样子、格式和意思 差不多): Part1【凡间-AI众生】 人性化&去中心化-个体人生观 语言有关(语言交流-经验常识实践 信条 行为主义 随机数-本质偶然的 想…...
Lucas-Kanade光流法详解
简介:个人学习分享,如有错误,欢迎批评指正。 光流(Optical Flow)描述的是图像序列中各像素点随时间的运动情况,是计算机视觉中的基本问题之一。光流问题涉及尝试找出一幅图像中的许多点在第二幅图像中移动的…...
基于YOLO5的机械臂视觉抓取实现
前言: 机器人视觉系统标定是保证机器人精确运动和控制的关键环节之一。通过对机器人的运动学进行分析,可以精确计算出机器人末端执行器的位姿信息,从而实现对目标的精准定位和控制。相机标定是计算机视觉和图像处理中的重要步骤,标…...
Git 仓库与文件管理笔记
Git 的三种仓库概念 本地仓库 (Local Repository) 位于本地 .git 文件夹中通过 git init 或 git clone 创建存储完整的项目历史和分支信息 远程仓库 (Remote Repository) 位于 GitHub、GitLab 等平台服务器使用 git remote -v 查看所有远程仓库默认远程仓库名通常为 origin 工…...
Qt 5.14.2 学习记录 —— 오 信号与槽机制(2)
文章目录 1、信号与槽的参数2、为什么要有信号槽机制?3、断开并重新连接4、槽函数lambda写法 1、信号与槽的参数 信号和槽可以带参数,当信号带有参数时,槽的参数必须和信号的一致,此时发送信号就可以给信号函数传递实参ÿ…...
043_小驰私房菜_MTK Camera,Hal层将camera型号写到property属性中
【问题背景】 app层需要知道当前设备的摄像头型号,然后做一些差异化处理。底下如何上报这个摄像头型号? 【分析】 在kernel和hal层,都是有地方能获取到当前摄像头的型号,就看在哪里添加方便。获取到摄像头硬件型号后,将其写入到property属性, 然后app就可以通过读取该…...
Java线程
目录 一、线程入门 二、线程同步 三、死锁 四、线程的方法 五、线程的流程图 六、线程池 一、线程入门 1.进程:每一个软件都是一个进程。 2.线程:进程是由多个线程组成的。 3.进程和线程的关系:一个进程是对应一个或者是多个线程的。…...
JMeter 的 If Controller:开启性能测试的智能大门
嘿,宝子们!今天咱们就来聊聊 JMeter 里超级厉害的 If Controller,它就像是一把神奇的钥匙,能帮我们打开灵活测试的大门,让你的测试计划变得更加智能和高效。 一、If Controller 初印象 想象一下,你正在指…...
node内置模块之---os 模块
os 模块的作用 os 模块是 Node.js 的一个核心模块,提供了与操作系统交互的一些功能。它使得 Node.js 应用可以访问操作系统的底层信息,并执行一些系统级的操作,比如文件系统操作、环境变量、进程管理等。 os 模块的相关api 文件系统路径操…...
PgSQL如何用cmd命令行备份和还原数据库
一、备份 备份为压缩的二进制格式(通常更快且占用空间更少) pg_dump -U username -Fc -h hostname -p port -d dbname -F p -f backup.sql-U username:指定连接数据库的用户名(默认是 postgres)。-Fc:备…...
neo4j学习笔记
图数据库 图数据库是基于图论实现的一种NoSQL数据库,其数据存储结构和数据查询方式都是图论为基础的,图数据库主要用于存储更多的连接数据。 图论(GraphTheory)是数学的一个分支。图论以图为研究对象,图论的图是由若干…...
Halcon 显示异常
//For Halcon System HOperatorSet.SetSystem("clip_region", "false"); set_system( clip_region, false) *旋转 hom_mat2d_identity (HomMat2DIdentity1) hom_mat2d_rotate (HomMat2DIdentity1, rad( 90), 0, 0, HomMat2DRotate) affine_trans_region …...
2021年3月多省联考《申论》B卷真题解析
2021年福建公务员考试申论试题(乡镇卷) 材料一 在传统乡镇布局中,部分乡镇面积小、人口少,但管理机构、干部职数、机构编制、财政投入均不少,行政运行成本较高。合理调整乡镇行政区划,有助于统筹设置乡镇服…...
Mac iTerm2集成DeepSeek AI
1. 去deepseek官网申请api key,DeepSeek 2. 安装iTerm2 AI Plugin插件,https://iterm2.com/ai-plugin.html,插件解压后直接放到和iTerms相同的位置,默认就在/Applications 下 3. 配置iTerm2 4. 重启iTerm2,使用快捷键呼出AI对话…...
主机A与主机B建立TCP连接的三次握手过程
( 1 )主机 A 的 TCP 向主机 B 发出连接请求 SYN 报文段(第一次握手)。( 1 分) ( 2 )一旦包含 SYN 报文段的 IP 数据报到达主机 B , SYN 报文段被从数据报…...
vue3 vite 动态加载路由遇到的问题
记录一下动态加载路由遇到的问题 正常使用import引入静态路由是没问题的 component: () > import(/components/ExampleComponent.vue)动态引入的时候写成import就不行了 由于后端给的路由格式比较反人类…我这边先递归把获取到的数据格式做了一个整合. const processedDa…...
仿生的群体智能算法总结之一(十种)
群体智能算法是一类通过模拟自然界中的群体行为来解决复杂优化问题的方法。以下是10种常见的群体智能算法: 编号 算法名称(英文) 算法名称(中文) 年份 作者 1 Ant Colony Optimization (ACO) 蚁群优化算法 1991 Marco Dorigo 2 Particle Swarm Optimization (PSO) 粒子群优…...
02pandas读取和保存数据的方法
pandas读取和保存数据的方法 一、pandas支持的数据格式二、pandas常用数据读取方法1. 准备工作2. 代码示例1.pandas数据读取常用的方法2. read_excel 方法(1)read_excel()方法:读取excel文件(2)head()方法:…...
【STM32项目】智能物联网驱动的生物样本培育与管理辅助系统(完整工程资料源码)
视频功能演示: 智能物联网驱动的生物样本培育与管理辅助系统 目录: 目录 视频功能演示: 目录:...
家教老师预约平台小程序系统开发方案
家教老师预约平台小程序系统将连接学生/家长与家教老师,提供一站式的家教服务预约体验。 一、用户需求分析1、家教老师:希望获得更多的学生资源,通过平台展示自己的教学特长和经验,管理个人日程,接收并确认预约请求&a…...
uniapp 自定义类微信支付键盘 (微信小程序)
效果图 代码: <view class"popups popupsB"><view class"appreciatePrice"><view class"appreciatePriceTitle">赞赏金额</view><view class"appreciatePriceInput flex ac">¥<input typ…...
推荐5款局域网IP扫描工具,支持电脑+Android!
在日常网络管理中,快速扫描局域网中的设备和IP地址是一项基本但非常重要的任务。无论是排查网络问题还是进行设备管理,一款好用的 IP 扫描工具都能让你事半功倍。 如何选择适合自己需求的局域网 IP 扫描工具?有哪些功能强大又易于上手的工具…...
第十一章 图论
/* * 题目名称:连通图 * 题目来源:吉林大学复试上机题 * 题目链接:http://t.cn/AiO77VoA * 代码作者:杨泽邦(炉灰) */#include <iostream> #include <cstdio>using namespace std;const int MAXN 1000 10;int fathe…...
算法学习(21)—— BFS解决FloodFill问题
关于FloodFill 关于FloodFill算法,我们之前在dfs章节已经介绍过了:算法学习(17)—— FloodFill算法-CSDN博客 下面是用bfs宽搜来解决的实例 部分OJ题详解 733. 图像渲染 733. 图像渲染 - 力扣(LeetCode…...
计算机网络基础(7)中科大郑铨老师笔记
应用层 目标: 网络应用的 原理:网络应用协议的概念和实现方面 传输层的服务模型 客户-服务器模式 对等模式(peerto-peer) 内容分发网络 网络应用的 实例:互联网流行的应用层协 议 HTTP FTP SMTP / POP3 / IMAP DNS…...
CSS 之 响应式设计 前世今生
CSS系列文章目录 CSS 之 display 布局属性详解 CSS 之 position 定位属性详解一文搞懂flex布局 【弹性盒布局】 文章目录 CSS系列文章目录一、前言二、历史上的网站布局三、响应式设计之前的灵活布局四、响应式设计五、媒介查询六、灵活网格七、现代布局技术7.1 多栏布局7.2 伸…...