zoukankan      html  css  js  c++  java
  • MySQL 子查询

    1、where型的子查询

    where型的子查询就是把内层查询的结果当作外层查询的条件。

    --(1) 查询与27号运动 同一性别,同一城市的其他人
    
    -- 第一步 查询27号球员的性别、城市
    select sex,town from players where playno=27;
    -- 第二步 将查询的结果放置where条件处
    select playerno,sex,town from players 
    where (sex,town) = (select sex,town from players where playerno= 27);
    
    
    --(2)获取和27号球员出生在同一年的球员号码
    
    --第一步 查询27号球员的出生年
    select year(birth_date)from players where playerno =27;
    -- 第二步 将查询的结果放置where条件处
    select playerno,birth_date from players 
    where year(birth_date)=(select year(birth_date)from players where playerno =27);

    2、from型的子查询

    from子查询就是把子查询的结果(内存里的一张表)当作一张临时表,然后再对它进行处理。

    -- 获取编号小于10的男性球员号码
    --普通写法: 
    select*from players where sex = "m" and playerno <10;
    --子查询写法
    select*FROM (select *from players where playerno < 10) AS A WHERE SEX="M";

    3、列 子查询

    列子查询就是把返回一列的值,因此就不能用 = > < 等符号

    配合以下条件符使用:

    • in 在指定项里
    • any 在子查询任何返回结果比较
    • all 在子查询所有返回结果比较
    --(in 举例) 获取球员性别为女的所有球员的球号、名字及城市
    
    -- 普通写法
    select playerno,name,town from players where sex="f";
    -- in 列子查询写法
    select playerno,name,town from players 
    where playerno in(select playerno from players where sex="f");
    
    -- (any 举例)获取至少比同城另一位球员年轻的所有球员号码、生日、城市
    select playerno,birth_date,town from players as p1
    where birth_date > any(select birth_date from players as p2 where p1.town=p2.town)
    
    --(all 举例)获取最老的球员的号码、名字和生日
    --普通写法
    select playerno,name,min(birth_date)from players;
    -- all 列子查询写法
    select playerno,name,birth_date from players where birth_date<= all(select birth_date from players);

    4、exists 子查询

    只要子句中至少返回一个值,则exists 语句就返回TRUE

    -- (exists 举例)获取哪些至少支付了一次返款的球员姓名和首字母
    select NAME,initials from players 
    where exists
    (select*from penalties where penalties.playerno=players.playerno);
    
    -- (exists 举例)获取哪些从来没有付过罚款的球员姓名和首字母
    select NAME,initials from players 
    where  not exists
    (select*from penalties where penalties.playerno =players.playerno);
  • 相关阅读:
    CF446C [DZY loves Fibonacci]
    [BZOJ2286] 消耗战
    [CF Round #278] Tourists
    BZOJ2553 [BJWC2011]禁忌
    NOI2018D2T1 屠龙勇士
    BZOJ2333 棘手的操作
    bzoj4196: [Noi2015]软件包管理器(树链剖分)
    bzoj1833: [ZJOI2010]count 数字计数(数位DP)
    bzoj1026: [SCOI2009]windy数(数位DP)
    bzoj3631: [JLOI2014]松鼠的新家(树上差分)
  • 原文地址:https://www.cnblogs.com/jennyyin/p/7904007.html
Copyright © 2011-2022 走看看