ΡΑΝΕΡΙΣΤΗΜΙΟ ΡΕΙΑΙΩΣ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΕΓΑΣΤΗΙΟ 1 ΔΕΣΡΟΙΝΑ ΡΑΡΑΚΩΝΣΤΑΝΤΙΝΟΥ dpap@unipi.gr
Γενικά για SQL
3 SQL Η SQL (Structured Query Language) αποτελεί μια πρότυπθ γλϊςςα οριςμοφ και χειριςμοφ δεδομζνων για Σχεςιακά Συςτιματα Διαχείριςθσ Βάςεων Δεδομζνων. Είναι μια ςχεςιακι γλϊςςα βάςεων δεδομζνων. Η SQL ςυνεργάηεται με πολλά ΣΔΒΔ. Η SQL εκτελεί ερωτιματα (queries) ςχετικά με μια βάςθ δεδομζνων. ανακτά δεδομζνα από μια βάςθ δεδομζνων. ειςάγει νζεσ εγγραφζσ ςε μια βάςθ δεδομζνων. διαγράφει εγγραφζσ από μια βάςθ δεδομζνων. ενθμερώνει εγγραφζσ ςε μια βάςθ δεδομζνων. επεξεργάηεται πίνακεσ.
4 SQL ΟΙΣΜΟΣ ΔΕΔΟΜΕΝΩΝ (1/2) Δθμιουργία Ρινάκων: CREATE TABLE <όνομα πίνακα> (<όνομα ςτιλθσ> <τφποσ δεδομζνων>,, <όνομα ςτιλθσ> <τφποσ δεδομζνων>) *περιοριςμοί ακεραιότθτασ δεδομζνων+ π.χ. CREATE TABLE ITEM (ITEM_CODE CHAR(8) NOT NULL, ITEM_NAME VARCHAR(25), PRIMARY KEY (ITEM_CODE)); ΡΟΣΟΧΗ: ΤΑ ΡΩΤΕΥΟΝΤΑ ΚΛΕΙΔΙΑ ΤΩΝ ΡΙΝΑΚΩΝ ΔΕΝ ΜΡΟΟΥΝ ΝΑ ΡΑΙΝΟΥΝ ΚΕΝΕΣ ΤΙΜΕΣ, ΡΕΡΕΙ ΝΑ ΔΗΛΩΝΟΝΤΑΙ NOT NULL, ΣΕ ΑΝΤΙΘΕΣΗ ΜΕ ΤΑ ΑΡΛΑ ΧΑΑΚΤΗΙΣΤΙΚΑ ΡΟΥ ΕΧΟΥΝ ΑΥΤΗ ΤΗ ΔΥΝΑΤΟΤΗΤΑ.
5 SQL ΟΙΣΜΟΣ ΔΕΔΟΜΕΝΩΝ (2/2) Διαγραφι Ρινάκων: DROP TABLE <όνομα πίνακα> CASCADE RESTRICT Η εντολι CASCADE ςθμαίνει ότι μαηί με τον πίνακα διαγράφονται και όλα τα αντικείμενα που ςχετίηονται με αυτόν, όπωσ κεωριςεισ, ενϊ θ εντολι RESTRICT ςθμαίνει ότι ο πίνακασ κα διαγραφεί εφόςον δεν ζχει οριςτεί κανζνα αντικείμενο ςε αυτόν. π.χ. DROP TABLE ITEM CASCADE; DROP TABLE ITEM RESTRICT; Τροποποίθςθ Ρινάκων: θ τροποποίθςθ μπορεί να αφορά ςτθν πρόςκεςθ ι ςτθ διαγραφι ςτιλθσ (χαρακτθριςτικοφ), ςτθν τροποποίθςθ του οριςμοφ μιασ ςτιλθσ κτλ. ALTER TABLE <όνομα πίνακα> <επικυμθτι ενζργεια> π.χ. ALTER TABLE ITEM ADD ITEM_QUANTITY INT; ALTER TABLE ITEM DROP ITEM_QUANTITY INT; ALTER TABLE ITEM ALTER ITEM_SERIALNUMBER CHAR(15);
ΓΑΦΟΝΤΑΣ ΕΡΕΩΤΗΜΑΤΑ Πταν γράφετε επερωτιματα Υπάρχουν πολλοί τρόποι να ςυντάξετε ζνα επερϊτθμα (δεν υπάρχει πάντα μία μοναδικι απάντθςθ ςε ζνα ερϊτθμα). Αυτό που κα πρζπει να ςασ απαςχολεί είναι το να είςτε ςυντακτικά ςωςτοί, ξεκάκαροι και ςυνοπτικοί. Δεν πρζπει να ςασ απαςχολεί το να φανείτε ζξυπνοι (μια δφςκολθ λφςθ δεν είναι θ καλφτερθ επιλογι). Τα περιςςότερα ΣΔΒΔ ζχουν query optimizers Ραίρνουν το επερϊτθμα ενόσ χριςτθ και βρίςκουν τρόπο, ϊςτε να εκτελεςτεί πιο αποτελεςματικά. Ζνα απλό επερϊτθμα είναι πιο εφκολο να βελτιςτοποιθκεί.
SQL ΕΡΕΩΤΗΜΑΤΑ ΒΑΣΕΙ ΤΩΝ ΣΥΓΚΕΚΙΜΕΝΩΝ ΡΙΝΑΚΩΝ Student ID First Last S103 John Smith S104 Mary Jones S105 Jane Brown S106 Mark Jones S107 John Brown Course Code Title DBS Database Systems PR1 Programming 1 PR2 Programming 2 IAI Intro to AI Grade ID Code Mark S103 DBS 72 S103 IAI 58 S104 PR1 68 S104 IAI 65 S106 PR2 43 S107 PR1 76 S107 PR2 60 S107 IAI 35
DISTINCT ΚΑΙ ALL Μερικζσ φορζσ καταλιγουμε με διπλοεγγραφζσ Με τθ χριςθ του DISTINCT απομακρφνουμε τισ διπλζσ εγγραφζσ Με τθ χριςθ του ALL τισ διατθροφμε (default) SELECT ALL Last FROM Student; SELECT DISTINCT Last FROM Student; Last Smith Jones Brown Jones Brown Last Smith Jones Brown
WHERE Συνικωσ δε κζλουμε να μασ επιςτρζφονται όλεσ οι γραμμζσ Το WHERE μειϊνει τισ γραμμζσ που επιςτρζφονται, βάςει μιασ ςυνκικθσ μόνο οι γραμμζσ που πλθροφν τθ ςυγκεκριμζνθ ςυνκικθ επιςτρζφονται Ραραδείγματα ςυνκθκϊν (conditions): Mark < 40 First = John First <> John First = Last (First = John ) AND (Last = Smith ) (Mark < 40) OR (Mark > 70)
ΡΑΑΔΕΙΓΜΑΤΑ WHERE SELECT * FROM Grade WHERE Mark >= 60; ID Code Mark S103 DBS 72 S104 PR1 68 S104 IAI 65 S107 PR1 76 S107 PR2 60 SELECT DISTINCT ID FROM Grade WHERE Mark >= 60; ID S103 S104 S107
ΡΑΑΔΕΙΓΜΑ WHERE Δίνεται ο πίνακασ Grade ID Code Mark S103 DBS 72 S103 IAI 58 S104 PR1 68 S104 IAI 65 S106 PR2 43 S107 PR1 76 S107 PR2 60 S107 IAI 35 Γράψτε ζνα SQL επερϊτθμα για να πάρετε ωσ αποτζλεςμα μια λίςτα από τα ID και Mark των μακθτϊν που πζραςαν το IAI, με ςκορ μεγαλφτερο ι ίςο του 40. ID Mark S103 58 S104 65
ΜΙΑ ΛΥΣΗ Θζλουμε μόνο το ID και το Mark, όχι το Code Το string μπαίνει μεταξφ μονών ειςαγωγικών SELECT ID, Mark FROM Grade WHERE (Code = IAI ) AND (Mark >= 40) Μάσ ενδιαφζρει μόνο το IAI Μασ ενδιαφζρουν μόνο εκείνεσ οι εγγραφζσ, ςτισ οποίεσ το Mark είναι μεγαλφτερο ή ίςο του 40
SELECT ΑΡΟ ΡΟΛΛΟΥΣ ΡΙΝΑΚΕΣ Ρολλζσ φορζσ πρζπει να ςυνδυάςεισ πλθροφορία από δφο ι περιςςότερουσ πίνακεσ. Ζνασ τρόποσ γραφισ SELECT * FROM Table1, Table2... Εάν οι πίνακεσ ζχουν ςτιλεσ με το ίδιο όνομα μπορείσ να αναφζρεςαι ςτισ ςτιλεσ (γνωρίςματα) με το όνομα του πίνακα. Οπότε, δεφτεροσ τρόποσ γραφισ. TableName.Column
SELECT ΑΡΟ ΡΟΛΛΟΥΣ ΡΙΝΑΚΕΣ SELECT First, Last, Mark FROM Student, Grade WHERE (Student.ID = Grade.ID) AND (Mark >= 40); Student ID First Last S103 John Smith S104 Mary Jones S105 Jane Grade Brown S106 Mark ID Jones Code Mark S107 John Brown S103 DBS 72 S103 IAI 58 S104 PR1 68 S104 IAI 65 S106 PR2 43 S107 PR1 76 S107 PR2 60 S107 IAI 35
SELECT ΑΡΟ ΡΟΛΛΟΥΣ ΡΙΝΑΚΕΣ SELECT... FROM Student, Grade WHERE (Student.ID = Grade.ID) AND... ; ID First Last ID Code Mark S103 John Smith S103 DBS 72 S103 John Smith S103 IAI 58 S104 Mary Jones S104 PR1 68 S104 Mary Jones S104 IAI 65 S106 Mark Jones S106 PR2 43 S107 John Brown S107 PR1 76 S107 John Brown S107 PR2 60 S107 John Brown S107 IAI 35 Student.ID Grade.ID
SELECT ΑΡΟ ΡΟΛΛΟΥΣ ΡΙΝΑΚΕΣ SELECT... FROM Student, Grade WHERE (Student.ID = Grade.ID) AND (Mark >= 40); ID First Last ID Code Mark S103 John Smith S103 DBS 72 S103 John Smith S103 IAI 58 S104 Mary Jones S104 PR1 68 S104 Mary Jones S104 IAI 65 S106 Mark Jones S106 PR2 43 S107 John Brown S107 PR1 76 S107 John Brown S107 PR2 60
SELECT ΑΡΟ ΡΟΛΛΟΥΣ ΡΙΝΑΚΕΣ SELECT First, Last, Mark FROM Student, Grade WHERE (Student.ID = Grade.ID) AND (Mark >= 40); First Last Mark John Smith 72 John Smith 58 Mary Jones 68 Mary Jones 65 Mark Jones 43 John Brown 76 John Brown 60
SQL ΧΕΙΙΣΜΟΣ ΔΕΔΟΜΕΝΩΝ Η SQL παρζχει τθ δυνατότθτα εκτζλεςθσ των πράξεων ανάκτθςθσ και μεταβολισ των περιεχομζνων των πινάκων μιασ ΒΔ. Οι εντολζσ αυτζσ είναι οι εξισ: INSERT ειςαγωγι γραμμϊν πινάκων UPDATE τροποποίθςθ γραμμϊν πινάκων DELETE διαγραφι γραμμϊν πινάκων SELECT ανάκτθςθ γραμμϊν πινάκων.
INSERT Ρροςκζτει δεδομζνα ςε ζναν πίνακα Ειςάγει μια εγγραφι με όλα τα γνωρίςματα INSERT INTO CUSTOMER VALUES (001, Contemporary Casuals, 1355 S. Himes Blvd., Gainesville, FL, 32601); Ειςάγει μια εγγραφι με ςυγκεκριμζνα γνωρίςματα INSERT INTO PRODUCT (PRODUCT_ID, PRODUCT_DESCRIPTION, PRODUCT_FINISH, STANDARD_PRICE, PRODUCT_ON_HAND) VALUES (1, End Table, Cherry, 175, 8);
DELETE Αφαιρεί γραμμζσ από ζναν πίνακα Αφαιρεί ςυγκεκριμζνεσ γραμμζσ DELETE FROM CUSTOMER WHERE STATE = HI ; Αφαιρεί όλεσ τισ γραμμζσ DELETE FROM CUSTOMER;
UPDATE Τροποποιεί δεδομζνα ςε υπάρχουςεσ γραμμζσ UPDATE PRODUCT SET UNIT_PRICE = 775 WHERE PRODUCT_ID = 7;
SELECT Χρθςιμοποιείται για επερωτιματα ςε ζναν ι πολλοφσ πίνακεσ. ΣΥΝΤΑΞΗ: SELECT Ραρζκεςε τισ ςτιλεσ (γνωρίςματα - columns) που κα πρζπει να επιςτραφοφν από το επερϊτθμα FROM Ρροςδιόριςε τον/τουσ πίνακα/εσ (table(s)) από τουσ οποίουσ κα τραβθχτοφν τα δεδομζνα WHERE Ρροςδιόριςε τισ ςυνκικεσ (conditions) κάτω από τισ οποίεσ μια γραμμι κα προςτεκεί ςτο αποτζλεςμα GROUP BY Ρροςδιόριςε τισ ςτιλεσ (columns) για τθν ομαδοποίθςθ των αποτελεςμάτων HAVING Ρροςδιόριςε τισ ςυνκικεσ (conditions), κάτω από τισ οποίεσ κα ςυμπεριλθφκεί ςτο αποτζλεςμα ζνα γκρουπ ORDER BY Ταξινόμθςε το αποτζλεςμα βάςει ςυγκεκριμζνων ςτθλϊν (columns).
23 Σφνταξθ μιασ SQL διλωςθσ
ΡΑΑΔΕΙΓΜΑ SELECT Βρεσ τα προϊόντα με ςτακερι τιμι μικρότερθ των 275 SELECT PRODUCT_NAME FROM PRODUCT WHERE PRODUCT_STANDARDPRICE < 275;
ΤΕΛΕΣΤΕΣ ΣΥΓΚΙΣΗΣ ΓΙΑ SQL
ΡΑΑΔΕΙΓΜΑ SELECT ΜΕ ΤΗ ΧΗΣΗ ΣΥΣΣΩΕΥΤΙΚΗΣ ΣΥΝΑΤΗΣΗΣ ΣΥΣΣΩΕΥΤΙΚΕΣ ΣΥΝΑΤΗΣΕΙΣ: SUM(), MIN(), MAX(), AVG(), COUNT() Με τθ χριςθ τθσ ςυςςωρευτικισ ςυνάρτθςθσ COUNT βρίςκουμε ςφνολα SELECT COUNT(*) FROM ORDER WHERE ORDER_ID = 1004; Η COUNT(*) ςυνάρτηςη επιςτρζφει τον αριθμό των εγγραφών ςε ζναν πίνακα. Η COUNT(column_name) ςυνάρτηςη επιςτρζφει τον αριθμό των τιμών τησ ςυγκεκριμζνησ ςτήλησ (οι NULL τιμζσ δεν θα προςμετρηθοφν). Η COUNT(DISTINCT column_name) ςυνάρτηςη επιςτρζφει τον αριθμό των διαφορετικών τιμών τησ ςυγκεκριμζνησ ςτήλησ.
ΡΑΑΔΕΙΓΜΑ SELECT ΤΕΛΕΣΤΕΣ BOOLEAN Χριςθ των τελεςτϊν AND, OR, και NOT για τθ δθμιουργία ςυνκθκϊν ςτο WHERE SELECT PRODUCT_DESCRIPTION, PRODUCT_FINISH, PRODUCT_STANDARDPRICE FROM PRODUCT WHERE (PRODUCT_DESCRIPTION LIKE %Desk OR PRODUCT_DESCRIPTION LIKE %Table ) AND PRODUCT_STANDARDPRICE > 300; ΣΗΜΕΙΩΣΗ: ο τελεςτήσ LIKE επιτρζπει τη ςφγκριςη strings με τη χρήςη ενόσ ςυμβόλου. Παραδείγματοσ χάριν, το ςφμβολο % ςτο %Desk δείχνει ότι είναι επιτρεπτά όλα τα strings που ζχουν οποιοδήποτε αριθμό χαρακτήρων πριν την λζξη Desk.
ΡΑΑΔΕΙΓΜΑ SELECT ΤΑΞΙΝΟΜΗΣΗ ΑΡΟΤΕΛΕΣΜΑΤΩΝ ΜΕ ΤΟ ORDER BY Ταξινόμθςε τα αποτελζςματα πρϊτα βάςει του STATE, και μζςα ςτο STATE βάςει του CUSTOMER_NAME SELECT CUSTOMER_NAME, CUSTOMER_CITY, CUSTOMER_STATE FROM CUSTOMER WHERE CUSTOMER_STATE IN ( FL, TX, CA, HI ) ORDER BY CUSTOMER_STATE, CUSTOMER_NAME; ΣΗΜΕΙΩΣΗ: ο τελεςτήσ IN μασ επιτρζπει να ςυμπεριλάβουμε γραμμζσ ςτα οποία το CUSTOMER_STATE είναι είτε FL, είτε TX, είτε CA, είτε HI. Είναι πιο αποτελεςματικό από το να ςυμπεριλάβουμε ξεχωριςτά ςυνθήκεσ OR.
ΡΑΑΔΕΙΓΜΑ SELECT ΤΑΞΙΝΟΜΗΣΗ ΑΡΟΤΕΛΕΣΜΑΤΩΝ ΜΕ ΤΟ GROUP BY Εφαρμόηεται ςε ςυςςωρευτικζσ ςυναρτιςεισ SELECT CUSTOMER_STATE, COUNT(CUSTOMER_STATE) FROM CUSTOMER GROUP BY CUSTOMER _STATE;
ΡΑΑΔΕΙΓΜΑ SELECT ΧΗΣΗ ΤΟΥ HAVING Για χριςθ με το GROUP BY SELECT CUSTOMER_STATE, COUNT(CUSTOMER_STATE) FROM CUSTOMER GROUP BY CUSTOMER_STATE HAVING COUNT(CUSTOMER_STATE) > 1; ΣΗΜΕΙΩΣΗ: Το HAVING είναι όπωσ το WHERE, αλλά λειτουργεί ςε groups (categories), όχι ςε μεμονωμζνεσ γραμμζσ. Στο παραπάνω παράδειγμα, μόνο τα groups με ςυνολικό αριθμό μεγαλφτερο του 1 θα ςυμπεριληφθοφν ςτο τελικό αποτζλεςμα.
ΡΑΑΔΕΙΓΜΑ Θα χρθςιμοποιιςουμε τουσ ακόλουκουσ πίνακεσ Reserves sid bid day 22 101 10/10/96 95 103 11/12/96 Sailors sid sname rating age 22 Dustin 7 45.0 31 Lubber 8 55.5 95 Bob 3 63.5 Boats bid bname color 101 Interlake blue 102 Interlake red 103 Clipper green 104 Marine red
ΡΑΑΔΕΙΓΜΑ Βρεσ τα sid s των sailors που ζχουν ζναν κόκκινο ι ζνα πράςινο πλοίο - UNION UNION: Μπορεί να χρηςιμοποιηθεί για να υπολογίςει την ζνωςη δφο union-compatible ομάδεσ πλειάδων (που είναι και οι ίδιεσ αποτελζςματα SQL επερωτημάτων). Κάθε SELECT δήλωςη μζςα ςτο UNION πρζπει να ζχει τον ίδιο αριθμό ςτηλών, οι οποίεσ πρζπει να ζχουν παρόμοιο τφπο δεδομζνων και με την ίδια ςειρά. SELECT DISTINCT R.sid FROM Boats B,Reserves R Vs. ΣΗΜΕΙΩΣΗ: Το UNION μειώνει τα διπλά αποτελζςματα (ςε αντίθεςη με το UNION ALL) WHERE R.bid=B.bid AND (B.color= red OR B.color= green ) SELECT R.sid FROM Boats B, Reserves R WHERE R.bid=B.bid AND B.color= red UNION SELECT R.sid FROM Boats B, Reserves R WHERE R.bid=B.bid AND B.color= green
ΡΑΑΔΕΙΓΜΑ Βρεσ τα sid s των sailors που ζχουν ζναν κόκκινο και ζνα πράςινο πλοίο - INTERSECT INTERSECT: Μπορεί να χρηςιμοποιηθεί για να υπολογίςει την διατομή (intersect) δφο union-compatible ομάδεσ πλειάδων SELECT R.sid FROM Boats B,Reserves R WHERE R.bid=B.bid AND (B.color= red AND B.color= green ) SELECT R1.sid FROM Boats B1, Reserves R1, Boats B2, Reserves R2 WHERE R1.sid=R2.sid AND R1.bid=B1.bid AND R2.bid=B2.bid AND (B1.color= red AND B2.color= green )
ΡΑΑΔΕΙΓΜΑ Βρεσ τα sid s των sailors που ζχουν ζναν κόκκινο και ζνα πράςινο πλοίο - ΣΥΝΕΧΕΙΑ SELECT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color= red INTERSECT SELECT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color= green
ΞΑΝΑΓΑΦΟΥΜΕ ΤΟ ΕΡΕΩΤΗΜΑ INTERSECT ΜΕ ΤΗΝ ΧΗΣΗ ΤΟΥ IN Βρεσ τα sid s των sailors που ζχουν ζναν κόκκινο και ζνα πράςινο πλοίο SELECT R.sid FROM Boats B, Reserves R WHERE R.bid=B.bid AND B.color= red AND R.sid IN (SELECT R2.sid FROM Boats B2, Reserves R2 WHERE R2.bid=B2.bid AND B2.color= green );
ΡΑΑΔΕΙΓΜΑ Βρεσ τα sid s των sailors που ζχουν κόκκινο αλλά δεν ζχουν πράςινο πλοίο - EXCEPT SELECT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color= red EXCEPT SELECT S.sid FROM Sailors S, Boats B, Reserves R WHERE S.sid=R.sid AND R.bid=B.bid AND B.color= green
ΞΑΝΑΓΑΦΟΥΜΕ ΤΟ ΕΡΕΩΤΗΜΑ EXCEPT ΜΕ ΤΗΝ ΧΗΣΗ ΤΟΥ NOT IN Βρεσ τα sid s των sailors που ζχουν ζναν κόκκινο αλλά δεν ζχουν πράςινο πλοίο SELECT R.sid FROM Boats B, Reserves R WHERE R.bid=B.bid AND B.color= red AND R.sid ΝΟΤ IN (SELECT R2.sid FROM Boats B2, Reserves R2 WHERE R2.bid=B2.bid AND B2.color= green );
JOIN Σφνδεςθ πινάκων (JOIN): ερωτιματα που περιλαμβάνουν περιςςότερουσ από ζναν πίνακεσ ςτθ φράςθ FROM τθσ εντολισ SELECT. Η διλωςθ JOIN χρθςιμοποιείται για τθν αναηιτθςθ δεδομζνων δφο ι περιςςοτζρων πινάκων, βάςει μιασ ςυςχζτιςθσ μεταξφ ςυγκεκριμζνων ςτθλϊν των πινάκων αυτϊν. Η JOIN για τθ ςφνδεςθ δφο πινάκων χρθςιμοποιείται όταν το πρωτεφον κλειδί του ενόσ πίνακα είναι το δευτερεφον του άλλου. Ραραδείγματοσ χάριν ζχουμε τουσ ακόλουκουσ πίνακεσ emp(empid, name, address, universityid, ) university (universityid, uname, uaddress, ) κι επικυμοφμε να εξάγουμε το όνομα του υπαλλιλου και τθ διεφκυνςθ, κακϊσ και το όνομα και τθ διεφκυνςθ του πανεπιςτθμίου, ςτο οποίο εργάηεται. Βάςει των παραπάνω, κάνουμε join ςτουσ δφο πίνακεσ δεδομζνου ότι employee.universityid = university.universityid Τα JOINs δεν είναι απαραίτθτο να χρθςιμοποιοφνται πάντα, κακϊσ μποροφμε να ζχουμε το ίδιο αποτζλεςμα επιλζγοντασ τα δεδομζνα από πολλοφσ πίνακεσ με τθν χριςθ του where.
ΤΥΡΟΙ JOIN (1/2) Οι διαφορετικοί τφποι joins που είναι διαθζςιμοι ςτην SQL είναι οι ακόλουθοι: INNER JOIN (το γνωςτό JOIN): επιςτρζφει γραμμζσ όταν υπάρχει κοινό ςτοιχείο και ςτουσ δφο πίνακεσ. LEFT JOIN: επιςτρζφει όλεσ τισ γραμμζσ από τον αριςτερό πίνακα και τισ ταιριαςτζσ γραμμζσ από το δεξί πίνακα.
ΤΥΡΟΙ JOIN (2/2) RIGHT JOIN: επιςτρζφει όλεσ τισ γραμμζσ από το δεξί πίνακα και τισ ταιριαςτζσ γραμμζσ από τον αριςτερό πίνακα. FULL JOIN: επιςτρζφει όλεσ τισ γραμμζσ τόςο από τον αριςτερό, όςο και από το δεξί πίνακα κι επίςησ, τισ γραμμζσ του αριςτεροφ πίνακα που δεν ζχουν ταίρι ςτο δεξί και το αντίςτροφο.
SQL SERVER 2012
42 ΕΚΔΟΣΕΙΣ SQL SERVER 2012 Enterprise Standard Business Intelligence Developer Web Express
43 ΕΓΚΑΤΑΣΤΑΣΗ SQL SERVER 2012 Ροιο λογιςμικό χρειαηόμαςτε? SQL Server 2012 Developer Edition Άλλθ επιλογι είναι να κατεβάςουμε το SQL Server 2012 Express Edition 32/64 bit. Ρου το βρίςκουμε? http://www.microsoft.com/express/database/installoptions.aspx Επιλζγουμε το SQL Server Express with Advanced Services Ορίηουμε Mixed το Windows Authentication Mode Ρλθκτρολογϊ ζνα password τθσ επιλογισ μου για τον λογαριαςμό sa.
44 ΣΥΝΔΕΣΗ ΜΕ ΤΟΝ SQL SERVER (1/3) Ανοίγω το SQL Server Management Studio Επιλζγω να ςυνδεκϊ ςτο Database Engine Επιλζγω τον Server Name, ςτον οποίο κα ςυνδεκϊ (π.χ. DESPINA- PC\SQLEXPRESS, όπου SQLEXPRESS είναι το όνομα που δϊςαμε ςτο instance τθσ βάςθσ μασ ςτο κομμάτι Instance Configuration τθσ εγκατάςταςθσ) Επιλζγω τφπο πιςτοποίθςθσ (authentication): υπάρχουν δυο είδθ λογαριαςμϊν ςτον SQL Server Windows ι domain χριςτεσ Windows Authentication: αν επιλζξω αυτό δεν χρειάηεται να βάλω username και password SQL Server χριςτεσ SQL Server Authentication: αν επιλζξω αυτό βάηω για username και password το sa και «το password τθσ επιλογισ μου» (το επιλζξαμε νωρίτερα, κατά τθν εγκατάςταςθ).
ΣΥΝΔΕΣΗ ΜΕ ΤΟΝ SQL SERVER (2/3) 45
ΣΥΝΔΕΣΗ ΜΕ ΤΟΝ SQL SERVER (3/3) 46
47 ΔΗΜΙΟΥΓΙΑ ΚΑΙ ΔΙΑΧΕΙΙΣΗ ΒΔ ΜΕ SQL SERVER (1/25) ΔΗΜΙΟΥΓΙΑ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ A ΤΟΡΟΣ Δεξί κλικ ςτο φάκελο Database Επιλογι New Database Ολοκλιρωςθ του wizard New Database Β ΤΟΡΟΣ Με χριςθ τθσ εντολισ T-SQL CREATE DATABASE CREATE DATABASE customer;
ΔΗΜΙΟΥΓΙΑ ΚΑΙ ΔΙΑΧΕΙΙΣΗ ΒΔ ΜΕ SQL SERVER (2/25) 48
ΔΗΜΙΟΥΓΙΑ ΚΑΙ ΔΙΑΧΕΙΙΣΗ ΒΔ ΜΕ SQL SERVER (3/25) 49
ΔΗΜΙΟΥΓΙΑ ΚΑΙ ΔΙΑΧΕΙΙΣΗ ΒΔ ΜΕ SQL SERVER (4/25) 50
51 ΔΗΜΙΟΥΓΙΑ ΚΑΙ ΔΙΑΧΕΙΙΣΗ ΒΔ ΜΕ SQL SERVER (5/25) ΔΗΜΙΟΥΓΙΑ ΡΙΝΑΚΑ A ΤΟΡΟΣ: ΜΕΣΑ ΑΡΟ ΤΟ ΓΑΦΙΚΟ ΡΕΙΒΑΛΛΟΝ Επιλζγουμε τθ βάςθ δεδομζνων και κάνουμε δεξί κλικ ςτο φάκελο Table Επιλογι New Table Ορίηουμε για κάκε ςτιλθ όνομα και τφπο δεδομζνων (για να ορίςουμε πρωτεφον κλειδί, δεξί κλικ και ϋset Primary Keyϋ Αποκθκεφουμε τον πίνακα. Β ΤΟΡΟΣ Με χριςθ τθσ εντολισ T-SQL CREATE TABLE
ΔΗΜΙΟΥΓΙΑ ΚΑΙ ΔΙΑΧΕΙΙΣΗ ΒΔ ΜΕ SQL SERVER (6/25) 52
53 ΔΗΜΙΟΥΓΙΑ ΚΑΙ ΔΙΑΧΕΙΙΣΗ ΒΔ ΜΕ SQL SERVER (7/25) ΔΗΜΙΟΥΓΙΑ ΡΙΝΑΚΑ A ΤΟΡΟΣ: ΜΕΣΑ ΑΡΟ ΤΟ ΓΑΦΙΚΟ ΡΕΙΒΑΛΛΟΝ Επιλζγουμε τθ βάςθ δεδομζνων και κάνουμε δεξί κλικ ςτο φάκελο Table Επιλογι New Table Ορίηουμε για κάκε ςτιλθ όνομα και τφπο δεδομζνων (για να ορίςουμε πρωτεφον κλειδί, δεξί κλικ και ϋset Primary Keyϋ Αποκθκεφουμε τον πίνακα. Β ΤΟΡΟΣ Με χριςθ τθσ εντολισ T-SQL CREATE TABLE.
ΔΗΜΙΟΥΓΙΑ ΚΑΙ ΔΙΑΧΕΙΙΣΗ ΒΔ ΜΕ SQL SERVER (8/25) 54
ΔΗΜΙΟΥΓΙΑ ΚΑΙ ΔΙΑΧΕΙΙΣΗ ΒΔ ΜΕ SQL SERVER (9/25) 55
ΡΑΑΚΟΛΟΥΘΗΣΗ ΥΡΑΛΛΗΛΩΝ ΕΤΑΙΙΑΣ ΕΩΤΗΜΑΤΑ SQL ΣΕ SQL SERVER ΡΕΙΒΑΛΛΟΝ (1/2) Δθμιοφργθςε τουσ ακόλουκουσ πίνακεσ ςτον SQL SERVER Location_ID LOCATION Regional_Group 122 NEW YORK 123 DALLAS 124 CHICAGO 167 BOSTON Department_ID DEPARTMENT Department_Na me Location_ID 10 ACCOUNTING 122 20 RESEARCH 124 30 SALES 123 40 OPERATIONS 167 56
57 ΡΑΑΚΟΛΟΥΘΗΣΗ ΥΡΑΛΛΗΛΩΝ ΕΤΑΙΙΑΣ ΕΩΤΗΜΑΤΑ SQL ΣΕ SQL SERVER ΡΕΙΒΑΛΛΟΝ (2/2) JOB Job_ID Job_Function 667 CLERK 668 STAFF 669 ANALYST 670 SALESPERSON 671 MANAGER 672 PRESIDENT
ΡΑΑΚΟΛΟΥΘΗΣΗ ΥΡΑΛΛΗΛΩΝ ΕΤΑΙΙΑΣ ΕΩΤΗΜΑΤΑ SQL ΣΕ SQL SERVER ΡΕΙΒΑΛΛΟΝ (3/3) EMPLOYEE Employ ee_id Employee _Lastnam e Empl oyee _First name Job_ID Manage r_id Employ ee_hire date 7369 SMITH JOHN 667 7902 22-01- 2010 7499 ALLEN KEVI N 670 7698 18-10- 2002 7505 DOYLE JEAN 671 7839 31-01- 2008 7506 DENNIS LYNN 671 7839 17-7- 2012 7507 BAKER LESLI E 7521 WARK CYNT HIA 671 7839 17-8- 2005 670 7698 3-04- 2001 Employ ee_sala ry Depart ment_id 8900 20 2100 40 870 30 3600 30 1160 40 1575 30 58
ΕΥΧΑΙΣΤΩ ΡΟΛΥ! 59