SQL Data Manipulation Language



Σχετικά έγγραφα
Αρχεία και Βάσεις Δεδομένων

SQL: Συναρτήσεις Συνάθροισης

SQL Data Manipulation Language

Αρχεία και Βάσεις Δεδομένων

Σχεσιακός Λογισμός Πλειάδων

Σχεσιακή Άλγεβρα Relational Algebra

ΗΥ-360 Αρχεία και Βάσεις Δεδομένων Διδάσκων: Δ. Πλεξουσάκης. Φροντιστήριο SQL Examples ΙΙ Ξένου Ρουμπίνη

Αρχεία και Βάσεις Δεδομένων

Σχεσιακή Άλγεβρα - Διαίρεση

Αρχεία και Βάσεις Δεδομένων

Η SQL ως γλώσσα ερωτημάτων. Υπενθυμίζουμε: Σχέση = Πίνακας Πλειάδα = Εγγραφή = Γραμμή (Πίνακα) Πεδίο = Γνώρισμα (Σχέσης) = Στήλη (Πίνακα)


Τμήμα Διοίκησης Επιχειρήσεων

Βάσεις Δεδομένων. Εργαστήριο ΙV. Τμήμα Πληροφορικής ΑΠΘ

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 6: SQL (Συζεύξεις, Εμφώλευση, Ομαδοποίηση) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Αρχεία και Βάσεις Δεδομένων

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 3ο Μάθημα: Εισαγωγή στην SQL. Δρ. Κωνσταντίνος Χ.

Βάσεις δεδομένων. (7 ο μάθημα) Ηρακλής Βαρλάμης

Η SQL αποτελείται από δύο υποσύνολα, τη DDL και τη DML.


Σχεδιασμός Βάσεων Δεδομένων

Τμήμα Πληροφορικής ΑΠΘ

Βάσεις Δεδομένων. Βασίλειος Βεσκούκης Εισαγωγή στη γλώσσα SQL (Structured Query Language) Η γλώσσα SQL

Βάσεις εδοµένων Ευαγγελία Πιτουρά 2

Βάσεις Δεδομένων Ι SQL Μέρος 2 ο. Φώτης Κόκκορας (MSc/PhD) Τμήμα Μηχανικών Πληροφορικής ΤΕ

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Επιλέγει όλες τις πλειάδες, από μια σχέση R, που ικανοποιούν τη συνθήκη επιλογής.

PROJECT ΕΡΓΑΣΤΗΡΙΩΝ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ Ι. Τμήμα Μηχανικών Πληροφορικής Τ.Ε.

Σύνολα Ασκήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Κεφάλαιο 10 Άλλες Πράξεις Θεωρίας Συνόλων

Βάσεις Δεδομένων Προχωρημένα Ερωτήματα SQL

GROUP BY, HAVING, COUNT, MIN, MAX, SUM, AVG, ROLLUP.

Περιεχόμενα. Βάσεις Δεδομένων Προχωρημένα Ερωτήματα SQL. Συνένωση Σχέσεων στην SQL2 (3) Συνένωση Σχέσεων στην SQL2. (Join Relations Feature in SQL)

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 7α: SQL (NULL, Διαίρεση) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 5: SQL (Απλή SELECT) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

SQL. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Διάλεξη 13: Γλώσσα Επεξεργασίας Δεδομένων/ Data Manipulation Language (SQL DML) I. Διδάσκων: Παναγιώτης Ανδρέου

SQL. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

Βάσεις Δεδομένων (Databases)

Κεφάλαιο 9 Συναθροίσεις

ΣΧΕΣΙΑΚΟ ΜΟΝΤΕΛΟ Relational Model. SQL Μαθ. #11

Ηλεκτρονικοί Υπολογιστές II

Πανεπιστήμιο Κρήτης Τμήμα Επιστήμης Υπολογιστών. Σχεσιακός Λογισμός

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ342: Βάσεις Δεδομένων. Χειμερινό Εξάμηνο Φροντιστήριο 10 ΛΥΣΕΙΣ. Επερωτήσεις SQL

Βάσεις Δεδομένων Σύνθετα SQL queries

Βάσεις Δεδομένων (Ε) Εισαγωγή στην υλοποίηση σχεσιακών βάσεων δεδομένων

Βάσεις Δεδομένων Σύνθετα SQL queries. Ψευδώνυμα (Aliases) (2) Ψευδώνυμα (Aliases) (1) Ασάφεια και Πλήρη Ονόματα. Ερώτημα χωρίς τον όρο WHERE (1)

ΗΥ360: Αρχεία και Βάσεις Δεδομένων Διδάσκων: Πλεξουσάκης Δημήτρης. Φροντιστήριο Σχεσιακή Άλγεβρα Δημητράκη Κατερίνα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

#5. Σχεσιακό Μοντέλο

Διάλεξη 14: Γλώσσα Επεξεργασίας Δεδομένων/ Data Manipulation Language (SQL DML) II. Διδάσκων: Παναγιώτης Ανδρέου

ΤΑΞΙΝΟΜΗΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΕΡΩΤΗΜΑΤΟΣ

Η SQL ως γλώσσα τροποποίησης Δεδομένων

MOCϦϣΎϬϴϠϋϝϮμΤϟϢΗϊΟήϤϟ. USE northwind SELECT employeeid, lastname, firstname, title FROM employees GO

Βάσεις Δεδομένων (Databases)

Αρχεία και Βάσεις Δεδομένων

ΕΣΔ 232: ΟΡΓΑΝΩΣΗ ΔΕΔΟΜΕΝΩΝ ΣΤΗ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ. Ακαδημαϊκό Έτος , Εαρινό Εξάμηνο. Εργαστηριακή Άσκηση 5 21/02/2012

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Τμήμα Πληροφορικής ΑΠΘ

Βάσεις Δεδομένων (Databases)

Βάσεις Δεδομένων. Σχεσιακό Μοντέλο Δεδομένων. Βασίλειος Βεσκούκης Ορισμός Βάσης Δεδομένων Δομή Περιορισμοί

Διαχείριση Πολιτισμικών Δεδομένων

ΗΥ360 Αρχεία και Βάσεις Δεδομένων. Φροντιστήριο στην Σχεσιακή Άλγεβρα.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Τελεστής Προβολής - Παράδειγμα. Π Πόλη, Εξάμηνο (Φοιτητές)

ΕΝΗΜΕΡΩΣΗ ΔΕΔΟΜΕΝΩΝ. UPDATE products SET prod_fpa=19 WHERE prod_fpa=23; SELECT prod_descr,purchase,purchase_date FROM products WHERE prod_fpa=9;

Ορισμοί Σχεσιακού Μοντέλου και (απλές)τροποποιήσεις Σχέσεων στην SQL. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Σχεσιακή Άλγεβρα Σχεδιασμός Βάσεων Δεδομένων

Μοντέλο Οντοτήτων Σχέσεων (Entity-Relationship Model)

SQL: Αιτήματα. ( Συνέχεια...) Κεφάλαιο 5. Ενηµέρωση: 23/12/2008. Database Management Systems, R. Ramakrishnan and J. Gehrke

2 ο Σύνολο Ασκήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

SQL: Αιτήματα. Κεφάλαιο 5. Database Management Systems, R. Ramakrishnan and J. Gehrke

Βάσεις δεδομένων. (6 ο μάθημα) Ηρακλής Βαρλάμης

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 7β: SQL (Πρακτική Εξάσκηση 1) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Αντώνης Χρυσόπουλος Στέλιος Μόσχογλου Θεοδόσης Σουργκούνης MYSQL PHP ADVANCED. Χέρι χέρι με τον Καρατζαφέρη

Data Cube. Μ.Χατζόπουλος 1

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 8: SQL (Πρακτική Εξάσκηση 2) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Βάσεις Δεδομένων Ι SQL Μέρος 1 ο. Φώτης Κόκκορας (MSc/PhD) Τμήμα Μηχανικών Πληροφορικής ΤΕ

Φροντιστήριο Σχεσιακή Άλγεβρα (μέρος 2 ο ) - Σχεσιακός Λογισμός Δημητράκη Κατερίνα

Κεφάλαιο 3. Ερωτήματα SQL

Βάσεις δεδομένων. (8 ο μάθημα) Ηρακλής Βαρλάμης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ.

Διάλεξη 10: Σχεσιακή Άλγεβρα και Σχεσιακός Λογισμός (Relational Algebra/Calculus) ΙI

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Αρχεία και Βάσεις Δεδομένων

( Boats)) ( Tempsids, bid. sname. Boats. Boats. Boats. (Reserves)/ > Reserves. Interlake' Sailors) ...

Lecture 16: SQL DML III

Τμήμα Πληροφορικής ΑΠΘ

Η Γλώσσα SQL. Μέρος α. Η Γλώσσα SQL Σελίδα 1

Εισαγωγή στην πληροφορική

Βάσεις Δεδομένων. Ενότητα 7.1: Structured Query Language - 1 ο Μέρος. Αθανάσιος Σπυριδάκος Τμήμα Διοίκησης Επιχειρήσεων

ΣΧΕΔΙΑΣΜΟΣ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ ΕΡΓΑΣΤΗΡΙΟ 3

Βάσεις Δεδομένων. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

Τεχνολογία Πολιτισμικού Λογισμικού

Βάσεις Δεδομένων Ευαγγελία Πιτουρά 2. Πως θα υλοποιήσουμε (προγραμματίσουμε) την εφαρμογή μας χρησιμοποιώντας ένα σχεσιακό Σ Β :

Kεφ.2: Σχεσιακό Μοντέλο (επανάληψη) Κεφ.6.1: Σχεσιακή Άλγεβρα

H SQL είναι η γλώσσα για όλα τα εμπορικά σχεσιακά συστήματα διαχείρισης βάσεων δεδομένων

DELETE, UPDATE, INSERT.

Η Γλώσσα Βάσεων εδοµένων SQL

Transcript:

SQL Data Manipulation Language Τελεστής union συνδυάζει subselects τα οποία παράγουν συμβατές σχέσεις γενική μορφή: subselect {union [all] subselect} περιορισμός: τα subselects δεν μπορούν να περιέχουν τον τελεστή union Παράδειγμα: Βρείτε τις πόλεις στις οποίες διαμένουν είτε πελάτες είτε πράκτορες select city from customers union select city from agents; ή για να επιτρέψουμε επαναλαμβανόμενες πλειάδες select city from customers union all select city from agents; 1

SQL: Διαίρεση Διαίρεση: η SQL δεν παρέχει τελεστή για διαίρεση Παράδειγμα: Βρείτε τα ids των πελατών που κάνουν παραγγελίες μέσω όλων των πρακτόρων της Νέας Υόρκης. Ή ισοδύναμα: Βρείτε τα ids των πελατών, έτσι ώστε να μην υπάρχει πράκτορας στη Νέα Υόρκη που δεν κάνει παραγγελίες για κάθε έναν από αυτούς τους πελάτες. select cid from customers where not exists (select * from agents where city= New York and not exists (select * from orders where orders.cid=customers.cid and orders.aid=agents.aid)); Orders(orderno, month,cid,aid,pid,qty,amt) 2 Agents(aid, aname,city,percent) Customers(cid, cname,city,discnt)

SQL: Διαίρεση Παράδειγμα: Βρείτε τα ids των πρακτόρων στη Νέα Υόρκη ή το Dallas που κάνουν παραγγελίες για όλα τα προϊόντα που κοστίζουν πάνω από 1$. Ή ισοδύναμα: Βρείτε τα ids των πρακτόρων στη Νέα Υόρκη ή το Dallas, έτσι ώστε να μην υπάρχει προϊόν που να κοστίζει πάνω από 1$ και να μην το παραγγέλνουν. select aid from agents where (city= New York or city = Dallas ) and not exists (select pid from products where price > 1.00 and not exists (select * from orders where orders.pid=products.pid and orders.aid=agents.aid)); Orders(orderno, month,cid,aid,pid,qty,amt) 3 Agents(aid, aname,city,percent) Customers(cid, cname,city,discnt)

SQL: Διαίρεση Παράδειγμα: Βρείτε τα ids των προϊόντων που παραγέλνονται από όλους τους πελάτες στο Dallas. Ή ισοδύναμα: Βρείτε τα ids των προϊόντων που είναι τέτοια ώστε να μην υπάρχει πελάτης στο Dallas που να μην τα παραγγέλνει. select pid from products where not exists (select cid from customers where city= Dallas and not exists (select * from orders where orders.pid=products.pid and orders.cid=customers.cid)); Η έκφραση της διαίρεσης με αυτό τον τρόπο βασίζεται στην ισοδυναμία: z y p(z,y) z y p(z,y) 4

SQL: Συναρτήσεις Συνάθροισης Συναρτήσεις Συνάθροισης (Aggregate Functions) Εφαρμόζονται πάνω σε σύνολα τιμών γνωρισμάτων. count, max, min, avg, sum Περιορισμοί: η συνάρτηση count μπορεί να εφαρμοστεί σε γνωρίσματα οποιουδήποτε τύπου οι συναρτήσεις avg και sum εφαρμόζονται μόνο σε γνωρίσματα αριθμητικών τύπων οι συναρτήσεις min και max εφαρμόζονται σε γνωρίσματα αριθμητικών ή αλφαριθμητικών τύπων 5

SQL: Συναρτήσεις Συνάθροισης Orders(orderno, month,cid,aid,pid,qty,amt) Agents(aid, aname,city,percent) Customers(cid, cname,city,discnt) Παραδείγματα: 1. Υπολογίστε το συνολικό ποσό όλων των παραγγελιών select sum(amt) from orders; 2. Υπολογίστε τη συνολική ποσότητα του προϊόντος p03 που έχει παραγγελθεί. select sum(qty) as TOTAL from orders where pid= p03 ; 3. Βρείτε το συνολικό αριθμό πελατών. select count(cid) from customers; ή ισοδύναμα: select count(*) from customers; Οι κενές τιμές δεν μετρούνται. Οι δύο εκφράσεις δίνουν την ίδια απάντηση γιατί δεν επιτρέπονται κενές τιμές στο γνώρισμα cid. 6

SQL: Συναρτήσεις Συνάθροισης Orders(orderno, month,cid,aid,pid,qty,amt) Agents(aid, aname,city,percent) Customers(cid, cname,city,discnt) 4. Βρείτε το συνολικό αριθμό πόλεων όπου υπάρχουν πελάτες. select count (distinct city) from customers; 5. Βρείτε τα ids των πελατών των οποίων η έκπτωση είναι μικρότερη από τη μέγιστη έκπτωση. select cid from customers where discnt < max(discnt); Η έκφραση είναι λανθασμένη! Συγκρίσεις με συναρτήσεις συνάθροισης επιτρέπονται μόνο όταν η συνάρτηση επιστρέφεται από subselect. Η ορθή έκφραση είναι: select cid from customers where discnt < (select max(discnt)from customers); 7

SQL: Κενές τιμές Κενές τιμές στην SQL: Μια κενή τιμή είναι μια ειδική σταθερά η οποία αναπαριστά μια τιμή η οποία είτε δεν είναι γνωστή είτε δεν έχει νόημα για ένα συγκεκριμένο στιγμιότυπο Τα περισσότερα ΣΔΒΔ δε διαφοροποιούν τις δύο ερμηνείες των κενών τιμών Κενές τιμές μπορούν να εισαχθούν με την εντολή insert Παράδειγμα: Ένας νέος πελάτης εισάγεται στη σχέση customers αλλά δεν είναι γνωστή η τιμή του γνωρίσματος discnt. insert into customers (cid, cname, city) values ( c007, James Bond, London ); Η τιμή στο γνώρισμα discnt θα είναι null. 8 Customers(cid, cname,city,discnt)

SQL: Κενές τιμές Κενές τιμές στην SQL: Το αποτέλεσμα μιας σύγκρισης με μια κενή τιμή είναι unknown (ούτε true, ούτε false). Παράδειγμα: η ερώτηση select * from customers where discnt <=10 or discnt >10; δε θα επιστρέψει την πλειάδα με cid= c007 του προηγούμενου παραδείγματος Κενές τιμές μπορούν να ανακτηθούν με χρήση του κατηγορήματος is null Παράδειγμα: select * from customers where discnt is null; 9

SQL: Κενές τιμές Κενές τιμές στην SQL: Οι κενές τιμές δε συμμετέχουν στον υπολογισμό συναρτήσεων συνάθροισης Παράδειγμα: Βρείτε τη μέση έκπτωση των πελατών Η ερώτηση select avg(discnt) from customers; δε θα συμπεριλάβει την πλειάδα με cid= c007 Κενές τιμές μπορούν να επιστραφούν σαν το αποτέλεσμα συναρτήσεων συνάθροισης αν αυτές υπολογιστούν πάνω στο κενό σύνολο: Οι συναρτήσεις avg, sum, max, min επιστρέφουν null για το κενό σύνολο. Η συνάρτηση count επιστρέφει 0. 10

SQL: Ομαδοποίηση πλειάδων Orders(orderno, month,cid,aid,pid,qty,amt) Ομαδοποίηση πλειάδων: Παρέχεται η δυνατότητα ομαδοποίησης των πλειάδων που αποτελούν την απάντηση σε μια ερώτηση σύμφωνα με τις κοινές τιμές κάποιων γνωρισμάτων. Μπορούν επίσης να εφαρμοστούν συναρτήσεις συνάθροισης στις ομαδοποιημένες πλειάδες. Παράδειγμα: η ερώτηση select pid, sum(qty) from orders group by pid; θα επιστρέψει τα διακριτά pids μαζί με τη συνολική ποσότητα για την οποία έχουν γίνει παραγγελίες. 11

SQL: Ομαδοποίηση πλειάδων Orders(orderno, month,cid,aid,pid,qty,amt) Όταν μια συνάρτηση συνάθροισης εμφανίζεται σε μια εντολή select η οποία περιέχει group-by, η συνάρτηση εφαρμόζεται σε όλες τις πλειάδες μιας ομάδας (δηλαδή όλες τις πλειάδες οι οποίες έχουν την ίδια τιμή στα γνωρίσματα για τα οποία γίνεται η ομαδοποίηση) και επιστρέφεται μια τιμή για κάθε ομάδα. Όλα τα γνωρίσματα τα οποία επιστρέφονται ως απάντηση πρέπει να έχουν μοναδική τιμή για κάθε συνδυασμό τιμών των γνωρισμάτων σύμφωνα με τα οποία γίνεται η ομαδοποίηση. Παράδειγμα: η ερώτηση select pid, cid, sum(qty) from orders group by pid; είναι λανθασμένη γιατί για ένα προϊόν δίνονται παραγγελίες από έναν ή περισσότερους πελάτες. 12

SQL: Ομαδοποίηση πλειάδων Orders(orderno, month,cid,aid,pid,qty,amt) Η ομαδοποίηση μπορεί να γίνεται με περισσότερα από ένα γνωρίσματα Παράδειγμα: Υπολογίστε τη συνολική ποσότητα που παραγγέλνεται για κάθε προϊόν από κάθε πράκτορα. select pid, aid, sum(qty) as TOTAL from orders group by pid, aid; pid aid TOTAL p01 a01 3000 p01 a06 1800 p02 a02 400 p03 a03 1000 p03 a05 800 13

SQL: Ομαδοποίηση πλειάδων Orders(orderno, month,cid,aid,pid,qty,amt) Agents(aid, aname,city,percent) Customers(cid, cname,city,discnt) Ομάδες πλειάδων μπορούν να σχηματιστούν με συνδυασμό σχέσεων Παράδειγμα: Βρείτε τα ονόματα και ids πρακτόρων, τα ονόματα και ids προϊόντων και τη συνολική ποσότητα που παραγγέλνει κάθε πράκτορας για τους πελάτες c02 και c03. select aname, a.aid, pname, p.pid, sum(qty) as TOTAL from orders o, products p, agents a where o.pid=p.pid and o.aid=a.aid and o.cid in ( c02, c03 ) group by a.aid, aname, p.pid, pname; aname aid pname pid TOTAL Brown a03 pencil p05 2400 Brown a03 razor p03 1000 Black a05 razor p03 800 14

SQL: Ομαδοποίηση πλειάδων Υπολογισμός ερωτήσεων που περιέχουν group-by 1. Υπολογίζεται το Καρτεσιανό γινόμενο των σχέσεων στο from 2. Οι πλειάδες που δεν ικανοποιούν τις συνθήκες στο where αφαιρούνται 3. Οι υπόλοιπες πλειάδες ομαδοποιούνται σύμφωνα με το group-by 4. Υπολογίζονται οι εκφράσεις που επιστρέφονται ως απάντηση Παράδειγμα: η ερώτηση select pid, sum(qty) from orders where sum(qty) >1000 group by pid; είναι λανθασμένη γιατί η συνθήκη στο where δε μπορεί να υπολογιστεί πριν γίνει η ομαδοποίηση των πλειάδων. 15

SQL: having Συνθήκες πάνω στις ομάδες των πλειάδων μπορούν να εκφραστούν με το having. Ο υπολογισμός αυτής της συνθήκης γίνεται μετά την ομαδοποίηση. Παράδειγμα: Βρείτε τα ids των προϊόντων και τη συνολική ποσότητα που έχει παραγγελθεί, όταν η ποσότητα αυτή είναι μεγαλύτερη από 1000. select pid, sum(qty) from orders group by pid having sum(qty)>1000; Αν δεν υπάρχει group-by αλλά υπάρχει having, τότε το σύνολο των πλειάδων θεωρείται ως μια ομάδα. 16

SQL: having Οι συνθήκες που εκφράζονται στο having μπορούν να περιλαμβάνουν μόνο γνωρίσματα τα οποία έχουν μοναδική τιμή για κάθε ομάδα. Παράδειγμα: Βρείτε τα ids προϊόντων που έχουν παραγγελθεί από τουλάχιστον δύο πελάτες select pid from orders group by pid having count(distinct cid)>=2; Το γνώρισμα cid, ως έχει, δε μπορεί να συμμετέχει σε συνθήκη του having (δηλαδή η συνθήκη having cid=3; είναι λανθασμένη) γιατί για ένα προϊόν δίνονται παραγγελίες από έναν ή περισσότερους πελάτες. Για τον ίδιο λόγο, το γνώρισμα cid δεν μπορεί να επιστρέφεται από την ερώτηση. 17