1,创建student和score表

本文通过创建学生和成绩表,演示了SQL的基本操作,包括表结构设计、数据插入、更新和查询等,尤其关注联表查询、分组统计和条件筛选等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,创建student和score表

Sutdent表的定义

字段名

字段描述

数据类型

主键

外键

非空

唯一

自增

Id

学号

INT(10)

Name

姓名

VARCHAR(20)

Sex

性别

VARCHAR(4)

Birth

出生年份

YEAR

Department

院系

VARCHAR(20)

Address

家庭住址

VARCHAR(50)

Score表的定义

字段名

字段描述

数据类型

主键

外键

非空

唯一

自增

Id

编号

INT(10)

Stu_id

学号

INT(10)

C_name

课程名

VARCHAR(20)

Grade

分数

INT(10)

 


-- 创建学生表
CREATE TABLE IF NOT EXISTS student(
stu_id	  	INT(10) 	NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT'学号',
stu_name  	VARCHAR(20) 	NOT NULL COMMENT'姓名',
stu_sex	  	VARCHAR(4)	COMMENT'性别',
stu_birth 	YEAR     	COMMENT'出生年份',
stu_department	VARCHAR(20)	NOT NULL COMMENT'院系',
stu_address	VARCHAR(50)	COMMENT'家庭住址'
)

ALTER TABLE student   AUTO_INCREMENT=901;
-- 创建成绩表
CREATE TABLE IF NOT EXISTS score(
sc_id 	INT(10) 	NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT'编号',
stu_id 	INT(10) 	NOT NULL COMMENT'学号',
sc_name VARCHAR(20)	COMMENT'课程名',
grade	INT(10)		COMMENT'分数',
FOREIGN KEY (stu_id) REFERENCES student(stu_id)-- 创建外键
)

2.student表和score表增加记录

-- 为表student添加数据
INSERT INTO student(stu_name,stu_sex,stu_birth,stu_department,stu_address)  VALUES
('张老大','男','1985','计算机系','北京市海区'),
('张老二','男','1986','中文系','北京市昌平区'),
('张三','女','1990','中文系','湖南省永州市'),
('李四','男','1990','英语系','辽宁省阜新市'),
('王五','女','1991','英语系','福建省厦门市'),
('王六','男','1988','计算机系','湖南衡阳市')

-- 为成绩表score插入数据
INSERT INTO score(stu_id,sc_name,grade) VALUES
('901','计算机','98'),
('901','英语','80'),
('902','计算机','65'),
('902','中文','88'),
('903','中文','95'),
('904','计算机','70'),
('904','英语','92'),
('905','英语','95'),
('906','英语','94')

3.查询student表的所有记录


-- 3.查询student表的所有记录
-- 查询学生表student
SELECT * FROM student;
-- 查询成绩表成绩
SELECT * FROM score;

4.查询student表的第2条到4条记录

-- 4查询student表的第2条到4条记录
SELECT * FROM student  LIMIT 1,3;

5.student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息

-- 5.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息
SELECT a.`stu_id`,a.`stu_name`,a.`stu_department` FROM student a;

6.student表中查询计算机系和英语系的学生的信息

-- 6.从student表中查询计算机系和英语系的学生的信息
SELECT * FROM student a WHERE a.`stu_department`='计算机系'OR a.`stu_department`='英语系';

7.student表中查询年龄18~22岁的学生信息 

-- 7.从student表中查询年龄18~22岁的学生信息
SELECT a.`stu_id`,a.`stu_name`,a.`stu_sex`,(YEAR(NOW())-a.`stu_birth`)'age',a.`stu_department`,a.`stu_address`
FROM student a  WHERE (YEAR(NOW())-a.`stu_birth`) BETWEEN 18 AND 22;

8.student表中查询每个院系有多少人

-- 8.从student表中查询每个院系有多少人 
SELECT a.`stu_department`,COUNT(1)'人数' FROM student a GROUP BY a.`stu_department`;

9.score表中查询每个科目的最高分

-- 9.从score表中查询每个科目的最高分
SELECT a.`sc_name`,MAX(a.`grade`)'max' FROM `score` a GROUP BY a.`sc_name` ;

10.查询李四的考试科目(c_name)和考试成绩(grade

-- 10,查询李四的考试科目(c_name)和考试成绩(grade)
SELECT a.`sc_name`,a.`grade` FROM  `score` a, student b WHERE b.`stu_name`='李四' AND a.`stu_id`=b.`stu_id`

11.用连接的方式查询所有学生的信息和考试信息

-- 11.用连接的方式查询所有学生的信息和考试信息 交叉查询(cross join)内连接查询(inner join)外连接(outer join)
SELECT * FROM student a CROSS JOIN `score` b WHERE a.`stu_id`=b.`stu_id`;

12.计算每个学生的总成绩

-- 12.计算每个学生的总成绩
SELECT b.`stu_name`,SUM(a.`grade`) FROM  `score` a, student b WHERE a.`stu_id`=b.`stu_id` GROUP BY b.`stu_name`;

13.计算每个考试科目的平均成绩

-- 13.计算每个考试科目的平均成绩
SELECT a.`sc_name`,AVG(a.`grade`) FROM  `score` a GROUP BY a.`sc_name`;

14.查询计算机成绩低于95的学生信息

-- 14.查询计算机成绩低于95的学生信息
SELECT b.*,a.`grade` FROM  `score` a, student b WHERE
 (a.`stu_id`=b.`stu_id` AND a.`sc_name`='计算机') AND a.`grade`<95;

15.查询同时参加计算机和英语考试的学生的信息

-- 15.查询同时参加计算机和英语考试的学生的信息
 SELECT * FROM  student 
 WHERE stu_id IN (SELECT a1.`stu_id` FROM `score` a1,`score` a2 
 WHERE (a1.`sc_name`='计算机' AND a2.`sc_name`='英语') AND a1.`stu_id`=a2.`stu_id`);

16.将计算机考试成绩按从高到低进行排序

 -- 16.将计算机考试成绩按从高到低进行排序
SELECT b.`grade` FROM `score` b WHERE b.`sc_name`='计算机' ORDER BY b.`grade`DESC;

17.student表和score表中查询出学生的学号,然后合并查询结果

-- 17.从student表和score表中查询出学生的学号,然后合并查询结果
-- union all :合并结果集
--  union:合并结果集并去重复
SELECT a.`stu_id` FROM student a UNION SELECT stu_id FROM `score`;

18.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩

-- 18.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩
SELECT a.`stu_name`,a.`stu_department`,b.`sc_name`,b.`grade` FROM student a,`score` b 
WHERE ( a.`stu_name` LIKE'王%' OR a.`stu_name` LIKE'张%') AND a.`stu_id`=b.`stu_id`;

19.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩

-- 19.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩
SELECT a.`stu_name`,a.`stu_department`,b.`sc_name`,b.`grade` FROM student a,`score` b 
WHERE a.`stu_address` LIKE'%湖南%'  AND a.`stu_id`=b.`stu_id`;

以上全是个人初学所作,如有雷同纯属巧合

交互式SQL的使用 环境:WINDOWS,Microsoft SQL Server 实验要求: 1,创建Student数据库,包括Students,Courses,SC结构如下: Students(SNO,SNAME,SEX,BDATE,HEIGHT,DEPARTMENT) Courses(CNO,CNAME,LHOUR,CREDIT,SEMESTER) SC(SNO,CNO,GRADE) (注:下划线示主键,斜体示外键)插入一定数据。 2.完成如下的查询要求及更新的要求。 (1)查询身高大于1.80m的男生的学号姓名; (2)查询计算机系秋季所开课程的课程号学分数; (3)查询选修计算机系秋季所开课程的男生的姓名、课程号、学分数、成绩; (4)查询至少选修一门电机系课程的女生的姓名(假设电机系课程的课程号以EE开头); (5)查询每位学生已选修课程的门数总平均成绩; (6)查询每门课程选课的学生人数,最高成绩,最低成绩平均成绩; (7)查询所有课程的成绩都在80分以上的学生的姓名、学号、且按学号升序排列; (8)查询缺成绩的学生的姓名,缺成绩的课程号及其学分数; (9)查询有一门以上(含一门)三个学分以上课程的成绩低于70分的学生的姓名; (10)查询1984年~1986年出生的学生的姓名,总平均成绩及已修学分数。 (11) 在STUDENTSC关系中,删去SNO以’01’开关的所有记录。 (12)在STUDENT关系中增加以下记录: (13)将课程CS-221的学分数增为3,讲课时数增为60 3.补充题: (1) 统计各系的男生女生的人数。 (2) 列出学习过‘编译原理’,‘数据库’或‘体系结构’课程,且这些课程的成绩之一在90分以上的学生的名字。 (3) 列出未修选‘电子技术’课程,但选修了‘数字电路’或‘数字逻辑’课程的学生数。 (4) 按课程排序列出所有学生的成绩,尚无学生选修的课程,也需要列出,相关的学生成绩用NULL示。 (5) 列出平均成绩最高的学生名字成绩。(SELECT句中不得使用TOP n子句) 4.选做题:对每门课增加“先修课程”的属性,用来示某一门课程的先修课程,每门课程应可记录多于一门的先修课程。要求: 1) 修改结构的定义,应尽量避免数据冗余,建立必要的主键,外键。 2) 设计插入必要的测试数据,完成以下查询: 列出有资格选修数据库课程的所有学生。(该学生已经选修过数据库课程的所有先修课,达到合格成绩。) 注意:须设计每个查询的测试数据在查询之前用INSERT语句插入中。 提交作业形式: 1) 建立Student数据库的SQL脚本,插入所有数据项的SQL脚本(包括所有的测试数据)。 2) 完成查询要求的SQL语句脚本。 3) 选做题:须提交修改数据库定义的SQL脚本,插入测试数据的SQL脚本以及用于查询的SQL语句。
### 回答1: 可以使用以下SQL语句创建studentscore创建student: CREATE TABLE student ( id INT PRIMARY KEY, name VARCHAR(50), age INT, gender VARCHAR(10) ); 创建score: CREATE TABLE score ( id INT PRIMARY KEY, student_id INT, subject VARCHAR(50), score INT, FOREIGN KEY (student_id) REFERENCES student(id) ); ### 回答2: 为了回答这个问题,我们需要了解学生分数的结构数据类型。在创建学生时,我们需要考虑以下内容: 1. 学生ID:每个学生都有独特的ID,这可用于将学生与他们的成绩联系起来。因此,我们需要为此创建一个名为“student_id”的整数类型列。 2. 姓名:每个学生都有自己的姓名,因此我们需要为此创建一个名为“name”的文本类型列。 3. 年龄:我们还需要在学生中添加一个年龄列,为此创建一个名为“age”的整数类型列。 4. 性别:添加一个性别列,为此创建一个名为“gender”的文本类型列。 根据上述要求,可以创建学生的SQL语句如下: CREATE TABLE student ( student_id INTEGER PRIMARY KEY, name TEXT, age INTEGER, gender TEXT ); 至于分数,我们还需要考虑以下内容: 1. 学生ID:将分数与学生关联需要学生ID,因此我们需要为此创建一个名为“student_id”的整数类型列。 2. 课程:在分数中,我们需要为每个学生的每个课程创建一个分数。这可以使用一个名为“course”的文本类型列来完成。 3. 分数:我们还需要添加一个分数列,为此创建一个名为“score”的整数类型列。 根据上述要求,可以创建分数的SQL语句如下: CREATE TABLE score ( student_id INTEGER, course TEXT, score INTEGER, PRIMARY KEY (student_id, course), FOREIGN KEY (student_id) REFERENCES student(student_id) ); 在创建分数时,我们还使用了FOREIGN KEY约束,确保每个分数都属于一个现有的学生ID。通过这两个的结构,我们可以轻松地管理学生他们的成绩,进行统计、分析及其他相关操作。 ### 回答3: 要创建学生(student成绩(score)两个,需要确定每个的字段以及数据类型约束条件。 首先,我们来看学生: 字段名 数据类型 约束条件 学生ID 整数类型 主键,自增 姓名 字符串类型 不可以为空 性别 字符串类型 不可以为空 出生日期 日期类型 不可以为空 年级 整数类型 不可以为空 每个学生都会有一个唯一的学生ID,因此我们将其设置为主键,使用自增的方式增加学生ID。学生的姓名、性别、出生日期年级都是必填项,因此在字段上添加了非空的约束条件。 接下来,我们来看成绩: 字段名 数据类型 约束条件 学生ID 整数类型 外键 科目 字符串类型 不可以为空 分数 整数类型 不可以为空 成绩与学生是从属关系,每个成绩记录都需要对应一个学生ID。因此,我们在成绩中添加了学生ID字段,将其作为外键。科目分数也是必填项,因此在字段上添加了非空的约束条件。 最终,学生成绩创建语句如下: -- 学生 CREATE TABLE student ( student_id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, gender VARCHAR(10) NOT NULL, birthday DATE NOT NULL, grade INT NOT NULL ); -- 成绩 CREATE TABLE score ( student_id INT, subject VARCHAR(50) NOT NULL, score INT NOT NULL, FOREIGN KEY (student_id) REFERENCES student(student_id) );
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值