Βάσεις Δεδομένων (Databases) ΕΠΛ 342 Χειμερινό Εξάμηνο 2011 Διδάσκοντες Καθηγητές Γιώργος Σαμάρας (ΧΩΔ01 109)
Δομημένη Γλώσσα Ερωτήσεων SQL - DDL SQL Περίληψη SQL Τύποι δεδομένων DDL Δηλώσεις - Εντολές
Δηλωτικές Ερωτήσεις SELECT Title, TeamName FROM WHERE Rank = 1; Title TeamName Champions
SQL Περίληψη SQL είναι η γλώσσα ερωτήσεων για το System R και υλοποιήθηκε από την IBM San Jose [Astraham, Gray, Linsday, Selinger, ] SQL είναι το de-facto πρότυπο στις περισσότερες RDBMS Οι πιο επιτυχημένες προσπάθειες τυποποίησης SQL (ANSI 1986) SQL1 (ANSI 1989) SQL2 or SQL92 (ANSI 1992) SQL3 (ANSI 1999/2000) SQL = DDL + DML
SQL Τύποι δεδομένων Αριθμητικοί Σειρά χαρακτήρων Σειρά από δυαδικά ψηφία (Bit) Χρονολογικά δεδομένα NULL τιμή έγκυρη για όλους τους τύπους
SQL Αριθμητικά δεδομένα Ακέραιοι αριθμοί: Δύο τύποι δεκαδικών ακεραίων αριθμών με διαφορετικό εύρος: INTEGER (ή INT) και SMALLINT Το εύρος των αριθμητικών τύπων εξαρτάτε από την υλοποίηση Πραγματικοί Αριθμοί: 3 τύποι κινητής υποδιαστολής: FLOAT [ακρίβεια], REAL, και DOUBLE PRECISION Οι χρήστες μπορούν να καθορίσουν την ακρίβεια του FLOAT Η ακρίβεια του REAL και DOUBLE PRECISION είναι αμετάβλητη Η γραφή μπορεί να είναι δεκαδική ή επιστημονική (με εκθέτη) Τυποποιημένοι Αριθμοί: 3 τύποι δεκαδικής μορφής: DECIMAL(i,j), DEC(i,j) ή NUMERIC(i,j) i = ακρίβεια (# ολων των ψηφίων εκτός της υποδιαστολής) j = κλίμακα (# των δεκαδικών ψηφίων. J=0 το προκαθορισμένο)
Παρατηρήσεις στους αριθμητικούς τύπους Είναι σαν τα datatype στην C BIGINT για long integer ή integer Το Truncation είναι σχεδόν 0 Η στρογγυλοποίηση είναι business αντί Scientific [0..4] 0 [0..4] 0 [6..9] 1 [5..9] 1 Τις μισές φορές το 5 είναι 0 και μισές 1 Μερικά συστήματα χρησιμοποιούν Number() για floating Χρήματα ή Νομισματικά δεδομένα είναι αριθμητικά δεδομένα με το σύμβολο του νομίσματος
SQL Σειρά χαρακτήρων Μια Σειρά χαρακτήρων είναι μια σειρά από εκτυπώσιμους (printable) χαρακτήρες Στην SQL, η σειρές χαρακτήρων (character string) δηλώνονται με μονά εισαγωγικά: Hello SQL Δύο τύποι character strings Σταθερού μήκους n: CHAR(n) ή CHARACTER(n) Μεταβλητού μήκους, μέγιστου μεγέθους n: VARCHAR(n) ή CHAR VARYING (n) Η προκαθορισμένη τιμή του n είναι 1, αντιπροσωπεύοντας ένα μονό χαρακτήρα. Επίσης, CHAR ή CHARACTER Χαρακτήρες ξένων γλωσσών (ISO-defined chars): NATIONAL CHARACTER(n) και NATIONAL VARYING CHARACTER(n)
SQL Σειρά δυαδικών ψηφίων (Bit Strings) Τα Bit strings είναι σειρές από δυαδικά ψηφία, ή bits Τύποι Bit Strings Σταθερού μήκους n: BIT(n) Μεταβλητού μήκους, μέγιστου μεγέθους n: VARBIT(n) ή BIT VARYING (n) Η προκαθορισμένη τιμή του n είναι 1.
SQL Χρονολογικά δεδομένα (Temporal Data) Τρεις τύποι χρονολογικών δεδομένων DATE TIME και TIMESTAMP τύπος δεδομένων INTERVAL τύπος δεδομένων. INTERVAL αντιπροσωπεύει τύπους δεδομένων
Ημερομηνία και Ώρα DATE (10 θέσεις) αποθηκεύει τιμή ημερολογίου YEAR, MONTH, και DAY: YYYY-MM-DD TIME ορίζει HOURS, MINUTES, και SECONDS με 24ωρη δήλωση: HH:MM:SS TIME(i) ορίζει i επιπρόσθετα δεκαδικά κλάσματα δευτερολέπτου: HH:MM:SS:ddd...d TIME WITH TIME ZONE περιλαμβάνει το εκτόπισμα [+13:00 to -12:59] από την πρότυπη παγκόσμια ζώνη ώρας (time zone): HH:MM:SS+/-hh:mm hh είναι τα 2 ψηφία για το TIMEZONE_HOUR και mm τα 2 ψηφία για το TIMEZONE_MINUTE TIMESTAMP αντιπροσωπεύει μια πλήρη ημερομηνία και ώρα με 6 κλάσματα του δευτερολέπτου και ζώνη ώρας κατ επιλογή.
Διαστήματα (Intervals) Διάστημα είναι το αποτέλεσμα από την αφαίρεση 2 ημερομηνιών. Π.χ., AdmitDate DischargeDate Έχουμε 2 τύπους διαστημάτων: Year-Month & Day-Time Format: INTERVAL start-field(p) [TO end-field(fs)] p είναι η ακρίβεια (προκαθορισμένη τιμή p=2) fs είναι η ακρίβεια των δεκαδικών κλασμάτων των δευτερολέπτων, εφαρμόζετε μόνο στο DAY/TIME (προκαθορισμένη τιμή είναι τα 6 ψηφία) Year-Month διαστήματα: INTERVAL YEAR, INTERVAL YEAR(p), INTERVAL MONTH, INTERVAL MONTH(p), INTERVAL YEAR TO MONTH, INTERVAL YEAR(p) TO MONTH Π.χ., INTERVAL YEAR(2) to MONTH καθορίζεται στο [0:0,99:11]
Διαστήματα (Intervals) DAY-TIME διαστήματα: τα πεδία μπορεί να είναι παραπλήσια επιλογή από την DAY, HOUR, MINUTE, SECOND E.g., INTERVAL DAY TO HOUR [0:0, 99:23] (day:hours) INTERVAL DAY(1) TO HOUR INTERVAL DAY TO MINUTE INTERVAL SECOND(8) INTERVAL DAY(5) to SECOND(10) INTERVAL MINUTE(3) to SECOND
Συναρτήσεις για τα Dates Όλα τα συστήματα παρέχουν συναρτήσεις με διάφορα ονόματα Για κατασκευή ημερομηνίας από strings ή integers Για εξαγωγή μήνα, ημέρας, ή χρονολογίας από μια ημερομηνία Για εμφάνιση ημερομηνίας με διάφορους τρόπους Παραδείγματα, CAST(string AS DATE) [SQL2: CAST(<value> AS <type>] π.χ., 2002-02-18' AS DATE MAKEDATE (int year, int month, int day) ή DATE (int year, int month, int day) π.χ., MAKEDATE(1999, 12, 31) EXTRACT (MONTH/DAY/YEAR FROM <date>) [SQL3] YEAR(<date>), MONTH(<date>), DAY(<date>)
Πράξεις για τα Dates Datetime (+ ή -) Interval = Datetime Datetime - Datetime = Interval Interval (* ή /) Number = Interval Interval (+ ή -) Interval = Interval Παραδείγματα: (CURRENT_DATE + INTERVAL '1' MONTH) (CURRENT_DATE - INTERVAL 18' DAY) (CURRENT_DATE BirthDate)
Βασικές SQL-DDL Εντολές Για το σχήμα της βάσης: CREATE SCHEMA, DROP SCHEMA Για τα πεδία ορισμού: CREATE DOMAIN, DROP DOMAIN Για τους πίνακες: CREATE TABLE, DROP TABLE, ALTER TABLE Για τα views: CREATE VIEW, DROP VIEW Για τους περιορισμούς ακεραιότητας Για τα Indexes [καταργήθηκαν στην SQL2]
Σχήμα Βάσης Δεδομένων CREATE SCHEMA <database-name> AUTHORIZATION <user-identifier>; Για παράδειγμα: CREATE SCHEMA micro_db AUTHORIZATION panos; DROP SCHEMA <db-name> [RESTRICT CASCADE]; Restrict: αφαιρεί το σχήμα αν η βάση δεν έχει δεδομένα Cascade: αφαιρεί τα πάντα, δεδομένα και ορισμούς Π.χ., DROP SCHEMA micro_db RESTRICT;
Σχήμα και κατάλογος SQL2, SQL3 υποστηρίζουν πολλαπλά σχήματα βάσης Ο Κατάλογος (Catalog) περιέχει τους ορισμούς του σχήματος της βάσης INFORMATION_SCHEMA Σχήματα και σχέσης (πίνακες) tbl-name, creator, #of-tuples, tuple-length, #of-attributes Χαρακτηριστικά των σχέσεων (στήλες) tbl-name, atrb-name,type, format, order, key-no,... Indexes tbl-name, index-name, key-attribute,... Εξουσιοδότηση Ακεραιότητα Ονοματολογία των πινάκων: Schema-name.Table-name