Review of SQL
5DV120 — Database System Principles Ume˚ a University Department of Computing Science Stephen J. Hegner hegner@cs.umu.se http://www.cs.umu.se/~hegner
Review of SQL 20140327 Slide 1 of 45
Review of SQL 5DV120 Database System Principles Ume a University - - PowerPoint PPT Presentation
Review of SQL 5DV120 Database System Principles Ume a University Department of Computing Science Stephen J. Hegner hegner@cs.umu.se http://www.cs.umu.se/~hegner Review of SQL 20140327 Slide 1 of 45 About these Slides These slides
Review of SQL 20140327 Slide 1 of 45
Review of SQL 20140327 Slide 2 of 45
Review of SQL 20140327 Slide 3 of 45
Review of SQL 20140327 Slide 4 of 45
Review of SQL 20140327 Slide 5 of 45
CREATE TABLE department (dept_name VARCHAR (20) , building VARCHAR (15) , budget NUMERIC (12 ,2) CHECK (budget > 0), PRIMARY KEY (dept_name) ); CREATE TABLE instructor (ID VARCHAR (5), name VARCHAR (20) NOT NULL , dept_name VARCHAR (20) , salary NUMERIC (8 ,2) CHECK (salary > 29000) , PRIMARY KEY (ID), FOREIGN KEY (dept_name) REFERENCES department ON DELETE SET NULL );
Review of SQL 20140327 Slide 6 of 45
CREATE TABLE Student ( Name VARCHAR (40) NOT NULL , Personnr CHAR (11) NOT NULL , Ident VARCHAR (8) NOT NULL , Status VARCHAR (3), PRIMARY KEY(ident), UNIQUE (Personnr) ); CREATE TABLE ObligEx ( Ident VARCHAR (10) NOT NULL , Number INTEGER NOT NULL , Grade INTEGER NOT NULL , Handedin DATE , Graded DATE , Approved DATE , Status CHAR (1) , PRIMARY KEY (ident , number), CONSTRAINT
FOREIGN KEY (ident) REFERENCES Student(ident) ON UPDATE CASCADE );
Review of SQL 20140327 Slide 7 of 45
CREATE TABLE instructor (ID VARCHAR (5) NOT NULL , dept_name CHAR (9), ...
key to department cannot be declared here.
reference : FOREIGN KEY ( dept_name ) REFERENCES department CREATE TABLE department (dept_name VARCHAR (20) , ... PRIMARY KEY (dept_name), );
the foreign -key constraint here: ALTER TABLE instructor ADD CONSTRAINT Instr_FK1 FOREIGN KEY (dept_name) REFERENCES Department (dept_name );
Review of SQL 20140327 Slide 8 of 45
CREATE TABLE instructor (ID VARCHAR (5) NOT NULL , dept_name CHAR (9), ...
key to department cannot be declared here.
reference : FOREIGN KEY ( dept_name ) REFERENCES department CREATE TABLE department (dept_name VARCHAR (20) ,
attribute identifying the head
department dept_head VARCHAR (5) ... PRIMARY KEY (dept_name), FOREIGN KEY (dept_head) REFERENCES instructor (ID); );
foreign -key constraint must be added here: ALTER TABLE instructor ADD CONSTRAINT Instr_FK1 FOREIGN KEY (dept_name) REFERENCES Department (dept_name );
Review of SQL 20140327 Slide 9 of 45
SELECT <attributes > FROM <tables > WHERE <conditions >
SELECT name , salary FROM instructor ;
SELECT * FROM instructor ;
SELECT name , salary FROM instructor WHERE dept_name = ’Comp.Sci.’;
Review of SQL 20140327 Slide 10 of 45
SELECT name AS Nachname , salary AS Gehalt FROM instructor WHERE (salary >= 65000) OR (dept_name = ’History ’);
Does not work:
SELECT name AS Nachname , salary AS Gehalt FROM instructor WHERE (Gehalt >= 65000) OR (dept_name = ’History ’);
Review of SQL 20140327 Slide 11 of 45
SELECT salary FROM instructor ; SELECT DISTINCT salary
removed FROM instructor ; SELECT name , salary FROM instructor ORDER BY salary DESC;
SELECT name , salary FROM instructor ORDER BY salary ASC;
SELECT name , salary , ID FROM instructor ORDER BY name , salary , ID;
Review of SQL 20140327 Slide 12 of 45
SELECT building , name FROM department , instructor ;
SELECT building , name FROM department , instructor WHERE (department .dept_name= instructor .dept_name );
Review of SQL 20140327 Slide 13 of 45
SELECT building , name FROM department INNER JOIN instructor ON ( department .dept_name=instructor .dept_name );
SELECT building , name FROM department , instructor WHERE (department .dept_name= instructor .dept_name );
SELECT building , name FROM department INNER JOIN instructor ON ( department .dept_name=instructor .dept_name) WHERE (salary > 50000);
Review of SQL 20140327 Slide 14 of 45
SELECT * FROM department NATURAL JOIN instructor ;
SELECT * FROM department INNER JOIN instructor ON ( department .dept_name=instructor .dept_name );
SELECT * FROM classroom NATURAL JOIN instructor ;
Review of SQL 20140327 Slide 15 of 45
SELECT D1.dept_name , D2.dept_name FROM department AS D1 JOIN department AS D2 ON (D1.building=D2.building );
SELECT D1.dept_name , D2.dept_name FROM department AS D1 , department AS D2 WHERE (D1.building=D2.building );
Review of SQL 20140327 Slide 16 of 45
SELECT DISTINCT ID , name FROM instructor JOIN department ON (( instructor .dept_name= department.dept_name) AND (salary > budget ));
Review of SQL 20140327 Slide 17 of 45
Some implementations of SQL do not support INTERSECT and EXCEPT.
Review of SQL 20140327 Slide 18 of 45
SELECT * FROM instructor WHERE dept_name = (SELECT dept_name FROM instructor WHERE name=’Srinivasan ’);
SELECT * FROM instructor WHERE dept_name IN (SELECT dept_name FROM instructor WHERE name=’Srinivasan ’);
Review of SQL 20140327 Slide 19 of 45
SELECT DISTINCT instructor.ID , name FROM instructor JOIN teaches ON ( instructor .ID=teaches.ID) WHERE course_id IN (SELECT course_id FROM teaches WHERE id IN (SELECT id FROM instructor WHERE (name=’Srinivasan ’)));
SELECT DISTINCT instructor.ID , name FROM instructor JOIN teaches ON ( instructor .ID=teaches.ID) WHERE course_id IN (SELECT course_id FROM teaches WHERE id IN (SELECT id FROM instructor WHERE (name=’Srinivasan ’))) AND (name <>’Srinivasan ’);
Review of SQL 20140327 Slide 20 of 45
SELECT DISTINCT instructor.ID , name FROM instructor JOIN teaches ON ( instructor .ID=teaches.ID) WHERE (course_id=’CS -101 ’) INTERSECT SELECT instructor .ID , name FROM instructor JOIN teaches ON ( instructor .ID=teaches.ID) WHERE (course_id=’CS -319 ’);
SELECT DISTINCT instructor.ID , name FROM instructor JOIN teaches ON ( instructor .ID=teaches.ID) WHERE (course_id=’CS -101 ’) AND ( instructor.ID IN (SELECT instructor .ID FROM instructor JOIN teaches ON (instructor .ID=teaches.ID) WHERE (course_id=’CS -319 ’)));
Review of SQL 20140327 Slide 21 of 45
SELECT DISTINCT instructor.ID , name FROM instructor JOIN teaches ON ( instructor .ID=teaches.ID) WHERE (course_id=’CS -101 ’) EXCEPT SELECT instructor .ID , name FROM instructor JOIN teaches ON ( instructor .ID=teaches.ID) WHERE (course_id=’CS -319 ’);
SELECT DISTINCT instructor.ID , name FROM instructor JOIN teaches ON ( instructor .ID=teaches.ID) WHERE (course_id=’CS -101 ’) AND (NOT ( instructor .ID IN (SELECT instructor .ID FROM instructor JOIN teaches ON (instructor .ID=teaches.ID) WHERE (course_id=’CS -319 ’))));
Review of SQL 20140327 Slide 22 of 45
SELECT DISTINCT Ins.ID , name FROM instructor AS Ins JOIN teaches ON (Ins.ID=teaches.ID) WHERE NOT EXISTS (SELECT course_id FROM teaches WHERE (ID IN (SELECT ID FROM instructor WHERE (name=’Srinivasan ’))) EXCEPT (SELECT course_id FROM teaches WHERE (Ins.ID=teaches.ID ))) AND NOT (Ins.ID IN (SELECT ID FROM instructor WHERE (name=’Srinivasan ’)));
Review of SQL 20140327 Slide 23 of 45
SELECT DISTINCT instructor.ID , name FROM instructor JOIN teaches AS T1 ON ( instructor .ID=T1.ID) JOIN teaches AS T2 ON ( instructor .ID=T2.ID) WHERE (T1.course_id <>T2.course_id );
SELECT DISTINCT instructor.ID , name FROM instructor WHERE EXISTS (SELECT * FROM teaches WHERE (instructor .ID=teaches.ID)) AND NOT EXISTS (SELECT * FROM teaches AS T1 JOIN Teaches AS T2 ON (T1.ID=T2.ID) WHERE (T1.course_id <>T2.course_id) AND (T1.ID=instructor .ID ));
Review of SQL 20140327 Slide 24 of 45
SELECT DISTINCT ID , name FROM instructor WHERE salary >= ALL (SELECT salary FROM instructor );
SELECT DISTINCT ID , name , salary FROM instructor WHERE salary > ANY (SELECT salary FROM instructor );
Review of SQL 20140327 Slide 25 of 45
SELECT ID , name FROM instructor WHERE name LIKE ’C%’;
SELECT ID , name FROM instructor WHERE name LIKE ’c%’;
SELECT ID , name FROM instructor WHERE name ILIKE ’c%’;
Review of SQL 20140327 Slide 26 of 45
MySQL does not support SIMILAR TO, although it is part of the
SELECT ID , name FROM instructor WHERE name SIMILAR TO ’C%’; SELECT ID , name FROM instructor WHERE name SIMILAR TO ’C[a-z]*’;
SELECT ID , name FROM instructor WHERE name SIMILAR TO ’C____ ’;
Review of SQL 20140327 Slide 27 of 45
SELECT ID , name FROM instructor WHERE (ID LIKE ’__3%’) OR (ID LIKE ’__8%’);
SELECT ID , name FROM instructor WHERE ID SIMILAR TO ’__ (3|8)% ’;
SELECT name FROM instructor WHERE name LIKE ’%~%% ’;
Review of SQL 20140327 Slide 28 of 45
Review of SQL 20140327 Slide 29 of 45
INSERT INTO instructor VALUES (’00000 ’, ’Ortega ’, NULL , ’100000 ’);
INSERT INTO instructor (ID , name , salary) VALUES (’00000 ’, ’Ortega ’, ’100000 ’);
Review of SQL 20140327 Slide 30 of 45
DELETE FROM instructor WHERE ID=’00000 ’;
DELETE FROM instructor WHERE dept_name=’Comp.Sci.’;
Review of SQL 20140327 Slide 31 of 45
UPDATE instructor SET dept_name = ’Comp.Sci.’ WHERE ID=’00000 ’;
UPDATE instructor SET SALARY = SALARY
WHERE dept_name=’Comp.Sci.’;
Review of SQL 20140327 Slide 32 of 45
INSERT INTO instructor VALUES (’00000 ’, ’Ortega ’, ’Management ’, ’150000 ’); INSERT INTO department VALUES (’Management ’,’Watson ’,’1000000 ’,’00000 ’);
Review of SQL 20140327 Slide 33 of 45
CREATE TABLE instructor (<column declarations > <constraints
than fkey_instr >); CREATE TABLE department (<column declarations > <constraints >); ALTER TABLE instructor ADD CONSTRAINT fkey_instr FOREIGN KEY (dept_name) REFERENCES department (dept_name) DEFERRABLE INITIALLY DEFERRED;
Review of SQL 20140327 Slide 34 of 45
BEGIN; INSERT INTO instructor VALUES (’00000 ’, ’Ortega ’, ’Management ’, ’150000 ’); INSERT INTO department VALUES (’Management ’,’Watson ’,’1000000 ’,’00000 ’); COMMIT;
ALTER TABLE instructor DROP CONSTRAINT fkey_instr ; ALTER TABLE instructor ADD CONSTRAINT fkey_instr FOREIGN KEY (dept_name) REFERENCES department (dept_name) DEFERRABLE INITIALLY DEFERRED;
Review of SQL 20140327 Slide 35 of 45
CREATE TABLE section (course_id VARCHAR (8), ... FOREIGN KEY (course_id) REFERENCES course ON DELETE CASCADE );
Review of SQL 20140327 Slide 36 of 45
CREATE TABLE section (course_id VARCHAR (8), ... FOREIGN KEY (course_id) REFERENCES course ON DELETE CASCADE ON UPDATE CASCADE );
Review of SQL 20140327 Slide 37 of 45
CREATE TABLE advisor (s_ID VARCHAR (5), i_ID VARCHAR (5), PRIMARY KEY (s_ID), FOREIGN KEY (i_ID) REFERENCES INSTRUCTOR (ID) ON DELETE SET NULL , FOREIGN KEY (s_ID) REFERENCES STUDENT (ID) ON DELETE CASCADE );
Review of SQL 20140327 Slide 38 of 45
CREATE TABLE Student ( Name VARCHAR (40) Not Null , Personnr CHAR (11) Not Null , -- YYMMDD -XXXX Ident VARCHAR (10) Not Null , -- @cs.umu.se user ID PRIMARY KEY (Ident), UNIQUE (Personnr) ); CREATE TABLE ObligEx ( Ident VARCHAR (10) Not Null , Number INTEGER Not Null , -- exercise number (1 or 2) Grade INTEGER , -- numerical point score HandedIn DATE , -- date first submitted Graded DATE , -- date first graded Approved DATE , -- date approved satisfactory Status CHAR (1) , -- S or U PRIMARY KEY (Ident , Number), CONSTRAINT
FOREIGN KEY (Ident) REFERENCES Student(Ident) ON UPDATE CASCADE );
Review of SQL 20140327 Slide 39 of 45
SELECT S.Ident , E1.Grade , E1.HandedIn , E1.Graded , E1.Approved , E1.Status FROM (SELECT Ident FROM Student) AS S LEFT OUTER JOIN (SELECT * FROM ObligEx WHERE Number =1) AS E1 ON (S.Ident=E1.Ident );
Review of SQL 20140327 Slide 40 of 45
SELECT S.Ident , E1.Grade AS Gr1 , E1.HandedIn AS DateH1 , E1.Graded AS DateG1 , E1.Approved AS DateA1 , E1.Status St1 , E2.Grade AS Gr2 , E2.HandedIn AS DateH2 , E2.Graded AS DateG2 , E2.Approved AS DateA2 , E2.Status AS St2 FROM (SELECT Ident FROM Student) AS S LEFT OUTER JOIN (SELECT * FROM ObligEx WHERE Number =1) AS E1 ON (S.Ident=E1.Ident) LEFT OUTER JOIN (SELECT * FROM ObligEx WHERE Number =2) AS E2 ON (S.Ident=E2.Ident );
Review of SQL 20140327 Slide 41 of 45
CREATE VIEW Instructor_Student (Instr_ID , Instr_name , Student_ID , Student_name ) AS SELECT DISTINCT I.ID , I.name , S.ID , S.name FROM instructor AS I INNER JOIN teaches AS Te ON (I.ID=Te.ID) INNER JOIN takes as Ta ON ((Te.course_id=Ta.course_id) AND (Te.sec_id=Ta.sec_id) AND (Te.semester=Ta.semester) AND (Te.year=Ta.year )) INNER JOIN student as S ON (S.ID=Ta.ID);
Review of SQL 20140327 Slide 42 of 45
Review of SQL 20140327 Slide 43 of 45
Review of SQL 20140327 Slide 44 of 45
Review of SQL 20140327 Slide 45 of 45