ΚΕΝΤΡΟ ΠΛΗ.ΝΕ.Τ. Ν. ΦΛΩΡΙΝΑΣ
Η Δομημένη Γλώσσα Ερωτημάτων SQL
Μάθημα 1 - Τι Είναι η SQLΗ SQL αποτελεί μια στάνταρτ γλώσσα του ANSI για να μπορούμε να έχουμε πρόσβαση σε βάσεις δεδομένων.
Η SQL αποτελεί ένα στάνταρτ του ANSI (American National Standards Institute) για να μπορούμε να έχουμε πρόσβαση σε συστήματα βάσεων δεδομένων. Οι εντολές της SQL χρησιμοποιούνται για να ανακτήσουμε (retrieve) και να ενημερώσουμε (update) δεδομένα σε μια βάση δεδομένων (database).
Η SQL συνεργάζεται με προγράμματα βάσεων δεδομένων όπως είναι τα εξής : Access, Informix, Microsoft SQL Server, Oracle, Sybase και πολλά άλλα.
Μάθημα 2 - Οι Πίνακες Βάσεων Δεδομένων (Database Tables)
Οι βάσεις δεδομένων (databases) περιέχουν αντικείμενα (objects) που ονομάζονται Πίνακες (Tables). Οι Εγγραφές (Records) των δεδομένων απο-θηκεύονται σ’ αυτούς τους πίνακες. Οι Πίνακες αναγνωρίζονται με τα ονόματά τους, όπως "Persons", "Orders", "Suppliers" κ.ά.
Οι Πίνακες περιέχουν Στήλες (Columns) και Γραμμές (Rows) με δε-δομένα. Οι Γραμμές (Rows) περιέχουν εγγραφές (records), όπως μία εγγραφή για κάθε άτομο. Οι Στήλες (Columns) περιέχουν δεδομένα, όπως First Name, Last Name, Address και City.
Ακολουθεί ένα παράδειγμα ενός Πίνακα που ονομάζεται "Persons" :
LastName |
FirstName |
Address |
City |
Παπαδόπουλος |
Δημήτριος |
Τυρνόβου 15 |
Φλώρινα |
Αντωνιάδης |
Αντώνιος |
Π. Μελά 100 |
Φλώρινα |
Γεωργιάδης |
Νικόλαος |
Φον Κοζάνη 10 |
Κοζάνη |
Τα LastName, FirstName, Address και City είναι οι Στήλες (Columns) του πίνακα. Οι Γραμμές (Rows) περιέχουν τρεις εγγραφές για τρία άτομα.
Μάθημα 3 - Τα Ερωτήματα της SQL (SQL Queries)
Με την SQL, μπορούμε να κάνουμε ένα ερώτημα (Query) σε μια βάση δεδομένων και να έχουμε ένα αποτέλεσμα (Result) σε μορφή πίνακα (tabu-lar form).
Ενα ερώτημα σαν το εξής :
SELECT LastName FROM Persons
θα δώσει ένα αποτέλεσμα σαν το εξής :
LastName |
Παπαδόπουλος |
Αντωνιάδης |
Γεωργιάδης |
Πρέπει να έχουμε υπόψη μας ότι μερικά συστήματα βάσεων δεδομένων απαιτούν το σύμβολο ; (semicolon) στο τέλος μιας εντολής SQL. Δεν θα χρησιμοποιήσουμε εδώ το σύμβολο ;.
Μάθημα 4 - Χειρισμός Δεδομένων της SQL (Data Manipulation)
Οπως υπονοεί και το όνομά της, η SQL είναι μια σύνταξη για την εκτέλεση ερωτημάτων (queries). Αλλά η γλώσσα της SQL περιλαμβάνει επίσης μια σύνταξη για την ενημέρωση εγγραφών, την εισαγωγή νέων εγγραφών και τη διαγραφή υπαρχόντων εγγραφών.
Αυτές οι εντολές ερωτημάτων και ενημέρωσης αποτελούν μαζί τη Γλώσσα Χειρισμού Δεδομένων (Data Manipulation Language, DML) που αποτελεί κομμάτι της SQL :
Μάθημα 5 - Ορισμός Δεδομένων της SQL (Data Definition)
Η Γλώσσα Ορισμού Δεδομένων (Data Definition Language, DDL), που αποτελεί μέρος της SQL, επιτρέπει τη δημιουργία και τη διαγραφή πινάκων μιας βάσης δεδομένων. Μπορούμε επίσης να ορίσουμε indexes (keys), να καθορίσουμε συνδέσμους (links) ανάμεσα στους πίνακες και να επιβάλλουμε περιορισμούς ανάμεσα στους πίνακες μιας βάσης δεδομένων.
Οι σημαντικότερες εντολές DDL στην SQL είναι οι εξής :
Μάθημα 6 - Η SQL και οι Ενεργές Σελίδες Διακομιστή
Η SQL αποτελεί ένα σημαντικό κομμάτι της ASP, επειδή το Ενεργό Αντικείμενο Δεδομένων (Active Data Object, ADO) που χρησιμοποιείται στην ASP (Active Server Pages) για να μπορούμε να έχουμε πρόσβαση σε βάσεις δεδομένων, βασίζεται στην SQL για την πρόσβαση στα δεδομένα.
Μάθημα 7 - Η Εντολή Select της SQL
Η εντολή SELECT επιλέγει στήλες (columns) δεδομένων από μια βάση δεδομένων. Το αποτέλεσμα αποθηκεύεται σε μορφή πίνακα και αποκαλείται result set. Την χρησιμοποιούμε για να εμφανίζουμε (επιλέγουμε) πληροφορίες από έναν πίνακα ως εξής :
SELECT ονόματα_στηλών FROM όνομα_πίνακα
Παράδειγμα : Επιλογή Στηλών από έναν Πίνακα
Για να επιλέξουμε τις στήλες "LastName" και "FirstName", χρησιμοποιούμε μια εντολή SELECT, ως εξής :
SELECT LastName, FirstName FROM Persons
Το αποτέλεσμα :
LastName |
FirstName |
Παπαδόπουλος |
Δημήτριος |
Αντωνιάδης |
Αντώνιος |
Γεωργιάδης |
Νικόλαος |
Παράδειγμα : Επιλογή όλων των Στηλών
Για να επιλέξουμε όλες τις στήλες από τον πίνακα "Person", χρησιμοποιούμε το σύμβολο * αντί για όνομα στήλης, ως εξής :
SELECT * FROM Persons
Το αποτέλεσμα :
LastName |
FirstName |
Address |
City |
Παπαδόπουλος |
Δημήτριος |
Τυρνόβου 15 |
Φλώρινα |
Αντωνιάδης |
Αντώνιος |
Π. Μελά 100 |
Φλώρινα |
Γεωργιάδης |
Νικόλαος |
Φον Κοζάνη 10 |
Κοζάνη |
Μάθημα 8 - Το Where Clause της SQL
Το WHERE clause χρησιμοποιείται για να καθορίσουμε ένα κριτήριο επιλογής (selection criteria). Για να μπορέσουμε να επιλέξουμε δεδομένα υπό συνθήκη από έναν πίνακα, πρέπει να προσθέσουμε ένα WHERE clause σε μια εντολή SELECT, ως εξής :
SELECT στήλη FROM πίνακα WHERE στήλη συνθήκη τιμή
Με το WHERE clause, μπορούμε να χρησιμοποιήσουμε αυτές τις συνθήκες :
Τελεστής (Operator) |
Συνθήκη (Condition) |
= |
Ίσο |
<> |
Όχι ίσο |
> |
Μεγαλύτερο από |
< |
Μικρότερο από |
>= |
Μεγαλύτερο από ή ίσο με |
<= |
Μικρότερο από ή ίσο με |
LIKE |
Επεξηγείται παρακάτω |
Σε μερικές εκδόσεις της SQL, ο τελεστής για το όχι ίσο (<>), μπορεί να γραφεί ως εξής : !=.
Παράδειγμα : Επιλογή Ατόμων από μια Πόλη
Για να επιλέξουμε μόνο τα άτομα που κατοικούν στην πόλη Φλώρινα, προσθέτουμε ένα WHERE clause στην εντολή SELECT, ως εξής :
SELECT * FROM Persons WHERE City='Φλώρινα'
Το αποτέλεσμα :
LastName |
FirstName |
Address |
City |
Year |
Παπαδόπουλος |
Δημήτριος |
Τυρνόβου 15 |
Φλώρινα |
1951 |
Αντωνιάδης |
Αντώνιος |
Π. Μελά 100 |
Φλώρινα |
1978 |
Εχουμε χρησιμοποιήσει μονά εισαγωγικά (single quotes) στις τιμές των συνθηκών στα παραδείγματα. Η SQL χρησιμοποιεί μονά εισαγωγικά στις αλφαριθμητικές τιμές (κείμενο). Τα περισσότερα συστήματα βάσεων δεδομένων αποδέχονται και τα διπλά εισαγωγικά (double quotes). Οι αριθμητικές τιμές δεν πρέπει να περικλείονται σε εισαγωγικά.
Για τις τιμές κειμένου (αλφαριθμητικές) :
Αυτό είναι σωστό :
SELECT * FROM Persons WHERE FirstName='Δημήτριος'
Αυτό δεν είναι σωστό :
SELECT * FROM Persons WHERE FirstName=Δημήτριος
Για τις αριθμητικές τιμές :
Αυτό είναι σωστό :
SELECT * FROM Persons WHERE Year>1965
Αυτό δεν είναι σωστό :
SELECT * FROM Persons WHERE Year>'1965'
Μάθημα 9 - Η Συνθήκη LIKE
Η συνθήκη LIKE χρησιμοποιείται για να καθορίσουμε μια αναζήτηση για ένα υπόδειγμα (pattern) σε μια στήλη.
Η σύνταξη είναι ως εξής :
SELECT στήλη FROM πίνακα WHERE στήλη LIKE υπόδειγμα
Μπορούμε να χρησιμοποιήσουμε το σύμβολο "%" για να ορίσουμε χαρακτήρες μπαλαντέρ (wildcards) πριν και μετά από το υπόδειγμα.
Παράδειγμα : Επιλογή Ατόμων με Υπόδειγμα Ονόματος
Η επόμενη εντολή SQL θα επιστρέψει τα άτομα που το όνομά τους αρχίζει από 'O'.
SELECT * FROM Persons WHERE FirstName LIKE 'O%'
Η επόμενη εντολή SQL θα επιστρέψει τα άτομα που το όνομά τους τελειώνει σε 'α'.
SELECT * FROM Persons WHERE FirstName LIKE '%α'
Η επόμενη εντολή SQL θα επιστρέψει τα άτομα που το όνομά τους περιέχει το 'γα'.
SELECT * FROM Persons WHERE FirstName LIKE '%γα%'
Ολα τα παραπάνω παραδείγματα θα επιστρέψουν το εξής αποτέλεσμα :
LastName |
FirstName |
Address |
City |
Year |
Δημητρίου |
Ολγα |
Ταγμ. Ναούμ 20 |
Φλώρινα |
1951 |
Μάθημα 10 - Οι Λογικοί Τελεστές And και Or
Τα AND και OR ενώνουν δύο ή περισσότερες συνθήκες σ’ ένα WHE-RE clause. Ο τελεστής AND εμφανίζει μια γραμμή αν ΟΛΕΣ οι συνθήκες είναι αληθείς (true), ενώ ο τελεστής OR εμφανίζει μια γραμμή αν ΟΠΟΙΑΔΗΠΟΤΕ από τις συνθήκες είναι αληθής (true).
Ο αρχικός πίνακας είναι ο εξής :
LastName |
FirstName |
Address |
City |
Παπαδόπουλος |
Δημήτριος |
Τυρνόβου 15 |
Φλώρινα |
Γεωργιάδης |
Αντώνιος |
Π. Μελά 100 |
Φλώρινα |
Γεωργιάδης |
Νικόλαος |
Ι. Καραβίτη 2 |
Φλώρινα |
Παράδειγμα
Χρησιμοποιούμε το AND για να εμφανίσουμε αυτούς που το όνομά τους είναι "Νικόλαος" και το επώνυμό τους είναι "Γεωργιάδης" :
SELECT * FROM Persons
WHERE FirstName='Νικόλαος'
AND LastName='Γεωργιάδης'
Αποτέλεσμα :
LastName |
FirstName |
Address |
City |
Γεωργιάδης |
Νικόλαος |
Ι. Καραβίτη 2 |
Φλώρινα |
Παράδειγμα
Χρησιμοποιούμε το OR για να εμφανίσουμε αυτούς που το όνομά τους είναι "Νικόλαος" ή το επώνυμό τους είναι "Γεωργιάδης" :
SELECT * FROM Persons
WHERE firstname='Νικόλαος'
OR lastname='Γεωργιάδης'
Αποτέλεσμα :
LastName |
FirstName |
Address |
City |
Γεωργιάδης |
Αντώνιος |
Π. Μελά 100 |
Φλώρινα |
Γεωργιάδης |
Νικόλαος |
Ι. Καραβίτη 2 |
Φλώρινα |
Παράδειγμα
Μπορούμε επίσης να συνδυάσουμε τα AND και OR, χρησιμοποιώντας παρενθέσεις για να σχηματίσουμε πολύπλοκες εκφράσεις :
SELECT * FROM Persons WHERE
(FirstName='Αντώνιος' OR FirstName='Νικόλαος')
AND LastName='Γεωργιάδης'
Αποτέλεσμα :
LastName |
FirstName |
Address |
City |
Γεωργιάδης |
Αντώνιος |
Π. Μελά 100 |
Φλώρινα |
Γεωργιάδης |
Νικόλαος |
Ι. Καραβίτη 2 |
Φλώρινα |
Μάθημα 11 - Ο Τελεστής Between ... And
Ο τελεστής BETWEEN ... AND επιλέγει μια περιοχή δεδομένων ανάμεσα σε δύο τιμές. Οι τιμές μπορεί να είναι αριθμοί, κείμενο ή ημερομηνίες.
SELECT όνομα_στήλης FROM όνομα_πίνακα
WHERE όνομα_στήλης
BETWEEN τιμή1 AND τιμή2
Αρχικός πίνακας :
LastName |
FirstName |
Address |
City |
Παπαδόπουλος |
Δημήτριος |
Τυρνόβου 15 |
Φλώρινα |
Γεωργιάδης |
Αντώνιος |
Π. Μελά 100 |
Φλώρινα |
Γεωργιάδης |
Νικόλαος |
Ι. Καραβίτη 2 |
Φλώρινα |
Μαρκόπουλος |
Νικόλαος |
Φον Κάραγιαν 20 |
Κοζάνη |
Παράδειγμα
Για να εμφανίσουμε τα άτομα που βρίσκονται αλφαβητικά ανάμεσα στους "Γεωργιάδης" και "Μαρκόπουλος", αλλά και να τους περιλαμβάνουν :
SELECT * FROM Persons WHERE LastName
BETWEEN 'Γεωργιάδης' AND 'Μαρκόπουλος'
Αποτέλεσμα :
LastName |
FirstName |
Address |
City |
Γεωργιάδης |
Αντώνιος |
Π. Μελά 100 |
Φλώρινα |
Γεωργιάδης |
Νικόλαος |
Ι. Καραβίτη 2 |
Φλώρινα |
Μαρκόπουλος |
Νικόλαος |
Φον Κάραγιαν 20 |
Κοζάνη |
Παράδειγμα
Για να εμφανίσουμε τα άτομα που βρίσκονται έξω από την περιοχή που χρησιμοποιήσαμε στο προηγούμενο παράδειγμα, χρησιμοποιούμε τον τελεστή NOT :
SELECT * FROM Persons WHERE LastName
NOT BETWEEN 'Γεωργιάδης' AND 'Μαρκόπουλος'
Αποτέλεσμα :
LastName |
FirstName |
Address |
City |
Παπαδόπουλος |
Δημήτριος |
Τυρνόβου 15 |
Φλώρινα |
Μάθημα 12 - Η Λέξη Κλειδί Distinct
Η λέξη κλειδί DISTINCT χρησιμοποιείται για να επιστρέφει μόνο διακριτές (διαφορετικές) (distinct, different) τιμές. Η εντολή SELECT της SQL επιστρέφει στοιχεία από τις στήλες ενός πίνακα, αλλά τι μπορούμε να κάνουμε αν θέλουμε να επιλέξουμε μόνο διακριτά στοιχεία (distinct eleme-nts);
Στην SQL, αυτό που πρέπει να κάνουμε είναι να προσθέσουμε μια λέξη κλειδί DISTINCT στην εντολή SELECT, ως εξής :
SELECT DISTINCT ονόματα_στηλών FROM όνομα_πίνακα
Παράδειγμα
Επιλογή εταιρειών από έναν πίνακα παραγγελιών.
Ενας απλός πίνακας παραγγελιών :
Company |
OrderNumber |
Line Computers |
3412 |
Sony |
2312 |
Algorithm |
4678 |
Sony |
6798 |
Η επόμενη εντολή SQL :
SELECT Company FROM Orders
θα δώσει αυτό το αποτέλεσμα :
Company |
Line Computers |
Sony |
Algorithm |
Sony |
Βλέπουμε ότι η εταιρεία Sony εμφανίζεται δύο φορές στο αποτέλεσμα. Μερικές φορές δεν το θέλουμε αυτό.
Παράδειγμα
Επιλογή ξεχωριστών εταιρειών από έναν πίνακα παραγγελιών.
Η επόμενη εντολή SQL :
SELECT DISTINCT Company FROM Orders
θα δώσει αυτό το αποτέλεσμα :
Company |
Line Computers |
Sony |
Algorithm |
Τώρα η εταιρεία Sony εμφανίζεται μόνο μία φορά στο αποτέλεσμα.
Μάθημα 13 - Η Λέξη Κλειδί Order By
Η λέξη κλειδί ORDER BY χρησιμοποιείται για να ταξινομήσει το αποτέλεσμα. Το ORDER BY clause χρησιμοποιείται για να ταξινομήσει τις γραμμές.
Πίνακας Παραγγελίες :
Company |
OrderNumber |
Digital Shop |
3412 |
ABC Shop |
5678 |
Sony |
2312 |
Sony |
6798 |
Παράδειγμα
Για να εμφανίσουμε τις εταιρείες σε αλφαβητική σειρά :
SELECT Company, OrderNumber FROM Orders
ORDER BY Company
Αποτέλεσμα :
Company |
OrderNumber |
ABC Shop |
5678 |
Digital Shop |
3412 |
Sony |
6798 |
Sony |
2312 |
Παράδειγμα
Για να εμφανίσουμε τις εταιρείες σε αλφαβητική σειρά ΚΑΙ (AND) τις παραγγελίες σε αριθμητική σειρά :
SELECT Company, OrderNumber FROM Orders
ORDER BY Company, OrderNumber
Αποτέλεσμα :
Company |
OrderNumber |
ABC Shop |
5678 |
Digital Shop |
3412 |
Sony |
2312 |
Sony |
6798 |
Παράδειγμα
Για να εμφανίσουμε τις εταιρείες σε αντίστροφη αλφαβητική σειρά (reverse alphabetical order) :
SELECT Company, OrderNumber FROM Orders
ORDER BY Company DESC
Αποτέλεσμα :
Company |
OrderNumber |
Sony |
2312 |
Sony |
6798 |
Digital Shop |
3412 |
ABC Shop |
5678 |
Μάθημα 14 - Ασκηση σε SQL
Δημιουργείστε έναν πίνακα με όνομα Customers σε μια βάση δεδομένων με τις εξής στήλες :
CompanyName |
ContactName |
Address |
City |
Καταχωρείστε στοιχεία στον πίνακα και δοκιμάστε τις εξής εντολές της SQL :
SELECT * FROM customers
SELECT CompanyName, ContactName
FROM customers
SELECT * FROM customers
WHERE companyname LIKE 'α%'
SELECT CompanyName, ContactName
FROM customers
WHERE CompanyName > 'γ'
AND ContactName > 'γ'
Μάθημα 15 - Η Εντολή INSERT INTO
Η εντολή INSERT INTO εισάγει νέες γραμμές σ’ έναν πίνακα. Η σύνταξή της είναι ως εξής :
INSERT INTO όνομα_πίνακα
VALUES (τιμή1, τιμή2, ...)
Μπορούμε επίσης να καθορίσουμε τις στήλες για τις οποίες θέλουμε να εισάγουμε δεδομένα :
INSERT INTO όνομα_πίνακα(στήλη1, στήλη2, ...)
VALUES (τμή1, τιμή2, ...)
Ο επόμενος πίνακας "Persons" :
LastName |
FirstName |
Address |
City |
Σουμπάση |
Μαρία |
Καλλέργη 15 |
Φλώρινα |
και αυτή η εντολή SQL :
INSERT INTO Persons
VALUES ('Σιάμκουρης', 'Ιωάννης', 'Π. Μελά 90', 'Καστοριά')
δίνουν αυτό το αποτέλεσμα :
LastName |
FirstName |
Address |
City |
Σουμπάση |
Μαρία |
Καλλέργη 15 |
Φλώρινα |
Σιάμκουρης |
Ιωάννης |
Π. Μελά 90 |
Καστοριά |
Εισαγωγή Δεδομένων σε Συγκεκριμένες Στήλες
Ο επόμενος πίνακας "Persons" :
LastName |
FirstName |
Address |
City |
Σουμπάση |
Μαρία |
Καλλέργη 15 |
Φλώρινα |
Σιάμκουρης |
Ιωάννης |
Π. Μελά 90 |
Καστοριά |
και η επόμενη εντολή SQL :
INSERT INTO Persons (LastName, Address)
VALUES ('Νικολάου', 'Ταγμ. Ναούμ 30')
δίνουν αυτό το αποτέλεσμα :
LastName |
FirstName |
Address |
City |
Σουμπάση |
Μαρία |
Καλλέργη 15 |
Φλώρινα |
Σιάμκουρης |
Ιωάννης |
Π. Μελά 90 |
Καστοριά |
Νικολάου |
Ταγμ. Ναούμ 30 |
Μάθημα 16 - Η Εντολή Update
Η εντολή UPDATE ενημερώνει ή αλλάζει γραμμές. Η σύνταξή της είναι ως εξής :
UPDATE όνομα_πίνακα SET όνομα_στήλης=νέα_τιμή
WHERE όνομα_στήλης=τιμή
Αρχικός πίνακας Person :
LastName |
FirstName |
Address |
City |
Σουμπάση |
Μαρία |
Καλλέργη 15 |
Φλώρινα |
Σιάμκουρης |
Ιωάννης |
Π. Μελά 90 |
Καστοριά |
Νικολάου |
Ταγμ. Ναούμ 30 |
Ενημέρωση μίας Στήλης σε μια Γραμμή
Θέλουμε να προσθέσουμε ένα όνομα στο άτομο που έχει το επώνυμο "Νικολάου" :
UPDATE Person SET FirstName = 'Αθηνά'
WHERE LastName = 'Νικολάου'
Ενημέρωση Πολλών Στηλών σε μια Γραμμή
Για το ίδιο άτομο θέλουμε να αλλάξουμε τη διεύθυνση και να προσθέσουμε ένα όνομα για την πόλη :
UPDATE Person
SET Address = 'Μεγαρόβου 12', City ='Φλώρινα'
WHERE LastName = 'Νικολάου'
Αποτέλεσμα :
LastName |
FirstName |
Address |
City |
Σουμπάση |
Μαρία |
Καλλέργη 15 |
Φλώρινα |
Σιάμκουρης |
Ιωάννης |
Π. Μελά 90 |
Καστοριά |
Νικολάου |
Αθηνά |
Μεγαρόβου 12 |
Φλώρινα |
Μάθημα 17 - Η Εντολή Delete
Η εντολή DELETE χρησιμοποιείται για να διαγράψουμε γραμμές από έναν πίνακα. Η σύνταξή της είναι ως εξής :
DELETE FROM όνομα_πίνακα
WHERE όνομα_στήλης = τιμή
Αρχικός πίνακας Person :
LastName |
FirstName |
Address |
City |
Σουμπάση |
Μαρία |
Καλλέργη 15 |
Φλώρινα |
Σιάμκουρης |
Ιωάννης |
Π. Μελά 90 |
Καστοριά |
Νικολάου |
Αθηνά |
Μεγαρόβου 12 |
Φλώρινα |
Διαγραφή μιας Γραμμής
Θα διαγράψουμε την "Νικολάου Αθηνά" :
DELETE FROM Person WHERE LastName = 'Νικολάου'
Αποτέλεσμα :
LastName |
FirstName |
Address |
City |
Σουμπάση |
Μαρία |
Καλλέργη 15 |
Φλώρινα |
Σιάμκουρης |
Ιωάννης |
Π. Μελά 90 |
Καστοριά |
Μάθημα 18 - Οι Συναρτήσεις Count της SQL
Η SQL έχει ενσωματωμένες συναρτήσεις για τη μέτρηση (counting) των εγγραφών μιας βάσης δεδομένων.
Η σύνταξη για τις ενσωματωμένες συναρτήσεις COUNT είναι η εξής :
SELECT COUNT(στήλη) FROM πίνακας
Η Συνάρτηση COUNT(*)
Η συνάρτηση COUNT(*) επιστρέφει τον αριθμό των επιλεγμένων γραμμών από μια επιλογή (selection).
Μ’ αυτόν τον πίνακα "Persons" :
Name |
Age |
Αντωνιάδης Ηλίας |
34 |
Μάρκου Ιωάννης |
45 |
Ιωάννου Γεώργιος |
19 |
Το επόμενο παράδειγμα επιστρέφει τον αριθμό των γραμμών του πίνακα :
SELECT COUNT(*) FROM Persons
Αποτέλεσμα : 3
Το επόμενο παράδειγμα επιστρέφει τον αριθμό των ατόμων που είναι πάνω από 20 χρονών :
SELECT COUNT(*) FROM Persons where Age>20
Αποτέλεσμα : 2
Η Συνάρτηση COUNT(column)
Η συνάρτηση COUNT(column) επιστρέφει τον αριθμό των γραμμών χωρίς τιμή NULL στη συγκεκριμένη στήλη.
Μ’ αυτόν τον πίνακα "Persons" :
Name |
Age |
Αντωνιάδης Ηλίας |
34 |
Μάρκου Ιωάννης |
45 |
Ιωάννου Γεώργιος |
Το επόμενο παράδειγμα βρίσκει τον αριθμό των ατόμων που έχουν τιμή στο πεδίο "Age" του πίνακα "Persons" :
SELECT COUNT(Age) FROM Persons
Αποτέλεσμα : 2
Η συνάρτηση COUNT(column) είναι χρήσιμη για να βρίσκουμε τις στήλες που δεν έχουν τιμή. Το αποτέλεσμα είναι κατά ένα λιγότερο από τον αριθμό των γραμμών του αρχικού πίνακα επειδή ένα από τα άτομα δεν έχει τιμή στο πεδίο age.
Μάθημα 19 - Οι Λέξεις Κλειδιά COUNT και DISTINCT
Οι λέξεις κλειδιά DISTINCT και COUNT μπορούν να χρησιμοποιηθούν μαζί για να μετρήσουμε τον αριθμό των διακριτών αποτελεσμάτων (di-stinct results).
Η σύνταξη είναι ως εξής :
SELECT DISTINCT COUNT(στήλες) FROM πίνακας
Με τον επόμενο πίνακα "Orders" :
Company |
OrderNumber |
Hitachi |
3412 |
Sony |
2312 |
ABC |
4678 |
Sony |
6798 |
Η επόμενη εντολή SQL :
SELECT COUNT(Company) FROM Orders
θα δώσει αυτό το αποτέλεσμα : 4
Η επόμενη εντολή SQL :
SELECT DISTINCT COUNT(Company) FROM Orders
θα δώσει αυτό το αποτέλεσμα : 3
Μάθημα 20 - Οι Συναρτήσεις της SQL
Η SQL έχει πολλές ενσωματωμένες συναρτήσεις για να μπορούμε να κάνουμε μετρήσεις (counting) και υπολογισμούς (calculations).
Η γενική σύνταξη για τις ενσωματωμένες συναρτήσεις της SQL είναι η εξής :
SELECT function(στήλη) FROM πίνακας
Ο αρχικός πίνακας :
Name |
Age |
Αντωνιάδης Ηλίας |
34 |
Μάρκου Ιωάννης |
45 |
Ιωάννου Γεώργιος |
19 |
Η Συνάρτηση AVG(column)
Η συνάρτηση AVG επιστρέφει τη μέση τιμή μιας στήλης σε μια επιλογή. Οι τιμές NULL δεν περιλαμβάνονται στους υπολογισμούς.
Το επόμενο παράδειγμα επιστρέφει τον μέσο όρο ηλικίας των ατόμων που υπάρχουν στον πίνακα "Persons" :
SELECT AVG(Age) FROM Persons
Αποτέλεσμα : 32.67
Το επόμενο παράδειγμα επιστρέφει τον μέσο όρο ηλικίας των ατόμων που είναι πάνω από 20 χρονών :
SELECT AVG(Age) FROM Persons where Age>20
Αποτέλεσμα : 39.5
Η Συνάρτηση MAX(column)
Η συνάρτηση MAX επιστρέφει την μεγαλύτερη τιμή μιας στήλης. Οι τιμές NULL δεν περιλαμβάνονται στον υπολογισμό.
Παράδειγμα
SELECT MAX(Age) FROM Persons
Αποτέλεσμα : 45
Η Συνάρτηση MIN(column)
Η συνάρτηση MIN επιστρέφει την μικρότερη τιμή μιας στήλης. Οι τιμές NULL δεν περιλαμβάνονται στον υπολογισμό.
Παράδειγμα
SELECT MIN(Age) FROM Persons
Αποτέλεσμα : 19
Οι συναρτήσεις MIN και MAX μπορούν επίσης να χρησιμοποιηθούν σε στήλες που περιέχουν κείμενο (text), για να βρούμε την μεγαλύτερη ή μικρότερη τιμή σε αλφαβητική σειρά.
Η Συνάρτηση SUM(column)
Η συνάρτηση SUM επιστρέφει το άθροισμα μιας στήλης για μια συγκεκριμένη επιλογή (selection). Οι τιμές NULL δεν περιλαμβάνονται στον υπολογισμό.
Παράδειγμα
Το παρακάτω παράδειγμα επιστρέφει το άθροισμα όλων των ηλικιών του πίνακα "person" :
SELECT SUM(Age) FROM Persons
Αποτέλεσμα : 98
Παράδειγμα
Το παρακάτω παράδειγμα επιστρέφει το άθροισμα των ηλικιών του πίνακα "person" για τα άτομα που είναι πάνω από 20 χρονών :
SELECT SUM(Age) FROM Persons where Age>20
Αποτέλεσμα : 79
Μάθημα 21 - Η Λέξη Κλειδί Group By
Η λέξη κλειδί GROUP BY έχει προστεθεί στην SQL επειδή οι αθροιστικές συναρτήσεις (aggregate functions), όπως είναι η SUM, επιστρέφουν το σύνολο όλων των τιμών μιας στήλης κάθε φορά που καλούνται.
Χωρίς την λέξη κλειδί GROUP BY, το να βρούμε το άθροισμα για κά-θε ανεξάρτητη ομάδα τιμών μιας στήλης θα ήταν αδύνατο.
Η σύνταξη της GROUP BY είναι η εξής :
SELECT στήλη, SUM(στήλη) FROM πίνακας GROUP BY στήλη
Παράδειγμα με GROUP BY
Ο παρακάτω πίνακας "Sales" :
Company |
Amount |
Grundig |
5500 |
IBM |
4500 |
Grundig |
7100 |
και αυτή η εντολή SQL :
SELECT Company, SUM(Amount) FROM Sales
θα δώσουν αυτό το αποτέλεσμα :
Company |
SUM(Amount) |
Grundig |
17100 |
IBM |
17100 |
Grundig |
17100 |
Ο παραπάνω κώδικας δεν είναι έγκυρος επειδή η στήλη που επιστρέφει δεν αποτελεί μέρος ενός αθροίσματος (aggregate). Ένα GROUP BY clause μπορεί να το διορθώσει αυτό, ως εξής :
SELECT Company, SUM(Amount) FROM Sales
GROUP BY Company
και θα δώσει αυτό το αποτέλεσμα :
Company |
SUM(Amount) |
Grundig |
12600 |
IBM |
4500 |
Μάθημα 22 - Η Λέξη Κλειδί HAVING
Η λέξη κλειδί HAVING έχει προστεθεί στην SQL επειδή η λέξη κλειδί WHERE δεν μπορεί να χρησιμοποιηθεί σε αθροιστικές συναρτήσεις, όπως είναι η SUM.
Η σύνταξη της συνάρτησης HAVING είναι η εξής :
SELECT στήλη, SUM(στήλη) FROM πίνακας
GROUP BY στήλη
HAVING SUM(στήλη) συνθήκη
Ο παρακάτω πίνακας "Sales" :
Company |
Amount |
Grundig |
5500 |
IBM |
4500 |
Grundig |
7100 |
και αυτή η εντολή SQL :
SELECT Company, SUM(Amount) FROM Sales
GROUP BY Company HAVING SUM(Amount)>10000
θα δώσουν αυτό το αποτέλεσμα :
Company |
SUM(Amount) |
Grundig |
12600 |
Μάθημα 23 - Τα Ψευδώνυμα (Aliases)
Στην SQL, τα ψευδώνυμα (aliases) χρησιμοποιούνται για ονόματα στηλών και πινάκων.
Ψευδώνυμο Στήλης (Column Name Alias)
Η σύνταξη είναι ως εξής :
SELECT στήλη AS column_alias FROM πίνακας
Ψευδώνυμο Πίνακα (Table Name Alias)
Η σύνταξη είναι ως εξής :
SELECT στήλη FROM πίνακας AS table_alias
Παράδειγμα με Column Alias
Ο επόμενος πίνακας Persons :
LastName |
FirstName |
Address |
City |
Σουμπάση |
Μαρία |
Καλλέργη 15 |
Φλώρινα |
Σιάμκουρης |
Ιωάννης |
Π. Μελά 90 |
Καστοριά |
Νικολάου |
Αθηνά |
Μεγαρόβου 12 |
Φλώρινα |
και η εξής εντολή SQL :
SELECT LastName AS Family, FirstName AS Name
FROM Persons
δίνουν αυτό το αποτέλεσμα :
Family |
Name |
Σουμπάση |
Μαρία |
Σιάμκουρης |
Ιωάννης |
Νικολάου |
Αθηνά |
Παράδειγμα με Table Alias
Ο επόμενος πίνακας Persons :
LastName |
FirstName |
Address |
City |
Σουμπάση |
Μαρία |
Καλλέργη 15 |
Φλώρινα |
Σιάμκουρης |
Ιωάννης |
Π. Μελά 90 |
Καστοριά |
Νικολάου |
Αθηνά |
Μεγαρόβου 12 |
Φλώρινα |
και η εξής εντολή SQL :
SELECT LastName, FirstName
FROM Persons AS Employees
δίνουν αυτό το αποτέλεσμα :
LastName |
FirstName |
Σουμπάση |
Μαρία |
Σιάμκουρης |
Ιωάννης |
Νικολάου |
Αθηνά |
Μάθημα 24 - Ενωση Πινάκων (Join)
Μερικές φορές πρέπει να επιλέξουμε δεδομένα από δύο πίνακες για να δημιουργήσουμε ένα πιο πολύπλοκο αποτέλεσμα. Θα πρέπει να κάνουμε μια ένωση (join).
Οι πίνακες μιας βάσης δεδομένων μπορούν να συσχετιστούν μεταξύ τους με κλειδιά (keys). Ένα πρωτεύον κλειδί (primary key) είναι μια στήλη με μια μοναδική τιμή στην κάθε γραμμή. Ο σκοπός είναι να ενώσει τα δεδομένα μαζί από διάφορους πίνακες, χωρίς να έχουμε επανάληψη όλων των δεδομένων σε κάθε πίνακα.
Στον πίνακα "Employees" παρακάτω, η στήλη "ID" είναι το πρωτεύον κλειδί (primary key), που σημαίνει ότι δεν μπορούν να υπάρχουν δύο γραμμές που να έχουν το ίδιο ID. Το ID είναι αυτό που ξεχωρίζει δύο άτομα ακόμη κι αν έχουν το ίδιο όνομα.
Στους πίνακες παραδειγμάτων παρακάτω, προσέχουμε τα εξής :
Πίνακας Employees :
ID |
Name |
01 |
Νικολάου Αθηνά |
02 |
Γεωργιάδης Ηλίας |
03 |
Παπαδόπουλος Στέφανος |
04 |
Σουμπάσης Ιωάννης |
Πίνακας Orders :
ID |
Product |
01 |
Printer |
03 |
Computer |
03 |
Scanner |
Παράδειγμα
Ποιοι έχουν παραγγείλει προϊόντα και τι έχουν παραγγείλει;
SELECT Employees.Name, Orders.Product
FROM Employees, Orders
WHERE Employees.ID = Orders.ID
Αποτέλεσμα :
Name |
Product |
Νικολάου Αθηνά |
Printer |
Παπαδόπουλος Στέφανος |
Computer |
Παπαδόπουλος Στέφανος |
Scanner |
Παράδειγμα
Ποιοι έχουν παραγγείλει εκτυπωτή (printer);
SELECT Employees.Name
FROM Employees, Orders
WHERE Employees.ID = Orders.ID
AND Orders.Product = 'Printer'
Αποτέλεσμα :
Name |
Νικολάου Αθηνά |
Μάθημα 25 - Δημιουργία Βάσης Δεδομένων και Πίνακα
Για να δημιουργήσουμε μια βάση δεδομένων, μπορούμε να δώσουμε την εξής εντολή :
CREATE DATABASE όνομα_βάσης_δεδομένων
Για να δημιουργήσουμε έναν πίνακα σε μια βάση δεδομένων, μπορούμε να δώσουμε την εξής εντολή :
CREATE TABLE όνομα_πίνακα
(
όνομα_στήλης_1 τύπος_δεδομένων,
όνομα_στήλης_2 τύπος_δεδομένων,
…
)
Παράδειγμα
Θα δημιουργήσουμε έναν πίνακα με όνομα "Person", με τέσσερις στήλες με ονόματα "LastName", "FirstName", "Address" και "Age" :
CREATE TABLE Person
(
LastName varchar,
FirstName varchar,
Address varchar,
Age number
)
Θα ορίσουμε ένα μέγιστο μήκος για μερικές στήλες :
CREATE TABLE Person
(
LastName varchar(30),
FirstName varchar,
Address varchar,
Age number(3)
)
Ο τύπος δεδομένων (data type) καθορίζει τι είδος δεδομένων θα περιέχει η στήλη. Ο παρακάτω πίνακας περιέχει τους πιο συνηθισμένους τύπους δεδομένων της SQL :
Τύπος Δεδομένων (Data Type) |
Περιγραφή (Description) |
char(size) |
Περιέχει ένα string σταθερού μήκους που μπορεί να περιέχει γράμματα, αριθμούς και ειδικούς χαρακτήρες. Το σταθερό μέγεθος καθορίζεται στις παρενθέσεις. |
varchar(size) |
Περιέχει ένα string μεταβλητού μήκους που μπορεί να περιέχει γράμματα, αριθμούς και ειδικούς χαρακτήρες. Το μέγιστο μέγεθος καθορίζεται στις παρενθέσεις. |
number(size) |
Περιέχει έναν αριθμό, όπου ο μέγιστος αριθμός των ψηφίων καθορίζεται στις παρενθέσεις. |
number(size, d) |
Περιέχει έναν αριθμό, όπου ο μέγιστος αριθμός των ψηφίων καθορίζεται στο size και ο μέγιστος αριθμός των ψηφίων στα δεξιά της υποδιαστολής καθορίζεται στο d. |
date |
Περιέχει μια ημερομηνία. |
Μάθημα 26 - Διαγραφή Βάσης Δεδομένων και Πίνακα
Για να διαγράψουμε μια βάση δεδομένων, χρησιμοποιούμε την εξής εντολή :
DROP DATABASE όνομα_βάσης_δεδομένων
Για να διαγράψουμε έναν πίνακα, χρησιμοποιούμε την εξής εντολή :
DROP TABLE όνομα_πίνακα
Για να διαγράψουμε τα δεδομένα ενός πίνακα χωρίς να διαγράψουμε τον πίνακα, χρησιμοποιούμε την εξής εντολή :
DELETE TABLE όνομα_πίνακα
Μάθημα 27 - Η Εντολή Alter Table
Η εντολή ALTER TABLE χρησιμοποιείται για να προσθέσουμε ή να διαγράψουμε στήλες από έναν υπάρχοντα πίνακα.
Η σύνταξή της για τις δύο αυτές περιπτώσεις είναι ως εξής :
ALTER TABLE όνομα_πίνακα ADD όνομα_στήλης τύπος_δεδομένων
ALTER TABLE όνομα_πίνακα DROP όνομα_στήλης
Πίνακας Person :
LastName |
FirstName |
Address |
Σταύρου |
Μαρίνα |
Σαρανταπόρου 10 |
Παράδειγμα
Για να προσθέσουμε μια στήλη με όνομα "City" στον πίνακα "Person", δίνουμε την εξής εντολή :
ALTER TABLE Person ADD City varchar(30)
Αποτέλεσμα :
LastName |
FirstName |
Address |
City |
Σταύρου |
Μαρίνα |
Σαρανταπόρου 10 |
Παράδειγμα
Για να διαγράψουμε (drop) τη στήλη "Address" του πίνακα "Person", δίνουμε την εξής εντολή :
ALTER TABLE Person DROP Address
Αποτέλεσμα :
LastName |
FirstName |
City |
Σταύρου |
Μαρίνα |