面试题:多对多的关系

初学者进,大牛飘过

假设有一个学生选课的业务模型


请画出可能涉及到的数据库表的属性

User

ID NAME SEX
1 张三 1
2 lisi         1
3 王五 0
4 赵六 1

Course

ID NAME
1 java
2 php
3 c++
4 c
5 p
6 a

Score(关系表)

ID UID CID
1 1 1
2 1 2
3 2 3
4 2 2
5 3 3
6 4 2
7 1 3

A:根据学员ID,查询该学员所选的课程信息

这个简单,飘过

B:课程按所选学员人数由高到低排名,列出排名1-2的课程信息

一定一定记住:下面是oracle数据库(rownum关键字)

SELECT
t.*
FROM
(
SELECT
rownum rn,
s.*
FROM
(
SELECT
c. NAME,
count(c. NAME)
FROM
USER u
JOIN Score s ON u.ID = s.UID
JOIN Course c ON s.CID = c.ID
GROUP BY
c. NAME
ORDER BY
count(c. NAME) DESC
) s
WHERE
rownum <= 2
) t
WHERE
rn >= 1
下面是mysql数据库(limit关键字)

举例说明limit:

1.取前5条数据

select * from t limit 0,5 或select * from t limt 5

2.取第11条数据到第15条数据

select * from t limit 10,5

以上是例子

SELECT
c. NAME,
count(c. NAME)
FROM
USER u
JOIN Score s ON u.ID = s.UID
JOIN Course c ON s.CID = c.ID
GROUP BY
c. NAME
ORDER BY
count(c. NAME) DESC
LIMIT 0,2
 C:列出所有选择2门课以上的学生信息,由高到低排序

SELECT
u. NAME,
count(c. NAME)
FROM
USER u
JOIN Score s ON u.ID = s.UID
JOIN Course c ON s.CID = c.ID
GROUP BY
u. NAME
HAVING
count(c. NAME) >= 2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值