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能力!