You are on page 1of 39

Η Γλώσσα SQL – Προχωρημένες Γνώσεις Ι

Δαμιανός Χατζηαντωνίου (damianos@aueb.gr)


Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
Θέματα
 Βασική Μορφή SQL Ερωτήματος
 Ομαδοποίηση, Συνάθροιση (Grouping, Aggregation)
 Εμφωλευμένη SQL

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 2


Βασική Μορφή Ερωτήματος SQL
Παράδειγμα Χρήσης (Ο-Σ)

Name Salary
SSN
DeptCode
Works-in Name

Sex Employee Department


Managed-by
Budget

Assigned Hours

Id Location
Project
Description

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 4


Παράδειγμα Χρήσης (Σχεσιακό)

Employee (SSN, Name, Salary, Sex, DeptCode)

Department (DeptCode, Name, Budget, MgrSSN)

Assigned (SSN, Id, Hours)

Project (Id, Description, Location)

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 5


Βασική μορφή SQL statement (1)
SELECT A1,A2, …,An
FROM T1, T2, …, Tk
WHERE condition

 Επέλεξε τις στήλες A1,A2, …,An


Από τους πίνακες T1, T2, …, Tk
Για τις γραμμές που ικανοποιούν τη condition

π A1, A2, .., An (σ condition (T1 x T2 x … Tk))

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 6


Βασική μορφή SQL statement (2)
SELECT A1,A2, …,An
FROM T1, T2, …, Tk
WHERE condition
για κάθε γραμμή t1 στο Τ1 {
για κάθε γραμμή t2 στο Τ2 {
...
if condition(t1, t2, …, tk) is true
print (A1, A2, …, An)
...
}
}

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 7


SELECT (1)

 Δείξε όλα τα στοιχεία


των υπαλλήλων:

select SSN, Name, Sex, Salary, DeptCode


from Employee

ή
select *
from Employee

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 8


SELECT (2)
 Δείξε το όνομα (κεφαλαία) και το μισθό (σε €):
select UCASE(Name), Salary * 1.18
from Employee

Η SQL έχει πλήθος συναρτήσεων για χειρισμό text/number/date


τύπο δεδομένων. Μπορούν να υπάρχουν όπου αναφέρεται μία
στήλη
 Δείξε όλα τα διακριτά (distinct) ονόματα υπαλλήλων:
select distinct Name
from Employee

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 9


WHERE

 Δείξε το social security


number (SSN) όλων των
γυναικών με μισθό άνω των 50,000:
select SSN
from Employee
where salary>50000 AND sex=‘f’

 Η συνθήκη του WHERE περιέχει παρενθέσεις, AND, OR,


NOT, στήλες, νούμερα, text, και SQL συναρτήσεις

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 10


Σύζευξη (Joins) (1)

 Δείξε το social security


number (SSN) όλων των
υπαλλήλων μαζί με το SSN του/της προϊσταμένης (MgrSSN):
select SSN, MgrSSN
from Employee, Department
where Employee.DeptCode = Department.DeptCode

Aυτό πολλές φορές καλείται join (σύζευξη) πινάκων

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 11


Σύζευξη (Joins) (1)
 Δείξε για κάθε υπάλληλο το SSN του και το όνομα του
τμήματος στο οποίο εργάζεται:
select Employee.SSN, Department.Name
from Employee, Department
where Employee.DeptCode=Department.DeptCode
Μετονομασία πινάκων (aliases)

select E.SSN, D.Name


from Employee as E, Department as D
where E.DeptCode=D.DeptCode

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 12


Σύζευξη (Joins) (2)
 Δείξε το όνομα και το μισθό όλων των υπαλλήλων που
συμμετέχουν σε κάποιο project στη Βοστώνη:
select distinct Name, Salary
from Employee as E, Assigned as A, Project as P
where E.SSN=A.SSN AND A.ID=P.ID AND
Location LIKE ‘%Boston%’

Το LIKE χρησιμοποιείται για


string matching (με wildcards)

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 13


Self-join
 Για κάθε τμήμα D, για κάθε άλλο τμήμα G που έχει
budget μεγαλύτερο από αυτό του D, δείξε μία γραμμή
με τον κωδικό του D και τον κωδικό του G:

select D.DeptCode, G.DeptCode


from Department as D, Department as G
where D.Budget < G.Budget

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 14


Outer Join (1)
 Τα JOINS που έχουμε δει μέχρι τώρα καλούνται inner
joins: στο αποτέλεσμα περνάνε μόνο οι γραμμές των
δύο πινάκων που ταιριάζουν. Κάποιες φορές θέλουμε
να περάσουν όλες οι γραμμές, και αυτές που
ταιριάζουν και αυτές που δεν ταιριάζουν, και όσες δεν
ταιριάζουν να συμπληρωθούν με null (αριστερά ή
δεξία)
 FULL / LEFT / RIGHT OUTER JOINS

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 15


Outer Join (2)
 Για κάθε υπάλληλο, δείξε το SSN του και το όνομα του
τμήματος στο οποίο εργάζεται:
SELECT Employee.SSN, Department.Name
FROM Employee LEFT JOIN Department
ON Employee.DeptCode=Department.DeptCode

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 16


Order By (1)
 Δείξε το SSN και το μισθό όλων των υπαλλήλων
σε αύξουσα (ascending) σειρά μισθού:

select SSN, Salary


from Employee
order by Salary asc

asc/desc for
ascending/descending order

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 17


Order By (2)
 Δείξε το SSN, τον κωδικό τμήματος και το μισθό
όλων των υπαλλήλων σε αύξουσα (ascending)
σειρά κωδικού τμήματος και σε δεύτερο επίπεδο
σε φθίνουσα (descending) σειρά μισθού:

select SSN, DeptCode, Salary


from Employee
order by DeptCode asc,
Salary desc

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 18


Minus
 Δείξε το SSN των υπαλλήλων που δεν είναι
προϊστάμενοι

(select SSN
from Employee)
minus
(select MgrSSN
from Department)

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 19


Ομαδοποίηση, Συνάθροιση
Συνάθροιση
 Η εύρεση ενός «χαρακτηριστικού» μίας ομάδας δεδομέ-
νων είναι απαραίτητη προϋπόθεση στη λήψη αποφάσεων
 ο μέσος μισθός των γυναικών υπαλλήλων (ομάδα: γυναίκες), το
σύνολο των πωλήσεων στην περιοχή «Μαρούσι» (ομάδα:
πωλήσεις στο «Μαρούσι»), ο αριθμός των επισκέψεων σε μία
ιστοσελίδα Χ στις 22/9/20 (ομάδα: επισκέψεις στη Χ στις 22/9/20)
 Συναθροιστικές συναρτήσεις: στατιστικές συναρτήσεις
(π.χ. sum, count, average, min, max, standard deviation)
επί των τιμών μίας στήλης

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 21


Ομαδοποίηση
 Ομαδοποίηση: η δυνατότητα μας (με ποιον τρόπο
δηλαδή) να δημιουργούμε ομάδες δεδομένων – με
σκοπό τον υπολογισμό συναθροιστικών συναρτήσεων
επί αυτών και σύγκριση μεταξύ τους
 γυναίκες / άντρες υπάλληλοι (ομαδοποίηση υπαλλήλων με
βάση το φύλο), πωλήσεις περιοχής Χ (ομαδοποίηση των
πωλήσεων με βάση την περιοχή), επισκέψεις στην ιστοσελίδα
Χ την ημέρα Υ (ομαδοποίηση των επισκέψεων με βάση την
ιστοσελίδα και την ημέρα)
 Η βασική ιδέα πίσω από την επιχειρηματική ευφυΐα

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 22


Συνάθροιση / Ομαδοποίηση σε SQL

SELECT <grouping-columns>, <aggregate-functions>


FROM T1, T2, …, Tk
WHERE condition1
GROUP BY <grouping-columns>
HAVING condition2

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 23


Συνάθροιση – SQL
 Βρες τον ελάχιστο, μέγιστο και μέσο μισθό του
τμήματος με κωδικό 25:

select min(Salary),max(Salary),avg(Salary)
from Employee
where DeptCode=25

Aggregate functions: min, max, avg, sum, count


Δεν μπορούν να εμφανίζονται άλλες στήλες των
πινάκων στο SELECT – γιατί;

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 24


Ομαδοποίηση – Group By
 Δείξε το μέσο μισθό των γυναικών, ανά τμήμα
select DeptCode, avg(salary)
from Employee
where sex = ‘f’
group by DeptCode
 Δείξε το μέσο μισθό ανά τμήμα και φύλο:
select DeptCode, Sex, avg(salary)
from Employee
group by DeptCode, Sex

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 25


Joins + Group By
 Για κάθε κωδικό τμήματος, εμφάνισε το σύνολο των
ωρών που οι υπάλληλοί τους απασχολούνται στα
projects:
select DeptCode, sum(Hours)
from Employee as E, Assigned as A
where E.SSN=A.SSN
group by E.DeptCode

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 26


Having
 Εμφάνισε το μέσο μισθό ανά τμήμα, αλλά μόνο αν το
τμήμα έχει περισσότερους από 3 εργαζόμενους:
select DeptCode, avg(salary)
from Employee
group by DeptCode
having count(*) > 3

 Το having είναι μία συνθήκη για τις ομάδες (groups) που


δημιουργούνται, όπως το where για τις γραμμές ενός πίνακα.
Συνεπώς, η συνθήκη μπορεί να αναφέρει συναθροιστικές
συναρτήσεις και τα γνωρίσματα ομαδοποίησης

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 27


Σύνθετη Ομαδοποίηση (1)
 Εμφάνισε για κάθε υπάλληλο το μισθό του ως κλάσμα
του μέσου μισθού του τμήματος στο οποίο ανήκει:

create view V(DeptCode,avgSalary) as


select DeptCode, avg(Salary)
from Employee
group by DeptCode

select SSN, (Salary/avgSalary)


from Employee E, V
where E.DeptCode=V.DeptCode

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 28


Εμφώλευση SQL στο FROM
 Εμφάνισε τα SSN των υπαλλήλων οι οποίοι εργάζονται
σε κάποιο project περισσότερες ώρες από τη μέση
διάρκεια ωρών απασχόλης εργαζόμενου σε project:
select distinct SSN
from Assigned,
(select avg(Hours) as avgHours
from Assigned) as Temp
where Hours > Temp.avgHours

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 29


Σύνθετη Ομαδοποίηση (2)
 Για κάθε τμήμα, εμφάνισε το μέσο μισθό των γυναικών
και το μέσο μισθό των ανδρών – σε δύο στήλες
select Temp1.DeptCode, MaleAvg, FemaleAvg
from (select DeptCode, avg(Salary) as MaleAvg
from Employee
where sex=‘m’
group by DeptCode) as Temp1,
(select DeptCode, avg(Salary) as FemaleAvg
from Employee
where sex=‘f’
group by DeptCode) as Temp2
where Temp1.DeptCode = Temp2.DeptCode

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 30


Union
 Δείξε το SSN των υπαλλήλων με μισθό άνω των 80,000
και το SSN των υπαλλήλων που εργάζονται
περισσότερες από 30 ώρες την εβδομάδα:
(select SSN
from Employee
where salary > 80000)
union
(select SSN
from Assigned
group by SSN
having sum(Hours) > 30 )

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 31


Εμφωλευμένη SQL
Υποερωτήματα – Βασική Ιδέα
 SELECT… FROM… WHERE
 Επιλέγουμε τις γραμμές που ικανοποιούν τη συνθήκη θ
 If θ(r) is true, then select the row r
 Μέχρι τώρα η συνθήκη περιείχε στήλες του πίνακα
 Salary > 60000 AND Sex = ‘f’
 Θα μπορούσε να είναι πιο πολύπλοκη, και να ενέπλεκε
και σύνολα με κάποια συνθήκη (∈, ∉, κλπ)
 Salary > 60000 AND DeptCode in {132, 451}
 Salary greater than the salaries of all managers ?
 Salary > all (SELECT … FROM … WHERE)

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 33


Ένα Απλό Παράδειγμα
 Εμφάνισε το SSN και το όνομα όλων των υπαλλήλων
οι οποίοι εργάζονται σε τμήμα με budget > 500,000
select SSN, Name
from Employee
where DeptCode in (select DeptCode
from Department
where Budget > 500000 )

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 34


Γενική Μορφή

SELECT
outer query
FROM
WHERE … (SELECT
FROM
WHERE) inner query

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 35


Συντακτικό

• WHERE <value> in / not in A


• WHERE <value> < <= some A
> >= A is a select-from-where
= <> statement.
• WHERE <value> < <= all A
> >=
= <>

• WHERE exists/ not exists A


• WHERE unique/ not unique A

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 36


Παράδειγμα - All
 Εμφάνισε το SSN των υπαλλήλων που έχουν μισθό
μεγαλύτερο από όλους τους προϊσταμένους:
select SSN
from Employee
where salary > all (select salary
from Employee
where SSN in (select MgrSSN
from Department))

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 37


Συσχετισμένα Υποερωτήματα
 Βρες για κάθε τμήμα το SSN του υπαλλήλου με το
μεγαλύτερο μισθό
correlation
select SSN
from Employee as E1
where Salary > all (select Salary
from Employee as E2
where E1.SSN <> E2.SSN and
E1.DeptCode=E2.DeptCode
)

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 38


SQL Συναρτήσεις
 Εκτός από τις συναρτήσεις συνάθροισης υπάρχουν και
άλλες συναρτήσεις (που εξαρτώνται από το σύστημα)

 datatype conversion functions


 date functions
 mathematical functions
 row aggregate functions
 string functions
 system functions
 text and image functions

Διαχείριση Δεδομένων, Επιχειρηματική Ευφυϊα και Οπτικοποίηση 39

You might also like