第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,包含idnameemail三个列

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)
  • 定义:唯一标识表中每一行的列或列组合
  • 特点:
    1. 每个表只能有一个主键
    2. 主键值必须唯一
    3. 不能包含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)
  • 定义:引用另一个表主键的列
  • 作用:建立表与表之间的关联关系
  • 特点:
    1. 确保数据引用的完整性
    2. 可以设置级联操作
-- 创建主表
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     -- 禁止更新
);
外键约束类型
  1. ON DELETE CASCADE:级联删除
  2. ON UPDATE RESTRICT:限制更新
  3. 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;  -- 第一页

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

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

相关文章

SD下载、安装、使用、卸载-Stable Diffusion整合包v4.10发布!

目录 前言概述 SD安装1、安装软件2、启动3、配置4、运行5、测试 导入SD模型【决定画风】常用模型下载安装模型 SD卸载SD文生图提示词提示词使用技巧提示词的高级使用技巧强调关键词 前言 我向来不喜欢搞一些没有用的概念&#xff0c;所以直接整理可能用到的东西。 sd简单的说…

性能测试03|JMeter:断言、关联、web脚本录制

目录 一、断言 1、响应断言 2、json断言 3、持续时间断言 二、关联 1、正则表达式介绍 2、正则表达式提取器 3、Xpath提取器 4、JSON提取器 5、JMeter属性 三、web脚本录制 一、断言 定义&#xff1a;让程序自动判断实际的返回结果是否与预期结果保持一致 自动校验…

GitHub Fork 和 Clone 的深度指南:操作解析与 Pull Request 完整流程20241231

GitHub Fork 和 Clone 的深度指南&#xff1a;操作解析与 Pull Request 完整流程 快速导航 引言Fork 与 Clone 概念对比完整开发流程Pull Request 最佳实践常见问题与解决方案最佳实践建议实战案例 引言 在开发者的协作世界中&#xff0c;GitHub 就像一座桥梁&#xff0c;连…

『 Linux 』高级IO (三) - Epoll模型的封装与EpollEchoServer服务器

文章目录 前情提要Epoll 的封装Epoll封装完整代码(供参考) Epoll Echo ServerEpoll Echo Server 测试及完整代码 前情提要 在上一篇博客『 Linux 』高级IO (二) - 多路转接介绍并完成了两种多路转接方案的介绍以及对应多路转接方案代码的编写,分别为SelectServer服务器与PollSe…

vue路由模式面试题

vue路由模式 1.路由的模式有哪些?有什么区别? history和hash模式 区别: 1.表现的形态不同: 在地址栏url中:hash模式中带有**#**号,history没有 2.请求错误时表现不同: 在hash模式中,对于404地址请求时,不会进行请求 但是在history模式中,对于404请求时,仍然会进行请求…

Docker安装Prometheus和Grafana

概念简述 安装prometheus 第一步&#xff1a;确保安装有docker 第二步&#xff1a;拉取镜像 第三步&#xff1a;准备相关挂载目录及文件 第四步&#xff1a;启动容器 第五步&#xff1a;访问测试 安装grafana 第一步&#xff1a;确保安装有docker 第二步&#xff1a;拉…

UE5失真材质

渐变材质函数&#xff1a;RadialGradientExponential&#xff08;指数径向渐变&#xff09; 函数使用 UV 通道 0 来产生径向渐变&#xff0c;同时允许用户调整半径和中心点偏移。 用于控制渐变所在的位置及其涵盖 0-1 空间的程度。 基于 0-1 的渐变中心位置偏移。 源自中心的径…

Android授权USB使用权限示例

使用效果&#xff1a; 授权实现过程&#xff1a; 1.在AndroidManifest.xml中增加android.hardware.usb.action.USB_DEVICE_ATTACHED的action及meta-data action: <action android:name"android.hardware.usb.action.USB_DEVICE_ATTACHED"/> meta-data: &l…

matlab时频分析库

time frequency gallery

算法题(25):只出现一次的数字(三)

审题&#xff1a; 该题中有两个元素只出现一次并且其他元素都出现两次&#xff0c;需要返回这两个只出现一次的数&#xff0c;并且不要求返回顺序 思路: 由于对空间复杂度有要求&#xff0c;我们这里不考虑哈希表。我们采用位运算的方法解题 方法&#xff1a;位运算 首先&#…

python +tkinter绘制彩虹和云朵

python tkinter绘制彩虹和云朵 彩虹&#xff0c;简称虹&#xff0c;是气象中的一种光学现象&#xff0c;当太阳光照射到半空中的水滴&#xff0c;光线被折射及反射&#xff0c;在天空上形成拱形的七彩光谱&#xff0c;由外圈至内圈呈红、橙、黄、绿、蓝、靛、紫七种颜色。事实…

HTML——28.音频的引入

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>音频引入</title></head><body><!--audio:在网页中引入音频当属性名和属性值一样&#xff0c;可以只写属性名src属性:指定音频文件路径&#xff0c;必…

基于Spring Boot + Vue3实现的在线汽车保养维修预约管理系统源码+文档

前言 基于Spring Boot Vue3实现的在线汽车保养维修预约管理系统是一种前后端分离架构的应用&#xff0c;它结合了Java后端开发框架Spring Boot和现代JavaScript前端框架Vue.js 3.0的优势。这样的系统可以为汽车服务站提供一个高效的平台来管理客户的预约请求 技术选型 系统…

【Python学习(六)——While、for、循环控制、指数爆炸】

Python学习&#xff08;六&#xff09;——While、for、循环控制、指数爆炸 本文介绍了While、for、循环控制、指数爆炸&#xff0c;仅作为本人学习时记录&#xff0c;感兴趣的初学者可以一起看看&#xff0c;欢迎评论区讨论&#xff0c;一起加油鸭~~~ 心中默念&#xff1a;Py…

计算机网络——期末复习(5)期末考试样例1(含答案)

考试题型&#xff1b; 概念辨析&#xff15;个、计算与分析&#xff13;个、综合题&#xff13;&#xff0d;&#xff14;个 必考知识点&#xff1a; 概述&#xff1a;协议 体系结构 物理层&#xff1b;本次考核较少 链路层&#xff1a;CSMA/CD 退避二进制算法 &#xff0…

豆包ai 生成动态tree 增、删、改以及上移下移 html+jquery

[豆包ai 生成动态tree 增、删、改以及上移下移 htmljquery) 人工Ai 编程 推荐一Kimi https://kimi.moonshot.cn/ 推荐二 豆包https://www.doubao.com/ 实现效果图 html 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF…

5大常见高并发限流算法选型浅析

高并发场景下&#xff0c;如何确保系统稳定运行&#xff0c;成为了每一个开发工程师必须面对的挑战。**你是否曾因系统崩溃、请求超时或资源耗尽而头疼不已&#xff1f;**高并发限流算法或许能帮你解决这些难题。 在处理高并发请求时&#xff0c;应该如何选择合适的限流算法呢…

【重庆】《政务数字化应用费用测算规范》(T/CDCIDA 001—2023)-省市费用标准解读系列36

《政务数字化应用费用测算规范&#xff08;报批稿&#xff09;》于2023年11月18日实施&#xff0c;本文件按照GB/T 1.1-2020给出的规则起草&#xff0c;主要适用于重庆政务数字化应用项目的费用测算。我司基于专业第三方信息化项目造价机构角度&#xff0c;从标准创新点、定制软…

力扣【SQL连续问题】

180. 连续出现的数字 SELECT DISTINCT if(a.num b.num AND b.num c.num,a.num,null) AS ConsecutiveNums FROM Logs a LEFT OUTER JOIN Logs b ON a.id1 b.id LEFT OUTER JOIN Logs c ON a.id2 c.id WHERE if(a.num b.num AND b.num c.num,a.num,null) IS NOT NULL603. 连…

qml MouseArea详解

1. 概述 MouseArea 是 QML 中用于处理鼠标事件的一个非常重要的项&#xff08;Item&#xff09;。它允许开发者响应鼠标的点击、拖拽、悬停等操作。MouseArea 可以与任何 QML 项目&#xff08;如 Rectangle, Image, Text 等&#xff09;结合使用&#xff0c;用于实现用户交互。…