SQL语句深入浅出

知道91 | ASP.NET | 2015-09-18 | 阅读:2338

Sql语句大家再熟悉不过了,不过,相对于简单查询来说,一些比较绕的SQl语句就比较难写了,这里我给出自己的一些见解,希望能够对大家有所帮助!

问题:

数据库中人表有三个属性,用户(编号,姓名,身高),查询出该身高排名第二的高度。

建表语句

create table users
(
    id int identity(1,1) primary key,
    name varchar(20),
    height float
);

数据库表:用户表(Users)

sql

测试数据

insert into users(name,height) values('zhangsan',182);
insert into users(name,height) values('李四',122);
insert into users(name,height) values('张强',132);
insert into users(name,height) values('王明',122);
insert into users(name,height) values('姜明',182);
insert into users(name,height) values('蒋克龙',182);
insert into users(name,height) values('zhang',182);
insert into users(name,height) values('安安',181);
insert into users(name,height) values('健健',181);
insert into users(name,height) values('明明',181);
insert into users(name,height) values('小小',177);
insert into users(name,height) values('旺旺',123);
insert into users(name,height) values('卡纳',175);
insert into users(name,height) values('文鑫',166);
insert into users(name,height) values('健明',155);
insert into users(name,height) values('拉拉',152);
insert into users(name,height) values('青青',132);
insert into users(name,height) values('乐乐',155);
insert into users(name,height) values('KK',123);
insert into users(name,height) values('FF',122);
insert into users(name,height) values('Lily',152);

查询语句

1、查询出没有重复值的第二名,即假如最高的身高是182,有几个人同时身高是182,则查出身高小于182的的最高的身高值。

1>、方式1:

select MAX(height) from users where height < (select MAX(height) from users );

意义:先查询出最高的身高值,然后查询身高小于该值的最高身高。

2>、方式2:

select top 1 height from users where height not in (select MAX(height) from users) order by height desc;

意义:先查询出最高的身高,排除该身高,然后将数据进行排序(降序),查询出当前的第一条数据。

2、查询出可能与最高身高值相同的第二名,即假如身高最高是182,有几个人同时是182身高,第二名依然是182.

select top 1 * from  (select top 2 height from users order by height desc) s order by height asc;

意义:将数据按照身高(降序)排列,查询出前面的两项,然后将这两项按照身高升序,查询第一项目。

希望对大家能够有所帮助!