Μπορούμε να δώσουμεένα ψευδώνυμο (alias) σε ένα πίνακα με τον ίδιο τρόπο που δίνουμε και σε μία στήλη : select column_name1, column_name2,… from table_name1 as alias1, table_name2 as alias2 where alias1.column_name3 = alias2.column_name3; select * from school as S, dept as D where S.scid = D.scid; select S.name as SCHOOL, D.name as DEPARTMENT from school as S, dept as D where S.scid = D.scid;
4.
Με τα table aliases μπορούμε να δημιουργήσουμε αυτοσυσχέτ ι ση ενός πίνακα (δηλαδή σύνδεση πίνακα με τον εαυτό του). Παράδειγμα: Να εμφανίσετε ζευγάρια μαθητών που μπορούν να συνεργαστούν. select a.name as student1, b.name as student2 from student as a, student as b where a.sid <> b.sid;
5.
Η εντολή unionμας εμφανίζει τα αποτελέσματα πολλών εντολών select σε έναν πίνακα (χωρίς αυτό να εγγυάται ότι έχει λογικό νόημα) Οι εντολές select που ενώνουμε πρέπει να έχουν τον ίδιο αριθμό στηλών select scid, name from school union select did, name from dept;
6.
Για τις ανάγκεςτου παραδείγματος που ακολουθεί καταχωρήστε τις παρακάτω εγγραφές delete FROM dept where did=3; // delete physics dept insert into school (scid, name) values (3, 'testSchool'); insert into school (scid, name) values ( 4 , ‘abc'); insert into dept (did, name, scid) values (4, 'testDept0', 3); insert into dept (did, name, scid) values (5, 'testDept1', 3); insert into dept (did, name, scid) values (6, 'testDept2', 2); insert into dept (did, name, scid) values (7, 'testDept3', 2); insert into student (sid, name, semester, age, did) values (500, 'testStd0', 'A', 25, 4); insert into student (sid, name, semester, age, did) values (501, 'testStd1', 'A', 25, 4);
7.
Βρείτε τις σχολέςπου δεν έχουν κανένα σπουδαστή δηλαδή : είτε δεν έχουν τμήματα + είτε έχουν τμήματα αλλά όχι σπουδαστές. Θα απαντηθεί πλήρως όταν μιλήσουμε για το Union A_List UNION B_List A_List = οι σχολές που δεν έχουν κανένα τμήμα B_List = οι σχολές που έχουν τμήματα, αλλά όλα τα τμήματά τους δεν έχουν σπουδαστές
8.
A_List Οι σχολέςπου δεν έχουν τμήματα Select school.name From school left outer join dept On school.scid = dept.scid Where dept.did IS NULL;
9.
LIST_B : οι σχολές που έχουν τμήματα, αλλά όλα τα τμήματά τους δεν έχουν σπουδαστές LIST_BA : τα τμήματα που δεν έχουν σπουδαστές. Σε αυτό το σύνολο υπάρχουν και τμήματα που ενώ τα ίδια δεν έχουν σπουδαστές, η σχολή στην οποία ανήκουν, έχει ( πορτοκαλί χρώμα ) Select dept.did From dept left outer join student On dept.did = student.did Where student.sid IS NULL ; Select distinct school.name from school, dept where school.scid = dept.scid and dept.did IN ( LIST_BA ) and school.scid NOT IN ( σχολές που έχουν σπουδαστές ) ; Αφαιρούμε τις σχολές τύπου Α, δηλαδή όσες έχουν έστω και ένα τμήμα με σπουδαστές
10.
Οι σχολές πουέχουν σπουδαστές Select school.scid From school, dept, student Where school.scid = dept.scid and dept.did = student.did;
11.
SELECT DISTINCT school.name FROM school, dept WHERE school.scid = dept.scid AND dept.did IN ( SELECT dept.did FROM dept left outer join student ON dept.did = student.did WHERE student.sid IS NULL ) AND school.scid NOT IN ( SELECT school.scid FROM school, dept, student WHERE school.scid = dept.scid AND dept.did = student.did ); Η τελική απάντηση προκύπτει από : A_List UNION ( το προηγούμενο select)
12.
Πριν αρχίσουμε ναγράφουμε κώδικα SQL καλό θα είναι να ζωγραφίσουμε αυτό που θέλουμε και να ψάξουμε αν υπάρχει ευκολότερος τρόπος να το κάνουμε πχ στο προηγούμενο , αν από τη λίστα των σχολών αφαιρέσουμε τις σχολές που έχουν σπουδαστές βγαίνει αυτό που ζητάμε, δηλ. τα 2 κίτρινα προκύπτει αυτό που ζητάμε
13.
SELECT DISTINCT school.name FROM school WHERE school.scid NOT IN (SELECT school.scid FROM school, dept, student WHERE school.scid = dept.scid AND dept.did = student.did ); Όλες οι σχολές – (όσες έχουν σπουδαστές)