1. 创建关系表student、course、sc表,具体的属性见课本,要求第一、用可视化的界面创建 第二,用SQL语言来创建基本表,并修改student表插入新的属性列address(地址),然后删除新的属性列address; 2. 创建关系表并插入3条以上的元组,注意外码和主码的取值。 3. 练习使用select实现的单表查询; (1)查询计算系姓“王”的所有学生的信息; (2)查询考试成绩有不及格的学生的学号; (3)查询课程名称为“DB_design”的课程信息; (4)查询选修了3号课程的学生姓名,并按照学号降序排列 (5)统计每个系的男生总人数 (6)分别统计每个系的男生和女生总人数、男生最大年龄、女生最大年龄,并按照系降序排序
时间: 2024-02-11 10:07:26 浏览: 111
好的,您的问题我已经收到了!以下是对您的问题的回答:
1.
(1)使用可视化界面创建表:
- 学生表student:id、name、sex、birthday、address、department
- 课程表course:id、name、teacher、credit
- 成绩表sc:id、student_id、course_id、score
(2)使用SQL语言创建基本表:
- 学生表student:
```
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(20),
sex VARCHAR(10),
birthday DATE,
address VARCHAR(100),
department VARCHAR(20)
);
```
- 课程表course:
```
CREATE TABLE course (
id INT PRIMARY KEY,
name VARCHAR(50),
teacher VARCHAR(20),
credit INT
);
```
- 成绩表sc:
```
CREATE TABLE sc (
id INT PRIMARY KEY,
student_id INT,
course_id INT,
score INT,
FOREIGN KEY (student_id) REFERENCES student(id),
FOREIGN KEY (course_id) REFERENCES course(id)
);
```
- 修改student表插入新的属性列address(地址):
```
ALTER TABLE student ADD COLUMN address VARCHAR(100);
```
- 删除新的属性列address:
```
ALTER TABLE student DROP COLUMN address;
```
2. 创建关系表并插入3条以上的元组,注意外码和主码的取值。
以学生表student为例,创建并插入3条以上的元组:
```
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(20),
sex VARCHAR(10),
birthday DATE,
department VARCHAR(20)
);
INSERT INTO student VALUES (1, '张三', '男', '2000-01-01', '计算机科学与技术');
INSERT INTO student VALUES (2, '李四', '女', '2001-02-02', '软件工程');
INSERT INTO student VALUES (3, '王五', '男', '2002-03-03', '数据科学与大数据技术');
```
3. 练习使用select实现的单表查询:
(1)查询计算系姓“王”的所有学生的信息:
```
SELECT * FROM student WHERE department = '计算机科学与技术' AND name LIKE '王%';
```
(2)查询考试成绩有不及格的学生的学号:
```
SELECT DISTINCT student_id FROM sc WHERE score < 60;
```
(3)查询课程名称为“DB_design”的课程信息:
```
SELECT * FROM course WHERE name = 'DB_design';
```
(4)查询选修了3号课程的学生姓名,并按照学号降序排列:
```
SELECT s.name FROM student s
INNER JOIN sc ON s.id = sc.student_id
WHERE sc.course_id = 3
ORDER BY s.id DESC;
```
(5)统计每个系的男生总人数:
```
SELECT department, COUNT(*) FROM student WHERE sex = '男' GROUP BY department;
```
(6)分别统计每个系的男生和女生总人数、男生最大年龄、女生最大年龄,并按照系降序排序:
```
SELECT department,
SUM(CASE WHEN sex='男' THEN 1 ELSE 0 END) AS male_count,
SUM(CASE WHEN sex='女' THEN 1 ELSE 0 END) AS female_count,
MAX(CASE WHEN sex='男' THEN YEAR(NOW()) - YEAR(birthday) ELSE 0 END) AS male_max_age,
MAX(CASE WHEN sex='女' THEN YEAR(NOW()) - YEAR(birthday) ELSE 0 END) AS female_max_age
FROM student
GROUP BY department
ORDER BY department DESC;
```
阅读全文