50
Saad Bashir Alvi 1 SQL Tutorial

SQL Tutorial

Embed Size (px)

Citation preview

Page 1: SQL Tutorial

Saad Bashir Alvi 1

SQL Tutorial

Page 2: SQL Tutorial

Saad Bashir Alvi 2

Topics to be covered

CREATE INSERT UPDATE SELECT ALTER DROP

Page 3: SQL Tutorial

Saad Bashir Alvi 3

First Example

Movie Database movies actors casting

Page 4: SQL Tutorial

Saad Bashir Alvi 4

Tables of Movie Database

Field Name Type Notesid INTEGER An arbitrary unique identifier.

title CHAR(70) The name of the film.

yr DECIMAL(4) Year of first release.

score FLOAT Average of all the votes cast for the film.

votes INTEGER The number of votes cast for this film.

actor actorField Name Type Notes

id INTEGER An arbitrary unique identifier.

name CHAR(30) The name of the actor.

casting castingField Name Type Notes

INTEGER

INTEGER A reference to the actor table.

movie movie

movieid A reference to the movie table.

actorid

Page 5: SQL Tutorial

Saad Bashir Alvi 5

Topics to be covered

CREATE INSERT UPDATE SELECT ALTER DROP

Page 6: SQL Tutorial

Saad Bashir Alvi 6

Creating Database

create table movie (id int NOT NULL primary key, title varchar(70), yr decimal(4), score float, votes integer);

create table actor(id int NOT NULL primary key, name varchar(30));

create table casting(movieid int, actorid int, ord integer, primary key (movieid, actorid));

Page 7: SQL Tutorial

Saad Bashir Alvi 7

Topics to be covered

CREATE

INSERT UPDATE SELECT ALTER DROP

Page 8: SQL Tutorial

Saad Bashir Alvi 8

Populating Database

insert into table movie(id, title, yr, score, votes) values (1, “Lione King”, 2001, 5, 20000);

insert into actor(id, name) values (1, “Sambda”); insert into casting(movieid, actorid, ord) values

(1, 1, 5);

Page 9: SQL Tutorial

Saad Bashir Alvi 9

Topics to be covered

CREATE INSERT

UPDATE SELECT ALTER DROP

Page 10: SQL Tutorial

Saad Bashir Alvi 10

Updating Record

update table movie set title = “Lion King” where id = 1;

update table actor set name = “simba” where id = 1;

update table casting set ord = 1 where movieid = 1 and actorid = 1;

Page 11: SQL Tutorial

Saad Bashir Alvi 11

Topics to be covered

CREATE INSERT UPDATE

SELECT ALTER DROP

Page 12: SQL Tutorial

Saad Bashir Alvi 12

Selecting records

Problem: Select the year that Athens hosted the Olympic games.

Gamesyr city

2000 sydney

2004 Athens

2008 Biejing

2012 London

Page 13: SQL Tutorial

Saad Bashir Alvi 13

Selecting records

Problem: Select the year that Athens hosted the Olympic games.

Solution: select yr, city from Games where city = 'Athens';

Gamesyr city

2000 sydney

2004 Athens

2008 Biejing

2012 London

yr city2004 Athens

Page 14: SQL Tutorial

Saad Bashir Alvi 14

Select with GROUP BY

Problem: Select the continents hosting the Olympics with the count of the number of games held.

Gamesyr city continent

2000 Australia

2004 Athens Europe

2008

2012 London Europe

sydney

Biejing Aisa

Page 15: SQL Tutorial

Saad Bashir Alvi 15

Select with GROUP BY

Problem: Select the continents hosting the Olympics with the count of the number of games held.

Solution: select continent, count(yr) from Games group by continent;

Gamesyr city continent

2000 sydney Australia

2004 Athens Europe

2008 Biejing Aisa

2012 London Europe

continent count(yr)

Australia 1

Asia 1

Europe 2

Page 16: SQL Tutorial

Saad Bashir Alvi 16

Select with aggregate functions

Database bbc(name, region, area, population, gdp)

Problem: Give the total GDP of 'Africa'

name region area population gdpAfghanistan South Aisa 652225 2600000

Albania Europe 28728 320000 665600000................

Page 17: SQL Tutorial

Saad Bashir Alvi 17

Select with aggregate functions

Database bbc(name, region, area, population, gdp)

Problem: Give the total GDP of 'Africa' Solution:

select sum(gdp) from bbc where region = 'Africa'

sum(gdp)

410196200000

name region area population gdpAfghanistan South Aisa 652225 2600000

Albania Europe 28728 320000 665600000................

Page 18: SQL Tutorial

Saad Bashir Alvi 18

Select with aggregate functions

Database bbc(name, region, area, population, gdp)

Problem: How many countries have an area of at least 1000000

Page 19: SQL Tutorial

Saad Bashir Alvi 19

Select with aggregate functions

Database bbc(name, region, area, population, gdp)

Problem: How many countries have an area of at least 1000000

Solution: select count(name) from bbc where area >= 1000000

count(name)

29

Page 20: SQL Tutorial

Saad Bashir Alvi 20

Select with aggregate functions

Database bbc(name, region, area, population, gdp)

Problem: What is the total population of ('France','Germany','Spain')

Page 21: SQL Tutorial

Saad Bashir Alvi 21

Select with aggregate functions

Database bbc(name, region, area, population, gdp)

Problem: What is the total population of ('France','Germany','Spain')

Solution: select sum(population) from bbc where name = 'France' or name = 'Germany' or name = 'Spain'

sum(population)

187300000

Page 22: SQL Tutorial

Saad Bashir Alvi 22

Select with aggregate functions

Database bbc(name, region, area, population, gdp)

Problem: For each region show the region and number of countries with populations of at least 10 million.

Page 23: SQL Tutorial

Saad Bashir Alvi 23

Select with aggregate functions

Database bbc(name, region, area, population, gdp)

Problem: For each region show the region and number of countries with populations of at least 10 million.

Solution: select region, count(name) from bbc where population >= 10000000 group by region region count(name)

Africa 21Americas 3

Asia 20Australia 1Europe 16

Middle East 10North America 3South America 6

Page 24: SQL Tutorial

Saad Bashir Alvi 24

Select with join

Problem: We want to find the year and country where the games took place.

Gamesyr city

1896 Athens

1948 London

2004 Athens

2008 Biejing

2012 London

Cityname country

sydney Australia

Athens Greece

Biejing China

London UK

Page 25: SQL Tutorial

Saad Bashir Alvi 25

Select with join

Problem: We want to find the year and country where the games took place.

Solution: SELECT games.yr, city.country FROM games JOIN city ON (games.city = city.name)

Gamesyr city

1896 Athens

1948 London

2004 Athens

2008 Biejing

2012 London

Cityname country

sydney Australia

Athens Greece

Biejing China

London UK

yr country

1896 Greece

1948 UK

2004 Greece

2008 China

2012 UK

Page 26: SQL Tutorial

Saad Bashir Alvi 26

Select with join

Database album(asin, title, artist, price, release, label, rank) track(album, dsk, posn, song)

Problem: Find the title and artist who recorded the song 'Alison'

Page 27: SQL Tutorial

Saad Bashir Alvi 27

Select with join

Database album(asin, title, artist, price, release, label, rank) track(album, dsk, posn, song)

Problem: Find the title and artist who recorded the song 'Alison'

Solution: SELECT title, artist

FROM album JOIN track ON (album.asin=track.album) WHERE song = 'Alison'

title artist

Elvis CostelloThe Very Best Of Elvis Costello And The Attraction

Page 28: SQL Tutorial

Saad Bashir Alvi 28

Select with join

Database album(asin, title, artist, price, release, label, rank) track(album, dsk, posn, song)

Problem: Show the song for each track on the album 'Blur'

Page 29: SQL Tutorial

Saad Bashir Alvi 29

Select with join

Database album(asin, title, artist, price, release, label, rank) track(album, dsk, posn, song)

Problem: Show the song for each track on the album 'Blur'

Solution: select song FROM album JOIN track ON (album.asin=track.album) where title = 'Blur'

song

Beetlebum

Song 2

Country sad ballad man

.....................

Page 30: SQL Tutorial

Saad Bashir Alvi 30

Select with join

Database album(asin, title, artist, price, release, label, rank) track(album, dsk, posn, song)

Problem: For each album show the title and the total number of track.

Page 31: SQL Tutorial

Saad Bashir Alvi 31

Select with join

Database album(asin, title, artist, price, release, label, rank) track(album, dsk, posn, song)

Problem: For each album show the title and the total number of track.

Solution: SELECT title, COUNT(*) FROM album JOIN track ON (asin=album) GROUP BY title

title COUNT(*)

"Music from the Motion Picture ""Purple Rain""" 9

(What's The Story) Morning Glory? 12

..Baby One More Time [ENHANCED CD] 11

.....................

Page 32: SQL Tutorial

Saad Bashir Alvi 32

Select with join

Database album(asin, title, artist, price, release, label, rank) track(album, dsk, posn, song)

Problem: For each album show the title and the total number of tracks containing the word 'Heart'.

Page 33: SQL Tutorial

Saad Bashir Alvi 33

Select with join

Database album(asin, title, artist, price, release, label, rank) track(album, dsk, posn, song)

Problem: For each album show the title and the total number of tracks containing the word 'Heart'.

Solution: SELECT title, COUNT(*) FROM album JOIN track ON (asin=album) where song like "%Heart%" GROUP BY title

title COUNT(*)

"Music from the Motion Picture ""Purple Rain""" 1

(What's The Story) Morning Glory? 4

..Baby One More Time [ENHANCED CD] 2

.....................

Page 34: SQL Tutorial

Saad Bashir Alvi 34

Select with join

Database album(asin, title, artist, price, release, label, rank) track(album, dsk, posn, song)

Problem: Find the songs that appear on more than 2 albums. Include a count of the number of times each shows up.

Page 35: SQL Tutorial

Saad Bashir Alvi 35

Select with join

Database album(asin, title, artist, price, release, label, rank) track(album, dsk, posn, song)

Problem: Find the songs that appear on more than 2 albums. Include a count of the number of times each shows up.

Solution: select song, count(*) FROM album JOIN track ON (album.asin=track.album) group by song having count(*) > 2 song COUNT(*)

Angel 3

Best is yet to come 3

Changes 3

.....................

Page 36: SQL Tutorial

Saad Bashir Alvi 36

Select with join

Database album(asin, title, artist, price, release, label, rank) track(album, dsk, posn, song)

Problem: A "good value" album is one where the price per track is less than 50 cents. Find the good value album - show the title, the price and the number of tracks.

Page 37: SQL Tutorial

Saad Bashir Alvi 37

Select with join

Database album(asin, title, artist, price, release, label, rank) track(album, dsk, posn, song)

Problem: A "good value" album is one where the price per track is less than 50 cents. Find the good value album - show the title, the price and the number of tracks.

Solution: select title, price, count(*) FROM album JOIN track ON (album.asin=track.album) group by title having price/count(*) < .5 title price COUNT(*)

Angel 11.98 25

Best is yet to come 14.99 50

Changes 22.98 46

.....................

Page 38: SQL Tutorial

Saad Bashir Alvi 38

Select with join

Database movie(id, title, yr, score, votes, director) actor(id, name) casting(movieid, actorid, ord)

Problem: List the films in which 'Harrison Ford' has appeared

Page 39: SQL Tutorial

Saad Bashir Alvi 39

Select with join

Database movie(id, title, yr, score, votes, director) actor(id, name) casting(movieid, actorid, ord)

Problem: List the films in which 'Harrison Ford' has appeared

Solution: select title from movie join casting on id = movieid where actorid = (select id from actor where name = 'Harrison Ford') title

What Lies Beneath

Random Hearts

Air Force One

.....................

Page 40: SQL Tutorial

Saad Bashir Alvi 40

Select with join

Database movie(id, title, yr, score, votes, director) actor(id, name) casting(movieid, actorid, ord)

Problem: List the films together with the leading star for all 1962 films

Page 41: SQL Tutorial

Saad Bashir Alvi 41

Select with join

Database movie(id, title, yr, score, votes, director) actor(id, name) casting(movieid, actorid, ord)

Problem: List the films together with the leading star for all 1962 films

Solution: select title, name from movie, actor, casting where yr = '1962' and ord = 1 and movie.id = casting.movieid and actor.id = casting.actorid title name

Kid Galahad Elvis Presley

The Man Who Shot Liberty Valance John Wayne

Mothra Frankie Sakai

.....................

Page 42: SQL Tutorial

Saad Bashir Alvi 42

Select with join

Database movie(id, title, yr, score, votes, director) actor(id, name) casting(movieid, actorid, ord)

Problem: Which were the busiest years for 'John Travolta'. Show the number of movies he made for each year.

Page 43: SQL Tutorial

Saad Bashir Alvi 43

Select with join

Database movie(id, title, yr, score, votes, director) actor(id, name) casting(movieid, actorid, ord)

Problem: Which were the busiest years for 'John Travolta'. Show the number of movies he made for each year.

Solution: select yr, count(*) from movie, casting, actor where actor.id = casting.actorid and movie.id = casting.movieid and actor.name = 'John Travolta' group by yr order by count(*) desc limit 1

yr count(*)

1997 2

Page 44: SQL Tutorial

Saad Bashir Alvi 44

Select with join

Database movie(id, title, yr, score, votes, director) actor(id, name) casting(movieid, actorid, ord)

Problem: List the 1978 films by order of cast list size.

Page 45: SQL Tutorial

Saad Bashir Alvi 45

Select with join

Database movie(id, title, yr, score, votes, director) actor(id, name) casting(movieid, actorid, ord)

Problem: List the 1978 films by order of cast list size.

Solution: select title, count(actor.id) from movie, actor, casting where actor.id = casting.actorid and movie.id = casting.movieid and yr = 1978 group by title order by count(actor.id) desc

title count(*)

Kid Galahad 16

The Man Who Shot Liberty Valance 13

Mothra 8

.....................

Page 46: SQL Tutorial

Saad Bashir Alvi 46

Topics to be covered

CREATE INSERT UPDATE SELECT

ALTER DROP

Page 47: SQL Tutorial

Saad Bashir Alvi 47

ALTER

ALTER TABLE actor add column age integer; ALTER TABLE actor change age newage

integer; ALTER TABLE actor drop column age;

Page 48: SQL Tutorial

Saad Bashir Alvi 48

Topics to be covered

CREATE INSERT UPDATE SELECT ALTER

DROP

Page 49: SQL Tutorial

Saad Bashir Alvi 49

DROP

drop table movie;

Page 50: SQL Tutorial

Saad Bashir Alvi 50

Thanks and Good luck for your exams