(快速入门)MySQL学习笔记一:(Q子查询)

说明

这个只是本人自己学习时做的笔记,比较基础,希望大佬不喜勿喷。
有需要的小伙伴可以参考一下,只是很基础的笔记。谢谢大家!

基础的介绍

语法代码:

---------------------------------------------------------------
--  子查询
    概念:子查询是一种常用的计算机语言select-sql语言中嵌套查询下层的程序模块。
    当一个查询是另一个查询条件是,称之为子查询。
    子查询:指在一条select语句中,嵌入了另外一条select语句,那么被嵌入的select
    语句称之为子查询语句
    主查询概念:
    主查询:主要的查询对象,第一条select语句,确定的用户所有获取的数据目标(数据源)
    已经要具体得到的字段信息。
--  子查询和主查询的关系
    1.子查询是嵌入到主查询中的;
    2.子查询是辅助主查询的:要么作为条件,要么作为数据源
    3.子查询是可以独立存在的一条完整的select语句。
--  子查询分类
    按功能分
    --标量子查询:子查询返回的结果是一个数据(一行一列)
    --列子查询:返回的结果是一列(一列多行)
    --行子查询:返回的结果是一行(一行多列)
    --表子查询:返回的结果是多行多列
    --exists子查询:返回的结果10(类似布尔)

    按位置分
    where子查询:子查询出现的位置在where条件中
    from子查询:子查询出现的位置在from数据源中(做数据源)
-----------------------------------------------------------------------
--  标量子查询
    --标量子查询:子查询返回的结果是一个数据(一行一列)
    基本语法:select * from 数据源 where 条件判断 =(select * from 数据源
    where 条件判断);//子查询只有一个值
    --知道一个学生的名字:小白,想知道他在哪个班级(班级名字)
    --1.通过学生表获取他所在班级的ID
    --2.通过班级id获取班级名字
    --select class from my_student where name='小白白';
    --select name from my_class where class =(select class from my_student where name ='小白白');
--  列子查询
    概念:返回的结果是一列(一列多行)
    基本语法:主查询 where 条件 in (列子查询)
    --查看学生表中班级有学生的班级名称。
    1.在学生表所有的班级id。
    2.在班级表中查找对应的名称。
    select name from my_class where class in (select distinct class from my_student);
--  行子查询
    概念:返回结果是一行多列
    行元素:字段元素是指一个字段对应的值,行元素对应的就是多个字段;多个字段
    作为一个元素参与运算,把这种情况称之为行元素。
    基本语法:主查询 where 条件 【(构造一个行元素)=(行子查询)】;
    --需求:获取班级上年龄最大,且身高最高的学生
    --1.求出班级年龄最大的的值
    --2.求出班级身高最高值
    --3.求出对应的学生
    select * from my_student where age=age(stu_age) and height=max(height);//出现聚合函数
    --使用行元素
    select * from my_student where (age,height)=(select max(age),max(height) from my_student);

    --1.having 是在group by之后:使用having代表着前面的group by执行了一次。
    --2.group by 一旦执行:结果就是只返回一行记录:第一行
    select * from my_student having age=max(age) and height=max(height);
    总结:标量子查询,列子查询,行子查询都属于where查询
--  表子查询
    表子查询:子查询返回的结果是多行多列,表子查询与子查询非常相似,只是行
    子查询需要产生行元素,而表子查询没有。
    行子查询使用与where条件判断;where子查询
    表子查询是用于from数据源:from子查询
    基本语法:
    select 字段 from (表子查询)as 别名 [where] [group by] [having] [order by] [limit];
    --获取每个班上最高身高的学生(一个)
    1.将每个班最高的学生排在最前面。order by
    2.再针对结果进行group by:保留每组第一个
    select * from (select * from my_student order by height desc) as tmp group by class;

--  exists子查询   
    概念:exists子查询,查询返回的结果只有0和1,1代表成立,0代表不成立
    语法:where exists(查询语句);查询语句由结果就返回1,没有就返回0
    --求出有学生在的所有班级
    select * from my_class c where exists(select * from my_student s where s.class=c.class); 
    查询所有来自my_class表 当存在(学生表中学生的班级id=班级表的id);

你可能感兴趣的:(MySQL笔记)