Mam te dwie tabele.

 CREATE TABLE doctor(
    code_doctor char(5) primary key not null,
    name varchar(30) not null,
    gender char(1) check(gender='L' or gender='P'),
    address varchar(30),
    salary numeric
    )

CREATE TABLE schedule_doctor(
code_schedule char(5) primary key not null,
day varchar(10) CHECK (day IN ('monday', 'tuesday', 'wednesday', 'thursday', 'friday','saturday')),
shift varchar(10) CHECK (shift='morning' or shift='evening'),
code_doctor char(5) foreign key references doctor(code_doctor) on update cascade on delete
cascade
)

Jak wyświetlić nazwisko lekarza, dzień, zmianę w jednej tabeli?

-1
azziizz 18 grudzień 2019, 10:34
4
Polecam JOIN.
 – 
jarlh
18 grudzień 2019, 10:36

3 odpowiedzi

Możesz po prostu użyć dołączenia, aby użyć, aby uzyskać pożądane wyniki. -

Select Name, day, shift 
From doctor d inner join schedule_doctor sd on d.code_doctor  = sd.code_doctor 
1
Mukesh Arora 18 grudzień 2019, 10:45

Możesz użyć join, klauzula JOIN służy do łączenia wierszy z dwóch lub więcej tabel

SELECT d.NAME AS DoctorName,
   sd.DAY,
   sd.shift
FROM   doctor d
   INNER JOIN schedule_doctor sd
        ON  d.code_doctor = sd.code_doctor 

Lub Słowo kluczowe LEFT JOIN zwraca wszystkie rekordy z lewej tabeli doctor i dopasowane rekordy z prawej tabeli schedule_doctor. Wynik to NULL z prawej strony, jeśli nie ma dopasowania.

SELECT d.NAME AS DoctorName,
   sd.DAY,
   sd.shift
FROM   doctor d
   LEFT JOIN schedule_doctor sd
        ON  d.code_doctor = sd.code_doctor 
1
Reza Jenabi 18 grudzień 2019, 11:02

SQL Fiddle

Konfiguracja schematu MS SQL Server 2017 :

 CREATE TABLE doctor(
    code_doctor char(5) primary key not null,
    name varchar(30) not null,
    gender char(1) check(gender='L' or gender='P'),
    address varchar(30),
    salary numeric
    )

CREATE TABLE schedule_doctor(
code_schedule char(5) primary key not null,
day varchar(10) CHECK (day IN ('monday', 'tuesday', 'wednesday', 'thursday', 'friday','saturday')),
shift varchar(10) CHECK (shift='morning' or shift='evening'),
code_doctor char(5) foreign key references doctor(code_doctor) on update cascade on delete
cascade
)



INSERT INTO doctor (code_doctor,name,gender,address,salary)VALUES('SL','Sam LeBalnc','L','USA',25000),
                                                                 ('MG','Maria Gilles','P','Spain',35000)
INSERT INTO schedule_doctor (code_schedule,day,shift,code_doctor) VALUES ('SL1','monday','morning','SL'),
                                                 ('SL2','tuesday','evening','SL'),
                                                 ('MG1','tuesday','evening','MG'),
                                                 ('MG2','thursday','evening','MG')

Zapytanie 1 :

SELECT name, day, shift  FROM
doctor doc 
 LEFT JOIN schedule_doctor sd on doc.code_doctor  = sd.code_doctor 

Wyniki :

|         name |      day |   shift |
|--------------|----------|---------|
| Maria Gilles |  tuesday | evening |
| Maria Gilles | thursday | evening |
|  Sam LeBalnc |   monday | morning |
|  Sam LeBalnc |  tuesday | evening |

Możesz dowiedzieć się więcej o połączeniach SQL.

0
Amira Bedhiafi 18 grudzień 2019, 11:09