S Q L

advertisement
DB1 is for lecture and quiz; since this is simplest
DB3 is for your own exercise as it has explained in the text book
DB2 is for exam, it is complicated enough for interesting but not too hard questions
SQL Classifications
Simple query
Join Query; temp join query, subquery (in, =, exists)
Advanced Features (wild card, null values, ordered, distinct
Relational Algebra (marked red;
Cartesian Product, Projection, Selection, Union, Intersect, Minus
SQL -39
SQL
SELECT
General format :
SELECT [DISTINCT] field(s)
FROM table(s)
[WHERE predicate]
[GROUP BY field(s) [HAVING predicate]]
[ORDER BY field(s)];
SQL -40
Simple Queries
Example 1:
SELECT *
FROM SUPPLIERS;
SELECT *
FROM EMPLOYEE;
SELECT *
FROM MOVIE;
Example 2 :
** use projection
and selection
(two operators from RelatonalAlgebra)
SELECT
SNUM, STATUS
FROM
SUPPLIERS
SQL -41
WHERE
CITY = 'PARIS'
ORDER
BY SUPPLIERS.STATUS DESC;
SELECT
LNAME, MINIT, FNAME
FROM
EMPLOYEE
WHERE
DNO = 4 AND SALARY >20000;
SELECT
TITLE,LENGTH
FROM
Movie
WHERE
studioName = ‘Lucas Films’ AND year = 1980;
Advanced Feature
Example 3 (Wild Card):
SQL -42
In the Movie Schema Lets search for all movies with a possessive(S)
in their titles.
SELECT TITLE
FROM MOVIE
WHERE TITLE LIKE 'S%';
SELECT P.*
FROM
PARTS P
WHERE P.PNAME
LIKE 'C%';
SELECT DISTINCT
STARNAME
FROM
STARSIN;
SQL -43
Null Value
Join Queries
Example 4 :( Cartesian Produt; EquiJoin)
Get all supplier and part information such that the supplier
and part in question are located in the same city.
Cartesian Produt
SELECT SUPPLIERS.*, PARTS.*
FROM
SUPPLIERS, PARTS
SELECT *
FROM
MOVIESTAR, MOVIEEXEC
SQL -44
EquiJoin
SELECT SUPPLIERS.*, PARTS.*
FROM
SUPPLIERS, PARTS
WHERE SUPPLIERS.CITY=PARTS.CITY;
SELECT *
FROM MovieStar, MovieExec
WHERE MovieStar.address = MovieExec.address;
Natural Join
SELECT
SUPPLIERS.SNUM, SUPPLIERS.SNAME,
SUPPLIERS.STATUS, SUPPLIERS.CITY,
PARTS.PNUM, PARTS.PNAME,
PARTS.COLOR, PARTS.WEIGHT
SQL -45
FROM
SUPPLIERS, PARTS
WHERE
SUPPLIERS.CITY = PARTS.CITY
Join Queries
SELECT
FROM
WHERE
MovieStar.name, MovieExec.name
MovieStar, MovieExec
MovieStar.address = MovieExec.address;
Built-in Function and Group by
Example For Project
Remark: COPY A REALATION IN ORACLE
SQL -46
For each part supplied, get the part number and the
total quantity supplied of that part, and save the result
in the database.
CREATE TABLE TEMP
(PNUM
TOTQTY
CHAR(6),
INTEGER);
INSERT
INTO
TEMP
(PNUM, TOTQTY)
SELECT PNUM, SUM(QTY)
FROM
SHIPMENT
SQL -47
GROUP BY PNUM;
Example For Project
Remark: If there is output, then there is no Functional
dependency
SELECT
FROM
GROUP
HAVING
INDEP, COUNT(DISTICT DEP)
RELATION_NAME
BY INDEP
COUNT(DISTICT DEP) > 1 ;
SELECT studioName, SUM(length)
FROM Movie
SQL -48
GROUP BY studioName;
Full-Time worker
SELECT
FROM
GROUP
HAVING
WSSN, SUM(HOURS)
WORKS_ON
BY WSSN
SUM(HOURS) >= 40;
SubQueries and JoinQuerries
#1)
SQL -49
SELECT S. SNAME
FROM
SUPPLIERS S, SHIPMENTS SP
WHERE S.SNUM=SP.SNUM and PNUM='P2';
#2)
SELECT
FROM
S.SNAME
SUPPLIERS S, (SELECT SNUM
FROM SHIPMENTS
WHERE PNUM='P2'
) T
WHERE
S.SNUM = T.SNUM;
SQL -50
#3)
SELECT
FROM
WHERE
SNAME
SUPPLIERS
SNUM IN (SELECT SNUM
FROM SHIPMENTS
WHERE PNUM='P2');
#4)
SELECT SNUM
FROM
SUPPLIER
WHERE CITY =
(SELECT
FROM
CITY
SUPPLIER
SQL -51
WHERE
SNUM='S1');
#5)
SELECT SNAME
FROM
SUPPLIERS
WHERE EXISTS
(SELECT
*
FROM
SHIPMENTS
WHERE
SNUM = Suppliers.Snum
AND
PNUM = 'P2');
#6)
SELECT SNAME
FROM
SUPPLIER
SQL -52
WHERE
NOT EXISTS
(SELECT
FROM
*
SHIPMENT
WHERE SNUM=S.Snum
AND
PNUM='P2');
#7)
SELECT name
FROM MovieExec
WHERE cert# =
(SELECT producerC#
FROM Movie
WHERE title = 'Lord of rings');
SQL -53
#8)
SELECT name
FROM MovieExec
WHERE cert# IN
(SELECT producerC#
FROM Movie
WHERE (title,year) IN
(SELECT movietitle, movieyear
FROM StarsIn
WHERE starName = 'Samuel Henry')
);
#9)
SELECT name
SQL -54
FROM MovieExec, (SELECT producerC#
FROM Movie, StarsIn
WHERE title = movieTitle
AND year = movieyear
AND starName = 'Leonardo Dicaprio'
) Prod
WHERE cert# = Prod.producerC#;
Relational Algebra
SELECT
PNUM
FROM
PARTS
WHERE
WEIGHT > 16
SQL -55
UNION/INTERSECT/MINUS
SELECT
PNUM
FROM
SHIPMENTS
WHERE
SNUM = 'S2';
SQL -56
Update Operations
Update
General format :
UPDATE
TABLE
SET
field = expression, [field = expression]...
[WHERE
predicate];
Example 8 :
Change Movieyear to 1998 from Starsin where
movietitle is ‘Down to Bone’
Update Starsin
SQL -57
Set Movieyear=1998
where Movietitle='Down to Bone';
SQL> Update Starsin set Movieyear=1998 where Movietitle='Down to Bone';
1 row updated.
SQL> select * from Starsin;
MOVIETITLE
MOVIEYEAR STARNAME
------------------------- ---------- -----------------------------Blood Diamond
2006 Leonardo Dicaprio
The Quick and the Dead
1995 Leonardo Dicaprio
Titanic
1997 Leonardo Dicaprio
The Departed
2006 Leonardo Dicaprio
Body of lies
2008 Leonardo Dicaprio
Inception
2010 Leonardo Dicaprio
Somersault
2004 Samuel Henry
Macbeth
2006 Samuel Henry
Love my Way
2006 Samuel Henry
The Great Raid
2005 Samuel Henry
Terminator Salvation
2009 Samuel Henry
MOVIETITLE
MOVIEYEAR STARNAME
------------------------- ---------- -----------------------------Avatar
2009 Samuel Henry
Perseus
2010 Samuel Henry
Return to Paradise
1998 Vera A Farmiga
Autumn in New York
2000 Vera A Farmiga
Dust
2001 Vera A Farmiga
Down to Bone
1998 Vera A Farmiga
Mind the Gap
2004 Vera A Farmiga
Breaking and Entering
2005 Vera A Farmiga
The Departed
2006 Vera A Farmiga
Never Forever
2007 Vera A Farmiga
Nothing but the Truth
2008 Vera A Farmiga
MOVIETITLE
MOVIEYEAR STARNAME
------------------------- ---------- -----------------------------Orphan
2008 Vera A Farmiga
SQL -58
Up
Source Code
2009 Vera A Farmiga
2010 Vera A Farmiga
25 rows selected.
DELETE
General format :
DELETE
FROM
[WHERE
table
predicate];
SQL -59
Example 9 : Delete Movie Title ‘ Avatar’ from Movie
DELETE
FROM
Movie
WHERE
Title = 'Avatar';
What type of problems may arise due to this delete operation (if
any)?
SQL> DELETE FROM Movie WHERE Title = 'StarWars';
DELETE FROM Movie WHERE Title = 'StarWars'
*
ERROR at line 1:
ORA-02292: integrity constraint (SYSTEM.SYS_C0011564) violated - child record
found
Example 10 :
SQL -60
Delete all Movies Released in year 1998.
SQL> Delete from Starsin where Movieyear=1998;
2 rows deleted.
SQL> select * from starsin;
MOVIETITLE
MOVIEYEAR STARNAME
------------------------- ---------- ----------------------Blood Diamond
2006 Leonardo Dicaprio
The Quick and the Dead
1995 Leonardo Dicaprio
Titanic
1997 Leonardo Dicaprio
The Departed
2006 Leonardo Dicaprio
Body of lies
2008 Leonardo Dicaprio
Inception
2010 Leonardo Dicaprio
Somersault
2004 Samuel Henry
Macbeth
2006 Samuel Henry
Love my Way
2006 Samuel Henry
The Great Raid
2005 Samuel Henry
Terminator Salvation
2009 Samuel Henry
MOVIETITLE
MOVIEYEAR STARNAME
------------------------- ---------- ----------------------Avatar
2009 Samuel Henry
Perseus
2010 Samuel Henry
Autumn in New York
2000 Vera A Farmiga
Dust
2001 Vera A Farmiga
Mind the Gap
2004 Vera A Farmiga
Breaking and Entering
2005 Vera A Farmiga
The Departed
2006 Vera A Farmiga
SQL -61
Never Forever
Nothing but the Truth
Orphan
Up
2007
2008
2008
2009
Vera
Vera
Vera
Vera
A
A
A
A
Farmiga
Farmiga
Farmiga
Farmiga
MOVIETITLE
MOVIEYEAR STARNAME
------------------------- ---------- ----------------------Source Code
2010 Vera A Farmiga
23 rows selected.
Insert
General format 1 :
INSERT
INTO
table [(field [,field]...)]
VALUES (constant [,constant]...);
SQL -62
general format 2 :
INSERT
INTO
table [(field[,field])]
SELECT
FROM WHERE
SQL -63
Example 11 :
Add Values to the column of table Movie
SQL> insert into movie(title, year,length,incolor,Studioname,producerC#) values
('Inception',2010,109,'color','Warner bros Pictures','Mov0901');
1 row created.
SQL -64
SQL - Data Definition
From the user's point of view, the principal data definition
language (DDL) statements are as follow :
CREATE TABLE
DROP TABLE
CREATE VIEW
DROP VIEW
CREATE INDEX
DROP INDEX
ALTER TABLE
Base Tables
SQL -65
A base table is a named table that exists in its own rightunlike a view which does not exist in its own right, but is
derived from one or more base tables. A view is an
alternative way of looking at base tables.
SQL -66
Create Table
General format :
CREATE TABLE base-table-name
(column-definition [,column-definition]...)
Where a "column-definition" takes the form :
column-name data-type [NOT NULL]
Alter Table
General format :
SQL -67
ALTER TABLE base-table-name
ADD column-name data type;
Example :
ALTER TABLE Movie
ADD Releasedate Date;
Drop Table
General format :
DROP TABLE base-table-name;
The specified table is removed from the system catalog. All
indexes and views defined on that base table are automatically
dropped also.
SQL -68
Create Index
General format :
CREATE[UNIQUE] INDEX index-name
ON base - table - name (column - name[order] [,column name[order]...)
[cluster] ;
Each "order' specification is either ASC (ascending) or DESC
(descending). Default is ASC. The left-to-right sequence of naming
columns in the CREATE INDEX statement corresponds to major-tominor ordering. The UNIQUE option in CREATE INDEX specifies
SQL -69
that no two records in the indexed base table will be allowed to take
on the same value for the indexed field(s) at the same time. Notice
that the only statements that refer to indexes are CREATE INDEX
and DROP INDEX. The decision as to whether or not to use an index
is make by the system optimizer, not the user.
Example :
CREATE INDEX MovieExec#
ON MovieExec (Cert# DESC);
Drop Index
General format :
DROP INDEX index-name;
SQL -70
Download