ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Πανεπιστήμιο Πειραιώς Τμήμα Ψηφιακών Συστημάτων Μανουσόπουλος Χρήστος

Σχετικά έγγραφα
Τμήμα Διοίκησης Επιχειρήσεων

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

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

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

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

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

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

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

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

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



Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ. Ε. Χρήσιμοι Σύνδεσμοι

ΕΠΛ 342 Βάσεις εδοµένων

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

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

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


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

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

ΗΓλώσσαSQL. Εισαγωγή Βασικές Έννοιες Τύποι Δεδομένων Ορισμός Δεδομένων Χειρισμός Δεδομένων

SQL Data Manipulation Language

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

Βάσεις Δεδομένων 5η εργαστηριακή άσκηση

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

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

Σχεδιασμός Πληροφοριακών Συστημάτων. Σημειώσεις

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

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

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

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

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

Εργαστήριο βάσεων δεδομένων. Εισαγωγή στη MySQL (2)

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

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

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

Διάλεξη 16: SQL DML IV, SQL DCL, SQL TCL. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά) ΤΕΙ ΔυτικήςΜακεδονίας

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

Εργαστήριο βάσεων δεδομένων. Εισαγωγή στη MySQL (2)

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

Σχεδίαση Βάσεων Δεδομένων

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι Ενότητα 3:

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

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

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL

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

DELETE, UPDATE, INSERT

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

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

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

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

DELETE, UPDATE, INSERT.

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

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

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

ΦΡΟΝΤΙΣΤΗΡΙΟ ΣΤΗ ΓΛΩΣΣΑ SQL

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Πανεπιστήμιο Πειραιώς Τμήμα Ψηφιακών Συστημάτων Μανουσόπουλος Χρήστος

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Βάσεις Δεδομένων (4 ο εξάμηνο) Εργαστήριο MySQL #6

Η Γλώσσα SQL. Εισαγωγή Βασικές Έννοιες Τύποι Δεδομένων Ορισμός Δεδομένων Χειρισμός Δεδομένων

1 / 97

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

1 / 87

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

1. ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΤΗΣ MySQL

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

Παράδειγμα Select Introduction Group By Join Aliases.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (3)

ΘΕΜΑΤΑ. Ερώτηση 1 Κατά τη Φυσική Αποθήκευση (Physical storage) μιας ΒΔ αποθηκεύονται στον δίσκο τα:

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

Βάσεις Δεδομένων ΗγλώσσαSQL (Structured Query Language)

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

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

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

Βάσεις Δεδομένων Η γλώσσα SQL (Structured Query Language) Εισαγωγή στην SQL (2) Ιστορικά Στοιχεία. SQL - Structured Query Language (1)

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Βάσεις Δεδομένων (4 ο εξάμηνο) Εργαστήριο MySQL #3

Εισαγωγή στις Βάσεις Δεδομζνων II

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

Το Μοντέλο των Οντοτήτων Συσχετίσεων Entity Relationship Model. Νικόλαος Ζ. Ζάχαρης

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

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

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

ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ. Βάσεις Δεδομένων

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

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

ΔΟΜΕΣ ΚΑΙ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Πανεπιστήμιο Πειραιώς Τμήμα Ψηφιακών Συστημάτων Μανουσόπουλος Χρήστος

Το σχεσιακό μοντέλο βάσεων δεδομένων

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

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

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

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ - SQL

Βάσεις Δεδομένων Ι [Σημειώσεις Εργαστηρίου]

Transcript:

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Πανεπιστήμιο Πειραιώς Τμήμα Ψηφιακών Συστημάτων Μανουσόπουλος Χρήστος cman@unipi.gr

Εισαγωγή στην SQL (Structured Query Language) H SQL είναι γλώσσα ορισμού και χειρισμού δεδομένων για Σχεσιακά Συστήματα Διαχείρισης Βάσεων Δεδομένων. Είναι η γλώσσα που θα γράψουμε τα ερωτήματα μας στον Microsoft Sql Server Αναπτύχθηκε από την IBM το 1970 Είναι δηλωτική (declarative) και όχι διαδικαστική (procedural)

Κατηγορίες εντολών SQL Data Manipulation Language (DML) Εντολές για ερωτήματα και τροποποίηση δεδομένων SELECT, INSERT, UPDATE, DELETE Data Definition Language (DDL) Εντολές για ορισμό δεδομένων CREATE, ALTER, DROP Data Control Language (DCL) Εντολές για δικαιώματα ασφάλειας (security permissions) GRANT, DENY, REVOKE

DML - Εντολή SELECT SELECT εκφράσεις FROM πίνακες [WHERE συνθήκες] [ORDER BY έκφραση[ ASC DESC ]]; εκφράσεις Οι στήλες ή υπολογισμοί που επιθυμούμε να ανακτήσουμε. * για ανάκτηση όλων των στηλών. πίνακες Οι πίνακες από τους οποίους θέλουμε να ανακτήσουμε δεδομένα. Πρέπει να υπάρχει ένας τουλάχιστον πίνακας στη FROM πρόταση. WHERE συνθήκες Προαιρετική. Οι συνθήκες που πρέπει να εκπληρούνται για να επιλεχθούν οι εγγραφές. ORDER BY συνθήκη Προαιρετική. Η συνθήκη που χρησιμοποιείται για την ταξινόμηση των εγγραφών. ASC Προαιρετική. ASC ταξινομεί τις εγγραφές με αύξουσα σειρά. DESC Προαιρετική. DESC ταξινομεί τις εγγραφές με φθίνουσα σειρά

Παραδείγματα SELECT Επιλογή όλων των πεδίων από έναν πίνακα SELECT * FROM customers WHERE favorite_website = 'techonthenet.com' ORDER BY last_name ASC; customers customer_id last_name first_name favorite_website 4000 Jackson Joe techonthenet.com 5000 Smith Jane digminecraft.com 6000 Ferguson Samantha bigactivities.com 7000 Reynolds Allen checkyourmath.com 8000 Anderson Paige NULL 9000 Johnson Derek techonthenet.com customer_id last_name first_name favorite_website 4000 Jackson Joe techonthenet.com 9000 Johnson Derek techonthenet.com

Επιλογή συγκεκριμένων πεδίων από έναν πίνακα SELECT supplier_name, city FROM suppliers WHERE supplier_id > 500 ORDER BY supplier_name ASC, city DESC; suppliers supplier_id supplier_name city state 100 Microsoft Redmond Washington 200 Google Mountain View California 300 Oracle Redwood City California 400 Kimberly-Clark Irving Texas 500 Tyson Foods Springdale Arkansas 600 SC Johnson Racine Wisconsin 700 Dole Food Company Westlake Village California 800 Flowers Foods Thomasville Georgia 900 Electronic Arts Redwood City California supplier_name Dole Food Company Electronic Arts Flowers Foods SC Johnson city Westlake Village Redwood City Thomasville Racine

Επιλογή συγκεκριμένων πεδίων από πολλούς πίνακες SELECT orders.order_id, customers.last_name FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id WHERE orders.order_id <> 1 ORDER BY orders.order_id; orders order_id customer_id order_date 1 7000 2016/04/18 2 5000 2016/04/18 3 8000 2016/04/19 4 4000 2016/04/20 5 NULL 2016/05/01 customers customer_id last_name first_name favorite_website 4000 Jackson Joe techonthenet.co m 5000 Smith Jane digminecraft.com 6000 Ferguson Samantha bigactivities.com 7000 Reynolds Allen 8000 Anderson Paige NULL 9000 Johnson Derek checkyourmath.c om techonthenet.co m order_id last_name 2 Smith 3 Anderson 4 Jackson

Χρήση της DISTINCT για να αφαιρούνται οι διπλοεγγραφές από τα αποτελέσματα της εντολής SELECT. SELECT DISTINCT state FROM suppliers ORDER BY state; SELECT DISTINCT city, state FROM suppliers ORDER BY city, state; suppliers supplier_id supplier_name city state 100 Microsoft Redmond Washington 200 Google Mountain View California 300 Oracle Redwood City California 400 Kimberly-Clark Irving Texas 500 Tyson Foods Springdale Arkansas 600 SC Johnson Racine Wisconsin 700 Dole Food Company Westlake Village California 800 Flowers Foods Thomasville Georgia 900 Electronic Arts Redwood City California state Arkansas California Georgia Texas Washington Wisconsin city Irving Mountain View Racine Redmond Redwood City Springdale Thomasville Westlake Village state Texas California Wisconsin Washington California Arkansas Georgia California

Η πρόταση FROM Χρησιμοποιείται για την δήλωση των πινάκων και τις ενώσεις που απαιτούνται για την εντολή SQL. FROM πίνακας1 [ { INNER JOIN LEFT [OUTER] JOIN RIGHT [OUTER] JOIN FULL [OUTER] JOIN } πίνακας2 ON πίνακας1.στήλη1 = πίνακας2.στήλη1 ] Πίνακας1 και πίνακας2 Είναι οι πίνακες που χρησιμοποιούνται στην εντολή. Η ένωσή τους βασίζεται στο πίνακας1.στήλη1 = πίνακας2.στήλη1.

Inner join SQL INNER JOINS: επιστρέφει τις γραμμές από τους πίνακες για τις οποίες η συνθήκη του join επαληθεύεται. Επιστρέφει την τομή των πινάκων. SELECT στήλες FROM πίνακα1 INNER JOIN πίνακα2 ON πίνακα1.στήλη = πίνακα2.στήλη;

Παράδειγμα Inner join SELECT customers.customer_id, orders.order_id, orders.order_date FROM customers INNER JOIN orders ON customers.customer_id = orders.customer_id ORDER BY customers.customer_id; customers customer_id last_name first_name favorite_website 4000 Jackson Joe techonthenet.com 5000 Smith Jane digminecraft.com 6000 Ferguson Samantha bigactivities.com 7000 Reynolds Allen checkyourmath.com 8000 Anderson Paige NULL 9000 Johnson Derek techonthenet.com orders order_id customer_id order_date 1 7000 2016/04/18 2 5000 2016/04/18 3 8000 2016/04/19 4 4000 2016/04/20 5 NULL 2016/05/01 customer_id order_id order_date 4000 4 2016/04/20 5000 2 2016/04/18 7000 1 2016/04/18 8000 3 2016/04/19

Left Outer Join SQL LEFT [OUTER] JOINS: Επιστρέφει όλες τις γραμμές από τον αριστερό πίνακα που ορίζεται στην ON συνθήκη και μόνο εκείνες τις γραμμές από τον άλλο πίνακα που επαληθεύουν την join συνθήκη. SELECT στήλες FROM πίνακα1 LEFT [OUTER] JOIN πίνακα2 ON πίνακα1.στήλη = πίνακα2.στήλη;

Παράδειγμα Left Outer Join SELECT customers.customer_id, orders.order_id, orders.order_date FROM customers LEFT OUTER JOIN orders ON customers.customer_id = orders.customer_id ORDER BY customers.customer_id; customers customer_id last_name first_name favorite_website 4000 Jackson Joe techonthenet.com 5000 Smith Jane digminecraft.com 6000 Ferguson Samantha bigactivities.com 7000 Reynolds Allen checkyourmath.com 8000 Anderson Paige NULL 9000 Johnson Derek techonthenet.com orders order_id customer_id order_date 1 7000 2016/04/18 2 5000 2016/04/18 3 8000 2016/04/19 4 4000 2016/04/20 5 NULL 2016/05/01 customer_id order_id order_date 4000 4 2016/04/20 5000 2 2016/04/18 6000 NULL NULL 7000 1 2016/04/18 8000 3 2016/04/19 9000 NULL NULL Εάν μια τιμή customer_id στο πίνακα customers ΔΕΝ υπάρχει στον πίνακα orders, όλα τα πεδία του πίνακα orders θα εμφανίζονται ως NULL στα αποτελέσματα.

Right Outer Join SQL RIGHT [OUTER] JOINS: Επιστρέφει όλες τις γραμμές από τον δεξί πίνακα που ορίζεται στην ON συνθήκη και μόνο εκείνες τις γραμμές από τον άλλο πίνακα που επαληθεύουν την join συνθήκη. SELECT στήλες FROM πίνακα1 RIGHT [OUTER] JOIN πίνακα2 ON πίνακα1.στήλη = πίνακα2.στήλη;

Παράδειγμα Right Outer join SELECT customers.customer_id, orders.order_id, orders.order_date FROM customers RIGHT OUTER JOIN orders ON customers.customer_id = orders.customer_id ORDER BY customers.customer_id; customers customer_id last_name first_name favorite_website 4000 Jackson Joe techonthenet.com 5000 Smith Jane digminecraft.com 6000 Ferguson Samantha bigactivities.com 7000 Reynolds Allen checkyourmath.com 8000 Anderson Paige NULL 9000 Johnson Derek techonthenet.com orders order_id customer_id order_date 1 7000 2016/04/18 2 5000 2016/04/18 3 8000 2016/04/19 4 4000 2016/04/20 5 NULL 2016/05/01 customer_id order_id order_date NULL 5 2016/05/01 4000 4 2016/04/20 5000 2 2016/04/18 7000 1 2016/04/18 8000 3 2016/04/19 Εάν μια τιμή customer_id στο πίνακα orders ΔΕΝ υπάρχει στον πίνακα customers, όλα τα πεδία του πίνακα customers θα εμφανίζονται ως NULL στα αποτελέσματα.

Full Outer Join SQL FULL [OUTER] JOINS: Επιστρέφει όλες τις γραμμές από τον δεξί πίνακα και τον αριστερό πινακα με NULL τιμές όπου δεν επαληθεύεται η συνθήκη. SELECT στήλες FROM πίνακα1 FULL [OUTER] JOIN πίνακα2 ON πίνακα1.στήλη = πίνακα2.στήλη;

Παράδειγμα Full Outer join SELECT customers.customer_id, orders.order_id, orders.order_date FROM customers FULL OUTER JOIN orders ON customers.customer_id = orders.customer_id ORDER BY customers.customer_id; customers customer_id last_name first_name favorite_website 4000 Jackson Joe techonthenet.com 5000 Smith Jane digminecraft.com 6000 Ferguson Samantha bigactivities.com 7000 Reynolds Allen checkyourmath.com 8000 Anderson Paige NULL 9000 Johnson Derek techonthenet.com orders order_id customer_id order_date 1 7000 2016/04/18 2 5000 2016/04/18 3 8000 2016/04/19 4 4000 2016/04/20 5 NULL 2016/05/01 customer_id order_id order_date NULL 5 2016/05/01 4000 4 2016/04/20 5000 2 2016/04/18 6000 NULL NULL 7000 1 2016/04/18 8000 3 2016/04/19 9000 NULL NULL Εάν μια τιμή customer_id στο πίνακα customers δεν υπάρχει στο πίνακα orders, όλα τα πεδία στον πίνακα orders θα εμφανιστούν ως NULL στα αποτελέσματα. Επίσης εάν μια τιμή customer_id στο πίνακα orders δεν υπάρχει στον πίνακα customers, όλα τα πεδία στον πίνακα customers θα εμφανιστούν ως NULL.

Τελεστής UNION Χρησιμοποιείται για την ένωση δύο ή περισσοτέρων SELECT εντολών, αφαιρώντας τις διπλοεγγραφές. Πρέπει κάθε εντολή να έχει τον ίδιο αριθμό στηλών και παρόμοια δεδομένα SELECT έκφραση1, έκφραση2,... έκφραση_n FROM πίνακες [WHERE συνθήκες] UNION SELECT έκφραση1, έκφραση2,... έκφραση_n FROM πίνακες [WHERE συνθήκες]; Σημαντική σημείωση Πρέπει να υπάρχει ο ίδιος αριθμός εκφράσεων (στηλών κτλ) και στις δυο εντολές. Οι αντίστοιχες στήλες πρέπει να χουν παρόμοιο τύπο δεδομένων. Ο τελεστής UNION αφαιρεί τις διπλοεγγραφές. Για να μην αφαιρούνται οι διπλοεγγραφές χρησιμοποιούμε τον τελεστή UNION ALL. Πχ SELECT contact_id, contact_name FROM contacts WHERE site_name = 'TechOnTheNet.com' UNION ALL SELECT company_id, company_name FROM companies WHERE site_name = 'CheckYourMath.com'

Τελεστής INTERSECT Χρησιμοποιείται για την επιστροφή εκείνων των εγγραφών που είναι κοινές σε δυο σύνολα δεδομένων. SELECT έκφραση1, έκφραση2,... έκφραση_n FROM πίνακες [WHERE συνθήκες] INTERSECT SELECT έκφραση1, έκφραση2,... έκφραση_n FROM πίνακες [WHERE συνθήκες]; Σημαντική σημείωση Πρέπει να υπάρχει ο ίδιος αριθμός εκφράσεων (στηλών κτλ) και στις δυο εντολές. Οι αντίστοιχες στήλες πρέπει να έχουν τον ίδιο τύπο δεδομένων. Πχ SELECT contact_id, last_name, first_name FROM contacts WHERE last_name <> 'Anderson' INTERSECT SELECT customer_id, last_name, first_name FROM customers WHERE customer_id < 50;

Τελεστής EXCEPT Χρησιμοποιείται για να επιστραφούν εκείνες οι γραμμές από την πρώτη εντολή SELECT που δεν επιστρέφονται με τη δεύτερη εντολή SELECT. O τελεστής EXCEPT θα βρει όλες τις εγγραφές από το πρώτο dataset και θα αφαιρέσει εκείνες τις εγγραφές του δεύτερου dataset. SELECT έκφραση1, έκφραση2,... έκφραση_n FROM πίνακες [WHERE συνθήκες] EXCEPT SELECT έκφραση1, έκφραση2,... έκφραση_n FROM πίνακες [WHERE συνθήκες]; Σημαντική σημείωση Πρέπει να υπάρχει ο ίδιος αριθμός εκφράσεων (στηλών κτλ) και στις δυο εντολές. Οι αντίστοιχες στήλες πρέπει να έχουν παρόμοιο τύπο δεδομένων. Πχ SELECT contact_id, last_name, first_name FROM contacts WHERE last_name = 'Anderson' EXCEPT SELECT employee_id, last_name, first_name FROM employees;

Η πρόταση WHERE Χρησιμοποιείται για το φιλτράρισμα των αποτελεσμάτων και την εφαρμογή συνθηκών σε εντολές SELECT, INSERT, UPDATE, DELETE. WHERE συνθήκες; συνθήκες Οι συνθήκες που πρέπει να επαληθεύονται για να επιλεχθούν οι εγγραφές. Παραδείγματα SELECT * FROM suppliers WHERE state = 'California'; SELECT * FROM customers WHERE favorite_website = 'techonthenet.com' AND customer_id > 6000; SELECT * FROM products WHERE product_name = 'Pear' OR product_name = 'Apple'; SELECT * FROM products WHERE (product_id > 3 AND category_id = 75) OR (product_name = 'Pear');

Η πρόταση ORDER BY Χρησιμοποιείται για την ταξινόμηση των εγγραφών στο σύνολο των αποτελεσμάτων μιας εντολής SELECT. ORDER BY έκφραση[ ASC DESC ; ORDER BY έκφραση Η έκφραση που χρησιμοποιείται για την ταξινόμηση των εγγραφών. ASC ταξινομεί τις εγγραφές με αύξουσα σειρά. DESC ταξινομεί τις εγγραφές με φθίνουσα σειρά. By default ταξινομούνται τα αποτελέσματα με αύξουσα σειρά. Παραδείγματα SELECT * FROM customers ORDER BY last_name; SELECT * FROM suppliers WHERE supplier_id > 400 ORDER BY supplier_id DESC; SELECT * FROM products WHERE product_id <> 7 ORDER BY category_id DESC, product_name ASC;

Η πρόταση GROUP BY Μπορεί να χρησιμοποιηθεί για σε μια εντολή SELECT για την συλλογή δεδομένων από πολλές γραμμές και την ομαδοποίηση των αποτελεσμάτων σε μια ή περισσότερες στήλες. SELECT έκφραση1, έκφραση2,... έκφραση_n, συσσωρευτική_συνάρτηση (συσσωρευτική_έκφραση) FROM πίνακες [WHERE συνθήκες] GROUP BY έκφραση1, έκφραση2,... έκφραση_n [ORDER BY έκφραση [ ASC DESC ]]; έκφραση1, έκφραση2,... έκφραση_n Εκφράσεις που δεν ενθυλακώνονται σε μια συσσωρευτική συνάρτηση και πρέπει να περιληφθούν στην πρόταση GROUP BY στο τέλος της εντολής SQL. Συσσωρευτική_συνάρτηση SUM, COUNT, MIN, MAX, AVG συσσωρευτικές συναρτήσεις. Συσσωρευτική_έκφραση Στήλη ή έκφραση που η συσσωρευτική συνάρτηση θα χρησιμοποιηθεί.

Παράδειγμα Group By (SUM function) SELECT dept_id, SUM(salary) AS total_salaries FROM employees GROUP BY dept_id; Για το εργαστήριο. Βρες τη συνολική μισθοδοσία ανά τμήμα(όνομα τμήματος) SELECT d.dept_name, sum(e.salary) AS total_salaries FROM employees as e INNER JOIN departments as d on e.dept_id= d.dept_id GROUP BY d.dept_name ORDER BY d.dept_name ; employees employee_number last_name first_name salary dept_id 1001 Smith John 62000 500 1002 Anderson Jane 57500 500 1003 Everest Brad 71000 501 1004 Horvath Jack 42000 501 dept_id total_salaries 500 119500 501 113000

Παράδειγμα Group By (COUNT function) SELECT category_id, COUNT(*) AS total_products FROM products WHERE category_id IS NOT NULL GROUP BY category_id ORDER BY category_id; products product_id product_name category_id 1 Pear 50 2 Banana 50 3 Orange 50 4 Apple 50 5 Bread 75 6 Sliced Ham 25 7 Kleenex NULL category_id total_products 25 1 50 4 75 1 Για το εργαστήριο. Βρες το σύνολο των προϊόντων ανά κατηγορία (όνομα κατηγορίας) SELECT c.category_name, COUNT(p.product_id) AS total_products FROM products as p INNER JOIN categories as c on c.category_id = p.category_id WHERE p.category_id IS NOT NULL GROUP BY c.category_name ORDER BY c.category_name ;

Η πρόταση HAVING Χρησιμοποιείται σε συνδυασμό με τη πρόταση GROUP BY για το περιορισμό του συνόλου των αποτελεσμάτων σε αυτά όπου η συνθήκη είναι ΑΛΗΘΗΣ. SELECT έκφραση1, έκφραση2,... έκφραση_n, συσσωρευτική_συνάρτηση (συσσωρευτική_έκφραση) FROM πίνακες [WHERE συνθήκες] GROUP BY έκφραση1, έκφραση2,... έκφραση_n HAVING συνθήκη; Συνθήκη HAVING Συνθήκη που εφαρμόζεται μόνο στα συσσωρευτικά αποτελέσματα για τον περιορισμό των συνόλων των αποτελεσμάτων. Μόνο τα σύνολα που επαληθεύουν την συνθήκη σε ΑΛΗΘΗΣ θα περιλαμβάνονται στο αποτέλεσμα.

Παραδείγματα HAVING SUM function SELECT department, SUM(sales) AS "Total sales" FROM order_details GROUP BY department HAVING SUM(sales) > 1000; COUNT function SELECT department, COUNT(*) AS "Number of employees" FROM employees WHERE salary > 25000 GROUP BY department HAVING COUNT(*) > 10; MIN function SELECT department, MIN(salary) AS "Lowest salary" FROM employees GROUP BY department HAVING MIN(salary) > 35000; MAX function SELECT department, MAX(salary) AS "Highest salary" FROM employees GROUP BY department HAVING MAX(salary) < 50000;

Υποερωτήματα (SubQueries) Ένα υποερώτημα είναι ερώτημa μέσα σε ένα ερώτημα. Τα υποερωτήματα βρίσκονται στη πρόταση WHERE, στη πρόταση FROM, ή στη πρόταση SELECT. Πρόταση WHERE SELECT p.product_id, p.product_name FROM products p WHERE p.product_id IN (SELECT inv.product_id FROM inventory inv WHERE inv.quantity > 10); Πρόταση FROM SELECT suppliers.supplier_name, subquery1.total_amt FROM suppliers, (SELECT supplier_id, SUM(orders.amount) AS total_amt FROM orders GROUP BY supplier_id) subquery1 WHERE subquery1.supplier_id = suppliers.supplier_id; Πρόταση SELECT SELECT e1.last_name, e1.first_name, (SELECT MAX(salary) FROM employees e2 WHERE e1.employee_number = e2.employee_number) subquery2 FROM employees e1;

Συνθήκες SQL Χρησιμοποιούνται με τις εντολές SELECT, INSERT, UPDATE, DELETE AND 2 ή περισσότερες συνθήκες πρέπει να επαληθεύονται. WHERE συνθήκη1 AND συνθήκη2... AND συνθήκη_n; Π.χ. SELECT * FROM customers WHERE favorite_website = 'techonthenet.com' AND customer_id > 6000 ORDER BY last_name; OR μια από τις συνθήκες χρειάζεται να επαληθεύεται. WHERE συνθήκη1 OR συνθήκη2... OR συνθήκη_n; Π.χ. SELECT * FROM suppliers WHERE city = 'Mountain View' OR supplier_id = 100 ORDER BY supplier_name;

Συνθήκες SQL (συνέχεια) AND & OR Συνδυάζοντας τις συνθήκες AND, OR. WHERE συνθήκη1 AND συνθήκη2... OR συνθήκη_n; Π.χ. UPDATE customers SET favorite_website = 'techonthenet.com' WHERE customer_id = 6000 OR (customer_id > 7000 AND last_name <> 'Johnson'); DELETE FROM products WHERE category_id = 25 OR (product_id < 4 AND product_name <> 'Banana');

Συνθήκες SQL (συνέχεια) LIKE Χρήση wildcards ( % ) σε μια πρόταση WHERΕ. Έκφραση LIKE μοτίβο[ ESCAPE χαρακτήρας_διαφυγής' ] έκφραση Μια έκφραση χαρακτήρων όπως μια στήλη ή ένα πεδίο. μοτίβο Μια έκφραση χαρακτήρων που περιέχουν ταίριασμα μοτίβου. Οι ειδικοί χαρακτήρες (wildcards) που μπορούμε να επιλέξουμε είναι: Wildcard % εξήγηση Επιτρέπει το ταίριασμα οποιοδήποτε string ανεξαρτήτως μήκους (συμπεριλαμβανομένου και μηδενικού μήκους) ESCAPE χαρακτήρας_διαφυγής' Προαιρετικό. Επιτρέπει το ταίριασμα μοτίβου σε πραγματικά στιγμιότυπα ενός χαρακτήρα διαφυγής.

Συνθήκες SQL ( LIKE συνέχεια) Π.χ. Χρησιμοποιώντας τον % Wildcard SELECT * FROM customers WHERE last_name LIKE 'J%' ORDER BY last_name; customers customer_id last_name first_name favorite_website 4000 Jackson Joe techonthenet.com 5000 Smith Jane digminecraft.com 6000 Ferguson Samantha bigactivities.com 7000 Reynolds Allen checkyourmath.com 8000 Anderson Paige NULL 9000 Johnson Derek techonthenet.com customer_id last_name first_name favorite_website 4000 Jackson Joe techonthenet.com 9000 Johnson Derek techonthenet.com

Συνθήκες SQL ( LIKE συνέχεια) Π.χ. Χρησιμοποιώντας τον % Wildcard πολλές φορές SELECT last_name FROM customers WHERE last_name LIKE '%e%' ORDER BY last_name; customers customer_id last_name first_name favorite_website 4000 Jackson Joe techonthenet.com 5000 Smith Jane digminecraft.com 6000 Ferguson Samantha bigactivities.com 7000 Reynolds Allen checkyourmath.com 8000 Anderson Paige NULL 9000 Johnson Derek techonthenet.com last_name Anderson Ferguson Reynolds

Συνθήκες SQL (συνέχεια) IN Εναλλακτική πολλαπλών OR συνθηκών. Έκφραση IN (τιμή1, τιμή2,... τιμή_n); Π.χ. SELECT * FROM suppliers WHERE supplier_name IN ('Microsoft', 'Oracle', 'Flowers Foods'); NOT Ακύρωση μια συνθήκης. NOT συνθήκη Π.χ. SELECT * FROM products WHERE product_name NOT IN ('Pear', 'Banana', 'Bread'); SELECT * FROM suppliers WHERE supplier_name NOT LIKE '%o%';

Συνθήκες SQL (συνέχεια) IS NULL έλεγχος για NULL τιμή. Έκφραση IS NULL Π.χ. SELECT * FROM customers WHERE favorite_website IS NULL; UPDATE products SET category_id = 100 WHERE category_id IS NULL; IS NOT NULL Έλεγχος για NOT NULL τιμή. Έκφραση IS NOT NULL Π.χ. UPDATE customers SET favorite_website = 'techonthenet.com' WHERE favorite_website IS NOT NULL;

Συνθήκες SQL (συνέχεια) BETWEEN Εύρεση σε ένα εύρος τιμών. Έκφραση BETWEEN τιμή1 AND τιμή2; Π.χ. SELECT * FROM suppliers WHERE supplier_id BETWEEN 300 AND 600; SELECT * FROM customers WHERE customer_id NOT BETWEEN 5000 AND 8000; EXISTS γραμμή. Επαληθεύεται εάν το υποερώτημα επιστρέφει μια τουλάχιστον WHERE EXISTS ( υποερώτημα );

Συνθήκες SQL ( EXISTS συνέχεια) Π.χ. SELECT * FROM customers WHERE EXISTS (SELECT * FROM orders WHERE customers.customer_id = orders.customer_id); Για το εργαστήριο. Βρες τους πελάτες που έχουν κάνει τουλάχιστον μια παραγγελία select * from customers inner join orders on customers.customer_id = orders.customer_id customers customer_id last_name first_name favorite_website 4000 Jackson Joe techonthenet.com 5000 Smith Jane digminecraft.com 6000 Ferguson Samantha bigactivities.com 7000 Reynolds Allen checkyourmath.com 8000 Anderson Paige NULL 9000 Johnson Derek techonthenet.com orders order_id customer_id order_date customer_id last_name first_name favorite_website 1 7000 2016/04/18 4000 Jackson Joe techonthenet.com 2 5000 2016/04/18 5000 Smith Jane digminecraft.com 3 8000 2016/04/19 7000 Reynolds Allen checkyourmath.com 4 4000 2016/04/20 8000 Anderson Paige NULL

Τελεστές Σύγκρισης Χρησιμοποιούνται στην πρόταση WHERE για να αποφασιστεί ποιες εγγραφές θα επιλεχθούν. Τελεστής σύγκρισης περιγραφή = ίσο <> Όχι ίσο!= Όχι ίσο > Μεγαλύτερο από >= Μεγαλύτερο από ή Ίσο < Μικρότερο από <= Μικρότερο από ή Ίσο

Alias (ψευδώνυμα) Παραδείγματα SELECT dept_id, COUNT(*) AS total FROM employees GROUP BY dept_id; SELECT p.product_name, c.category_name FROM products AS p INNER JOIN categories AS c ON p.category_id = c.category_id WHERE p.product_name <> 'Pear'; SELECT dept_id, COUNT(*) AS "total employees" FROM employees GROUP BY dept_id;

DML - INSERT Η εντολή INSERT χρησιμοποιείται για να εισάγουμε μια ή περισσότερες γραμμές σε έναν πίνακα. INSERT INTO πίνακας (στήλη1, στήλη2,... ) VALUES (έκφραση1, έκφραση2,... ); ή INSERT INTO πίνακας (στήλη1, στήλη2,... ) SELECT έκφραση1, έκφραση2,... FROM πίνακες_πηγές [WHERE συνθήκες];

Παραδείγματα εντολής INSERT INSERT INTO categories (category_id, category_name) VALUES (150, 'Miscellaneous'); INSERT INTO categories VALUES (150, 'Miscellaneous'); INSERT INTO customers (customer_id, last_name, first_name) SELECT employee_number AS customer_id, last_name, first_name FROM employees WHERE employee_number < 1003;

DML - UPDATE Η εντολή UPDATE χρησιμοποιείται για να ενημερώσουμε υπάρχουσες γραμμές σε έναν πίνακα. UPDATE πίνακας SET στήλη1= έκφραση1, στήλη2= έκφραση2,... [WHERE συνθήκες]; Ή UPDATE πίνακας1 SET στήλη1= (SELECT έκφραση1 FROM πίνακα2 WHERE συνθήκες) [WHERE συνθήκες];

Παραδείγματα εντολής UPDATE UPDATE customers SET first_name = 'Judy' WHERE customer_id = 8000; UPDATE suppliers SET supplier_id = 150, supplier_name = 'Apple', city = 'Cupertino' WHERE supplier_name = 'Google'; UPDATE summary_data SET current_category = (SELECT category_id FROM products WHERE products.product_id = summary_data.product_id) WHERE EXISTS (SELECT category_id FROM products WHERE products.product_id = summary_data.product_id);

DML - DELETE Η εντολή DELETE χρησιμοποιείται για να διαγράψουμε μία ή περισσότερες γραμμές από έναν πίνακα. DELETE FROM πίνακας [WHERE συνθήκες]; π.χ. DELETE FROM suppliers WHERE supplier_name = 'Microsoft'; DELETE FROM products WHERE category_id = 50 AND product_name <> 'Pear'; DELETE FROM orders WHERE EXISTS (SELECT * FROM customers WHERE customers.customer_id = orders.customer_id AND customers.last_name = 'Jackson');

DDL CREATE TABLE Η εντολή CREATE TABLE χρησιμοποιείται για τη δημιουργία και τον ορισμό ενός πίνακα. CREATE TABLE ονομα_πινακα ( στήλη1 τυποςδεδομενων[ NULL NOT NULL ], στηλη2 τυποςδεδομενων[ NULL NOT NULL ],... ); π.χ. CREATE TABLE suppliers ( supplier_id int NOT NULL, supplier_name char(50) NOT NULL, contact_name char(50), CONSTRAINT suppliers_pk PRIMARY KEY (supplier_id) ); CREATE TABLE employees ( employee_number int NOT NULL, employee_name char(50) NOT NULL, department_id int, salary int, CONSTRAINT employees_pk PRIMARY KEY (employee_number), CONSTRAINT fk_departments FOREIGN KEY (department_id) REFERENCES departments(department_id) );

DDL DROP TABLE Η εντολή DROP TABLE χρησιμοποιείται για τη διαγραφή και την απομάκρυνση ενός πίνακα από τη ΒΔ. DROP TABLE όνομα_πινακα; π.χ. DROP TABLE suppliers;

DDL ALTER TABLE Η εντολή ALTER TABLE χρησιμοποιείται για τη προσθήκη μιας στήλης, τη τροποποίηση μιας στήλης, την αφαίρεση μιας στήλης, τη μετονομασία μιας στήλης ή ενός πίνακα. ALTER TABLE ονομα_πινακα ADD (στήλη1 ορισμός-στήλης, στήλη2 ορισμός-στήλης,... στήλη_n ορισμός-στήλης); ALTER TABLE ονομα_πινακα ALTER COLUMN ονομα_στήλης τύπος_στήλης; Π.χ. ALTER TABLE supplier ALTER COLUMN supplier_name VARCHAR(100) NOT NULL; ALTER TABLE supplier DROP COLUMN supplier_name;

DDL CREATE VIEW Η όψη (VIEW) είναι ένας εικονικός πίνακας. Δημιουργείται ερωτώντας πίνακες ή/και συνδέοντας πίνακες. CREATE VIEW [όνομα_σχήματος.]όνομα_όψης AS [ WITH { ENCRYPTION SCHEMABINDING VIEW_METADATA } SELECT εκφράσεις FROM πίνακες [WHERE συνθήκες]; Π.χ CREATE VIEW prod_inv AS SELECT products.product_id, products.product_name, inventory.quantity FROM products INNER JOIN inventory ON products.product_id = inventory.product_id WHERE products.product_id >= 1000; Μπορούμε να εκτελέσουμε ερωτήματα στην όψη πχ. Select * from prod_inv Μπορούμε να τροποποιήσουμε ένα VIEW. Π.χ ALTER VIEW prod_inv AS SELECT products.product_name, inventory.quantity FROM products INNER JOIN inventory ON products.product_id = inventory.product_id WHERE products.product_id >= 500 AND products.product_id <= 1000; Μπορούμε επίσης να διαγράψουμε μια όψη από τη Βάση Δεδομένων. Π.χ. DROP VIEW prod_inv;

DDL CREATE VIEW (συνέχεια) Για το εργαστήριο CREATE VIEW [dbo].[orders_view] AS SELECT customers.first_name, customers.last_name, orders.order_date FROM customers INNER JOIN orders ON customers.customer_id = orders.customer_id; ALTER VIEW [dbo].[orders_view] AS SELECT customers.first_name, customers.last_name, orders.order_date FROM customers INNER JOIN orders ON customers.customer_id = orders.customer_id where orders.order_date > CONVERT(datetime, '2016-04-18');