zoukankan      html  css  js  c++  java
  • sql语句查询

    create table players
    (
        playerno int,
        name varchar,
        sex char,
        join date,
        town varchar,
        birthday date
    )
    
    create table pentity
    (
        id int,
        playerno int,
        amount float
    )
    按照球员级别分组,并统计总数(球员总数)
    select count(*) as number,
        case
            when joined < 1980 then 'old'
            when joined <=1983 then 'youny'
            else 'ok' end as levels
    from players
    group by levels;
    
    当性别为 F时,为 Feman,否则为 Man:
    select name,
            case sex
            when 'F' then 'Feman'
            esle 'Man' end as sex
    from players;
    或者为
    select name,
    case
        when sex = 'F' then 'Feman'
        when sex = 'M' then 'Man'
        end as sex
    from players;
    
    根据 town中,查询球员号码,同时如果 town为stratford,则当加入的年份大于1980,表示为 young,当加入年份小于1980时,为old,
    如果 town 为 elthon,则当加入 年份 大于 1980,表示为 'xxxx',否则为 'yyyy'
    select playerno,
            case town
            when 'stratford' then
                case 
                    when join > 1980 then young
                    when join < 1980 then old
                end 
            when 'elthon' then
                case
                    when join > 1980 then 'xxxxx'
                    when join < 1980 then 'yyyyy'
                end
            end as age
    from players;
    
    查找号码,并在名字前面加入首字母和点号,并且是以 s 结尾的球员数据
    select playerno,concat(left(name,1), '.', name) as name
    from players
    where right(name,1) = 's';
    
    找到至少引发两次罚款且都不低于 25元的每个球员的号码 
    select playerno              1
    from players               2
    where amount > 25          3
    group by playerno          4 
    having count(*) > 1        5
    order by playerno asc;     6
    执行顺序为:2--3--4--5--6--1
    
    union 联合查询
    查询队长号和罚款的球员号
    select playerno from players   1
    union                          2
    select playerno from pentity   3
    执行顺序为 1---3,然后 是2即合并 1,3并去重复项
    
    查询号码小于10且为男的球员
    select * from players where playerno < 10 and sex = 'M'
    或者 
    select * from (select * from players where playerno < 10) as pp where pp.sex = 'M'
    其中嵌套用法中得有别名,而且以后的子查询也得用别名表示
    
    高度嵌套:
    号码 大于10且小于100,加入时间表大于1980且为男的球员编号
    1.号码 大于 10
      select * from players where playerno > 10;
    
    2.号码小于 100
      select * from players where playerno < 100;
    
    3.加入时间大于 1980
      select * from players where join > 1980;
    
    4.性别为男的
      select * from players where sex = 'M'
      合并则:
      select playerno
      from (select * 
                from (select * 
                    from (select * 
                            from (select * from players where sex = 'M') as MM
                            where MM.join > 1980) AS JJ 
                    where JJ.playerno < 100) AS PP 
                where PP.playerno > 10) AS LAST;
    
    查询与编号为 100的球员且城市相同的球员
    select * 
    from players
    where players.sex = (select sex from players where playerno = 100)
    and town = (select town from players where playerno = 100);
    或者:
    select * 
    from (sex,town) = (select sex,town from player where playerno = 100)
    
    获得与 27号球员住同一城市的球员名和编号
    select p1.playerno,p1.name
    from players p1,players p2
    where p1.town = p2.town
    and p2.playerno = 27
    and p1.playerno <> 27
    
    当联接的列名相同时可用
    select * 
    from players 
    join team on players.playerno = team.playerno
    或者 
    select *
    from players
    join team using(playerno)
  • 相关阅读:
    Linux RAID部署
    系统运维架构师体系
    Linux系统上文件的特殊权限及文件acl
    Linux磁盘使用及文件系统管理
    中小规模网站架构组成
    优化配置模板主机
    网络原理基础
    MySQL二进制安装
    网络通讯基础
    点击改变背景
  • 原文地址:https://www.cnblogs.com/lin3615/p/4158878.html
Copyright © 2011-2022 走看看