revision sql te it new syllabus

Post on 16-Jan-2015

784 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

1

SQL

Chapter 8

2

Outline

• Data types

• DDL

• Views

• DML

3

One preliminary note..

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

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

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.

5

Data Types (choose carefully!)

Data Types

BinaryString

CharacterString DateTime Numeric

BLOB

date time timestamp

CHAR

VARCHAR

CLOB

UDT

INT DECIMAL

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– ……..

7

2 Basic SQL Classes

• DDL = Data Definition Language

• DML = Data Manipulation Language

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

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

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

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);

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.

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?

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.

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;

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.

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>

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)

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

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’.

21

Querying Views

SELECT *FROM thirdOfferedWHERE dcode=‘COMP’

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

Implemented As

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

23

View Update Problem

24

Example 1

INSERT INTO thirdOfferedVALUES (3754, ‘COMP’)

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

25

Example 2

CREATE VIEW offered ASSELECT numberFROM course

WHERE dcode = ‘COMP’

INSERT INTO offeredVALUES (3754)

What happens if we perform

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.

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.

28

DML

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)

30

DML - Data Manipulation Language

• 4 main SQL statements:

– INSERT– UPDATE– DELETE– SELECT

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)

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’

33

DELETE

DELETE FROM course•deletes the whole table

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

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

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

36

Example

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

Example:

SELECT title, descriptionFROM courseWHERE dcode=‘COMP’

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.

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 ’

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.

40

Example 1

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

SELECT *FROM course

SELECT number, dcode, title, descriptionFROM course

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’

42

Example #3

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

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

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

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.

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.

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.

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.

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.

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.

50

The “Like” Predicate

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

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

51

Sorting• rows of result relation can be sorted by

values in one or more columns

SELECT name, salaryFROM facultyWHERE salary > 40000ORDER BY salary

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

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.

54

Retrieval Using a Subquery

SELECT name, salaryFROM facultyWHERE number IN

(SELECT fnum FROM department)

• Find Name & Salary of all department heads

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.

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)

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);

• 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.

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.

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

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

62

Set Operations

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

top related