Student(s_id,s_name,s_birth,s_sex) Teacher(t_id,t_name) Course(c_id,c_name,t_id) Score(s_id,c_id,s_score)基于以上表,用sql语言实现:查询2001年出生的同学基本信息
时间: 2024-05-07 08:20:30 浏览: 11
可以使用如下 SQL 语句查询 2001 年出生的同学的基本信息:
```
SELECT s_id, s_name, s_birth, s_sex
FROM Student
WHERE YEAR(s_birth) = 2001;
```
解释:
1. `SELECT s_id, s_name, s_birth, s_sex`:选择需要查询的字段,即学生的 ID、姓名、出生日期和性别。
2. `FROM Student`:从学生表中查询。
3. `WHERE YEAR(s_birth) = 2001`:筛选出生日期为 2001 年的同学,`YEAR()` 函数用于提取日期的年份。
相关问题
Student(s_id,s_name,s_birth,s_sex) Teacher(t_id,t_name) Course(c_id,c_name,t_id) Score(s_id,c_id,s_score)
这是一个简单的学生信息管理系统,包括学生、教师、课程和成绩四个实体。其中,学生实体包含学生编号、姓名、生日和性别等属性;教师实体包含教师编号和姓名属性;课程实体包含课程编号、课程名称和授课教师编号等属性;成绩实体包含学生编号、课程编号和成绩等属性。这些实体之间存在一定的关系,例如学生和课程之间是多对多的关系,学生和成绩之间是一对多的关系等。通过对这些实体和关系的管理,可以实现学生信息的查询、增加、修改和删除等操作。
我给你四张表,表结构是第一张表名称是student,字段是 s_id,s_name,s_birth,s_sex; 第二张表名称是teacher字段是t_id,t_name 第三张表名称是course,字段是 c_id,c_name,t_id; 第四张表名称是score,表字段是 s_id,c_id,s_score,根据以上表结构生成难度高的oracle sql题目及答案
假设四张表的表结构如下:
```
CREATE TABLE student (
s_id INT PRIMARY KEY,
s_name VARCHAR2(50),
s_birth DATE,
s_sex VARCHAR2(10)
);
CREATE TABLE teacher (
t_id INT PRIMARY KEY,
t_name VARCHAR2(50)
);
CREATE TABLE course (
c_id INT PRIMARY KEY,
c_name VARCHAR2(50),
t_id INT,
CONSTRAINT fk_teacher FOREIGN KEY (t_id) REFERENCES teacher(t_id)
);
CREATE TABLE score (
s_id INT,
c_id INT,
s_score INT,
CONSTRAINT pk_score PRIMARY KEY (s_id, c_id),
CONSTRAINT fk_student FOREIGN KEY (s_id) REFERENCES student(s_id),
CONSTRAINT fk_course FOREIGN KEY (c_id) REFERENCES course(c_id)
);
```
现在给出以下复杂的 Oracle SQL 题目和答案:
1. 查询每门课程的平均分和最高分,按照平均分从高到低排序。
答案:
```
SELECT c.c_id, c.c_name, AVG(s.s_score) AS avg_score, MAX(s.s_score) AS max_score
FROM course c
LEFT JOIN score s ON c.c_id = s.c_id
GROUP BY c.c_id, c.c_name
ORDER BY avg_score DESC;
```
2. 查询每个学生的平均成绩,按照平均成绩从高到低排序。
答案:
```
SELECT s.s_id, s.s_name, AVG(sc.s_score) AS avg_score
FROM student s
LEFT JOIN score sc ON s.s_id = sc.s_id
GROUP BY s.s_id, s.s_name
ORDER BY avg_score DESC;
```
3. 查询没有选修任何课程的学生的姓名和性别。
答案:
```
SELECT s.s_name, s.s_sex
FROM student s
LEFT JOIN score sc ON s.s_id = sc.s_id
WHERE sc.s_id IS NULL;
```
4. 查询同时选修了编号为 1 和编号为 2 课程的学生的姓名。
答案:
```
SELECT s.s_name
FROM student s
INNER JOIN score sc ON s.s_id = sc.s_id
WHERE sc.c_id IN (1, 2)
GROUP BY s.s_id, s.s_name
HAVING COUNT(DISTINCT sc.c_id) = 2;
```
5. 查询选修了所有课程的学生的姓名。
答案:
```
SELECT s.s_name
FROM student s
INNER JOIN score sc ON s.s_id = sc.s_id
GROUP BY s.s_id, s.s_name
HAVING COUNT(DISTINCT sc.c_id) = (SELECT COUNT(*) FROM course);
```
这些题目和答案都比较复杂,需要熟练掌握 SQL 查询和连接的知识才能解决。