首页 > 代码库 > 常用sql,面试题

常用sql,面试题

1.用一条SQL语句查询出每门课都大于80分的学生姓名

name kecheng fenshu
张三 语文 81
张三 数学
 75
李四 语文
 76
李四 数学
 90
王五 语文
 81
王五 数学
 100
王五 英语
 90

1: select distinct name from table where name not in (select distinct name from table where fenshu<=80)2: select name from table group by name having min(fenshu)>80

 

 

2.删除自动编号不同,其他都相同的学生冗余信息

学生表 如下:
自动编号  学号 姓名 课程编号 课程名称 分数

1 2005001 张三 0001 数学 69
2 2005002 李四 0001 数学
 89
3 2005001 张三 0001 数学
 69

delete from tablename where 自动编号 not in(select min(自动编号) from tablename group by 学号,姓名,课程编号,课程名称,分数)

 

 

3.一个叫department的表,里面只有一个字段name,一共有4条纪录,分别是a,b,c,d,对应四个球对,现在四个球对进行比赛,用一条sql语句显示所有可能的比赛组合.

你先按你自己的想法做一下,看结果有我的这个简单吗?

select a.name, b.namefrom team a, team bwhere a.name < b.name

 

 

4.给出平均进价在2元以下的商品名称

       表名:商品表

名称   产地             进价

苹果   烟台                2.5

苹果   云南                1.9

苹果   四川                3

西瓜   江西                1.5

西瓜   北京                2.4

select 名称 from 商品表 group by 名称 having avg(进价) < 2

 

 

5.表名:高考信息表,给出高考总分在600以上的学生准考证号

准考证号   科目       成绩 

2006001     语文       119

2006001     数学       108

2006002     物理       142

2006001     化学       136

2006001     物理       127

2006002     数学       149

2006002     英语       110

2006002     语文       105

2006001     英语        98

2006002     化学       129

……

select 准考证号 from 高考信息表 group by 准考证号 having sum(成绩) > 600

 

 

6.表名:高考信息表,给出高考总分在600以上的学生准考证号

准考证号        数学        语文        英语        物理        化学

2006001                108         119         98        127         136

2006002                149         105        110        142         129

select 准考证号 from 高考信息表 where (数学+语文+英语+物理+化学) > 600

 

 

7.怎么把这样一个表

year month amount
1991 1 1.1
1991 2 1.2
1991 3 1.3
1991 4 1.4
1992 1 2.1
1992 2 2.2
1992 3 2.3
1992 4 2.4
查成这样一个结果
year m1 m2 m3 m4
1991 1.1 1.2 1.3 1.4
1992 2.1 2.2 2.3 2.4

答案一、

select year,(select amount from aaa m where month=1 and m.year=aaa.year) as m1,(select amount from aaa m where month=2 and m.year=aaa.year) as m2,(select amount from aaa m where month=3 and m.year=aaa.year) as m3,(select amount from aaa m where month=4 and m.year=aaa.year) as m4from aaa group by year

 

这个是ORACLE中做的:

select * from (select name, year b1, lead(year) over(partition by name order by year) b2, lead(m,2) over(partition by name order by year) b3,rank()over(partition by name order by year) rk from t) where rk=1;

 

 

精妙的SQL语句!
精妙SQL语句
作者:不详 发文时间:2003.05.29 10:55:05

说明:复制表(只复制结构, 源表名:a,  新表名:b)

SQL: select * into b from a where 1<>1

说明:拷贝表(拷贝数据,源表名:a 目标表名:b)

SQL: into b(a, b, c) select d,e,f from b;

说明:显示文章、提交人和最后回复时间 

SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

说明:外连接查询(表名1:a 表名2:b)

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

常用sql,面试题