一周MySQL入门:部门、班级与学生数据表设计与查询

需积分: 0 3 下载量 185 浏览量 更新于2024-08-05 收藏 5KB MD 举报
在这个MySQL教程中,【韩顺平讲MySQL】针对零基础学员设计了针对数据库系统的基础操作练习,具体围绕如何在一周内掌握MySQL。本次作业涉及到的内容是创建和管理关于学校系、班级和学生的数据表,以及执行基本的SQL语句操作。 首先,我们需要理解几个关键概念: 1. 主外键:用来维护两个表之间的关联,确保数据的一致性。在这些表中,`class`表的`classid`和`student`表的`studentid`将作为主键,而`deptname`在`department`表中可能是外键,用于关联不同表之间的数据。 2. 唯一约束(UNIQUE NOT NULL):在`department`表的`deptname`字段上应用,确保系名的唯一性且不允许为空。 3. 非空约束(NOT NULL):在`student`表的`name`字段上,保证学生姓名不能为NULL。 接下来是具体的SQL语句操作: 创建表 - `department`表用于存储系的信息,包括系号(`departmentid`)、系名(`deptname`),使用`UNIQUE NOT NULL`约束确保系名的独特性。 ```sql CREATE TABLE department( departmentid VARCHAR(32) PRIMARY KEY, deptname VARCHAR(32) UNIQUE NOT NULL ); ``` - `class`表用于存储班级信息,包含班号(`classid`)、专业名(`subject`)、系名(`deptname`)、入学年份(`enrolltime`)和人数(`num`)。其中,`subject`和`deptname`字段要求非空。 ```sql CREATE TABLE class( classid INT PRIMARY KEY, subject VARCHAR(32) NOT NULL DEFAULT '', deptname VARCHAR(32) NOT NULL, enrolltime YEAR, num INT ); ``` - `student`表存储学生信息,包括学号(`studentid`)、姓名(`name`)、年龄(`age`)和班号(`classid`),姓名同样需要非空约束。 ```sql CREATE TABLE student( studentid INT PRIMARY KEY, name VARCHAR(32) NOT NULL, age INT, classid INT, FOREIGN KEY (classid) REFERENCES class(classid) ); ``` 插入数据 提供了系、班级和学生的基本数据,使用`INSERT INTO`语句插入到相应的表中。 查询功能 - 找出所有姓李的学生:使用`LIKE`关键字配合`%`通配符匹配以“李”开头的名字。 ```sql SELECT * FROM student WHERE name LIKE '李%'; ``` - 列出所有开设超过1个专业的系的名字:通过联接多个表并计算专业数量来实现。 ```sql SELECT d.deptname FROM department d JOIN ( SELECT deptname, COUNT(*) as pro_count FROM class GROUP BY deptname HAVING COUNT(*) > 1 ) c ON d.deptname = c.deptname; ``` - 列出人数大于等于30的系的编号和名字:直接在`class`表中筛选。 ```sql SELECT departmentid, deptname FROM class WHERE num >= 30; ``` - 更新学生信息:当物理系增加时,可以使用`ALTER TABLE`语句添加新记录,同时处理张三退学的情况,可能涉及删除或更新学生表中的记录。 ```sql ALTER TABLE department ADD (departmentid VARCHAR(32) VALUES ('0065')); -- 张三退学 DELETE FROM student WHERE studentid = 8101; ``` 通过这个实践,学员不仅能够学习如何创建和管理数据库,还能掌握SQL语句的基本操作,包括数据插入、查询和表结构的调整。