Hi, DeepSeek 带我通过实战学习SQL入门知识

SQL语法入门实战教程

1. 环境准备

在开始之前,请确保你已经安装并配置好MySQL数据库,并可以使用命令行工具或MySQL Workbench连接到数据库。

1.1 创建测试数据库

sql 复制代码
CREATE DATABASE test_db;
USE test_db;

2. DDL(数据定义语言)实战

2.1 创建表

创建一个名为students的表,用于存储学生信息:

sql 复制代码
CREATE TABLE students (
    id INT PRIMARY KEY AUTO_INCREMENT, -- 学生ID,主键,自增
    name VARCHAR(50) NOT NULL,         -- 学生姓名,非空
    age INT,                           -- 学生年龄
    gender ENUM('M', 'F'),             -- 学生性别,枚举类型
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 创建时间,默认当前时间
);

2.2 修改表结构

students表添加一列email

sql 复制代码
ALTER TABLE students ADD COLUMN email VARCHAR(100);

2.3 删除表

如果表不再需要,可以删除:

sql 复制代码
DROP TABLE students;

3. DML(数据操作语言)实战

3.1 插入数据

students表中插入几条学生记录:

sql 复制代码
INSERT INTO students (name, age, gender, email) 
VALUES 
('张三', 20, 'M', 'zhangsan@example.com'),
('李四', 22, 'F', 'lisi@example.com'),
('王五', 21, 'M', 'wangwu@example.com');

3.2 查询数据

查询所有学生的信息:

sql 复制代码
SELECT * FROM students;

查询年龄大于20岁的学生:

sql 复制代码
SELECT * FROM students WHERE age > 20;

3.3 更新数据

张三的年龄更新为23岁:

sql 复制代码
UPDATE students SET age = 23 WHERE name = '张三';

3.4 删除数据

删除李四的记录:

sql 复制代码
DELETE FROM students WHERE name = '李四';

4. 基础查询与排序

4.1 去重查询

查询所有学生的性别(去重):

sql 复制代码
SELECT DISTINCT gender FROM students;

4.2 排序查询

按年龄从小到大排序:

sql 复制代码
SELECT * FROM students ORDER BY age ASC;

按年龄从大到小排序:

sql 复制代码
SELECT * FROM students ORDER BY age DESC;

4.3 限制结果集

查询年龄最小的2个学生:

sql 复制代码
SELECT * FROM students ORDER BY age ASC LIMIT 2;

5. 聚合函数与分组

5.1 统计学生总数

sql 复制代码
SELECT COUNT(*) AS total_students FROM students;

5.2 计算平均年龄

sql 复制代码
SELECT AVG(age) AS avg_age FROM students;

5.3 按性别分组统计人数

sql 复制代码
SELECT gender, COUNT(*) AS count FROM students GROUP BY gender;

5.4 过滤分组结果

查询人数大于1的性别分组:

sql 复制代码
SELECT gender, COUNT(*) AS count 
FROM students 
GROUP BY gender 
HAVING count > 1;

6. 常用内置函数

6.1 字符串函数

查询学生姓名及其姓名长度:

sql 复制代码
SELECT name, LENGTH(name) AS name_length FROM students;

将学生姓名转换为大写:

sql 复制代码
SELECT UPPER(name) AS upper_name FROM students;

6.2 数值函数

查询学生年龄的四舍五入值:

sql 复制代码
SELECT name, age, ROUND(age) AS rounded_age FROM students;

6.3 日期函数

查询学生的创建时间及其年份:

sql 复制代码
SELECT name, created_at, YEAR(created_at) AS created_year FROM students;

7. 综合实战练习

7.1 创建订单表

创建一个orders表,用于存储订单信息:

sql 复制代码
CREATE TABLE orders (
    order_id INT PRIMARY KEY AUTO_INCREMENT,
    student_id INT,
    product_name VARCHAR(100),
    amount DECIMAL(10, 2),
    order_date DATE
);

插入一些订单数据:

sql 复制代码
INSERT INTO orders (student_id, product_name, amount, order_date) 
VALUES 
(1, '笔记本电脑', 5000.00, '2023-10-01'),
(2, '手机', 3000.00, '2023-10-02'),
(1, '耳机', 200.00, '2023-10-03');

7.2 查询学生及其订单信息

使用JOIN查询学生及其订单:

sql 复制代码
SELECT s.name, o.product_name, o.amount, o.order_date
FROM students s
JOIN orders o ON s.id = o.student_id;

7.3 统计每个学生的订单总金额

sql 复制代码
SELECT s.name, SUM(o.amount) AS total_amount
FROM students s
JOIN orders o ON s.id = o.student_id
GROUP BY s.name;

8. 总结

通过以上实战练习,你已经掌握了以下SQL基础技能:

  • 创建和管理数据库、表
  • 插入、查询、更新和删除数据
  • 使用聚合函数和分组
  • 使用常用内置函数
  • 进行多表连接查询

接下来可以尝试更复杂的查询和优化任务,逐步提升SQL能力!

相关推荐
骄马之死12 分钟前
缓存与数据库一致性的核心方案
mysql·缓存
土狗TuGou1 小时前
SQL内功笔记 · 第7篇:CTE&临时表&递归
数据库·笔记·后端·sql·mysql
我是唐青枫1 小时前
MySQL EXISTS 详解:存在性判断、NOT EXISTS 与实战示例
数据库·mysql
稚枭天卓1 小时前
mac 安装mysql
mysql·macos
念恒123062 小时前
MySQL事务(下)---MySQL InnoDB MVCC 与 Read View:从隐藏列、Undo Log 到 RR 与 RC 的本质区别
数据库·mysql·oracle
Java面试题总结2 小时前
MySQL EXISTS 详解:存在性判断、NOT EXISTS 与实战示例
android·数据库·mysql
土狗TuGou2 小时前
SQL内功笔记 · 第5篇:SQL逻辑执行顺序
数据库·笔记·后端·sql·mysql
abcy0712132 小时前
python Django整合postgresql实现增删改查crud
mysql
MaCa .BaKa2 小时前
56-非遗手工艺品定制平台系统
java·vue.js·spring boot·mysql·maven·非遗手工制作平台系统·非遗制作
程序猿乐锅2 小时前
【MySQL | 第六篇】 SQL 优化
数据库·sql·mysql