CREATE TABLE students (
student_id INT PRIMARY KEY,
student_name VARCHAR(50)
);
CREATE TABLE courses (
course_id INT PRIMARY KEY,
course_name VARCHAR(50),
student_id INT,
FOREIGN KEY (student_id) REFERENCES students(student_id)
);
-- 插入示例数据
INSERT INTO students (student_id, student_name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');
INSERT INTO courses (course_id, course_name, student_id) VALUES
(101, 'Math', 1),
(102, 'Physics', 1),
(103, 'Chemistry', 2);
-- 使用 IN 关键字的例子
SELECT s.*
FROM students s
WHERE s.student_id IN (SELECT c.student_id FROM courses c);
-- 使用 EXISTS 关键字的例子
SELECT s.*
FROM students s
WHERE EXISTS (SELECT 1 FROM courses c WHERE c.student_id = s.student_id);
两个查询的目的都是找出参加了课程的学生。然而,从效率角度来讲,如果没有合适索引,两个查询在大规模数据下可能表现会有差异。但实际上,对于这么简单的关联查询,现代数据库的优化器通常都能很好地优化这两种查询方式的执行计划,难以直观看出效率上的明显差距。