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)
时间: 2025-01-01 15:15:20

sql语句查询的相关文章

sql语句查询后几行数据并倒着排列

$conn = mysql_connect("数据库地址","用户名","密码"); if(!$conn) { die("mysql conn failed"); } else{ mysql_query("SET NAMES 'utf8'"); mysql_select_db("数据表",$conn); if(!$conn) { die("database selected f

sql语句查询同一表内多字段同时重复的记录 sql数据库重复记录删除

分享下用sql语句删除数据库中重复记录的方法.比如现在有一人员表 (表名:peosons) 若想将姓名.身份证号.住址这三个字段完全相同的记录查询出来select p1.* from persons p1,persons p2 where p1.id<>p2.id and p1.cardid = p2.cardid and p1.pname = p2.pname and p1.address = p2.address可以实现上述效果.几个删除重复记录的SQL语句 1.用rowid方法2.用gr

sql语句查询经纬度范围

指定一个经纬度,给定一个范围值(单位:千米),查出在经纬度周围这个范围内的数据. 经度:113.914619 纬度:22.50128 范围:2km longitude为数据表经度字段 latitude为数据表纬度字段 SQL在mysql下测试通过,其他数据库可能需要修改 SQL语句如下: select * from location where sqrt( ( ((113.914619-longitude)*PI()*12656*cos(((22.50128+latitude)/2)*PI()/

提高SQL语句查询效率

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放

sql语句查询重复的数据

查找所有重复标题的记录:SELECT *FROM t_info aWHERE ((SELECT COUNT(*)FROM t_infoWHERE Title = a.Title) > 1)ORDER BY Title DESC一.查找重复记录1.查找全部重复记录Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)2.过滤重复记录(只显示一条)Select * From HZT Whe

sql语句查询条件的不同表达方式对查询性能的影响

今天操作数据库遇到一个问题 目标表RA_AD_DAILY_DATA的数据量大概有5千万左右,其中的BUSINESS_DATE字段为日期类型 我要查询8月20号导入的三条记录,刚开始用这种方式去查: SELECT * FROM RA_AD_DAILY_DATA WHERE  to_char(BUSINESS_DATE,'yyyy-MM-dd')= '2014-08-20' ; 速度非常慢,五分钟左右才能出来结果(在PL/SQL developer中) 同样都是查询2014年8月20日的数据,换一种

sql语句查询数据库表结构信息

开发中经常用到查询指定表及其字段的信息,以下是我整理的SQL语句查询方法,供自己平时使用也提供给大家参考! 1.适用MS SQL SERVER: 1 SELECT 2 表名 = case when a.colorder=1 then d.name else '' end, 3 表说明 = case when a.colorder=1 then isnull(f.value,'') else '' end, 4 字段序号 = a.colorder, 5 字段名 = a.name, 6 标识 = c

使用sql语句查询日期在一定时间内的数据

使用sql语句查询日期在一周内的数据 select * from ShopOrder where datediff(week,ordTime,getdate()-1)=0   //查询当天日期在一周年的数据 select * from ShopOrder where datediff(day,ordTime,getdate()-1)=0   //查询当天的所有数据 SELECT * FROM A where datediff(d,datetime,getdate()) <=30 //前30天 S

如何用SQL语句查询Excel数据?

如何用SQL语句查询Excel数据?Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT*FROMOpenDataSource( 'Microsoft.ACE.OLEDB.12.0', 'Data Source="c:\book1.xlsx";User ID=Admin;Password=;Extended properties=Excel 12.0')...[Sheet1$] 复制代码

转 mysql 中sql 语句查询今天、昨天、7天、近30天、本月、上一月 数据

转自 http://blog.csdn.net/ve_love/article/details/19685399 转 mysql 中sql 语句查询今天.昨天.7天.近30天.本月.上一月 数据