iLecDBSQL 2

You might also like

You are on page 1of 31

Βάζεηο Γεδνκέλσλ

΢ύλζεηα SQL queries


΢ηαύξνο Βαιζακίδεο
svalsam@teiemt.gr

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 1


Αζάθεηα θαη Πιήξε Ολόκαηα
• Ονόμαηα Πεδίων: Σηελ SQL, ηα νλόκαηα ησλ πεδίσλ
(γλσξηζκάησλ) ζε θάζε ζρέζε είλαη ηνπηθά
• Ίδια Ονόμαηα: Επνκέλσο δύν πεδία πνπ αλήθνπλ ζε
δηαθνξεηηθέο ζρέζεηο (πίλαθεο) κπνξνύλ λα έρνπλ ην ίδην όλνκα,
ρσξίο απηό λα ζεκαίλεη όηη ζρεηίδνληαη
• Ππόθεμα: Όηαλ ζε κηα εληνιή SQL ππάξρεη πεξίπησζε λα
πξνθύςεη αζάθεηα κπνξνύκε λα ρξεζηκνπνηήζνπκε ζην όλνκα ηνπ
πεδίνπ σο πξόζεκα ην όλνκα ηεο ζρέζεο ζηελ νπνία αλήθεη
• Παπάδειγμα: Εάλ ππάξρεη πεδίν NAME ζηνλ πίλαθα
EMPLOYEE θαη πεδίν NAME ζηνλ πίλαθα DEPARTMENT θαη
εκθαλίδνληαη θαη νη δύν πίλαθεο ζε έλα εξώηεκα SQL, κπνξνύκε
λα γξάςνπκε:
SELECT EMPLOYEE.NAME, DEPARTMENT.NAME
FROM …
Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 2
Ψεπδώλπκα (Aliases) (1)
• Μία ζρέζε είλαη πηζαλό λα εκθαλίδεηαη πεξηζζόηεξεο από
κία θνξέο ζε έλα εξώηεκα SQL
• Ψεςδώνςμα: Σηελ πεξίπησζε απηή (αιιά θαη θάζε άιιε
πεξίπησζε) κπνξνύκε λα ρξεζηκνπνηήζνπκε ςεπδώλπκα
γηα ην όλνκα ηεο ζρέζεο
• Παπάδειγμα: Γηα θάζε εξγαδόκελν, λα βξεζεί ην όλνκα
ηνπ εξγαδνκέλνπ θαη ην όλνκα ηνπ πξντζηακέλνπ ηνπ
SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME
FROM EMPLOYEE E, EMPLOYEE S
WHERE E.SUPERSSN=S.SSN
Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 3
Ψεπδώλπκα (Aliases) (2)
• Παπάδειγμα: Γηα θάζε εξγαδόκελν, λα βξεζεί ην όλνκα ηνπ
εξγαδνκέλνπ θαη ην όλνκα ηνπ πξντζηακέλνπ ηνπ
SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME
FROM EMPLOYEE E, EMPLOYEE S
WHERE E.SUPERSSN=S.SSN
• Σα νλόκαηα E θαη S είλαη ςεπδώλπκα γηα ηε ζρέζε
EMPLOYEE
• Μπνξνύκε λα ζεσξήζνπκε ην E θαη ην S σο δύν
δηαθνξεηηθά (ππνζεηηθά) ανηίγπαθα ηεο ζρέζεο
EMPLOYEE
– Τν E αλαπαξηζηά ηελ νληόηεηα EMPLOYEE ζην ξόιν ηνπ
εξγαδόκελνπ
– Τν S αλαπαξηζηά ηελ νληόηεηα EMPLOYEE ζην ξόιν ηνπ
πξντζηακέλνπ

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 4


Αζαθή Ολόκαηα θαη Μεηνλνκαζία
• select ONOMA, ERGAZOMENOS.ONOMA, DIEYHYNSH
from ERGAZOMENOS, TMHMA
where TMHMA.ONOM = ‘Research’
and TMHMA.KOD_TMHM=ERGAZOMENOS.KOD_TMHM;

• select E.ONOMA, E.EPITHETO, S.ONOMA, S.EPITHETO


from ERGAZOMENOS E, ERGAZOMENOS S
where E.PROISTAMENOS = S.AT;

• select S.NAME as ONOMA


from STUDENT S, STUDENT T
where S.AM = T.AM;

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 5


Δξώηεκα ρσξίο ηνλ όξν WHERE (1)
• WHERE: Όηαλ ιείπεη ν όξνο WHERE από έλα
εξώηεκα, δελ νξίδεηαη θακία ζπλζήθε γηα ηελ επηινγή
ησλ εγγξαθώλ (πιεηάδσλ) ηεο ζρέζεο
• Επομένωρ: Επηιέγνληαη όιεο νη πιεηάδεο πνπ
παξάγνληαη από ηνλ όξν FROM
• WHERE TRUE: Οπζηαζηηθά είλαη ζα λα
ρξεζηκνπνηνύκε ηε ζπλζήθε WHERE TRUE
• Παξάδεηγκα: Να αλαθηεζνύλ νη αξηζκνί ηαπηόηεηαο
όισλ ησλ εξγαδνκέλσλ.
SELECT SSN
FROM EMPLOYEE;

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 6


Δξώηεκα ρσξίο ηνλ όξν WHERE (2)

• Καπηεζιανό Γινόμενο: Εάλ νξηζζνύλ 2 ή


πεξηζζόηεξεο ζρέζεηο ζηνλ όξν FROM θαη δελ
ππάξρεη όξνο WHERE, ην απνηέιεζκα ηνπ
εξσηήκαηνο ζα είλαη ην θαξηεζηαλό γηλόκελν
• Παπάδειγμα:
SELECT SSN, DNAME
FROM EMPLOYEE, DEPARTMENT;

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 7


Σν ζύκβνιν *
• Όλα ηα γνωπίζμαηα: Δειώλνληαο ην ζύκβνιν * ζηνλ όξν
SELECT δεηνύκε λα εκθαληζζνύλ όια ηα γλσξίζκαηα από ηηο
πιεηάδεο πνπ ζα επηιεγνύλ

• Παξαδείγκαηα:

Q1C: SELECT *
FROM EMPLOYEE
WHERE DNO=5 ;

Q1D: SELECT *
FROM EMPLOYEE, DEPARTMENT
WHERE DNAME='Research' AND
DNO=DNUMBER ;

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 8


Αζηεξίζθνο θαη
Δληνιή ρσξίο Where

• select name, am
from students;

• select *
from students;

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 9


DISTINCT
• Η SQL ζε αληίζεζε κε ην ζρεζηαθό κνληέιν δεδνκέλσλ δελ
επηβάιιεη λα είλαη θάζε ζρέζε έλα ζύλνιν:
• Δπνκέλσο επηηξέπεηαη λα εκθαλίδνληαη δηπιέο θαη γεληθόηεξα
πνιιαπιέο πιεηάδεο
• Δάλ ζέινπκε λα εμαιεηθζνύλ ηπρόλ δηπιέο πιεηάδεο ζην
απνηέιεζκα ελόο query κπνξνύκε λα ρξεζηκνπνηήζνπκε ηε ιέμε
θιεηδί DISTINCT
• Παξάδεηγκα: Η ιίζηα ησλ κηζζώλ όισλ ησλ εξγαδνκέλσλ:
Q11: SELECT SALARY
FROM EMPLOYEE;

Q11A: SELECT DISTINCT SALARY


FROM EMPLOYEE;
Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 10
΢πλνινζεσξεηηθέο Πξάμεηο
• Η SQL ππνζηεξίδεη βαζηθέο ζπλνινζεσξεηηθέο
πξάμεηο
– UNION: Η πξάμε ηεο έλσζεο
– INTERSECT: Τνκή ζπλόισλ
– MINUS: Δηαθνξά ζπλόισλ
• Τα αποηελέζμαηα ηων ππάξεων αςηών είναι ζύνολα
πλειάδων: Επνκέλσο δηπιέο πιεηάδεο εμαιείθνληαη !
• Σςμβαηόηηηα: Οη ζπλνινζεσξεηηθέο πξάμεηο
εθαξκόδνληαη κόλν κεηαμύ ζπκβαηώλ ζρέζεσλ
– Οη ζρέζεηο ζα πξέπεη λα έρνπλ ηα ίδηα γλσξίζκαηα θαη ηα
γλσξίζκαηα πξέπεη λα εκθαλίδνληαη κε ηελ ίδηα ζεηξά

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 11


΢ύλνια: Έλσζε
• select s.name as ONOMA
from student s
UNION
select t.name as ONOMA
from student t;
• Με δηπιόηππεο γξακκέο:
• select s.name as ONOMA
from student s
UNION ALL
select t.name as ONOMA
from student t;
Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 12
΢ύλνια: Αθαίξεζε
• select distinct s.name as ONOMA
from student s
minus
select t.name as ONOMA
from student t
where t.supervisor = '2345';

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 13


΢ύλνια: Σνκή
• select distinct s.name as ONOMA
from student s
intersect
select t.name as ONOMA
from student t
where t.supervisor = '2345';

• Πξνζνρή: CASE SENSITIVE


• Δπίζεο NOT IN, EXISTS, NOT EXISTS (ζει. 341)
Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 14
Παξάδεηγκα
• Παπάδειγμα: Λίζηα όισλ ησλ έξγσλ ζηα νπνία απαζρνιείηαη
εξγαδόκελνο κε επίζεην 'Smith' ή ην ηκήκα πνπ έρεη ηελ επζύλε
ηνπ έξγνπ έρεη δηεπζπληή κε επίζεην 'Smith‘.

(SELECT PNAME
FROM PROJECT, DEPARTMENT, EMPLOYEE
WHERE DNUM=DNUMBER AND MGRSSN=SSN AND
LNAME='Smith')
UNION
(SELECT PNAME
FROM PROJECT, WORKS_ON, EMPLOYEE
WHERE PNUMBER=PNO AND ESSN=SSN AND
LNAME='Smith')

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 15


Σηκέο NULL ζηελ SQL (1)
• Η SQL επηηξέπεη εξσηήκαηα πνπ ειέγρνπλ εάλ κηα ηηκή
είλαη NULL (δελ ππάξρεη, δελ πξνζδηνξίδεηαη ή δελ
εθαξκόδεηαη)
• Σημείωζη: Η ηηκή NULL δελ ηζνύηαη κε θακία άιιε
ηηκή. Μάιηζηα δύν ηηκέο NULL δελ ζεσξείηαη όηη είλαη
ίζεο, δειαδή ε ζπλζήθε NULL = NULL δδελ είλαη
αιεζήο
• IS (NOT) NULL: Γηα ηνλ έιεγρν ηηκώλ NULL ε SQL
ρξεζηκνπνηεί ηηο ζπλζήθεο IS NULL θαη IS NOT ΝULL

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 16


Σηκέο NULL ζηελ SQL (2)
• Παπάδειγμα: Αλάθηεζε ησλ νλνκάησλ ΄΄νισλ ησλ
εξγαδνκέλσλ πνπ δελ έρνπλ επηβιέπνληα
Q14: SELECT FNAME, LNAME
FROM EMPLOYEE
WHERE SUPERSSN IS NULL
• Σημείωζη: Δάλ ζε κηα ζπλζήθε ζπλέλσζεο ππάξρνπλ
πιεηάδεο κε ηηκέο NULL ζηα πεδία ζπλέλσζεο, νη
πιεηάδεο απηέο δελ ζα πεξηιακβάλνληαη ζην
απνηειεζκα.
– Θα εμεηάζνπκε ηελ πξάμε ηεο εμσηεξηθήο ζπλέλσζεο (outer
join) γηα απηέο ηηο πεξηπηώζεηο

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 17


Σηκέο NULL
• select * from ergazomenos
where proistamenos IS NULL;

• select * from ergazomenos


where proistamenos IS NOT NULL;

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 18


ΒETWEEN
• select E.SSN ONOMA
from EMPLOYEE E
where E.SALARY BETWEEN 1000 and 2000;

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 19


Ρεηά ζύλνια ηηκώλ
• Η SQL επηηξέπεη ζηνλ where ηε δήισζε ελόο
ζπγθεθξηκέλνπ ζπλόινπ ηηκώλ:
• Παξάδεηγκα: Αλάθηεζε ησλ αξηζκώλ ηαπηόηεηαο ησλ
εξγαδνκέλσλ πνπ απαζρνινύληαη ζε έλα ηνπιάρηζηνλ
από ηα έξγα κε θσδηθό 1, 2 ή 3.

Q13: SELECT DISTINCT ESSN


FROM WORKS_ON
WHERE PNO IN (1, 2, 3)

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 20


Γηάηαμε ησλ Απνηειεζκάησλ
• select t.name, t.am
from student t
order by t.am;

• select t.name, t.am


from student t
order by t.name ASC, t.am DESC;

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 21


Δκθσιεπκέλα Δξσηήκαηα (1)
• Εμθωλεςμένο Επώηημα: Έλα εξώηεκα SELECT ην
νπνίν δειώλεηαη ζηνλ όξν WHERE ελόο άιινπ
εξωτεπικού εξσηήκαηνο
• Παξάδεηγκα: Αλάθηεζε ησλ νλνκάησλ θαη ησλ
δηεπζύλζεσλ όισλ ησλ εξγαδνκέλσλ ηνπ ηκήκαηνο κε
όλνκα 'Research'.
SELECT FNAME, LNAME, ADDRESS
FROM EMPLOYEE
WHERE DNO IN (SELECT DNUMBER
FROM DEPARTMENT
WHERE DNAME='Research' )

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 22


Δκθσιεπκέλα Δξσηήκαηα (2)
• Παξάδεηγκα: Αλάθηεζε ησλ νλνκάησλ θαη ησλ δηεπζύλζεσλ όισλ ησλ
εξγαδνκέλσλ ηνπ ηκήκαηνο κε όλνκα 'Research‘
SELECT FNAME, LNAME, ADDRESS
FROM EMPLOYEE
WHERE DNO IN
(SELECT DNUMBER
FROM DEPARTMENT
WHERE DNAME='Research' ) ;
• Σν εκθσιεπκέλν εξώηεκα επηιέγεη ηνλ θσδηθό ηκήκαηνο κε όλνκα 'Research'
• Σν εμσηεξηθό εξώηεκα επηιέγεη κηα πιεηάδα από ηε ζρέζε EMPLOYEE εάλ
ν θσδηθόο ηκήκαηνο DNO ηεο πιεηάδαο αλήθεη ζην απνηέιεζκα ηνπ
εκθσιεπκέλνπ εξσηήκαηνο
• Ο ηειεζηήο ζύγθξηζεο IN ζπγθξίλεη κηα ηηκή v κε έλα ζύλνιν ή multi-set
ηηκώλ V, θαη επηζηξέθεη TRUE εάλ ην v είλαη έλα από ηα ζηνηρεία ηνπ V

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 23


Δκθσιεπκέλα Δξσηήκαηα(3)
• Γεληθά, κπνξνύκε λα έρνπκε εξσηήκαηα
SELECT κε πνιιά επίπεδα εκθσιηαζκνύ
• ΢ε πεξίπησζε ακθηζεκίαο θαηά ηελ αλαθνξά ζε
γλώξηζκα γηα ην νπνίν πνπ δελ πξνζδηνξίδεηαη
επαθξηβώο ε ζρέζε, ε αλαθνξά γίλεηαη ζην πην
εκθσιηαζκέλν επίπεδν ηνπ εξσηήκαηνο

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 24


Δκθσιεπκέλα Δξσηήκαηα SQL
• select t.name, t.am
from student t
where t.supervisor IN
( select p.am
from professor p
where p.name like '%Sha___'
);

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 25


΢πζρεηηζκέλα Δκθσιεπκέλα Δξσηήκαηα (1)
• Σςζσεηιζμένα Επωηήμαηα: Εάλ κηα ζπλζήθε ζηνλ όξν WHERE ελόο
εκθσιηαζκέλνπ εξσηήκαηνο αλαθέξεηαη ζε γλώξηζκα κηαο ζρέζεο πνπ
δειώλεηαη ζε εμσηεξηθό εξώηεκα, ηα δύν εξσηήκαηα ιέκε όηη είλαη ζπζρεηηζκέλα
(correlated)
• Σν απνηέιεζκα ηνπ εκθσιηαζκέλνπ εξσηήκαηνο πξνζδηνξίδεηαη γηα θάζε
πιεηάδα ηνπ εμσηεξηθνύ εξσηήκαηνο
• Η εζσηεξηθή ζρέζε απνηηκάηαη κηα θνξά γηα θάζε πιεηάδα ηεο εμσηεξηθήο
ζρέζεο (ινγηθή εξκελεία ηνπ απνηειέζκαηνο)
• Δξγαδόκελνη πνπ έρνπλ ζπλνλόκαην εμαξηώκελν:
select E.Onoma, E.Epitheto
from ergazomenos E
where E.AR_TAYT IN
( select E_ARTAYT
from EKSARTWMENOS K
where E.Onoma=K.ONOMA_EKSARTWMENOY
and E.FYLO = K.FYLO
);

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 26


΢πζρεηηζκέλα Δκθσιεπκέλα Δξσηήκαηα (2)
• Παπάδειγμα:
select E.Onoma, E.Epitheto
from ergazomenos E
where E.AR_TAYT IN
( select E_ARTAYT
from EKSARTWMENOS K
where E.Onoma=K.ONOMA_EKSARTWMENOY
);

• ΢ην παξάδεηγκα, ην εκθσιηαζκέλν εξώηεκα δίλεη έλα


δηαθνξεηηθά απνηέιεζκα γηα θάζε πιεηάδα ηνπ εμσηεξηθνύ
εξσηήκαηνο

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 27


΢πζρεηηζκέλα Δκθσιεπκέλα Δξσηήκαηα (3)
• Έλα εξώηεκα πνπ γξάθεηαη κε εκθσιηαζκέλνπο SELECT...
FROM... WHERE... όξνπο θαη πνπ ρξεζηκνπνηεί ηνπο ηειεζηέο
ζύγθξηζεο = ή IN κπνξεί πάληνηε λα γξαθεί σο εξώηεκα ρσξίο
εκθσιηαζκό.
• Παπάδειγμα: Τν πξνεγνύκελν εκθσιηαζκέλν κπνξεί λα γξαθεί
σο
SELECT E.Onoma, E.Epitheto
FROM Ergazomenos E, Eksartwmenos D
WHERE E. AR_TAYT=D.E_ARTAYT AND
E.Onoma=D.ONOMA_EKSARTWMENOY
• H αξρηθή SQL είρε θαη έλαλ ηειεζηή ζύγθξηζεο CONTAINS
γηα ζπζρεηηζκέλα εκθσιηαζκέλα εξσηήκαηα
• Ο ηειεζηήο απηόο αθαηξέζεθε από ηε γιώζζα, πηζαλόλ ιόγσ ηεο
δπζθνιίαο πινπνίεζήο ηνπ
Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 28
΢πζρεηηζκέλα Δκθσιεπκέλα Δξσηήκαηα
• Οι Διεςθςνηέρ με έναν ηοςλάσιζηον εξαπηώμενο:
select E.Onoma, E.Epitheto
from ergazomenos E
where exists
( select *
from EKSARTWMENOS K
where E.AR_TAYT=K.E_ARTAYT
)
and
exists
( select *
from TMHMA T
where T.DIEYTHYNTHS=E.AR_TAYT
);
Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 29
Η ζπλάξηεζε EXISTS
• EXISTS: Η ζπλάξηεζε EXISTS ειέγρεη εάλ ην απνηέιεζκα ελόο
ζπζρεηηζκέλνπ εκθσιεπκέλνπ εξσηήκαηνο είλαη θελό (δελ
πεξηέρεη πιεηάδεο) ή όρη
• Μπνξνύκε λα δηαηππώζνπκε ην εξώηεκα γηα εξγαδόκελνπο κε
ζπλνλόκαην εμαξηώκελν κε ρξήζε ηεο ζπλάξηεζεο EXISTS:
SELECT Onoma, Epitheto
FROM ERGAZOMENOS
WHERE EXISTS
(SELECT *
FROM EKSARTWMENOS
WHERE AR_TAYT=D.E_ARTAYT
AND E.Onoma=D.ONOMA_EKSARTWMENOY);

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 30


Η ζπλάξηεζε EXISTS (2)
• Παξάδεηγκα: Αλάθηεζε ησλ νλνκάησλ ησλ εξγαδνκέλσλ πνπ
δελ έρνπλ εμαξηώκελα κέιε
SELECT Onoma, Epitheto
FROM ERGAZOMENOS
WHERE NOT EXISTS
(SELECT *
FROM EKSARTWMENOS
WHERE AR_TAYT=D.E_ARTAYT);
Σν ζπζρεηηζκέλν εκθσιηαζκέλν εξώηεκα αλαθηά όιεο ηηο
πιεηάδεο ηεο ζρέζεο EKSARTWMENOS πνπ ζρεηίδνληαη κε
κία πιεηάδα ηεο ζρέζεο ERGAZOMENOS
• Η ζπλάξηεζε EXISTS είλαη απαξαίηεηε γηα ηελ εθθξαζηηθή
ηζρύ ηεο γιώζζαο SQL

Βάζεηο Γεδνκέλσλ SQL - Μέξνο Γεύηεξν 31

You might also like