数据库学习笔记-07(MySQL )->子查询

4 阅读1分钟
  1. 掌握如何为列名、表名设置别名
  2. 了解什么是子查询以及子查询的使用场景
  3. 掌握WHERE子查询的使用
  4. 掌握SELECT子查询的使用

1、为输出列指定别名

语法:SELECT age [AS] 'my_age' FROM table_name

作用:改变输出的名称(不会改变其输出的值)

SELECT class_name '班级', COUNT(1) AS '总人数' FROM school_student_info GROUP BY class_name;

2、为表指定别名

语法:SELECT t.age FROM table_name [AS] t

作用:方便后面的表关联查询

-- 指定列的别名
SELECT class_name '班级', COUNT(1) AS '总人数' FROM school_student_info GROUP BY class_name;

-- 指定表的别名
SELECT school_student_info .stu_no, school_student_info .stu_name FROM school_student_info;

SELECT t.* FROM school_student_info t;
SELECT t.stu_no, t.stu_name FROM school_student_info t;

3、什么是子查询?

子查询是指一个查询语句嵌套在另一个查询语句内部的查询

使用场景:

  • SELECT 子查询
  • FROM 子查询
  • WHERE 子查询
SELECT 子查询

查询每个学生的学号、姓名、语文成绩
SELECT t1.stu_no, t1.stu_name, (SELECT score t2 FROM school_student_grade t2 
WHERE t2.course_id=1 AND t2.student_id=t1.id) AS 语文 FROM school_student_info t1;
________________________________________

FROM 子查询
SELECT t.* FROM (
SELECT t1.stu_no, t1.stu_name, t1.age * 100 AS age
FROM school_student_info t1
) t WHERE t.age <= 1000;
________________________________________

WHERE 子查询
-- 查询本班语文成绩大于平均成绩的学生ID及分数
-- 方式1、使用EXISTS关键字
SELECT t1.* FROM school_student_grade t1 WHERE t1.score > (SELECT AVG(t2.score) FROM school_student_grade t2 WHERE t2.course_id = 1) AND t1.course_id = 1;

SELECT * FROM school_student_grade WHERE course_id = 1;

SELECT AVG(score) FROM school_student_grade WHERE course_id = 1;

SELECT t1.student_id, t1.score FROM school_student_grade t1 WHERE t1.course_id = 1 AND t1.score > (SELECT AVG(t2.score) FROM school_student_grade t2 WHERE t2.course_id = 1)


-- 方式2、使用IN关键字
SELECT t1.* FROM school_student_info t1 WHERE t1.id NOT IN (
SELECT t2.student_id FROM school_student_grade t2
WHERE t2.course_id = 1
);