sql语句 查询与“张立”同岁的学生的学号、姓名和年龄。(要求使用至少 3 种方法求解)
时间: 2024-10-10 10:06:11 浏览: 64
在SQL查询中,有多种方法可以找出与"张立"同岁的学生的信息。这里给出三种常见的解决方案:
1. **使用`=`操作符**:
```sql
SELECT student_id, name, age
FROM students
WHERE age = (SELECT age FROM students WHERE name = '张立');
```
2. **使用`EXISTS`函数**:
```sql
SELECT student_id, name, age
FROM students s1
WHERE EXISTS (SELECT * FROM students s2 WHERE s2.name = '张立' AND s1.age = s2.age);
```
3. **自连接(INNER JOIN)**:
```sql
SELECT s1.student_id, s1.name, s1.age
FROM students s1
INNER JOIN students s2 ON s1.age = s2.age AND s1.name <> '张立'
WHERE s2.name = '张立';
```
在这三个查询中,我们都在查找那些年龄等于“张立”年龄的学生,并获取他们的学号、姓名和年龄。
相关问题
使用MySQL查询至少选修了“张立”同学选修的所有课程的学生学号和姓名
假设学生表为students,课程表为courses,选课表为selections,可以使用以下SQL语句查询至少选修了“张立”同学选修的所有课程的学生学号和姓名:
```
SELECT s.id, s.name
FROM students s
INNER JOIN selections sel ON s.id = sel.student_id
INNER JOIN courses c ON sel.course_id = c.id
WHERE c.name IN (
SELECT c2.name
FROM courses c2
INNER JOIN selections sel2 ON c2.id = sel2.course_id
INNER JOIN students s2 ON sel2.student_id = s2.id
WHERE s2.name = '张立'
)
GROUP BY s.id, s.name
HAVING COUNT(DISTINCT c.id) >= (
SELECT COUNT(DISTINCT c3.id)
FROM courses c3
INNER JOIN selections sel3 ON c3.id = sel3.course_id
INNER JOIN students s3 ON sel3.student_id = s3.id
WHERE s3.name = '张立'
);
```
该查询语句的思路是,首先在子查询中查询出“张立”选修的所有课程,然后在主查询中找到选修了这些课程的学生,并且确保这些学生选修的课程数量等于“张立”选修的课程数量。其中使用了INNER JOIN进行表的连接,GROUP BY进行分组,HAVING进行条件筛选。
查询至少选修了“张立”同学选修的所有课程的学生学号和姓名。
这个查询涉及到多张表,需要使用联结查询。假设学生表为students,选课表为courses,课程表为classes。假设学生表中包含字段student_id和student_name,选课表中包含字段student_id和class_id,课程表中包含字段class_id和class_name,可以使用以下SQL语句进行查询:
```
SELECT DISTINCT s.student_id, s.student_name
FROM students s
JOIN courses c ON s.student_id = c.student_id
JOIN classes cl ON c.class_id = cl.class_id
WHERE cl.class_name IN
(SELECT cl2.class_name FROM courses c2 JOIN classes cl2 ON c2.class_id = cl2.class_id WHERE c2.student_id = '张立')
```
这个查询首先使用INNER JOIN将学生表、选课表和课程表联结起来,然后使用WHERE子句筛选出选修了"张立"同学选修的课程的所有学生,最后使用DISTINCT关键字去重,得到学号和姓名。
阅读全文