Mysql基础:子查询(where) ,select完整语法

-- 子查询
-- 本质:在where语句中嵌套一个子查询语句,最后返回给where里的是一个值

-- 子查询
-- 本质:在where语句中嵌套一个子查询语句,最后返回给where里的是一个值
-- =========where===============
-- 1.查询高等数学-1的所有考试结果(学号,科目编号,成绩),降序排列
SELECT studentno,r.subjectno,studentresult
FROM result r
INNER JOIN `subject` sub
ON r.subjectno=sub.subjectno
WHERE subjectname='高等数学-1'
order by studentresult DESC

-- 方式二:使用子查询(由里及外)
SELECT `studentno`,`subjectno`,`studentresult`
FROM result
WHERE subjectno=(
    SELECT subjectno FROM `subject`
    WHERE subjectname='高等数学-1'
)
-- 查询所有高等数学-1的 学生学号
-- SELECT subjectno FROM `subject` WHERE subjectname='高等数学-1'


-- 练习,查询分数不小于80分的学生的学号和姓名
SELECT s.studentno,studentname
FROM student s
INNER JOIN result r
ON s.studentno=r.studentno
where studentresult>=80 AND subjectno=(SELECT subjectno FROM `subject` WHERE subjectname='高等数学-1')

-- 在这个基础上增加科目,高等数学-2(查询高等数学-2的编号)
-- SELECT subjectno FROM `subject` WHERE subjectname='高等数学-1'

-- 有趣的写法(看懂了证明子查询这一块学会了,不过还是推荐用多表查询)
SELECT studentno,studentname FROM student WHERE studentno in(
    SELECT studentno FROM result WHERE studentresult>80 AND subjectno=(
                select subjectno FROM `subject` WHERE subjectname='高等数学-1'
    )
)

 练习

-- 练习:查询c语言-1前3名同学的成绩的信息(学号,姓名,分数)
-- 使用子查询
SELECT studentno,studentname FROM student WHERE studentno in(
    SELECT studentno FROM result WHERE (SELECT subjectno FROM `subject` WHERE subjectname='C语言-1' )
    order by studentresult DESC 
)
LIMIT 0,3

select完整语法

-- select完整语法
SELECT [ALL|DISTINCT]
{*|table *|[table.field1[as a]ias1][,table.field2[as alias2]][.....]}
FROM table_name[as table_alias]
    [left|right|inner join table_name2]-- 联合查询
    [where....]-- 指定结果须满足的条件
    [GROUP BY....]-- 指定结果按照那几个字段来分组
    [HAVING]-- 过滤分组记录必须满足的次要条件
    [ORDER BY....]-- 指定查询一个记录按一个或者多个排序
    [LIMIT 0,3]-- 指定查询记录‘0’为起始位置,‘3’为末尾位置

 

posted @ 2020-09-25 15:37  凸然猿  阅读(4720)  评论(0编辑  收藏  举报