今天笔试遇到的数据库题目,大家来看看,怎么做?
有student和class两个学生信息和班级信息的表,写出SQL查询语句,求各班中年龄最小的十位同学,并从小排到大。
有student和class两个学生信息和班级信息的表,写出SQL查询语句,求各班中年龄最小的十位同学,并从小排到大。
解决方案 »
- 怎么打印数字时候会显示正方形???那里错了?怎么修改?
- 谁有asf的音频插件啊!
- java jdbc操作mysql数据库
- java基础题关于StringBuffer,求教
- 如何模拟ActionForm
- 当DataInputStream 的readline方法不可用,怎样一行行读取数据?
- 不用API只用JAVA能不能容易写出那些原用API的程序?
- 有没有大神帮小弟看一下的
- JFileChooser在Applet中的问题!
- 谁能告诉我:wizards\archive Builder建立的包是如何用呢?
- log4j 远程log 如何 配置
- FrameView窗体下,Jpanel中的图像为什么随着窗体的改变而消失,如何解决?急
mysql 用limit
where b.id=a.班级ID
order by b.age
sqlserver select ... from (
select ... from student a,class b
where b.id=a.班级ID
order by b.age
)a where rownum <=10oracle
mysql> select * from class;
+------+-----------+
| id | name |
+------+-----------+
| 1 | 信计052班 |
| 2 | 信计051班 |
+------+-----------+
2 rows in set (0.00 sec)mysql> select * from student;
+------+------+------+------+
| id | name | age | cid |
+------+------+------+------+
| 1 | 张1 | 18 | 1 |
| 2 | 张2 | 20 | 1 |
| 3 | 张3 | 17 | 1 |
| 4 | 张4 | 18 | 1 |
| 5 | 张5 | 16 | 1 |
| 6 | 张6 | 19 | 1 |
| 7 | 张7 | 15 | 1 |
| 8 | 刘1 | 16 | 2 |
| 9 | 刘2 | 19 | 2 |
| 10 | 刘3 | 21 | 2 |
| 11 | 刘4 | 20 | 2 |
| 12 | 刘5 | 15 | 2 |
| 13 | 刘6 | 17 | 2 |
| 14 | 刘7 | 20 | 2 |
| 15 | 刘8 | 21 | 2 |
+------+------+------+------+
15 rows in set (0.00 sec)
mysql> select s.name,s.age,c.name
-> from student s,class c
-> where s.cid=c.id and
-> 6>=(select count(*) from student st
-> where st.age<=s.age and st.cid=c.id)
-> order by c.id,s.age;
+------+------+-----------+
| name | age | name |
+------+------+-----------+
| 张7 | 15 | 信计052班 |
| 张5 | 16 | 信计052班 |
| 张3 | 17 | 信计052班 |
| 张1 | 18 | 信计052班 |
| 张4 | 18 | 信计052班 |
| 张6 | 19 | 信计052班 |
| 刘5 | 15 | 信计051班 |
| 刘1 | 16 | 信计051班 |
| 刘6 | 17 | 信计051班 |
| 刘2 | 19 | 信计051班 |
| 刘4 | 20 | 信计051班 |
| 刘7 | 20 | 信计051班 |
+------+------+-----------+
12 rows in set (0.00 sec)mysql数据库,由于测试数据没那么多,这里只算了前六位同学。
mysql> select s.name,s.age,c.name,
-> (select count(*) from student
-> where cid=s.cid and age<=s.age) rank
-> from student s,class c
-> where s.cid=c.id and
-> 6>=(select count(*) from student st
-> where st.age<=s.age and st.cid=c.id)
-> order by c.id,s.age;
+------+------+-----------+------+
| name | age | name | rank |
+------+------+-----------+------+
| 张7 | 15 | 信计052班 | 1 |
| 张5 | 16 | 信计052班 | 2 |
| 张3 | 17 | 信计052班 | 3 |
| 张1 | 18 | 信计052班 | 5 |
| 张4 | 18 | 信计052班 | 5 |
| 张6 | 19 | 信计052班 | 6 |
| 刘5 | 15 | 信计051班 | 1 |
| 刘1 | 16 | 信计051班 | 2 |
| 刘6 | 17 | 信计051班 | 3 |
| 刘2 | 19 | 信计051班 | 4 |
| 刘4 | 20 | 信计051班 | 6 |
| 刘7 | 20 | 信计051班 | 6 |
+------+------+-----------+------+
12 rows in set (0.00 sec)
where st.age<=s.age and st.cid=c.id)
这句话怎么确定最小的前6位呢?st.age<=s.age 表示自己跟自己比较吗?怎么比较的呢?谢谢!
哥们 你信计的??哈哈!!!me too
where st.age <=s.age and st.cid=c.id)
st是student表的别名,s也是student表的别名。
这部分语句表示在student表中比s表中某一条记录的age小的记录的数量。
mysql> select s.name,s.age,c.name,
-> (select count(*)+1 from student
-> where cid=s.cid and age<s.age) rank
-> from student s,class c
-> where s.cid=c.id and
-> 6>=(select count(*) from student st
-> where st.age<=s.age and st.cid=c.id)
-> order by c.id,s.age;
+------+------+-----------+------+
| name | age | name | rank |
+------+------+-----------+------+
| 张7 | 15 | 信计052班 | 1 |
| 张5 | 16 | 信计052班 | 2 |
| 张3 | 17 | 信计052班 | 3 |
| 张1 | 18 | 信计052班 | 4 |
| 张4 | 18 | 信计052班 | 4 |
| 张6 | 19 | 信计052班 | 6 |
| 刘5 | 15 | 信计051班 | 1 |
| 刘1 | 16 | 信计051班 | 2 |
| 刘6 | 17 | 信计051班 | 3 |
| 刘2 | 19 | 信计051班 | 4 |
| 刘4 | 20 | 信计051班 | 5 |
| 刘7 | 20 | 信计051班 | 5 |
+------+------+-----------+------+
12 rows in set (0.00 sec)修改一下。
mysql> select s.name,s.age,c.name,
-> (select count(*)+1 from student
-> where cid=s.cid and age<s.age) rank
-> from student s,class c
-> where s.cid=c.id and
-> 6>=(select count(*) from student st
-> where st.age<=s.age and st.cid=c.id)
-> order by c.id,s.age;
我有点糊涂了,理一理逻辑:原表,S表,c表 ,st表,
可不可以不要st表,换成原表跟s表比较呢?如下:
where s.cid=c.id and
6>=(select count(*) from student
where age<=s.age and cid=c.id)
where class.sname=student.sname and student.id in//数据库的链接
(select top 10 * from student//去前10
where id in
(select * from student group by sage)//排序
)