sql - 需要选择查询来查找空值
问题描述
学生 id = 4 在课程 id = 20 上没有值,如何使用选择查询显示它?预期的输出是包含学生详细信息的一行这是我的 SQL 代码:
create table Students(
student_id int IDENTITY(1,1) NOT NULL PRIMARY KEY,
lname varchar(30) NOT NULL,
fname varchar(30) NOT NULL,
age int NULL CHECK (age > 18),
phone char(13) NULL CHECK (phone LIKE '[(][0-9][0-9][0-9][)][0-9][0-9][0-9][-][0-9][0-9][0-9][0-9]')
);
-- 创建课程表:
create table Course(
course_id int IDENTITY(10,10) NOT NULL PRIMARY KEY,
title varchar(50) NULL,
nb_hrs int NULL
);
-- 创建成绩表:
create table Grades(
course_id int NOT NULL FOREIGN KEY REFERENCES Course(course_id),
student_id int NOT NULL FOREIGN KEY REFERENCES Students(student_id),
grade float NOT NULL CHECK (grade BETWEEN 0 AND 100)
);
-- 向表中插入数据:
INSERT INTO students(lname, fname, age) VALUES ('Salard', 'Jean', 19)
INSERT INTO students(lname, fname, age) VALUES ('Le Bert', 'Antoine', 24)
INSERT INTO students(lname, fname, age) VALUES ('Legendre', 'Pierre', 23)
INSERT INTO students(lname, fname, age) VALUES ('Turcotte', 'Cedric', 24)
INSERT INTO students(lname, fname, age) VALUES ('Tremblay', 'Alfredo', 22)
INSERT INTO students(lname, fname, age) VALUES ('Dominguez', 'Silvia', 21)
INSERT INTO students(lname, fname, age) VALUES ('Wright', 'Michelle', 30)
INSERT INTO students(lname, fname, age) VALUES ('Sullivan', 'Anne', 20)
INSERT INTO students(lname, fname, age) VALUES ('Petit-Clair', 'Cyril', 21)
INSERT INTO students(lname, fname, age) VALUES ('Herbert', 'Jean-Marc', 32)
INSERT INTO course(title, nb_hrs) VALUES ('P41', 45)
INSERT INTO course(title, nb_hrs) VALUES ('P42', 60)
INSERT INTO course(title, nb_hrs) VALUES ('P60', 60)
INSERT INTO course(title, nb_hrs) VALUES ('P61', 60)
INSERT INTO grades(course_id, student_id, grade) VALUES (10, 1, 78)
INSERT INTO grades(course_id, student_id, grade) VALUES (40, 1, 85)
INSERT INTO grades(course_id, student_id, grade) VALUES (40, 2, 80)
INSERT INTO grades(course_id, student_id, grade) VALUES (10, 2, 90)
INSERT INTO grades(course_id, student_id, grade) VALUES (30, 1, 84)
INSERT INTO grades(course_id, student_id, grade) VALUES (20, 10, 96)
INSERT INTO grades(course_id, student_id, grade) VALUES (30, 2, 61)
INSERT INTO grades(course_id, student_id, grade) VALUES (40, 9, 89)
INSERT INTO grades(course_id, student_id, grade) VALUES (40, 10, 73)
INSERT INTO grades(course_id, student_id, grade) VALUES (10, 3, 45)
INSERT INTO grades(course_id, student_id, grade) VALUES (40, 5, 80)
INSERT INTO grades(course_id, student_id, grade) VALUES (40, 6, 33)
INSERT INTO grades(course_id, student_id, grade) VALUES (10, 4, 67)
INSERT INTO grades(course_id, student_id, grade) VALUES (20, 3, 84)
INSERT INTO grades(course_id, student_id, grade) VALUES (10, 5, 35)
INSERT INTO grades(course_id, student_id, grade) VALUES (20, 5, 85)
INSERT INTO grades(course_id, student_id, grade) VALUES (20, 7, 80)
INSERT INTO grades(course_id, student_id, grade) VALUES (30, 3, 67)
INSERT INTO grades(course_id, student_id, grade) VALUES (30, 6, 77)
INSERT INTO grades(course_id, student_id, grade) VALUES (30, 7, 80)
INSERT INTO grades(course_id, student_id, grade) VALUES (30, 4, 33)
INSERT INTO grades(course_id, student_id, grade) VALUES (10, 6, 56)
INSERT INTO grades(course_id, student_id, grade) VALUES (10, 7, 87)
INSERT INTO grades(course_id, student_id, grade) VALUES (30, 9, 89)
INSERT INTO grades(course_id, student_id, grade) VALUES (30, 10, 73)
INSERT INTO grades(course_id, student_id, grade) VALUES (20, 1, 89)
INSERT INTO grades(course_id, student_id, grade) VALUES (20, 9, 18)
INSERT INTO grades(course_id, student_id, grade) VALUES (20, 2, 50)
INSERT INTO grades(course_id, student_id, grade) VALUES (30, 5, 79)
INSERT INTO grades(course_id, student_id, grade) VALUES (30, 8, 37)
INSERT INTO grades(course_id, student_id, grade) VALUES (40, 3, 67)
INSERT INTO grades(course_id, student_id, grade) VALUES (40, 4, 77)
INSERT INTO grades(course_id, student_id, grade) VALUES (20, 8, 75)
INSERT INTO grades(course_id, student_id, grade) VALUES (40, 7, 56)
INSERT INTO grades(course_id, student_id, grade) VALUES (40, 8, 87)
INSERT INTO grades(course_id, student_id, grade) VALUES (10, 8, 38)
INSERT INTO grades(course_id, student_id, grade) VALUES (20, 6, 92)
INSERT INTO grades(course_id, student_id, grade) VALUES (10, 9, 79)
INSERT INTO grades(course_id, student_id, grade) VALUES (10, 10, 97)
(这是一些额外的文字,只是为了让我能够在...中编辑代码围栏)
解决方案
最终答案:
select s.student_id,s.lname,s.fname,s.age,s.phone from Students s where s.student_id in (select student_id from grades g group by student_id with count(student_id) < 4 )
感谢大家
推荐阅读
- javascript - 如何检查 chai 中的一系列错误?
- c# - MediatR 实例化命令处理程序
- c# - EF错误的解决方法?
- excel - Excel 文件中的单词搜索
- reactjs - Uncaught (in promise) ReferenceError: xxx is not defined in react in useCallBack
- python - 当我使用 [[]] 作为我的索引号时,为什么它会返回这个?
- firebase - 在 null 上调用了 getter 'uid'。接收者:null 尝试调用:uid Flutter Firebase
- rust - 借来的价值还不够活?
- google-cloud-platform - GCP Pubsub 未传递消息的数量不会改变
- java - 如何在 JFileChooser 保存对话框中处理问号或星号(“?”或“*”)?