Как использовать оператор JOIN в Oracle SQL? - PullRequest
0 голосов
/ 23 мая 2019

У меня есть следующая реляционная схема академиков:

ACADEMIC(acnum, deptnum*, famname, givename, initials, title)
PAPER(panum, title)
AUTHOR(panum*, acnum*)

Меня попросили вернуть акнум, имя, фамилию и общее количество статей, которые он / она написал для каждого академика.

Я не знаю, как установить связь между таблицами.

SELECT academic.ACNUM, academic.GIVENAME, academic.FAMNAME
FROM paper,
     author,
     academic
WHERE author.PANUM = paper.PANUM
GROUP BY academic.ACNUM, academic.GIVENAME, academic.FAMNAME, count(author.PANUM = paper.PANUM);

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Чтобы построить SQL (Синтаксис Oracle) для начинающих, выполните следующие действия:

Создание пустой схемы SQL

SELECT
FROM  
WHERE
GROUP BY

Заполните необходимые таблицы (с псевдонимами):

FROM paper    pap,
     author   aut,
     academic aca

Добавление объединений в разделе WHERE

FROM  paper    pap,
      author   aut,
      academic aca
WHERE aut.panum = pap.panum
AND   aut.acnum = aca.deptnum

Затем выберите нужные столбцы

SELECT aca.acnum
      ,aca.givename
      ,aca.famname
      ,count (pap.title) as number_titles
FROM   paper    pap
      ,author   aut
      ,academic aca
WHERE  aut.panum = pap.panum
AND    aut.acnum = aca.acnum

Если вы хотите что-то посчитать, добавьте GROUP BY

SELECT aca.acnum
      ,aca.givename
      ,aca.famname
      ,count (pap.title) as number_titles
FROM   paper    pap
      ,author   aut
      ,academic aca
WHERE  aut.panum = pap.panum
AND    aut.acnum = aca.acnum
GROUP  BY aca.acnum
         ,aca.givename
         ,aca.famname

А вот и мы. Выше - Oracle Syntas, ниже - ANSI SQL, который хорошо работает:

SELECT aca.acnum
      ,aca.givename
      ,aca.famname
      ,count (pap.title) as number_titles
FROM       paper    pap
INNER JOIN author   aut ON aut.panum = pap.panum
INNER JOIN academic aca ON aut.acnum = aca.acnum
GROUP  BY aca.acnum
         ,aca.givename
         ,aca.famname
0 голосов
/ 23 мая 2019

Это должно работать-

SELECT AC.ACNUM, AC.GIVENAME, AC.FAMNAME,COUNT(*)
FROM paper P
INNER JOIN author A ON P.panum = A.panum
INNER JOIN ACADEMIC AC ON A.acnum = AC.acnum
GROUP BY  AC.ACNUM, AC.GIVENAME, AC.FAMNAME
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...