如何从笛卡尔积中返回属性?

时间:2018-03-23 04:24:06

标签: sql database oracle database-design

所以基本上我要回答的问题是:

"返回学术界“Mark Yee”撰写的论文。"

以下是我使用的数据库: https://ufile.io/72wph

Academics数据库的关系模式如下:

DEPARTMENT(deptnum,descrip,instname,deptname,state,postcode)

学术(acnum,deptnum *,famname,givename,姓名缩写,标题)

PAPER(panum,title)

AUTHOR(panum *,acnum *)

FIELD(fieldnum,id,title)

INTEREST(fieldnum *,acnum *,descrip)

关于Academics数据库的一些注释:

●学术部门属于一个机构(instname),通常有很多学者。一个 学术只适用于一个部门。

●研究论文(PAPER)通常由几位学者撰写,当然也经常是学者 写了几篇论文(作者)。

●研究领域(FIELD)经常吸引许多学者,学者可以对此感兴趣 (兴趣)在几个研究领域。

我知道我必须加入这两张桌子,但之后该怎么办呢?

我已经尝试过(这只列出了所有的PANUM')

SELECT PANUM
FROM ACADEMIC, AUTHOR   
WHERE FAMNAME LIKE '%Yee%' AND GIVENAME LIKE '%Mark%';

2 个答案:

答案 0 :(得分:1)

SELECT PA.PANUM, PA.TITLE
FROM ACADEMIC AC
INNER JOIN AUTHOR AU ON AC.ACNUM = AU.ACNUM
INNER JOIN PAPER PA ON PA.PANUM = AU.PANUM
WHERE AC.FAMNAME = 'Yee' AND AC.GIVENAME = 'Mark';

答案 1 :(得分:-1)

author包含2个外键acnun(对于学术用户)和panum(对于“纸张”),这些列也可以在其他表中找到。使用这些公共列以逻辑方式将表连接在一起。

select a.panum, d.famname, d.givename
from AUTHOR a
INNER JOIN ACADEMIC d ON a.acnum = d.acnum

在古代首次使用SQL时,常常使用from table1, table2,但这不再被视为最佳做法,即使您的老师希望您使用该语法,也不要。