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

MySQL基础操作案例设计

mysql 常用基础语句
创建库使用数据库创建表给表添加字段给表字段添加注解删除字段修改字段长度修改字段类型删除表同时删除数据删除表数据但是数据表和结构表留删除库查询库中存在的表查询具体某给表的结构检查当前数据库中是否有大表查询根据字段模糊查询查询某个字段值相同的记录个数分组查询排序having 过滤获取top n ,获取某个值最大的前几条数据(前几名的数据)左关联有关联内关联union 查询union all 查询子查询

============================================

数据库案例:学生选课系统

1. 创建库

sql

CREATE DATABASE student_management;

2. 使用数据库

sql

USE student_management;

3. 创建表

sql

-- 创建学生表
CREATE TABLE students (student_id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,age INT,gender ENUM('男', '女'),class_name VARCHAR(50),create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);-- 创建课程表
CREATE TABLE courses (course_id INT PRIMARY KEY AUTO_INCREMENT,course_name VARCHAR(100) NOT NULL,teacher VARCHAR(50),credit DECIMAL(3,1)
);

4. 给表添加字段

sql

-- 给学生表添加邮箱字段
ALTER TABLE students ADD COLUMN email VARCHAR(100);-- 给课程表添加课程类型字段
ALTER TABLE courses ADD COLUMN course_type VARCHAR(20);

5. 给表字段添加注解

sql

-- 使用注释说明字段含义
ALTER TABLE students MODIFY COLUMN email VARCHAR(100) COMMENT '学生邮箱地址';
ALTER TABLE courses MODIFY COLUMN course_type VARCHAR(20) COMMENT '课程类型:必修/选修';

6. 删除字段

sql

-- 删除学生表的邮箱字段
ALTER TABLE students DROP COLUMN email;

7. 修改字段长度

sql

-- 将学生姓名字段长度从50改为80
ALTER TABLE students MODIFY COLUMN name VARCHAR(80) NOT NULL;

8. 修改字段类型

sql

-- 将年龄字段从INT改为TINYINT
ALTER TABLE students MODIFY COLUMN age TINYINT;

9. 删除表同时删除数据

sql

-- 先创建临时表用于演示
CREATE TABLE temp_table (id INT, data VARCHAR(50));
-- 删除表(表结构和数据都删除)
DROP TABLE temp_table;

10. 删除表数据但是表结构保留

sql

-- 清空学生表数据但保留表结构
TRUNCATE TABLE students;

11. 删除库

sql

-- 注意:这会删除整个数据库
-- DROP DATABASE student_management;

12. 查询库中存在的表

sql

SHOW TABLES;

13. 查询具体某个表的结构

sql

DESC students;
-- 或者
SHOW COLUMNS FROM students;

14. 检查当前数据库中是否有大表查询

sql

-- 查询所有表的大小
SELECT table_name AS '表名',round(((data_length + index_length) / 1024 / 1024), 2) AS '大小(MB)'
FROM information_schema.TABLES 
WHERE table_schema = 'student_management'
ORDER BY (data_length + index_length) DESC;

15. 根据字段模糊查询

sql

-- 查询姓名包含"张"的学生
SELECT * FROM students WHERE name LIKE '%张%';-- 查询以"李"开头的学生
SELECT * FROM students WHERE name LIKE '李%';

16. 查询某个字段值相同的记录个数

sql

-- 统计每个班级的学生人数
SELECT class_name, COUNT(*) as student_count 
FROM students 
GROUP BY class_name;-- 统计男女学生人数
SELECT gender, COUNT(*) as count 
FROM students 
GROUP BY gender;

17. 分组查询

sql

-- 按班级分组统计平均年龄
SELECT class_name, AVG(age) as avg_age, COUNT(*) as student_count
FROM students
GROUP BY class_name;

18. 排序

sql

-- 按年龄升序排序
SELECT * FROM students ORDER BY age ASC;-- 按年龄降序排序,年龄相同的按姓名升序
SELECT * FROM students ORDER BY age DESC, name ASC;

19. HAVING 过滤

sql

-- 查询学生人数超过2人的班级
SELECT class_name, COUNT(*) as student_count
FROM students
GROUP BY class_name
HAVING COUNT(*) > 2;-- 查询平均年龄大于18岁的班级
SELECT class_name, AVG(age) as avg_age
FROM students
GROUP BY class_name
HAVING AVG(age) > 18;

20. 获取TOP N,获取某个值最大的前几条数据

sql

-- 获取年龄最大的3个学生
SELECT * FROM students ORDER BY age DESC LIMIT 3;-- 获取年龄最小的5个学生
SELECT * FROM students ORDER BY age ASC LIMIT 5;

21. 左关联

sql

-- 创建选课表
CREATE TABLE student_courses (id INT PRIMARY KEY AUTO_INCREMENT,student_id INT,course_id INT,score DECIMAL(4,1)
);-- 左关联:查询所有学生及其选课情况(包括没选课的学生)
SELECT s.student_id, s.name, c.course_name, sc.score
FROM students s
LEFT JOIN student_courses sc ON s.student_id = sc.student_id
LEFT JOIN courses c ON sc.course_id = c.course_id;

22. 右关联

sql

-- 右关联:查询所有课程及其选课学生(包括没人选的课程)
SELECT c.course_name, s.name, sc.score
FROM students s
RIGHT JOIN student_courses sc ON s.student_id = sc.student_id
RIGHT JOIN courses c ON sc.course_id = c.course_id;

23. 内关联

sql

-- 内关联:只查询有选课记录的学生和课程
SELECT s.name, c.course_name, sc.score
FROM students s
INNER JOIN student_courses sc ON s.student_id = sc.student_id
INNER JOIN courses c ON sc.course_id = c.course_id;

24. UNION 查询

sql

-- 合并查询结果(去重)
SELECT name FROM students WHERE gender = '男'
UNION
SELECT name FROM students WHERE age > 20;

25. UNION ALL 查询

sql

-- 合并查询结果(不去重)
SELECT name FROM students WHERE gender = '男'
UNION ALL
SELECT name FROM students WHERE age > 20;

26. 子查询

sql

-- 查询年龄大于平均年龄的学生
SELECT * FROM students 
WHERE age > (SELECT AVG(age) FROM students);-- 查询选了"数学"课程的学生
SELECT * FROM students 
WHERE student_id IN (SELECT student_id FROM student_courses WHERE course_id = (SELECT course_id FROM courses WHERE course_name = '数学')
);-- 使用子查询作为派生表
SELECT s.name, s.class_name, avg_scores.avg_score
FROM students s
JOIN (SELECT student_id, AVG(score) as avg_score FROM student_courses GROUP BY student_id
) avg_scores ON s.student_id = avg_scores.student_id;

完整的数据示例

sql

-- 插入示例数据
INSERT INTO students (name, age, gender, class_name) VALUES
('张三', 20, '男', '计算机一班'),
('李四', 19, '女', '计算机一班'),
('王五', 21, '男', '计算机二班'),
('赵六', 18, '女', '计算机二班'),
('钱七', 22, '男', '计算机三班');INSERT INTO courses (course_name, teacher, credit, course_type) VALUES
('数学', '张老师', 4.0, '必修'),
('英语', '李老师', 3.0, '必修'),
('编程', '王老师', 5.0, '选修');INSERT INTO student_courses (student_id, course_id, score) VALUES
(1, 1, 85.5),
(1, 2, 78.0),
(2, 1, 92.0),
(2, 3, 88.5),
(3, 2, 76.0),
(4, 1, 95.0),
(4, 2, 89.0),
(4, 3, 91.5);

http://www.dtcms.com/a/587155.html

相关文章:

  • ajax网站开发技术阿里云数据库主机wordpress
  • 网站优化成本网站建设的毕业设计
  • 2025年11月8日 AI快讯
  • 义乌网站建设公司开发一个小程序大约需要多少钱
  • 网站建设国内公司wordpress调取数据库
  • 审稿人意见如何修改?
  • 网站积分商城该怎么建立老域名对做网站的
  • 网站新闻公告表怎么做雅安网站开发
  • wordpress建教学网站网站推广优化技巧大全
  • 我自己对三种 IO 多路复用的理解
  • 网站建设太仓做体育直播网站
  • 用ps做网站尺寸注册个人网站的方法
  • 网站属性设置大型网站建设哪个好
  • 南京维露斯网站建设如何在淘宝网上卖东西
  • 山亭网站建设下载ppt模板免费
  • 网站开发公司凭证市场调研的方法
  • 找人做网站维护多少钱怎样做28网站代理
  • 智能医疗大模型在医生培训中的应用案例
  • 800多块做网站互联网营销优势
  • 做煤层气的网站重庆专业网站推广时间
  • 公司网站如何建立滨州建设局网站
  • C++笔记——STL map
  • 电商运营是销售吗威海seo网站推广
  • 在网站制作完成后网站建设网站开发都需要哪些图
  • python - day 13
  • 响应式网站源码.net网络营销的认知
  • 玉林网站制作wordpress google open sans
  • 个人网站建设 免费下载wordpress首页登录
  • 免费网站建设seo精通网站建设电子档
  • 网络seo营销推广成都seo培