SQL-----STUDENT

【学生信息表】

【宿舍信息表】

【宿舍分配表】

为了相互关联,我们需要在表中添加外键。在宿舍分配表中添加用于关联学生信息表的外键 student_id ,以及用于关联宿舍信息表的外键 dormitory_id

sql代码

sql 复制代码
-- 创建学生信息表 
CREATE TABLE students( 
  id INT PRIMARY KEY AUTO_INCREMENT COMMENT '学生ID', 
  name VARCHAR(30) NOT NULL COMMENT '学生姓名', 
  student_number VARCHAR(20) NOT NULL COMMENT '学号', 
  gender VARCHAR(2) NOT NULL COMMENT '学生性别', 
  grade VARCHAR(4) NOT NULL COMMENT '年级', 
  major VARCHAR(30) NOT NULL COMMENT '专业', 
  phone_number VARCHAR(20) DEFAULT NULL COMMENT '联系方式' 
); 
 
 
-- 创建宿舍信息表 
CREATE TABLE `dormitories` ( 
  `id` INT NOT NULL AUTO_INCREMENT COMMENT '宿舍ID', 
  `building` VARCHAR(20) NOT NULL COMMENT '所属的楼栋', 
  `room_number` VARCHAR(20) NOT NULL COMMENT '房间号', 
  `capacity` INT NOT NULL COMMENT '容纳人数', 
  PRIMARY KEY (`id`) 
) COMMENT='宿舍信息表'; 
 
 
-- 创建宿舍分配表 
CREATE TABLE dormitory_assignments(  
  id INT PRIMARY KEY AUTO_INCREMENT COMMENT '分配记录ID',  
  student_id INT NOT NULL COMMENT '学生ID',  
  dormitory_id INT NOT NULL COMMENT '宿舍ID',  
  grade VARCHAR(4) NOT NULL COMMENT '年级', 
  major VARCHAR(30) NOT NULL COMMENT '专业',  
  check_in_time DATETIME DEFAULT NULL COMMENT '入住时间',  
  check_out_time DATETIME DEFAULT NULL COMMENT '退房时间',  
  FOREIGN KEY (student_id) REFERENCES students(id),  
  FOREIGN KEY (dormitory_id) REFERENCES dormitories(id)  
);  
 

插入示例:

【学生信息表】

插入一条学生信息,学号为 20230001,姓名为 张三,性别为 男,年级为 2,专业为 计算机科学与技术,联系方式为 13412345678:

sql 复制代码
INSERT INTO students (name, student_number, gender, grade, major, phone_number)  
VALUES ('张三', '20230001', '男', '2', '计算机科学与技术', '13412345678');  

【宿舍信息表】

插入一条宿舍信息,楼栋为 2 号楼,房间号为 101,容纳人数为 2:

sql 复制代码
INSERT INTO dormitories (building, room_number, capacity)  
VALUES ('2 号楼', '101', 2);  

【宿舍分配表】

插入一条宿舍分配记录,学生 ID 为 1,宿舍 ID 为 1,年级为 2,专业为 计算机科学与技术,入住时间为 2023-09-01,退房时间为 2024-02-28:

sql 复制代码
INSERT INTO dormitory_assignments (student_id, dormitory_id, grade, major, check_in_time, check_out_time)  
VALUES (1, 1, '2', '计算机科学与技术', '2023-09-01', '2024-02-28');  

注意:

在进行宿舍分配时,如果发现目标宿舍已经达到了容纳人数上限,则应该停止当前的分配操作,不再继续分配该宿舍。

sql 复制代码
% 连接 MySQL 数据库 
conn = database(database_name, user_name, password, 'com.mysql.cj.jdbc.Driver', url); 

% 查询宿舍的容纳人数和当前入住人数 
sql_query = ['SELECT da.capacity, COUNT(*) FROM dormitory_assignments AS da '... 
             'WHERE da.dormitory_id = ' num2str(dormitory_id) ' GROUP BY da.dormitory_id;']; 
results = exec(conn, sql_query); 
 
 
% 读取查询结果 
results = fetch(results); 
current_number = results.Data{1,2}; 
capacity = results.Data{1,1}; 
 
 
% 判断宿舍是否已满 
if current_number >= capacity 
    disp('该宿舍已经满员,无法分配!'); 
    return; 
end 
相关推荐
小林ixn19 分钟前
从零设计一个博客系统的数据库:表结构、索引与约束的实战思考
数据库·后端·mysql
Yang961140 分钟前
一台顶三台:鼎讯DLJ-1在不同故障类型中的模式切换数据复盘
服务器·网络·数据库
潘正翔1 小时前
Memcached构建缓存服务器
运维·服务器·数据库·缓存·云原生·memcached
NineData1 小时前
NineData 与平凯数据库(TiDB 企业版)完成产品兼容性互认证
数据库·tidb·ninedata·玖章算术·平凯数据库·产品兼容性认证·tidb企业版
咖啡星人k1 小时前
2026 Text-to-SQL:一句话让 AI 写 SQL,自然语言直接查数据库(MonkeyCode 云端实战)
数据库·机器学习·语言模型·自然语言处理
GreatSQL社区1 小时前
少敲一个字母,GreatSQL 对所有查询“已读不回”
数据库·mysql·greatsql
wangchunyu1142 小时前
PostgreSQL 入门与实践:从零搭建一个 CRUD 应用
数据库·postgresql
涛思数据(TDengine)2 小时前
从_找根因_到_搭系统_:工业 AI 实战直播(十、十一期)
大数据·数据库·人工智能·时序数据库·tdengine
qq_339191143 小时前
mysql磁盘占用排查,mysql存储空间占比统计,mysql判断哪张表占用磁盘空间大
数据库·mysql