sql语句查询

create table players
(
    playerno id,
    name varchar,
    sex char,
    join date,
    town varchar,

)

create table pentity
(
    id int,
    playerno,
    amount
)
按照球员级别分组,并统计总数(球员总数)
select count(*) as number
    case
        when joined < 1980 then old
        when joined <=1983 1980 then youny
        else ok end as level
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) 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)
ane 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)

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。