1. SQL 语言概述

SQL(Structured Query Language)是用于管理关系型数据库的标准语言,主要分为以下几个子语言:

- DQL(数据查询语言):SELECT - 用于数据查询
- DML(数据操作语言):INSERT, DELETE, UPDATE - 用于数据操作
- DCL(数据控制语言):GRANT, REVOKE - 用于权限控制
- DDL(数据定义语言):CREATE, ALTER, DROP - 用于数据库对象定义
- TCL(事务控制语言):COMMIT, ROLLBACK - 用于事务控制

 2. DDL(数据定义语言)

 2.1 创建表

```sql
CREATE TABLE t_student(
`stuid` INT(4) AUTO_INCREMENT PRIMARY KEY, -- 行级约束
`sname` VARCHAR(15) NOT NULL,
`ssex` VARCHAR(1) NOT NULL DEFAULT '男',
`age` INT(3) CHECK(age>=0 AND age<=100),
`email` VARCHAR(30) UNIQUE
);
```

 2.2 查看表结构

```sql
-- 查看建表语句
SHOW CREATE TABLE t_student;

-- 查看表结构
DESC t_student;
```

 2.3 修改表结构

```sql
-- 添加字段
ALTER TABLE t_student ADD cid INT(4);

-- 添加字段并指定位置
ALTER TABLE t_student ADD cid INT(4) FIRST; -- 添加到第一列
ALTER TABLE t_student ADD cid INT(4) AFTER ssex; -- 添加到指定列后

-- 删除字段
ALTER TABLE t_student DROP cid;

-- 修改字段
ALTER TABLE t_student MODIFY cid INT(5); -- 修改字段类型
ALTER TABLE t_student CHANGE cid class_id INT(4); -- 修改字段名和类型

-- 添加外键约束
ALTER TABLE t_student ADD CONSTRAINT fk_stu_cid 
FOREIGN KEY (cid) REFERENCES t_class(cid);
```

 2.4 完整性约束

- 主键(PRIMARY KEY):非空 + 唯一
- 非空(NOT NULL)
- 自增(AUTO_INCREMENT)
- 默认值(DEFAULT)
- 检查(CHECK)
- 唯一(UNIQUE)
- 外键(FOREIGN KEY)

 2.5 删除表

```sql
DROP TABLE t_student; -- 删除表及所有数据
```

 3. DML(数据操作语言)

 3.1 插入数据

```sql
-- 指定字段插入
INSERT INTO t_student(sname, ssex, age, email, cid)
VALUES('李方雷', DEFAULT, 10, '123456', 1);

-- 简写形式(为所有字段赋值)
INSERT INTO t_student VALUES(NULL, '李方雷', DEFAULT, 10, '123456', 1);
```

 3.2 更新数据

```sql
-- 更新所有记录(不推荐)
UPDATE t_student SET age = 20;

-- 更新指定记录(推荐)
UPDATE t_student SET age = 20 WHERE stuid = 1;
```

 3.3 删除数据

```sql
-- 删除所有记录(不推荐)
DELETE FROM t_student;

-- 删除指定记录(推荐)
DELETE FROM t_student WHERE stuid = 1;
```

 3.4 删除方式比较

| 操作 | 类型 | 回滚 | 索引 | 效率 |
|------|------|------|------|------|
| DELETE | DML | 支持 | 不重置 | 低 |
| TRUNCATE | DDL | 不支持 | 重置 | 高 |
| DROP | DDL | 不支持 | 删除 | 最高 |

 4. DQL(数据查询语言)

 4.1 基本语法结构

```sql
SELECT 字段1, 字段2, ..., 字段n
FROM 表名
WHERE 条件
GROUP BY 分组字段
HAVING 分组条件
ORDER BY 排序字段
LIMIT 分页参数;
```

 4.2 执行顺序

1. FROM - 确定表
2. WHERE - 筛选条件
3. GROUP BY - 分组
4. HAVING - 分组条件
5. SELECT - 确定显示内容
6. ORDER BY - 排序
7. LIMIT - 分页

 4.3 SELECT 子句详解

```sql
-- 查询所有字段(不推荐)
SELECT  FROM emp;

-- 查询指定字段
SELECT empno, ename, sal FROM emp;

-- 使用别名
SELECT empno AS empn, ename AS '员工姓名' FROM emp;

-- 计算字段
SELECT ename, sal12+IFNULL(comm, 0) AS '年薪' FROM emp;

-- 去重查询
SELECT DISTINCT mgr FROM emp WHERE mgr IS NOT NULL;
```

 4.4 ORDER BY 子句

```sql
-- 多字段排序
SELECT  FROM emp ORDER BY deptno ASC, mgr DESC;
```

 4.5 WHERE 子句

```sql
-- 关系运算符
SELECT  FROM emp WHERE sal > 2000;
SELECT  FROM emp WHERE deptno != 10;

-- 逻辑运算符
SELECT  FROM emp WHERE mgr = 7521 AND deptno != 10;

-- 模糊查询
SELECT  FROM emp WHERE ename LIKE '%a%'; -- 包含a
SELECT  FROM emp WHERE ename LIKE '_a%'; -- 第二个字母是a
SELECT  FROM emp WHERE ename LIKE 'as%'; -- 以as开头
SELECT  FROM emp WHERE ename LIKE '%a'; -- 以a结尾

-- NULL值查询
SELECT  FROM emp WHERE comm IS NULL;
SELECT  FROM emp WHERE comm IS NOT NULL;

-- 使用函数
SELECT  FROM emp WHERE DATEDIFF(CURDATE(), hiredate) > 15000;
```

 4.6 常用函数

 字符串函数

```sql
SELECT REPLACE(ename, SUBSTRING(ename, 2, LENGTH(ename)-2), ''), ename FROM emp;
```

 时间函数

```sql
-- 系统时间
SELECT CURDATE(), CURTIME(), NOW(), SYSDATE();

-- 日期计算
SELECT DAYOFYEAR(CURDATE()) FROM DUAL;
SELECT DATEDIFF(CURDATE(), '2004-4-23') FROM DUAL;

-- 日期格式化
SELECT DATE_FORMAT(hiredate, '%Y:%m:%d') FROM emp;

-- 日期加减
SELECT DATE_ADD(hiredate, INTERVAL 3 MONTH) FROM emp;
```

 流程函数

```sql
SELECT ename, job,
CASE deptno 
WHEN 10 THEN '开发部'
WHEN 20 THEN '测试部'
WHEN 30 THEN '运维部'
END AS 部门名称
FROM emp;
```

 聚合函数

```sql
SELECT 
COUNT() AS 总人数,
MAX(sal) AS 最高工资,
MIN(sal) AS 最低工资,
AVG(sal) AS 平均工资,
SUM(sal) AS 工资总额
FROM emp;
```

 5. 多表查询

```sql
-- 避免笛卡尔积
SELECT  FROM emp, dept WHERE emp.deptno = dept.deptno;

-- 内连接
SELECT  FROM emp INNER JOIN dept ON emp.deptno = dept.deptno;

-- 左外连接
SELECT  FROM emp LEFT JOIN dept ON emp.deptno = dept.deptno;

-- 右外连接
SELECT  FROM emp RIGHT JOIN dept ON emp.deptno = dept.deptno;
```

 总结

SQL 是数据库操作的核心语言,掌握其各种语句和函数的使用对于数据库管理和数据分析至关重要。在实际应用中,应注意:

1. 合理使用索引提高查询效率
2. 避免使用 SELECT ,明确指定需要的字段
3. 注意 NULL 值的处理
4. 使用 JOIN 时注意关联条件,避免笛卡尔积
5. 合理使用事务保证数据一致性

通过不断练习和实践,可以更加熟练地运用 SQL 语言进行数据库操作和数据分析。

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

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

相关文章

积分变换的前世今生

积分变换常应用于解微分方程微分方程的解法&#xff1a;时域经典法&#xff1b;频域变换法&#xff1b;“积分变换”最初并不是为了解微分方程&#xff0c;而是出于更“纯粹”的数学动机——理解函数的结构、求解代数或几何问题&#xff0c;以及简化复杂的积分运算。微分方程的…

《Linux——gflags》

一、什么是gflags&#xff1f; gflags 是一个由 Google 开发的命令行参数解析库&#xff0c;主要用于在 C&#xff08;也支持其他语言&#xff09;程序中便捷地处理命令行参数。它的核心作用是帮助开发者快速定义、解析和使用命令行选项&#xff0c;避免手动编写繁琐的参数解析…

编译器的前端中端和后端

前面说的词法分析和语法分析&#xff0c;确实是编译器前端 (Front End) 最核心的两个部分。但前端的工作还没有结束。编译器各阶段划分 一个完整的编译器通常可以分为三个部分&#xff1a;前端、中端 (Middle End)、后端 (Back End)。 前端 (Front End) 核心职责: 理解源代码。…

黑马Java进阶教程,全面剖析Java多线程编程,并发和并行,笔记02

黑马Java进阶教程&#xff0c;全面剖析Java多线程编程&#xff0c;并发和并行&#xff0c;笔记02 一、并发和并行 并发&#xff1a;在同一时刻&#xff0c;有多个指令在单个CPU上交替执行 并行&#xff1a;在同一时刻&#xff0c;有多个指令在多个CPU上同时执行 二、为什么有…

20250908 背包DP总结

引子 ~ 我们都有一个家&#xff0c;名字叫背包 ~ 背包DP 顾名思义&#xff0c;背包DP是用来解决背包最值问题的。题目会给出背包的容量&#xff0c;以及几个物品的属性&#xff0c;比如重量&#xff0c;价值&#xff0c;限额等等&#xff0c;具体是什么看题目。 01背包 01…

Redis持久化之RDB:快照机制原理、配置与最佳实践

Redis持久化之RDB&#xff1a;快照机制原理、配置与最佳实践 1. RDB持久化概述 1.1 什么是RDB RDB&#xff08;Redis Database&#xff09;是Redis的默认持久化方式&#xff0c;它在指定的时间间隔内生成数据集的快照&#xff08;snapshot&#xff09;&#xff0c;并将快照保…

daily notes[44]

文章目录基础references基础 hello,world是几乎所有编程语言的第一例子&#xff0c;rust也不例外。但和其它语言不一样&#xff0c;Rust的源码最好拥有自己的项目目录。 $ mkdir ~/pro $ cd ~/pro $ mkdir helloWorld $ cd helloWorld源代码文件名为main.rs&#xff0c;内容如…

JavaScript对象创建方式完全指南:从原始到现代的演进之路

前言 作为一名前端开发者&#xff0c;JavaScript中对象创建是很重要。在JavaScript这门基于原型的语言中&#xff0c;对象几乎无处不在。今天&#xff0c;我将带领大家回顾JavaScript对象创建的7种方式&#xff0c;从最原始的字面量到现代的ES6 class&#xff0c;每一步演进都解…

基于单片机的无线水塔监控系统设计(论文+源码)

本设计为基于单片机的无线水塔监控系统设计&#xff0c;主要由以下几部分组成&#xff1a;均采用STC89C52RC单片机为主控&#xff1b;主机&#xff1a;NRF24L01无线通讯模块&#xff0c;1602LCD液晶显示屏。从机&#xff1a;NRF24L01无线通讯模块&#xff0c;水位传感器&#x…

凌晨0-3点不睡,你熬的不是夜,是人生!

“熬夜”这个词&#xff0c;早已成为现代生活的常态。有人为了工作加班到深夜&#xff0c;有人为了娱乐刷剧到天明&#xff0c;但你知道吗&#xff1f;熬夜最“要命”的时间段&#xff0c;其实是凌晨0点到凌晨3点。别以为只是少睡几个小时而已&#xff0c;这个时间段不睡&#…

大语言模型基石:Transformer

一、引言 如今火爆的 GPT、LLaMA、通义千问、ChatGLM 等大语言模型&#xff0c;背后都离不开一个核心架构——Transformer。 2017 年&#xff0c;Google 在论文《Attention Is All You Need》中首次提出 Transformer 模型&#xff0c;彻底改变了自然语言处理的发展方向。它摒…

【算法】【链表】160.相交链表--通俗讲解

算法通俗讲解推荐阅读 【算法–链表】83.删除排序链表中的重复元素–通俗讲解 【算法–链表】删除排序链表中的重复元素 II–通俗讲解 【算法–链表】86.分割链表–通俗讲解 【算法】92.翻转链表Ⅱ–通俗讲解 【算法–链表】109.有序链表转换二叉搜索树–通俗讲解 【算法–链表…

MySQL——库的操作

1、创建数据库语法&#xff1a;CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name这里的CHARACTER SET表示指定数据库采用的字符集…

Python ast模块(Abstract Syntax Trees,抽象语法树)介绍及使用

文章目录 核心概念 基本使用流程 常用节点类型 示例代码 实际应用场景 注意事项 `ast.literal_eval()` 功能说明 适用场景 使用示例 限制与安全特性 与 `eval()` 的对比 总结 Python 的 ast 模块( Abstract Syntax Trees,抽象语法树)允许你解析、分析和修改 Python 代码的…

C++宽度优先搜索算法:队列与优先级队列

本期我们就来深入学习一下C算法中一个很重要的算法思想&#xff1a;宽度优先搜索算法 宽度优先算法是一个应用十分广泛的算法思想&#xff0c;涉及的领域也十分繁多&#xff0c;因此本篇我们先只涉猎它的一部分算法题&#xff1a;队列/优先级队列&#xff0c;后续我们会进一步地…

类的property属性

​​Python 中的 property 特性详解​​property 是 Python 中用于​​将方法转换为属性​​的装饰器&#xff0c;它允许开发者以访问属性的方式调用方法&#xff0c;同时可以添加逻辑控制&#xff08;如数据校验、计算属性等&#xff09;。以下是其核心用法和优势&#xff1a;…

【Redis#9】其他数据结构

引言 Redis 除了我们最常用的 String、Hash、List、Set、ZSet&#xff08;Sorted Set&#xff09; 这五种基本数据结构外&#xff0c;还提供了很多高级或特殊用途的数据结构/类型 &#xff0c;它们可以满足更复杂的业务需求。 ✅ Redis 的“五大基本数据结构”回顾类型特点Stri…

AutoGen——自定义Agent

目录引子自定义 AgentCountDownAgentArithmeticAgent在自定义 Agent 中使用自定义模型客户端让自定义 Agent 声明式化Selector Group Chat示例&#xff1a;网页搜索 / 数据分析代理&#xff08;Agents&#xff09;Workflow终止条件&#xff08;Termination Conditions&#xff…

【重定向和转发的核心理解】

重定向和转发 不废话&#xff1a; “转发” 的核心定义&#xff1a; 服务端内部主导跳转、客户端无感知&#xff08;仅 1 次请求&#xff09;、浏览器 URL 不改变&#xff0c;与传统 Web 开发中 “转发” 的本质逻辑完全一致&#xff0c;只是实现载体&#xff08;Nginx 路由层 …