ΒΑΣΕΙΣ Ε ΟΜΕΝΩΝ ΙΙ. Εργαστήριο SQL SERVER. ρ Γεωργία Γκαράνη



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

SQL Data Manipulation Language

Πανεπιστήµιο Ιωαννίνων Τµήµα Μαθηµατικών Μάθηµα: Βάσεις εδοµένων (741) Εργαστηριακό Τεστ Οµάδα: Α 18/11/2004

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

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

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

(Μέρος 3:Γλώσσα Ορισµού, Γλώσσα Τροποποίησης, Ενσωµατωµένη SQL) Βάσεις εδοµένων Ευαγγελία Πιτουρά 2

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

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

ΚΕΦΑΛΑΙΟ ΤΡΙΤΟ ΕΝΤΟΛΕΣ SQL

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

Εργαστήριο Βάσεων Δεδομένων. Triggers

DELETE, UPDATE, INSERT.

DELETE, UPDATE, INSERT

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

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

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

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

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

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

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


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

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

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

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

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

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

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

Postgress ΣΤΟΧΟΣ ΣΧΕΤΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ ΥΛΙΚΟ. ΠΕΡΙΒΑΛΛΟΝ ΓΙΑ ΕΞΑΣΚΗΣΗ pgadmin ΥΠΟΒΑΘΡΟ. Συναρτήσεις στην PostgreSQL. 1. Γενικά

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

1. ΑΝΟΙΞΤΕ ΤΟΝ ΠΙΝΑΚΑ CUSTOMER ΚΑΙ ΣΤΟ ΜΕΝΟΥ ΕΠΙΛΕΞΤΕ

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

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

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

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

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

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

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

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

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

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


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

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

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

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

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

ΠΡΟΧΩΡΗΜΕΝΑ ΘΕΜΑΤΑ MYSQL

Εργαστήριο Βάσεων Δεδομένων

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

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

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

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

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

SQL Τύποι Δεδομένων Δημιουργία Πίνακα Παράδειγμα.. Εργαστήριο Βάσεων Δεδομένων. Εισαγωγή στη MySQL (1)

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

Ακεραιότητα και Ασφάλεια Μέρος 1 Σχεδιασμός Βάσεων Δεδομένων

Πληροφοριακά Συστήµατα

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

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

Εργαστήριο 6 ο 7 ο / Ερωτήματα Ι

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

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

Ανοικτά Ακαδημαϊκά Μαθήματα

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

BΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΕΞΕΤΑΣΗ ΦΕΒΡΟΥΑΡΙΟΥ 2005

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

Certified Data Base Designer (CDBD)

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 3) Ουρανία Σμυρνάκη

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

Σχεδίαση και λειτουργία βάσης δεδομένων Το παράδειγμα της μαιευτικής κλινικής Ευάγγελος Καρβούνης

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

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

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

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

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

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

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

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

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

Αντικείμενα 2 ου εργαστηρίου

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

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

Transcript:

ΑΝΩΤΑΤΟ ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ Ι ΡΥΜΑ ΛΑΡΙΣΑΣ ΣΧΟΛΗ ΣΤΕΦ ΤΜΗΜΑ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ Εργαστήριο ΒΑΣΕΙΣ Ε ΟΜΕΝΩΝ ΙΙ SQL SERVER ρ Γεωργία Γκαράνη

2

ΠΕΡΙΕΧΟΜΕΝΑ Εργαστήριο 1: ηµιουργία πινάκων 5 Εργαστήριο 2: Εισαγωγή δεδοµένων στους πίνακες 11 Εργαστήριο 3: Ενηµέρωση- ιαγραφή δεδοµένων 17 Τροποποίηση- ιαγραφή πίνακα Εργαστήριο 4: Ανάκτηση-Επιλογή-Εµφάνιση δεδοµένων 25 Η εντολή SELECT Εργαστήριο 5: Όρος DISTINCT, Αύξουσα/φθίνουσα ταξινόµηση, 29 Συνένωση στηλών και literals, NULL τιµές, SQL τελεστές στον όρο WHERE Εργαστήριο 6: DATE και CONVERSION Functions 37 Εργαστήριο 7: GROUP Functions 45 Εργαστήριο 8: UNION, SOUNDEX, DIFFERENCE, 51 VIEWS, SUBQUERIES Εργαστήριο 9: Σύζευξη πινάκων (JOIN) 65 Εργαστήριο 10: STRING Functions 71 Εργαστήριο 11: MATH Functions 83 Εργαστήρια 12-13: Ανάπτυξη εφαρµογής 91 Γενικές επαναληπτικές ασκήσεις 97 Παράρτηµα 103 3

4

Εργαστήριο 1: ηµιουργία πινάκων 5

6

Περιγραφή της βάσης δεδοµένων Σηµείωση: Στις εντολές της SQL, όπου υπάρχει [ ] σηµαίνει ότι αυτό που περικλείετε µέσα σ αυτό είναι προαιρετικό. ηµιουργία µιας βάσης δεδοµένων µε όνοµα my_business η οποία περιγράφει µια επιχείρηση. Η βάση δεδοµένων δηµιουργείται µε την εντολή: CREATE DATABASE <όνοµα βάσης δεδοµένων>; Βήµα 1 ο : ηµιουργήστε τη βάση δεδοµένων µε όνοµα my_business. Στη συνέχεια επιλέξτε την, πηγαίνοντας στη λίστα που έχει τίτλο Database και διαλέγοντας την πρώτη φορά Refresh και στη συνέχεια το όνοµά της, δηλαδή my_business. Από τώρα και στο εξής είστε στη βάση δεδοµένων my_business και δουλεύετε µέσα σ αυτή. Η επιχείρηση που περιγράφει η βάση δεδοµένων my_business θα αποτελείται από έναν αριθµό υπαλλήλων, έναν αριθµό τµηµάτων, έναν αριθµό προϊόντων, έναν αριθµό πελατών και έναν αριθµό παρεγγελιών. Οι υπάλληλοι ανήκουν σε µια µισθολογική κλίµακα ανάλογα µε τα χρήµατα που παίρνουν. Επίσης, οι υπάλληλοι είναι δυνατόν να παίρνουν ένα επίδοµα, ανάλογα µε τη θέση που έχουν στην επιχείρηση και τον µισθό τους. Τα προϊόντα έχουν κάποια περιγραφή, κάποια στάνταρ τιµή και µια ελάχιστη τιµή. 7

Βήµα 2 ο : Σε πρώτη φάση θα δηµιουργήσετε τους πίνακες που θα αποτελούν τη βάση δεδοµένων. Οι πίνακες δηµιουργούνται µε την εντολή: CREATE TABLE <όνοµα πίνακα> (<όνοµα πεδίου> <τύπος πεδίου> (<µέγεθος>) [NULL/NOT NULL], <όνοµα πεδίου> <τύπος πεδίου> (<µέγεθος>) [NULL/NOT NULL], ); Οι πίνακες θα είναι οι ακόλουθοι: DEPT, EMP, BONUS, SALGRADE, CUSTOMER, ORD, ITEM, PRODUCT, PRICE. Οι πίνακες αυτοί θα αποτελούνται από τα παρακάτω πεδία: Προσοχή: Στα παρακάτω, όπου δεν ορίζεται στο όνοµα πεδίου αν είναι NULL ή NOT NULL, δεν θα βάζετε τίποτα! Πίνακας DEPT Όνοµα πεδίου Τύπος πεδίου Μέγεθος πεδίου o DEPTNO NUMERIC 2 o DNAME CHAR 14 o LOC CHAR 13 Το πεδίο DEPTNO πρέπει να οριστεί NOT NULL. Πίνακας EMP Όνοµα πεδίου Τύπος πεδίου Μέγεθος πεδίου o EMPNO NUMERIC 4 o ENAME CHAR 10 o JOB CHAR 9 o MGR NUMERIC 4 o HIREDATE DATETIME 8

o SAL NUMERIC 7, 2 (7 ακέραια και δύο δεκαδικά ψηφία) o COMM NUMERIC 7, 2 o DEPTNO NUMERIC 2 Τα πεδία EMPNO και DEPTNO πρέπει να οριστούν NOT NULL. Πίνακας BONUS Όνοµα πεδίου Τύπος πεδίου Μέγεθος πεδίου o ENAME CHAR 10 o JOB CHAR 9 o SAL NUMERIC o COMM NUMERIC Πίνακας SALGRADE Όνοµα πεδίου Τύπος πεδίου Μέγεθος πεδίου o GRADE NUMERIC o LOSAL NUMERIC o HISAL NUMERIC Πίνακας CUSTOMER Όνοµα πεδίου Τύπος πεδίου Μέγεθος πεδίου o ZIP CHAR 9 o STATE CHAR 2 o REPID NUMERIC 4 o PHONE CHAR 9 o NAME CHAR 45 o CUSTID NUMERIC 6 o CREDITLIMIT NUMERIC 9, 2 o CITY CHAR 30 o AREA NUMERIC 3 o ADDRESS CHAR 40 o COMMENTS TEXT Τα πεδία CUSTID και REPID πρέπει να οριστούν NOT NULL. 9

Πίνακας ORD Όνοµα πεδίου Τύπος πεδίου Μέγεθος πεδίου o TOTAL NUMERIC 8, 2 o SHIPDATE DATETIME o ORDID NUMERIC 4 o ORDERDATE DATETIME o CUSTID NUMERIC 6 o COMMPLAN CHAR 1 Τα πεδία ORDID και CUSTID πρέπει να οριστούν NOT NULL. Πίνακας ITEM Όνοµα πεδίου Τύπος πεδίου Μέγεθος πεδίου o QTY NUMERIC 8 o PRODID NUMERIC 6 o ORDID NUMERIC 4 o ITEMTOT NUMERIC 8, 2 o ITEMID NUMERIC 4 o ACTUALPRICE NUMERIC 8, 2 Τα πεδία ORDID και ITEMID πρέπει να οριστούν NOT NULL. Πίνακας PRODUCT Όνοµα πεδίου Τύπος πεδίου Μέγεθος πεδίου o PRODID NUMERIC 6 o DESCRIP CHAR 30 Πίνακας PRICE Όνοµα πεδίου Τύπος πεδίου Μέγεθος πεδίου o STDPRICE NUMERIC 8, 2 o STARTDATE DATETIME o PRODID NUMERIC 6 o MINPRICE NUMERIC 8, 2 o ENDDATE DATETIME Το πεδίο PRODID πρέπει να οριστεί NOT NULL. 10

Εργαστήριο 2 : Εισαγωγή δεδοµένων στους πίνακες 11

12

Βήµα 1 ο : Θα εισαγάγετε δεδοµένα µέσα στους πίνακες αυτούς. Η εισαγωγή δεδοµένων γίνεται µε την εντολή: INSERT INTO <όνοµα πίνακα> [(<όνοµα πεδίου>, <όνοµα πεδίου>,...)] VALUES (<τιµή>, <τιµή>,...); ΠΡΟΣΟΧΗ! Σε περίπτωση που κατά λάθος πληκτρολογήσετε λανθασµένα δεδοµένα στους πίνακες ΜΗΝ προσπαθήσετε να τα διορθώσετε! Οι εγγραφές θα ελεγθούν αν είναι σωστές στο επόµενο εργαστήριο και θα διορθωθούν σε περιπτώσεις λαθών τότε. Τα δεδοµένα είναι τα ακόλουθα: Πίνακας DEPT DEPTNO DNAME LOC 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON Πίνακας EMP EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7839 KING PRESIDENT NULL 17-NOV-81 5000 NULL 10 7698 BLAKE MANAGER 7839 1-MAY-81 2850 NULL 30 7782 CLARK MANAGER 7839 9-JUN-81 2450 NULL 10 7566 JONES MANAGER 7839 2-APR-81 2975 NULL 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7844 TURNER SALESMAN 7698 8-SEP-81 1500 0 30 7900 JAMES CLERK 7698 3-DEC-81 950 NULL 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7902 FORD ANALYST 7566 3-DEC-81 3000 NULL 20 7369 SMITH CLERK 7902 17-DEC-80 800 NULL 20 7788 SCOTT ANALYST 7566 09-DEC-82 3000 NULL 20 7876 ADAMS CLERK 7788 12-JAN-83 1100 NULL 20 7934 MILLER CLERK 7782 23-JAN-82 1300 NULL 10 13

Πίνακας SALGRADE GRADE LOSAL HISAL 1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999 Πίνακας CUSTOMER ZIP STATE REPID PHONE NAME CUSTID CREDITLIMIT CITY AREA ADDRESS COMMENTS 96711 CA 7844 598-6609 JOCKSPORTS 100 5000 BELMONT 415 345 VIEWRIDGE Very friendly people to work with -- sales rep likes to be called Mike 94061 CA 7521 368-1223 TKB SPORT SHOP 101 10000 REDWOOD CITY 415 490 BOLI RD. Rep called 5/8 about change in order - contact shipping 95133 CA 7654 644-3341 VOLLYRITE 102 7000 BURLINGAME 415 9722 HAMILTON Company doing heavy promotion beginning 10/89. Prepare for large orders during winter 97544 CA 7521 677-9312 JUST TENNIS 103 3000 BURLINGAME 415 HILLVIEW MALL Contact rep about new line of tennis rackets 93301 CA 7499 996-2323 EVERY MOUNTAIN 104 10000 CUPERTINO 408 574 SURRY RD. Customer with high market share (23%) due to aggressive advertising. 91003 CA 7844 376-9966 K + T SPORTS 105 5000 SANTA CLARA 408 3476 EL PASEO Tends to order large amounts of merchandise at once. Accounting is considering raising their credit limit. Πίνακας ORD TOTAL SHIPDATE ORDID ORDERDATE CUSTID COMMPLAN 101.4 08-JAN-87 610 07-JAN-87 101 A 45 11-JAN-87 611 11-JAN-87 102 B 5860 20-JAN-87 612 15-JAN-87 104 C 2.4 30-MAY-86 601 01-MAY-86 106 A 56 20-JUN-86 602 05-JUN-86 102 B 698 30-JUN-86 604 15-JUN-86 106 A 8324 30-JUL-86 605 14-JUL-86 106 A 3.4 30-JUL-86 606 14-JUL-86 100 A 97.5 15-AUG-86 609 01-AUG-86 100 B 5.6 18-JUL-86 607 18-JUL-86 104 C 14

Πίνακας ITEM QTY PRODID ORDID ITEMTOT ITEMID ACTUALPRICE 1 100890 610 58 3 58 1 100861 611 45 1 45 100 100860 612 3000 1 30 1 200376 601 2.4 1 2.4 20 100870 602 56 1 2.8 3 100890 604 174 1 58 2 100861 604 84 2 42 10 100860 604 440 3 44 4 100860 603 224 2 56 1 100860 610 35 1 35 3 100870 610 8.4 2 2.8 200 200376 613 440 4 2.2 444 100860 614 15540 1 35 1000 100870 614 2800 2 2.8 20 100861 612 810 2 40.5 Πίνακας PRODUCT PRODID DESCRIP 100860 ACE TENNIS RACKET I 100861 ACE TENNIS RACKET II 100870 ACE TENNIS BALLS-3 PACK 100871 ACE TENNIS BALLS-6 PACK 100890 ACE TENNIS NET 101860 SP TENNIS RACKET 101863 SP JUNIOR RACKET Πίνακας PRICE STDPRICE STARDATE PRODID MINPRICE ENDDATE 4.8 01-JAN-85 100871 3.2 01-DEC-85 58 01-JAN-85 100890 46.4 54 01-JUN-84 100890 40.5 31-MAY-84 35 01-JUN-86 100860 28 32 01-JAN-86 100860 25.6 31-MAY-86 30 01-JAN-85 100860 24 31-DEC-85 45 01-JUN-86 100861 36 42 01-JAN-86 100861 33.6 31-MAY-86 2.8 01-JAN-86 100870 2.4 12.5 15-FEB-85 101863 9.4 2.4 15-NOV-86 200376 1.75 15

Μπορείτε να δείτε τα δεδοµένα που έχετε εισάγει στους πίνακες της βάσης δεδοµένων που δηµιουργήσατε χρησιµοποιώντας την εντολή: SELECT * FROM <όνοµα πίνακα>; 16

Εργαστήριο 3 : Ενηµέρωση- ιαγραφή δεδοµένων Τροποποίηση- ιαγραφή πίνακα 17

18

Βήµα 1 ο : ιορθώστε λάθη που τυχόν έχετε κάνει στην εισαγωγή των δεδοµένων στους πίνακές σας χρησιµοποιώντας την εντολή: UPDATE <όνοµα πίνακα> SET <όνοµα πεδίου> = τιµή παράσταση υποερώτηµα, <όνοµα πεδίου> = τιµή παράσταση υποερώτηµα,... WHERE <συνθήκη> ; Επίσης, στον πίνακα PRICE, αλλάξτε την ηµεροµηνία ENDDATE στις εγγραφές που έχουν ηµεροµηνία STARTDATE ίση µε 01-JAN-86, σε 31- OCT-99. Ελέγξτε τα δεδοµένα για να διαπιστώσετε αν έχουν γίνει σωστά οι αλλαγές. Βήµα 2 ο : Σε περίπτωση που θέλετε να διαγράψετε τελείως µια ή περισσότερες εγγραφές σε κάποιον πίνακα, χρησιµοποιείστε την εντολή: DELETE FROM <όνοµα πίνακα> WHERE <συνθήκη>; ιαγράψτε την 9 η εγγραφή του πίνακα ORD, καθώς και την 5 η και 9 η εγγραφή του πίνακα ITEM. 19

Βήµα 3 ο : Για να αλλάξετε κάποιον πίνακα που έχετε δηµιουργήσει, µπορείτε να χρησιµοποιήσετε την εντολή ALTER. Συγκεκριµένα, για να προσθέσετε ένα πεδίο στον πίνακα, η εντολή είναι ως εξής: ALTER TABLE <όνοµα πίνακα> ADD <όνοµα πεδίου> <τύπος πεδίου> <µέγεθος>; Προσθέστε στον πίνακα BONUS ένα πεδίο µε όνοµα STARTDATE τύπου DATETIME. Για να διαγράψετε ένα πεδίο από έναν πίνακα, η εντολή είναι ως εξής: ALTER TABLE <όνοµα πίνακα> DROP COLUMN <όνοµα πεδίου>; ιαγράψτε το πεδίο µε όνοµα STARTDATE του πίνακα BONUS. Για να τροποποιήσετε τον ορισµό ενός πεδίου η εντολή είναι: ALTER TABLE <όνοµα πίνακα> ALTER COLUMN <όνοµα πεδίου> <τύπος πεδίου> (<µέγεθος>); Ξαναπροσθέστε στον πίνακα BONUS το πεδίο STARTDATE τύπου DATETIME. Τροποποιήστε τον τύπο του πεδίου STARTDATE του πίνακα BONUS από DATETIME σε CHAR (12). Επειδή, οι εντολές της SQL είναι πάρα πολλές και η σύνταξή τους µπορεί να γίνει πολύπλοκη, ανάλογα µε το ερώτηµα που πρόκειται να εκφράσετε, µπορείτε να χρησιµοποιείτε τη βοήθεια που σας δίνεται από το Help και επιλέγοντας το Transact-SQL Help και στη συνέχεια το Index. 20

Χρησιµοποιώντας τη «Βοήθεια» για να δείτε την σωστή σύνταξη της εντολής ALTER, διαγράψτε το πεδίο STARTDATE που προσθέσατε στον πίνακα BONUS. Βήµα 4 ο : Μπορείτε να προσθέσετε πρωτεύοντα και υποψήφια κλειδιά σε κάποιον πίνακα χρησιµοποιώντας και πάλι την εντολή ALTER: ALTER TABLE <όνοµα πίνακα> ADD CONSTRAINT <όνοµα-περιορισµού> PRIMARY KEY (<όνοµα πεδίου>, <όνοµα πεδίου>,...) FOREIGN KEY (<όνοµα πεδίου>, <όνοµα πεδίου>,...) REFERENCES <όνοµα πίνακα> (<όνοµα πεδίου>, <όνοµα πεδίου>,...); όπου η λέξη CONSTRAINT (στα ελληνικά σηµαίνει «περιορισµός») ορίζει την αρχή του ορισµού ενός πρωτεύοντος ή ξένου κλειδιού και <όνοµαπεριορισµού> είναι το όνοµα του καινούριου περιορισµού (κάθε πρωτεύον ή ξένο κλειδί όταν ορίζεται πρέπει να παίρνει και ένα όνοµα). Αρχικά, µελετήστε τα παρακάτω πρωτεύοντα και ξένα κλειδιά που πρέπει να εισαγάγεται στους πίνακες που έχετε δηµιουργήσει για να κατανοήσετε τη σηµασία τους. Στον πίνακα ORD αλλάξτε τις εγγραφές που έχουν CUSTID=106 σε CUSTID=105. ικαιολογήστε για ποιο λόγο πρέπει να κάνετε την αλλαγή αυτή πριν να δηµιουργήσετε τα κλειδιά στους πίνακες. Ποιες εγγραφές του πίνακα ITEM πρέπει να διαγραφούν και γιατί πριν να δηµιουργήσετε τα κλειδιά στους πίνακες; ιαγράψτε τες. Στη συνέχεια, προσθέστε τα ακόλουθα πρωτεύοντα και ξένα κλειδιά στους πίνακες που έχετε δηµιουργήσει: 21

Πίνακας DEPT: PRIMARY KEY το πεδίο DEPTNO µε όνοµα DEPT_PRIMARY_KEY. Πίνακας EMP: PRIMARY KEY το πεδίο EMPNO µε όνοµα EMP_PRIMARY_KEY. FOREIGN KEY το πεδίο DEPTNO µε όνοµα EMP_FOREIGN_KEY και αναφορά στο πεδίο DEPTNO του πίνακα DEPT. Πίνακας CUSTOMER: PRIMARY KEY το πεδίο CUSTID µε όνοµα CUSTOMER_PRIMARY_KEY. Πίνακας ORD: PRIMARY KEY το πεδίο ORDID µε όνοµα ORD_PRIMARY_KEY. FOREIGN KEY το πεδίο CUSTID µε όνοµα ORD_FOREIGN_KEY και αναφορά στο πεδίο CUSTID του πίνακα CUSTOMER. Πίνακας ITEM: PRIMARY KEY τα πεδία ORDID και ITEMID µε όνοµα ITEM_PRIMARY_KEY. FOREIGN KEY το πεδίο ORDID µε όνοµα ITEM_FOREIGN_KEY και αναφορά στο πεδίο ORDID του πίνακα ORD. Σηµείωση: Ορίστε ως NOT NULL το πεδίο PRODID του πίνακα PRODUCT. Πίνακας PRODUCT: PRIMARY KEY το πεδίο PRODID µε όνοµα PRODUCT_PRIMARY_KEY. 22

Βήµα 4 ο : Με την εντολή: DROP TABLE <όνοµα πίνακα>; µπορείτε να διαγράψετε τελείως έναν πίνακα. ιαγράψτε τον πίνακα BONUS. Πώς µπορείτε να διαπιστώσετε αν ο πίνακας έχει πράγµατι διαγραφεί από τη βάση δεδοµένων my_bysiness; 23

24

Εργαστήριο 4 : Ανάκτηση-Επιλογή-Εµφάνιση δεδοµένων. Η εντολή SELECT 25

Η ανάκτηση δεδοµένων από µια βάση δεδοµένων είναι ίσως η πιο συνηθισµένη λειτουργία της SQL. Η πράξη ανάκτησης / επιλογής / εµφάνισης δεδοµένων σε µια βάση δεδοµένων γίνεται µε την εντολή SELECT που έχει την παρακάτω βασική σύνταξη: SELECT <όνοµα στήλης_1>, <όνοµα στήλης_2>,..., <όνοµα στήλης_ν> FROM <όνοµα πίνακα>; ΑΣΚΗΣΕΙΣ Άσκηση 1: Εµφανίστε όλους τους αριθµούς των τµηµάτων, τα ονόµατα των υπαλλήλων που εργάζονται σε αυτά και τον αριθµό των υπευθύνων. Άσκηση 2: Εµφανίστε όλα τα στοιχεία των πινάκων της βάσης DEPT, EMP, CUSTOMER. Η εντολή SELECT µπορεί να συµπεριλάβει και άλλα στοιχεία όπως αριθµητικές παραστάσεις, ψευδώνυµα στηλών, συνένωση στηλών, αλφαριθµητικά ή σύµβολα. Άσκηση 3: Εµφανίστε τα ονόµατα των υπαλλήλων και τους ετήσιους µισθούς που παίρνουν. (Υπόδειξη: δώρα = 1,5 µισθός µήνα) 26

Με τη SELECT µπορούµε να δώσουµε και ψευδώνυµα στις στήλες µε τα δεδοµένα που εµφανίζουµε: SELECT <όνοµα στήλης_1> [ψευδώνυµο], <όνοµα στήλης_2> [ψευδώνυµο],..., <όνοµα στήλης_ν> [ψευδώνυµο] FROM <όνοµα πίνακα>; Άσκηση 4: Επαναλάβετε την άσκηση 3 δίνοντας το όνοµα ANNSAL στη στήλη του ετήσιου µισθού. Με την WHERE µπορούµε να βάζουµε και λογικές συνθήκες που φιλτράρουν τα αποτέλεσµατα µας, χρησιµοποιώντας και τους τελεστές AND, OR,!, SELECT όνοµα στήλης_1 [ψευδώνυµο], όνοµα στήλης_2 [ψευδώνυµο],..., όνοµα στήλης_ν [ψευδώνυµο] FROM όνοµα πίνακα; WHERE συνθήκη; Άσκηση 5: Εµφανίστε τους υπαλλήλους που παίρνουν µεγαλύτερη προµήθεια από τον µισθό τους. Άσκηση 6: Εµφανίστε τα τµήµατα που έχουν αριθµό µεγαλύτερο από 20. Άσκηση 7: Εµφανίστε τους MANAGER που κερδίζουν περισσότερα από 2800. Άσκηση 8: Εµφανίστε τους υπαλλήλους που είτε είναι MANAGER είτε κερδίζουν πάνω από 2800 το µήνα. 27

Άσκηση 9: Εµφανίστε τους MANAGER που δεν είναι στο τµήµα 30. Με την SELECT µπορούµε επίσης να ταξινοµήσουµε τα δεδοµένα που εµφανίζουµε: SELECT <όνοµα στήλης_1> [ψευδώνυµο], <όνοµα στήλης_2> [ψευδώνυµο],..., <όνοµα στήλης_ν> [ψευδώνυµο] FROM <όνοµα πίνακα> ORDER BY <όνοµα πεδίου>; Άσκηση 10: Ταξινοµήστε ως προς το µισθό τις στήλες του EMP. Άσκηση 11: Χρησιµοποιώντας την εντολή SELECT, διατυπώστε 5 δικά σας ερωτήµατα και στη συνέχεια τρέξτε τα στην SQL-SERVER (όλα τα ερωτήµατα θα πρέπει να περιλαµβάνουν τη λέξη WHERE και δύο τουλάχιστον το ORDER BY-ένα να εµφανίζει σε αύξουσα σειρά και το άλλο σε φθίνουσα σειρά το αποτέλεσµα ή κάποια στήλη του αποτελέσµατος). 28

Εργαστήριο 5 : Όρος DISTINCT Αύξουσα/φθίνουσα ταξινόµηση Συνένωση στηλών και literals NULL τιµές SQL τελεστές στον όρο WHERE 29

30

Απόριψη διπλών εγγραφών DISTINCΤ Ο όρος DISTINCT συµπεριλαµβανόµενος στην εντολή SELECT, εµφανίζει όλες τις διαφορετικές τιµές της προσδιορισµένης στήλης (εγγραφές χωρίς επαναλήψεις). SELECT distinct <όνοµα_στήλης>,. Αύξουσα φθίνουσα ταξινόµηση γραµµών ORDER BY H εξ ορισµού (default) σειρά ταξινόµησης των δεδοµένων είναι αύξουσα Με την λέξη DESC (desceding) στον όρο ORDER BY αλλάζουµε την σειρά ταξινόµησης σε φθίνουσα. Ενώ µε την λέξη ASC (asceding) σε αύξουσα σειρά. π.χ. SELECT <όνοµα_στήλης1>,. FROM όνοµα_πίνακα ORDER BY <όνοµα_στήλης1> DESC; Συνένωση στηλών και literals στην εντολη SELECT Ο τελεστής συνένωσης (+) επιτρέπει την συνένωση µιας στήλης µε µια άλλη, την συνένωση αλφαριθµητικών (literals) ή συνδυασµό αλφαριθµητικών µε στήλες, δηµιουργώντας µια παράσταση χαρακτήρων. Ο τελεστής αυτός γράφεται στο ενδιάµεσο των στηλών ή αλφαριθµητικών που πρόκειται να συνενωθούν και να δηµιουργήσουν µια στήλη. SELECT < literal /όνοµα_στήλης> [+ < literal /όνοµα_στήλης>] FROM όνοµα_πίνακα; 31

Σαν literal εννοείται οποιοσδήποτε αλφαριθµητικό που επιτρέπεται να xρησιµοποιείται στη SELECT και εµφανίζεται στην έξοδο είτε εκείνης της στήλης που επιθυµείται να συνενώσετε είτε σαν ξεχωριστή ψευδωστήλη. Χειρισµός απροσδιόριστων τιµών ISNULL συνάρτηση Βήµα 1 ο : Εκτελέστε την εντολή select ename,job, sal*12 annual_sal from emp; Βήµα 2 ο : Στη συνέχεια εκτελέστε και την εντολή select ename,job, sal*12+comm annual_sal from emp; Τι παρατηρείτε; Είναι σωστά τα αποτελέσµατα που δίνει η δεύτερη εντολή; Για ποιο λόγο; Η συνάρτηση ISNULL µετατρέπει µια NULL τιµή σε ΝΟN-NULL τιµή. Βήµα 3 ο : Αν τώρα εκτελέσετε την εντολή τι αλλάζει; select ename,job, sal*12+isnull(comm,0) annual_sal from emp; 32

SQL τελεστές στον όρο WHERE Τελεστές BETWEEN AND ΙΝ (λίστα) LIKE IS NULL Σηµασία επιλέγει γραµµές που περιέχουν τιµές µέσα από ένα διάστηµα τιµών περιέχουν µία τιµή που µπορεί να υπάρχει µέσα σε µια λίστα τιµών. ταιριάζουν σε ένα µοντέλο χαρακτήρων ή αριθµών είναι NULL Σηµείωση: Μέσα στο LIKE µπορεί να µπει ένας από τους επόµενους χαρακτήρες που να δηλώνουν αντίστοιχα: % : οσουσδήποτε χαρακτήρες _ : ένας χαρακτήρας [ ] : οποιοσδήποτε χαρακτήρας µέσα στη συγκεκριµένη περιοχή, π.χ. [a-f] ή [abcdef]. Υπάρχουν κι άλλοι χαρακτήρες, για περισσότερα µπορείτε να κοιτάξτε στη Βοήθεια (Help). ΑΣΚΗΣΕΙΣ ΑΣΚΗΣΗ 1: Εµφάνισε την παρακάτω έξοδο: employee deptno ----------------------------------------- ------------------------- ------ SMITH works like CLERK ΙN DEPARTMENT 20 ALLEN works like SALESMAN IN DEPARTMENT 30 WARD works like SALESMAN IN DEPARTMENT 30 JONES works like MANAGER IN DEPARTMENT 20 MARTIN works like SALESMAN IN DEPARTMENT 30 BLAKE works like MANAGER IN DEPARTMENT 30 CLARK works like MANAGER IN DEPARTMENT 10 33

SCOTT works like ANALYST IN DEPARTMENT 20 KING works like PRESIDENT IN DEPARTMENT 10 TURNER works like SALESMAN IN DEPARTMENT 30 ADAMS works like CLERK IN DEPARTMENT 20 JAMES works like CLERK IN DEPARTMENT 30 FORD works like ANALYST IN DEPARTMENT 20 MILLER works like CLERK IN DEPARTMENT 10 ΑΣΚΗΣΗ 2: Εµφάνισε τα ονόµατα, τον ετήσιο µισθό µαζί µε την προµήθεια και την προµήθεια όλων εκείνων που ο µηνιαίος µισθός τους είναι µεγαλύτερος από την προµήθεια που παίρνουν. Στην έξοδο ο ετήσιος µισθός θα πρέπει να είναι ταξινοµηµένος κατά φθίνουσα σειρά. Αν δύο ή περισσότεροι υπάλληλοι έχουν τον ίδιο µισθό τότε να εµφανίζεται κατά αλφαβητική σειρά. ΑΣΚΗΣΗ 3: Εµφάνισε όλους τους υπαλλήλους που έχουν σαν τρίτο γράµµα του ονόµατος τους το R. ΑΣΚΗΣΗ 4: Ποιοι είναι οι υπάλληλοι που δεν έχουν manager; ΑΣΚΗΣΗ 5: Εµφάνισε όλα τα τµήµατα των οποίων ο αριθµός είναι 10 ή 30. (Να λυθεί µε δύο τρόπους). ΑΣΚΗΣΗ 6: Ποια είναι τα επαγγέλµατα των υπαλλήλων που απασχολούνται σ όλη την εταιρεία; ΑΣΚΗΣΗ 7: Εµφάνισε όλες τις λεπτοµέρειες για τους υπαλλήλους των τµηµάτων 10 και 20 µε αλφαβητική σειρά των ονοµάτων τους (Ζ Α). ΑΣΚΗΣΗ 8: Εµφάνισε όλους τους υπαλλήλους που έχουν έναν από τους τρεις MGR αριθµούς : 7902,7566,7788 ΑΣΚΗΣΗ 9: Εµφάνισε µία λίστα µε τα ονόµατα των υπαλλήλων που το όνοµα τους αρχίζει είτε από S είτε έχει ακριβώς 4 χαρακτήρες. 34

ΑΣΚΗΣΗ 10: Εµφάνισε όλους εκείνους τους υπαλλήλους που ο µισθός τους δεν είναι µεταξύ 1000 και 2000. ΑΣΚΗΣΗ 11: Βρες όλους τους υπαλλήλους που η δουλειά τους δεν αρχίζει από Μ. ΑΣΚΗΣΗ 12: Εµφάνισε τα ονόµατα, το επάγγελµα και τον µισθό όλων των υπαλλήλων οι οποίοι έχουν διευθυντή ΑΣΚΗΣΗ 13: Βρες όλους υπαλλήλους που είναι CLERK και που ο µισθός τους είναι µεταξύ 100 και 2000. Στη συνέχεια βρες όλους τους υπαλλήλους που είναι είτε CLERK είτε κάτι άλλο και που ο µισθός τους κυµαίνεται στο ίδιο επίπεδο µε τους προηγούµενους. είτε αν υπάρχει διαφορά σ αυτά τα δύo ερωτήµατα, αν ναι τότε ποια είναι; ΑΣΚΗΣΗ 14: Εµφάνισε όλους τους υπαλλήλους (ονόµατα,αριθµός τµήµατος και ηµεροµηνία πρόσληψης)που προσλήφθηκαν κατά το έτος 1980. (να γίνει µε δυο τρόπους like, και between and) ΑΣΚΗΣΗ 15: Βρες όλους τους διευθυντές (managers) µε µισθό πάνω από 1500 και όλους τους πωλητές. Στη συνέχεια βρες όλους τους manager και salesman που έχουν µισθό πάνω από 1500. Ζητούνται δύο διαφορετικά πράγµατα, ποια είναι τα ερωτήµατα και σηµείωσε τη διαφορά τους. 35

36

Εργαστήριο 6 : DATE και CONVERSION Functions 37

DATE FUNCTIONS Οι DATE functions είναι οι ακόλουθες: DATEADD DATEDIFF DATENAME DATEPART DAY GETDATE MONTH YEAR Όπως όλες οι συναρτήσεις, έτσι και αυτές µπορούν να χρησιµοποιηθούν µέσα σε ένα SELECT ή WHERE όρο, ή σε οποιαδήποτε άλλη περίπτωση σε συνδυασµό µεταξύ τους ( η µία µέσα στην άλλη) ώστε να επιτευχθεί το επιθυµητό αποτέλεσµα. GETDATE Η συνάρτηση GETDATE επιστρέφει την τρέχουσα ηµεροµηνία και ώρα. Σύνταξη: GETDATE() π,χ, SELECT GETDATE() DAY, MONTH και YEAR Οι συναρτήσεις DAY, MONTH και YEAR επιστρέφουν έναν ακέραιο που αναπαριστάνει την ηµέρα, τον µήνα ή το χρόνο αντίστοιχα µιας συγκεκριµένης ηµεροµηνίας. Σύνταξη: DAY(date) MONTH(date) YEAR(date) 38

Παρατηρήση: Αυτές οι συναρτήσεις επιστρέφουν το ίδιο µε αυτό που θα επιστρέψουν οι συναρτήσεις DATEPART(dd, date). DATEPART(mm, date). DATEPART(yy, date). αντίστοιχα. Θα εξεταστούν αναλυτικότερα παρακάτω. π.χ. SELECT DAY('11/19/2000') AS 'Day Number' DATENAME και DATEPART H συνάρτηση DATENAME επιστρέφει ένα συγκεκριµένο µέρος κάποιας ηµεροµηνίας (έτος, µήνα, µέρα, ) σαν character string, ενώ η DATEPART επιστρέφει το ίδιο αλλά σαν integer value. Σύνταξη: DATENAME(date_part,date) DATEPART(date_part,date) π.χ. είτε το αποτέλεσµα από τα παρακάτω. και SELECT DATENAME(mm, GETDATE()) AS 'Month Date' SELECT DATEPART(month, GETDATE()) AS 'Month Date' 39

ΠΙΝΑΚΑΣ : Τα date parts που χρησιµοποιούνται στις DATE functions Date Part Abbreviation Tιµές Year yy 1753-9999 Month mm 1-12 Day of Year dy 1-366 Day dd 1-31 Week wk 1-54 Weekday dw 1-7(Κυρ-Σαβ) Hour hh 0-23 Minute mi 0-59 Second ss 0-59 Millisecond ms 0-999 DATEADD Η συνάρτηση DATEADD επιστρέφει µία καινούρια datetime τιµή που προκύπτει από την πρόσθεση συγκεκριµένης date part τιµής σε µια ηµεροµηνία Σύνταξη: DATEADD(date_part,number,date) DATEDIFF H συνάρτηση DATEDIFF επιστρέφει την διαφορά µεταξύ δύο συγκεκριµένων ηµεροµηνιών (σε έτη, σε µέρες, κ.ο. ανάλογα µε το τι έχει οριστεί ως date_part) Σύνταξη: DATEFIFF(date_part,date1,date2) 40

CONVERSION FUNCTIONS Πολλές φορές δηµιουργείται η ανάγκη να µετατρέψουµε έναν ακέραιο σε χαρακτήρα, ή έναν πραγµατικό σε ακέραιο, ή ακόµη µια ηµεροµηνία σε χαρακτήρα. Γι αυτό το σκοπό υπάρχει η συνάρτηση CONVERT όπου: Σύνταξη: CONVERT(datatype[(length)], expression [, style]) όπου datatype µπορεί να είναι το data type στο οποίο θέλουµε να γίνει η µετατροπή της στήλης (ή έκφρασης) που ορίζουµε µε το expression, ενώ το style χρησιµοποιείται στις περιπτώσεις όπου µετατρέπουµε datetime τιµές µε συγκεκριµένο format. π.χ. SELECT ENAME + CONVERT(CHAR(4),MGR) FROM EMP; ή SELECT CONVERT(CHAR(24),hiredate,104) FROM EMP; αν το style είναι 0 ή 100 τότε εχώ το default format για τη ηµεροµηνία, Υπάρχουν και άλλα όπως από 101 114, δοκιµάστε να δείτε πως εµφανίζονται κάθε φορά. ΠΡΟΣΟΧΗ! Υπάρχουν κάποιοι περιορισµοί σε σχέση µε το αν µπορούν να µετατραπούν κάποιοι τύποι σε κάποιους άλλους. είτε τη βοήθεια που σας προσφέρεται µέσα από το λογισµικό που χρησιµοποιείται. 41

ΑΣΚΗΣΕΙΣ ΑΣΚΗΣΗ 1: Να παράγετε την εξής έξοδο για όλους τους εργαζόµενους. Να είναι ταξινοµηµένα σύµφωνα µε την δεύτερη στήλη ENAME DATE_HIRED ---------- ------------------------------------------------------------------------ JONES April,2 1981 SMITH December,17 1980 JAMES December,3 1981 FORD December,3 1981 SCOTT December,9 1982 ALLEN February,20 1981 WARD February,22 1981 ADAMS January,12 1983 MILLER January,23 1982 CLARK June,9 1981 BLAKE May,1 1981 KING November,17 1981 MARTIN September,28 1981 TURNER September,8 1981 ΑΣΚΗΣΗ 2: Να παράγετε την εξής έξοδο (την σηµερινή ηµεροµηνία): ----------------------------------------------------------- simera einai November kai o minaς exei 22 ΑΣΚΗΣΗ 3: Παράγετε το εξής report για όλους τους εργαζοµένους που το όνοµα τους αρχίζει από S, και όπου το REVIEW είναι η ηµεροµηνία ακριβώς ένα χρόνο µετά. Να γίνει ταξινόµηση σύµφωνα µε το REVIEW. ENAME HIREDATE REVIEW ---------- ------------------------ -------------- SMITH 1980/12/17 1981/12/17 SCOTT 1982/12/09 1983/12/09 42

ΑΣΚΗΣΗ 4: Να εµφανίσετε όλους τους υπαλλήλους µε τα ονόµατά τους και τον κωδικό του αφεντικού τους (ΜGR). Σε όσους δεν υπάρχει αφεντικό να εµφανίζετε η λέξη UNMANAGEABLE ΑΣΚΗΣΗ 5: Εµφανίστε την ακριβή ηµεροµηνία α) µε επιπλέον δύο µήνες καθώς και τον αριθµό των ηµερών που έχουµε µέχρι τότε (να είναι σε µορφή π.χ. 22 Jan 2001), β) µε µείον 15 χρόνια καθώς και τον αριθµό των ηµερών που έχουν περάσει από τότε. ΑΣΚΗΣΗ 6: Βρείτε τα ονόµατα των υπαλλήλων που η ηµεροµηνία πρόσληψής τους έγινε 8 µήνες µετά από την 3/4/81. Να εµφανιστεί ο µήνας που έγινε η πρόσληψη σε περιγραφική µορφή (π.χ. August) και ο µισθός τους. ώστε ονόµατα σε όσες στήλες δεν έχουν στο αποτέλεσµα. ΑΣΚΗΣΗ 7: Αν υποθέσουµε ότι ο µισθός αυξάνεται κατά 15% το χρόνο, να εµφανίσετε τα ονόµατα των υπαλλήλων, την τρέχουσα ηµεροµηνία, το µισθό που παίρνουν τώρα, την ηµεροµηνία σε ένα χρόνο από τώρα και το µισθό που θα παίρνουν τότε (υποθέτουµε ότι το hiredate είναι σηµερινό). ΑΣΚΗΣΗ 8: Να εµφανισθούν οι στήλες (Prodid, Start day, Start month, Start year, End day, End month, End year, Stdprice) του πίνακα που αφορά τις τιµές των προϊόντων, ταξινοµηµένα κατά prodid και startdate, όπως φαίνονται παρακάτω. Να ελεγχθεί η συνέπεια των δεδοµένων του πίνακα. Είναι απαραίτητη η χρήση του πεδίου enddate? Prodid Start day Start month Start year End day End month End year Stdprice 100860 1 1 1985 31 12 1985 30.00 100860 1 1 1986 31 5 1986 32.00 100860 1 6 1986 35.00 100861 1 1 1985 31 12 1985 39.00 43

100861 1 1 1986 31 5 1986 42.00 100861 1 6 1986 45.00 100870 1 1 1985 1 12 1985 2.40 100870 1 1 1986 2.80 100871 1 1 1985 1 12 1985 4.80 100871 1 1 1986 5.60 100890 1 6 1984 31 5 1984 54.00 100890 1 1 1985 58.00 101860 15 2 1985 24.00 101863 15 2 1985 12.50 102130 18 8 1985 3.40 200376 15 11 1986 2.40 200380 15 11 1986 4.00 44

Εργαστήριο 7 : GROUP Functions 45

GROUP FUNCTIONS AVG = βρίσκει τον µέσο όρο COUNT = υπολογίζει όλες τις γραµµές MAX = βρίσκει τον µέγιστο όρο MIN = βρίσκει τον ελάχιστο όρο SUM = προσθέτει τιµές µιας στήλης Όλες έχουν την ίδια σύνταξη : SELECT function1(column_1 *),.., function2(column_1 *) FROM table ΠΑΡΑΤΗΡΗΣΗ: Η GROUP BY πρόταση χρησιµοποιείται πολύ συχνά µε τις GROUP FUNCTIONS µε σκοπό να χωρίζει τις εγγραφές του πίνακα σε µικρότερες οµάδες π.χ. SELECT JOB,AVG(SAL) FROM EMP GROUP BY JOB είτε τι εµφανίζει. οκιµάστε και χωρίς GROUP BY. H HAVING ΠΡΟΤΑΣΗ ΚΑΙ ΟΙ GROUP FUNCTIONS Η HAVING πρόταση όταν χρησιµοποιείται µε τις GROUP FUNCTIONS και µε την GROUP BY (υποχρεωτικά) έχει σκοπό να περιορίσει τις οµάδες εγγραφών που θα εµφανιστούν. 46

π.χ. SELECT DEPTNO,AVG(SAL) FROM EMP GROUP BY DEPTNO HAVING COUNT(*)>3 όπου η HAVING γράφεται µετά την GROUP BY, αφού πρώτα δηµιουργηθούν οι οµάδες εγγραφών και κατόπιν να αποµονωθούν αυτές που θα εµφανιστούν. οκίµασε SELECT DEPTNO,AVG(SAL) FROM EMP WHERE COUNT(*)>3 GROUP BY DEPTNO τι παρατηρείς; ΑΣΚΗΣΕΙΣ ΑΣΚΗΣΗ 1: Παράγετε την εξής έξοδο για όλους τους εργαζόµενους, όπου MESOS_MISTHOS ο µέσος όρος µισθών ανά τµήµα και ανά κατηγορία δουλειάς. DEPTNO JOB MESOS_MISTHOS -------------- ------------------- ----------------------------- 10 CLERK 1300.000000 10 MANAGER 2450.000000 10 PRESIDENT 5000.000000 20 ANALYST 3000.000000 20 CLERK 950.000000 20 MANAGER 2975.000000 30 CLERK 950.000000 30 MANAGER 2850.000000 30 SALESMAN 1400.000000 (9 row(s) affected) 47

ΑΣΚΗΣΗ 2: Ποιός είναι ο µέγιστος µισθός για κάθε κατηγορία δουλειάς στην εταιρεία. ΑΣΚΗΣΗ 3: Εµφάνισε µόνο εκείνες τις δουλειές όπου ο µέγιστος µισθός είναι µεγαλύτερος ή ίσος µε $3000. ΑΣΚΗΣΗ 4: Βρείτε τον ελάχιστο, τον µεγαλύτερο και τον µέσο µισθό από κάθε τύπο JOB. Τα αποτελέσµατα να εµφανιστούν χωρίς δεκαδικά. ΑΣΚΗΣΗ 5: Εµφανίστε την εξής έξοδο. DEPTNO AVERAGE ------ ------------------------ 10 2916.666666 20 2175.000000 όπου AVG(SAL)>2000 ΑΣΚΗΣΗ 6: Βρείτε πόσοι manager υπάρχουν συνολικά. ΑΣΚΗΣΗ 7: Βρείτε όλα τα τµήµατα που έχουν πάνω από 3 υπαλλήλους. Εµφανίστε το αριθµό τµήµατος και το σύνολο των υπαλλήλων στο αντίστοιχο τµήµα. ΑΣΚΗΣΗ 8: Βρείτε τους κωδικούς των πελατών εκείνων που έχουν κάνει από τρεις παραγγελίες και πάνω. Στο αποτέλεσµα να εµφανίζονται και πόσες παραγγελίες έκανε ο καθένας από τους πελάτες αυτούς. ώστε ένα όνοµα στη στήλη αυτή. 48

ΑΣΚΗΣΗ 9: Βρείτε τη συνολική ποσότητα (QTY) παραγγελίας για εκείνες τις παραγγελίες που έχουν κωδικό τεµαχίου µικρότερο ή ίσο µε 5. Στο αποτέλεσµα να εµφανίζονται ο κωδικός του τεµαχίου καθώς η αντίστοιχη συνολική ποσότητα (δώστε ένα όνοµα στη στήλη αυτή). ΑΣΚΗΣΗ 10: Βρείτε το µέσο όρο της τρέχουσας τιµής (ACTUAL PRICE) ενός προϊόντος για τις παραγγελίες εκείνες που έχουν κωδικό ίσο µε 615 ή µικρότερο από 608. Στη στήλη που εµφανίζεται ο µέσος όρος της τρέχουσας τιµής του προϊόντος δώστε κατάλληλο όνοµα. 49

50

Εργαστήριο 8: UNION, SOUNDEX, DIFFERENCE, VIEWS, SUBQUERIES 51

52

UNION Η εντολή αυτή συνδυάζει τα αποτελέσµατα από δυο η περισσότερες queries σε ένα µόνο πεδίο που αποτελείται από τις γραµµές που ανήκουν σε όλες τις queries της UNION. Η σύνταξη έχει ως ακολούθως: select_statement UNION [ALL] select_statement [UNION [ALL] select_statement][,...n] select_statement: Είναι µια SELECT statement που επιστρέφει αποτελέσµατα που θα πρέπει να συνδυαστούν µε τα δεδοµένα από την άλλη SELECT statement, οι οποίες συνδέονται µεταξυ τους µε UNION. Τα αποτελέσµατα από κάθε ένα SELECT θα πρέπει να είναι του ιδίου ή συµβατού τύπου. UNION: Είναι το keyword που υποδεικνύει ότι πολλαπλά result sets πρόκειται να συνδυαστούν και να επιστραφούν ως ένα ενιαίο single result set. ALL: Όταν η UNION εντολή συνοδεύεται από το keyword ALL όλες οι διπλές έγγραφες που υπάρχουνε στις στήλες που προκύπτουν από την εκτέλεση µιας Union εντολης, παραµένουν. Στην περίπτωση που δεν αναφέρεται, τότε όλες οι διπλές έγγραφες παραλείπονται. n: Είναι µια µεταβλητή που χρησιµοποιούµε για να δηλώσουµε ότι πολλά SELECT statements µπορούνε να προστεθούν µε ένα έχοντας ανάµεσα τους µια UNION έκφραση. 53