Łączenie tabel SQL

0

Witam,

Mam za zadania stworzyć łączenie tabel do poniższego zadania.
Skonstruować zapytanie, które pokaże nauczycieli, którzy nie posiadają telefonu i prowadzą zajęcia po godzinie 14:00. Tabela ma zawierać numer identyfikacyjny, imię, nazwisko i telefon nauczyciela oraz godziny rozpoczęcia zajęć
Stworzyłem zapytanie do tego zadania, ale mam dodatkowo w nim złączyć tabelę, bardzo prosiłbym o pomoc i wytłumaczenie.

SELECT Staff.Staff_Id, Staff.First_Name, Staff.Last_Name, Staff.Phone
FROM Staff, Classe
WHERE Staff.Phone is null and Classe.Start_Time = '14:00'

0

Użyj JOIN.
Nie znamy struktury bazy więc trudno więcej podpowiedzieć.

1

Czyli musisz użyć instrukcji JOIN, ale wtedy musisz mieć w tych tabelach pola łączące obydwie tabele. Pokaż strukturę tabel to będzie można coś więcej powiedzieć.

SELECT S.Staff_Id, S.First_Name, S.Last_Name, S.Phone
FROM Staff S
INNER JOIN Classe C ON C.Staff_Id=S.Staff_Id
WHERE S.Phone is null and C.Start_Time = '14:00'

warunek po ON podałem przykładowy, bo nie znam struktury tych tabel. Ogólnie chodzi o to, że wyciągasz rekordy które mają "wspólne" jakieś pole dla dwóch zbiorów, . Przyjrzyj się temu, tu jest ładnie wyjaśnione http://www.w3schools.com/sql/sql_join_inner.asp

0

Pokaż strukturę obu tabel to będzie łatwiej Ci pomóc.

0

Schemat bazy wygląda następująco:
Staff
Staff_Id - klucz główny
First_Name
Last_Name
Address
City
State
Zip
Phone
Date_Hired
Salary

Classe

Class_Id - klucz główny
Staff_Id - klucz obcy
Sub_Id - klucz obcy
Room_Id - klucz obcy
Start_Time
Duration

Student_Classe

SC_Id - klucz gł
Class_Id - klucz obcy
Stud_Id - klucz obcy
Grade

Subject
Sub_Id - klucz gł
Sub_Code
Sub_Name
Description

ClassRoom
Room_Id - klucz gł
Room_Code
Description

Student
Stud_Id - klucz gł
First_Name
Last_Name
Addres
City
State
Zip
Phone


Połączenia tabel:

S.Staff_Id = C.Staff_Id
Subject.Sub_Id = Classe.Sub_Id
ClassRoom.Room_Id = Classe.Room_Id
Student.Stud_Id = Student_Classe.Stud_Id
Classe.Class_Id = Student_Classe.Class_Id

Mam do tej bazy klika zadań i mam je rozpisane, ale dodatkowo wszystkie muszę właśnie złączyć za pomocą poleceń do łączenia tabel. Patrzyłem na wiele przykładów, ale nie potrafię przenieść go na moje zadanie.

1

czyli powinno zadziałać to co ci wcześniej podrzuciłem

0

Mam jeszcze takie pytania: czy jeśli będę mieć więcej tabel do złączenia to zawsze struktura łączenia jest taka jak poniżej?
Jak wygląda sprawa, kiedy mam tabele: Classe, Subject, Student czy za każdym razem mam do nich stosować skróty od pierwszej litery nazwy tabeli?

FROM tabela1
INNER JOIN tabela 2
ON warunek
INNER JOIN tabela 3
ON warunek
itd..

1

To zależy od typu złączenia ale mniej więcej jest tak jak piszesz
title

0

Okej, dziękuję Wam bardzo za pomoc. Spróbuję zrobić tak pozostałe zadania do tej bazy danych.
Byłaby taka możliwość, jakbym skończył pozostałe zadania i wkleił tutaj do sprawdzenia?

0
a_s_f napisał(a):

Czyli musisz użyć instrukcji JOIN, ale wtedy musisz mieć w tych tabelach pola łączące obydwie tabele. Pokaż strukturę tabel to będzie można coś więcej powiedzieć.

SELECT S.Staff_Id, S.First_Name, S.Last_Name, S.Phone
FROM Staff S
INNER JOIN Classe C ON C.Staff_Id=S.Staff_Id
WHERE S.Phone is null and C.Start_Time = '14:00'

warunek po ON podałem przykładowy, bo nie znam struktury tych tabel. Ogólnie chodzi o to, że wyciągasz rekordy które mają "wspólne" jakieś pole dla dwóch zbiorów, . Przyjrzyj się temu, tu jest ładnie wyjaśnione http://www.w3schools.com/sql/sql_join_inner.asp

Zrobiłem trzy przykłady, ale nie wiem czy tak jest prawidłowo. Bardzo bym prosił o sprawdzenie 1,2 i 3 zadania.

1.Powinno wyświetlić zajęcia, których nie ma w salach 1,2,3.


SELECT      C.Room_Id,C.Sub_Id,S.Sub_Name,C.Start_Time,C.Duration
FROM        Classe C
INNER JOIN  Subject S ON S.Subject.Sub_Id = Classe.Sub_Id

WHERE           Classe.Room_Id !=1 AND
                Classe.Room_Id !=2 AND 
                Classe.Room_Id !=3 
  1. Uczniowie uczęszczający na zajęcia w salach 1 lub 2.
SELECT      Student.Stud_Id,Student.First_Name,Student.Last_Name,Classe.Room_Id
FROM        Classe Cl,
INNER JOIN  Subject S ON S.Sub_Id = Cl.Sub_Id
INNER JOIN  Student St ON Cl.Class_Id = Student_Classe.Class_Id
WHERE       Classe.Room_Id in (1,2);
  1. Pokazać ma imię, nazwisko, miejsce zamieszkania studentów spoza miasta Kraków, którzy mają przynajmniej ocenę 3 i chodzą na zajęcia, które trwają dłużej niż 60 minut.

SELECT  
                Student.First_Name,
                Student.Last_Name,
                Student.City,

                Student.City,
                Student_Classe.Grade,
                Classe.Duration
FROM        Student_Classe St_Cl,
INNER JOIN  Student St ON  .....
INNER JOIN      Classe Cl ON ...........
INNER JOIN      Subject S ON ...........
WHERE       Student.City!='Kraków' AND
                Student_Classe.Grade>=3 AND
                Classe.Duration>60
ORDER BY    Student.Last_Name desc


Mógłby ktoś sprawdzić i wytłumaczyć na przykładzie 3. zapytania jak łączyć tabelę, bo przy większej ilości łączeń tabel mam już problem jakie warunki wpisać po słowie "ON".

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0