Top Banner
1 SQL Chapter 8
62
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Revision sql te it new syllabus

1

SQL

Chapter 8

Page 2: Revision sql te it new syllabus

2

Outline

• Data types

• DDL

• Views

• DML

Page 3: Revision sql te it new syllabus

3

One preliminary note..

• SQL is case insensitive!! CREATE TABLE = create table = CreAte TAblE

• Quoted text, however, is case sensitive “Payroll” != “payroll”

Page 4: Revision sql te it new syllabus

4

Data Types

• Each data item has an associated data type – Integer, Char, Date …

• the data type determines the range of values & the set of operators and functions that apply to it.

Page 5: Revision sql te it new syllabus

5

Data Types (choose carefully!)

Data Types

BinaryString

CharacterString DateTime Numeric

BLOB

date time timestamp

CHAR

VARCHAR

CLOB

UDT

INT DECIMAL

Page 6: Revision sql te it new syllabus

6

Data Types

• Some data types require additional information– decimal(p, s) with precision p & scale s– char(n) where n is the (fixed) length of the

string– varchar(n) where n is the max characters in

the string– ……..

Page 7: Revision sql te it new syllabus

7

2 Basic SQL Classes

• DDL = Data Definition Language

• DML = Data Manipulation Language

Page 8: Revision sql te it new syllabus

8

SQL DDL Operations...

• CREATE– CREATE <database object>

• database, table, index, schema, view, alias, trigger

• DELETE– DROP <database object>

• database, table, index, schema, view, alias, trigger,

• MODIFY– ALTER <database object> …

• table

Page 9: Revision sql te it new syllabus

9

Create TableCREATE TABLE student (

Number INTEGER,

Name VARCHAR(50),

Street VARCHAR(20),

City VARCHAR(20),

PostalCode CHAR(7),

Date_of_birth DATE);

Create Table is the most fundamental DDL statement in SQL

Page 10: Revision sql te it new syllabus

10

CREATE TABLE student ( Number INTEGER,Name VARCHAR(50),Street VARCHAR(20), City VARCHAR(20),PostalCode CHAR(7),Date_of_birth DATE,PRIMARY KEY (Number));

• many attributes can have unique constraints but there is only one primary key.

Primary Keys

Page 11: Revision sql te it new syllabus

11

Primary Keys (cont’d)

•The primary key can be defined immediately after the attribute if it is a single attribute primary key.

CREATE TABLE student ( Number INTEGER PRIMARY KEY ,Name VARCHAR(50) NOT NULL,Street VARCHAR(20), City VARCHAR(20) NOT NULL,Postal Code CHAR(7) NOT NULLDate_of_birth DATE NOT NULL);

Page 12: Revision sql te it new syllabus

12

Foreign KeysCREATE TABLE Projects(

Code CHAR(4) PRIMARY KEY, Name VARCHAR(30) NOT NULL, Start_date Date, End_Date Date, dnum INTEGER,

FOREIGN KEY (dnum) REFERENCES Department);

• The table referenced by a foreign key must have already been created

• If it hasn’t been, you can alter the table later to include the foreign key. This solves the “circular reference” problem.

Page 13: Revision sql te it new syllabus

13

Default Values CREATE TABLE faculty(

Number INTEGER NOT NULL PRIMARY KEY, Name VARCHAR(50) NOT NULL, Rank VARCHAR(15) default “Assistant”,Phone VARCHAR(15), Office VARCHAR(10),Email VARCHAR(30),Dcode CHAR(4)REFERENCES department);

• A default value can be specified for an attribute if its value is unknown

• Note: a default value cannot be used for a primary key…why not?

Page 14: Revision sql te it new syllabus

14

Dropping an Object (con’t)

• When dropping an object, you may affect other objects that depend on it. – Eg. A view is defined using one or several

base tables. If one of these base tables is dropped, the view is no longer valid.

• In some cases, the system repairs the damage, in other cases you may not be allowed to drop an object.

Page 15: Revision sql te it new syllabus

15

Modifying An Object

• ALTER can be used to add columns, to increase the length of an existing VARCHAR attribute or to add or delete constraints

• In other cases, you need to drop the table & recreate it.

ALTER TABLE courseADD status CHAR(5);

ALTER TABLE faculty MODIFY email VARCHAR(75);

ALTER TABLE faculty DROP PRIMARY KEY;

Page 16: Revision sql te it new syllabus

16

Views

• Views are “virtual” tables derived from tables which exist in the database.

• Might be defined to omit some data from a table (for privacy), to combine two (or more tables) to contain summary data.

Page 17: Revision sql te it new syllabus

17

Views• we say that the tables defined in the schema

are base tables• eg. course, section, faculty, department

• a view is a virtual table (ie. it does not physically exist in the database)– derived from one or more base tables– adapts the DB to the application without

modification– CREATE VIEW V1 AS <SELECT CLAUSE>

Page 18: Revision sql te it new syllabus

18

Student ( number, street, city, province, postal_code, name, date_of_birth)

Faculty (number, name, rank, phone, office, email, dcode, salary)

Department (code, name, start_date, end_date, fnum)

Section (number, cnum, dcode, term, slot, faculty_num)

Course (number , dcode, title, description)

Enrolled (student_num, section_num, cnum, dcode)

Dept_phones (dcode, phone_number)

Page 19: Revision sql te it new syllabus

19

• thirdOffered is a window on the course table– changes to course are visible in thirdOffered– changes to thirdOffered are applied to base

tables

CREATE VIEW thirdOffered ASSELECT number, dcode FROM courseWHERE number >=3000AND number <= 3999

• Create a view thirdOffered which gives the dcode & couses whose number lise between 3000 & 3999

Page 20: Revision sql te it new syllabus

20

• ClassList is a window on a join between student and enrolled– changes to either table are visible in ClassList– changes to ClassList cannot be applied to base tables

CREATE VIEW ClassList ASSELECT student.Number, student.NameFROM student, enrolledWHERE student_num = numberAND cnum = 3753AND section_num = ‘X1’

• Create a view ClassList which gives student number and name those who are enrolled for the course 3753 and section ‘X1’.

Page 21: Revision sql te it new syllabus

21

Querying Views

SELECT *FROM thirdOfferedWHERE dcode=‘COMP’

SELECT number, dcodeFROM courseWHERE number >=3000AND number <= 3999AND dcode=‘COMP’

Implemented As

Page 22: Revision sql te it new syllabus

22

Advantages of Views• allows same data to be seen in different

ways by different users

• users perception of DB simplified– complex tables are reduced to needed data

• automatic security for data outside view– confidential data is left out of the view, making

it “secure” for people to see the needed info

Page 23: Revision sql te it new syllabus

23

View Update Problem

Page 24: Revision sql te it new syllabus

24

Example 1

INSERT INTO thirdOfferedVALUES (3754, ‘COMP’)

INSERT INTO course VALUES (3754, ‘COMP’, NULL, NULL)

Page 25: Revision sql te it new syllabus

25

Example 2

CREATE VIEW offered ASSELECT numberFROM course

WHERE dcode = ‘COMP’

INSERT INTO offeredVALUES (3754)

What happens if we perform

Page 26: Revision sql te it new syllabus

26

Updating Views

• Is somewhat complicated – sometimes you can do it, and sometimes you can’t.

• Generally, an update to a view from a single table with no aggregate functions and including the primary (or candidate) keys is possible.

• Constraints concerning not null fields may cause the view update to fail.

Page 27: Revision sql te it new syllabus

27

Updating Views (cont’d)

• Views created from two or more tables involving a join cannot be updated.

• Views containing aggregate functions or grouping cannot be updated.

Page 28: Revision sql te it new syllabus

28

DML

Page 29: Revision sql te it new syllabus

29

Our database (simple version)Student ( number, street, city, province, postal_code,

name, date_of_birth)

Faculty (number, name, rank, phone, office, email, dcode, salary)

Department (code, name, start_date, end_date, fnum)

Section (number, cnum, dcode, term, slot, faculty_num)

Course (number , dcode, title, description)

Enrolled (student_num, section_num, cnum, dcode)

Dept_phones (dcode, phone_number)

Page 30: Revision sql te it new syllabus

30

DML - Data Manipulation Language

• 4 main SQL statements:

– INSERT– UPDATE– DELETE– SELECT

Page 31: Revision sql te it new syllabus

31

INSERT

INSERT INTO course VALUES (3753, ‘COMP’, ‘DBMS’, ‘Database Management Systems’)

INSERT INTO course (number, dcode, title) VALUES (3753, ‘COMP’, ‘DBMS’)

INSERT INTO course (number, dcode, title) VALUES (3753, ‘COMP’, ‘DBMS’), (3713, ‘COMP’, ‘OS’)

INSERT INTO course VALUES (&number, &dcode, &title, &description)

Page 32: Revision sql te it new syllabus

32

UPDATE

UPDATE course SET description = ‘A fun course!’

WHERE title = ‘DBMS’

UPDATE course SET description = ‘A fun course!’

WHERE number = 3753 AND dcode = ‘COMP’

Page 33: Revision sql te it new syllabus

33

DELETE

DELETE FROM course•deletes the whole table

DELETE FROM course where dcode=‘HIST’•deletes the tuples where dcode=‘HIST’

Page 34: Revision sql te it new syllabus

34

Queries (SELECT)

• Retrieval of some information from the database

• Result Set contains the “answer” for the query.

• Result “Sets” can contain duplicate rows• Single value Result Sets are considered to

be one row with one column• Result Sets can be empty

Page 35: Revision sql te it new syllabus

35

Simple Format

SELECT <columns>FROM <tables>WHERE <condition>

Where:•Columns = list of attributes to be retrieved•Tables = list of relations needed to process the query•Condition = a boolean expression that identifies which tuples are to be retrieved

Page 36: Revision sql te it new syllabus

36

Example

SELECT <columns>FROM <tables>WHERE <condition>

Example:

SELECT title, descriptionFROM courseWHERE dcode=‘COMP’

Page 37: Revision sql te it new syllabus

37

Important to note ..

• SQL allows duplicate tuples in the result set

• For example, retrieving “cnum” and “dcode” from Section, we will get identical tuples for courses with multiple sections.

Page 38: Revision sql te it new syllabus

38

Important Note #2

• If you are trying to select on a field where the data type is VARCHAR(), then this select will do:– SELECT * FROM t1 WHERE name=‘BOB’

• If you are trying to select on a field where the data type is CHAR(5), then this select will do:– SELECT * FROM t1 WHERE name=‘BOB ’

Page 39: Revision sql te it new syllabus

39

Important Note #3

• Remember that selects on CHAR and VARCHAR types are case sensitive. The SELECTS:– SELECT * FROM t1 WHERE name=‘BOB’– SELECT * FROM t1 WHERE name=‘Bob’– SELECT * FROM t1 WHERE name=‘BoB’

• are all different to the DBMS.

Page 40: Revision sql te it new syllabus

40

Example 1

List course number, department code, title and description of each course.

SELECT *FROM course

SELECT number, dcode, title, descriptionFROM course

Page 41: Revision sql te it new syllabus

41

Example 2

Find the faculty number and name of each faculty member in Computer Science with the rank of “Assistant”

SELECT number, nameFROM facultyWHERE dcode = ‘COMP’ and rank = ‘Assistant’

Page 42: Revision sql te it new syllabus

42

Example #3

Which computer science courses are being taught in the second term?

SELECT cnumFROM sectionWHERE dcode = ‘COMP’ and term = ‘X2’

Page 43: Revision sql te it new syllabus

43

Aggregate Functions

• Aggregate functions cannot be expressed in regular relational algebra.

• Aggregate functions include simple mathematical functions that are useful in a DBMS environment such as:– sum, average, maximum, minimum, count

Page 44: Revision sql te it new syllabus

44

Aggregate Functions (cont’d)

Find the average salary of associate professors.

SELECT AVG(salary) AS AverageSalaryFROM facultyWHERE rank=‘Associate’

•The result has one column called “AverageSalary” with only one tuple.

Page 45: Revision sql te it new syllabus

45

Aggregate Functions (con’t)

How many professors make more than $30,000?

SELECT COUNT(*) as NumProfsFROM facultyWHERE salary > 30000

•The result has one column called “NumProfs” with only one tuple.

Page 46: Revision sql te it new syllabus

46

Aggregate Functions (con’t)

How many different salary levels are paid to assistant professors?

SELECT COUNT(DISTINCT salary)FROM facultyWHERE rank = ‘Assistant’

•The result will be one column (which is nameless) with one tuple.

Page 47: Revision sql te it new syllabus

47

Grouping• Sometimes useful to group rows of a table

together then apply a function to each group separately

• select rank wise minimum, maximum and avg salary of faculty

SELECT rank, AVG(salary) AS AV, MIN(salary)AS MinSalary, MAX(salary) AS MaxSalary FROM facultyGROUP BY rank

• The result has 4 columns (rank, AV, MinSalary, MaxSalary) and one tuple for each rank.

Page 48: Revision sql te it new syllabus

48

SELECT rank, AVG(salary) AS AV, MIN(salary) AS MinSalary, MAX(salary) AS MaxSalary

FROM facultyWHERE dcode = ‘comp’GROUP BY rankHAVING AV > 10000;

• select rank wise minimum, maximum and avg salary of comp department faculties and their avg salary is greater than 10000.

Page 49: Revision sql te it new syllabus

49

Expressions in SELECT

• What is the difference between the start and end dates in the department table?

SELECT sdate, edate, (edate-sdate) AS TimeDiffFROM department•The result has 3 attributes (sdate, edate,

timeDiff)•timeDiff is returned in a 8 digit number where

the first 4 digits are the years, the next two are the months, and the final two are the days.

Page 50: Revision sql te it new syllabus

50

The “Like” Predicate

Retrieve the average salary of professors with offices in Carnegie Hall.

SELECT AVG(salary) AS CSalaryFROM facultyWHERE office LIKE ‘CAR%’

Page 51: Revision sql te it new syllabus

51

Sorting• rows of result relation can be sorted by

values in one or more columns

SELECT name, salaryFROM facultyWHERE salary > 40000ORDER BY salary

Page 52: Revision sql te it new syllabus

52

Sorting

Show all salaries less than 40000. Sort the output according to salary.

SELECT *FROM facultyWHERE salary < 40000ORDER BY salary

Lowest to Highest Highest to Lowest

SELECT *FROM facultyWHERE salary < 40000ORDER BY salary DESC

Page 53: Revision sql te it new syllabus

53

“IN”

• The “IN” clause is useful as it allows us to match up on a set of data rather than just a single piece of data.

• Assuming that the subquery will return more than one item, we can match on anything in the subquery.

Page 54: Revision sql te it new syllabus

54

Retrieval Using a Subquery

SELECT name, salaryFROM facultyWHERE number IN

(SELECT fnum FROM department)

• Find Name & Salary of all department heads

Page 55: Revision sql te it new syllabus

55

“EXISTS”

• We can check to see if a row exists in a subquery.

• The subquery does not return any values – only the existence of the row is checked.

• We can also use “NOT EXISTS” when the cases arises.

Page 56: Revision sql te it new syllabus

56

EXISTS

• List the name, number and salary of all professors who are not department heads.

SELECT name, number, salaryFROM facultyWHERE NOT EXISTS

(SELECT *FROM departmentWHERE fnum = faculty.number)

Page 57: Revision sql te it new syllabus

Correlated subqueries• A correlated sub-query is a sub-query (a query nested

inside another query) that uses values from the outer query in its WHERE clause. The sub-query is evaluated once for each row processed by the outer query.

• Example• Find the list of employees (employee number and names)

having more salary than the average salary of all employees in that employee's department.

57

SELECT employee_number, name FROM employee AS e1 WHERE salary > (SELECT avg(salary) FROM employee WHERE department = e1.department);

Page 58: Revision sql te it new syllabus

• In the above query the outer query is

58

SELECT employee_number, name FROM employee AS e1 WHERE salary >

• And the inner query is,

(SELECT avg(salary) FROM employee WHERE department = e1.department);

• In the above nested query the inner query has to be executed for every employee as the department will change for every row.• Hence the average salary will also change.

Page 59: Revision sql te it new syllabus

59

Join

Find Name & Salary of all department heads

SELECT name, salaryFROM faculty, departmentWHERE faculty.number = department.fnum

For a join, you need to specify all the tables which you will use in getting the information.

Page 60: Revision sql te it new syllabus

60

Join (con’t)

Find the course title, number and section for all sections taught by department heads.

SELECT course.title, section.number, course.number,course.dcode, faculty.name

FROM section, course, department, faculty

WHERE section.cnum = course.number AND section.dcode = department.dcode AND department.fnum = faculty.number

Page 61: Revision sql te it new syllabus

61

Renaming (Aliasing)

Find the course title, number and section for all sections taught by department heads.

SELECT C.title, S.number, C.number,C.dcode, F.name

FROM section as S, course as C, department as D, faculty as F

WHERE S.cnum = C.number AND S.dcode = D.dcode AND D.fnum = F.number

Page 62: Revision sql te it new syllabus

62

Set Operations

• Set operations DO exist in SQL– UNION– INTERSECT– EXCEPT (difference)