当前位置: 首页 > ds >正文

SQL核心语法与实战应用指南

1. DDL(数据定义语言)

(1) 创建表(CREATE TABLE)

-- 创建学生表
CREATE TABLE students (student_id INT PRIMARY KEY AUTO_INCREMENT,  -- 主键,自增name VARCHAR(50) NOT NULL,                 -- 非空约束age INT CHECK (age >= 16),                 -- 检查约束(年龄≥16)email VARCHAR(100) UNIQUE,                 -- 唯一约束enrollment_date DATE DEFAULT CURRENT_DATE  -- 默认值
);-- 创建课程表(外键关联学生表)
CREATE TABLE courses (course_id INT PRIMARY KEY,course_name VARCHAR(50),student_id INT,FOREIGN KEY (student_id) REFERENCES students(student_id)  -- 外键约束
);

(2) 修改表结构(ALTER TABLE)

-- 添加列
ALTER TABLE students ADD COLUMN gender CHAR(1);-- 修改列数据类型
ALTER TABLE students MODIFY COLUMN age SMALLINT;-- 删除列
ALTER TABLE students DROP COLUMN email;-- 重命名表
ALTER TABLE students RENAME TO learners;

(3) 删除表(DROP TABLE)

-- 删除表(不可恢复)
DROP TABLE courses;-- 仅删除数据,保留表结构
TRUNCATE TABLE students;

2. DML(数据操作语言)

(1) 插入数据(INSERT)

-- 插入单条数据
INSERT INTO students (name, age, email) 
VALUES ('张三', 18, 'zhangsan@example.com');-- 插入多条数据
INSERT INTO students (name, age) 
VALUES ('李四', 20), ('王五', 19);

(2) 更新数据(UPDATE)

-- 更新所有行的age列
UPDATE students SET age = age + 1;-- 条件更新
UPDATE students SET email = 'lisi@example.com' WHERE name = '李四';

(3) 删除数据(DELETE)

-- 删除特定行
DELETE FROM students WHERE age < 18;-- 删除所有数据(慎用!)
DELETE FROM students;

(4) 查询数据(SELECT)

-- 基本查询
SELECT name, age FROM students;-- 条件查询(WHERE)
SELECT * FROM students WHERE age > 18 AND name LIKE '张%';-- 排序(ORDER BY)
SELECT * FROM students ORDER BY age DESC;-- 分页(LIMIT)
SELECT * FROM students LIMIT 10 OFFSET 5;  -- 跳过前5条,取10条

3. 高级查询

(1) 连接查询(JOIN)

连接类型说明示例
INNER JOIN返回两表匹配的行 
SELECT s.name, c.course_name 
FROM students s 
INNER JOIN courses c ON s.student_id = c.student_id;

| LEFT JOIN | 返回左表所有行,右表不匹配则为NULL |

SELECT s.name, c.course_name 
FROM students s 
LEFT JOIN courses c ON s.student_id = c.student_id;

| FULL JOIN | 返回两表所有行(MySQL不支持,可用UNION模拟) |

SELECT s.name, c.course_name 
FROM students s 
LEFT JOIN courses c ON s.student_id = c.student_id
UNION
SELECT s.name, c.course_name 
FROM students s 
RIGHT JOIN courses c ON s.student_id = c.student_id;

(2) 子查询(Subquery)

-- WHERE子句中的子查询
SELECT name FROM students 
WHERE student_id IN (SELECT student_id FROM courses WHERE course_name = '数学');-- FROM子句中的子查询(派生表)
SELECT avg_age.name FROM 
(SELECT name FROM students WHERE age > 18) AS avg_age;-- SELECT子句中的子查询
SELECT name, (SELECT COUNT(*) FROM courses WHERE student_id = s.student_id) AS course_count 
FROM students s;

(3) 聚合函数(GROUP BY + HAVING)

-- 统计每个年龄段的学生人数
SELECT age, COUNT(*) AS student_count 
FROM students 
GROUP BY age;-- 筛选分组结果(HAVING)
SELECT age, COUNT(*) AS student_count 
FROM students 
GROUP BY age 
HAVING COUNT(*) > 5;  -- 只显示人数>5的组-- 常用聚合函数
SELECT AVG(age) AS avg_age,   -- 平均值MAX(age) AS max_age,    -- 最大值MIN(age) AS min_age,    -- 最小值SUM(age) AS total_age   -- 总和
FROM students;

4. 实际应用场景

(1) 电商系统查询

-- 查询订单总金额大于1000的用户
SELECT u.user_name, SUM(o.amount) AS total_amount
FROM users u
JOIN orders o ON u.user_id = o.user_id
GROUP BY u.user_id
HAVING SUM(o.amount) > 1000;

(2) 数据分析(窗口函数)

-- 计算每个学生的年龄排名
SELECT name, age,RANK() OVER (ORDER BY age DESC) AS age_rank
FROM students;

总结

SQL类别核心操作典型用途
DDLCREATEALTERDROP定义和管理表结构
DMLINSERTUPDATEDELETESELECT数据增删改查
高级查询JOIN子查询GROUP BY聚合函数复杂数据分析

掌握这些SQL语法后,可以灵活操作数据库,适用于:

  • 业务系统开发(如用户管理、订单查询)
  • 数据分析(如统计报表、数据透视)
  • 数据库优化(如索引设计、查询性能调优)

 

 

http://www.xdnf.cn/news/15934.html

相关文章:

  • MacOS:如何利用终端来操作用户
  • kafka--基础知识点--6.1--LEO、HW、LW
  • 2025 Data Whale x PyTorch 安装学习笔记(Windows 版)
  • react+antd+表格拖拽排序以及上移、下移、移到顶部、移到底部
  • react17更新哪些新特性
  • ARINC818协议综述
  • 48Days-Day03 | 删除公共字符,两个链表的第一个公共结点,mari和shiny
  • uniapp相关地图 API调用
  • servicemesh 学习
  • 实战分享:Web3 前端开发Defi项目
  • [硬件电路-39]:激光光路的光信号处理、模拟电路的电信号处理、数字电路的电信号处理、软件的信号处理,有哪些共通的操作、运算、变换?
  • 06-人机共生:Prompt之外的思考
  • 【RK3576】【Android14】USB开发调试
  • k8s 基本架构
  • 【小沐学GIS】基于Rust绘制三维数字地球Earth(Rust、OpenGL、GIS)
  • 完美解决 Ubuntu 中自定义启动器图标重复的问题(以 MATLAB 为例)
  • bash方式启动模型训练
  • python基础复习
  • 高压电工作业证考试核心考点:电气安全基础篇
  • 响应式单位rpx及搭配使用UI产品工具
  • 风格多样!5 个覆盖全风格的素材网站,创作有新意
  • AUTOSAR进阶图解==>AUTOSAR_SWS_DiagnosticOverIP
  • 创建套接字并bind的详细过程
  • 从 Server.xml 到字节码:Tomcat 内核全景与请求旅程 10 000 字深剖
  • MinIO深度解析:从核心特性到Spring Boot实战集成
  • 数据结构与算法之美:拓扑排序
  • 外观设计模式
  • Uniapp之键盘弹窗
  • win10连接鼠标自动关闭触摸板/win10关闭触摸板(笔记本)
  • 智能合约代理与批量调用优化:最小代理与MultiCall的应用