SELECT MAX(au_lname) AS "Max last name"
FROM authors;
SELECT
MIN(price) AS "Min price",
MAX(price) AS "Max price",
MAX(price) - MIN(price) AS "Range"
FROM titles;
SELECT MAX(price * sales)
AS "Max history revenue"
FROM titles
WHERE type = 'history';
--SELECT 08.01.2014 Vitalie Bancu
SELECT SUM(advance) AS "Total advances"
FROM royalties;
SELECT SUM(sales)
AS "Total sales (2000 books)"
FROM titles
WHERE pubdate
BETWEEN DATE '2000-01-01'
AND DATE '2000-12-31';
SELECT
SUM(price) AS "Total price",
SUM(sales) AS "Total sales",
SUM(price * sales) AS "Total revenue"
FROM titles;
--SELECT 08.01.2014 Vitalie Bancu
SELECT AVG(price * 2) AS "AVG(price * 2)"
FROM titles;
SELECT AVG(sales) AS "AVG(sales)",
SUM(sales) AS "SUM(sales)"
FROM titles
WHERE type = 'business';
SELECT title_id, sales
FROM titles
WHERE sales >
(SELECT AVG(sales) FROM titles)
ORDER BY sales DESC;
--SELECT 08.01.2014 Vitalie Bancu
SELECT
COUNT(title_id) AS "COUNT(title_id)",
COUNT(price) AS "COUNT(price)",
COUNT(*) AS "COUNT(*)"
FROM titles;
SELECT
COUNT(title_id) AS "COUNT(title_id)",
COUNT(price) AS "COUNT(price)",
COUNT(*) AS "COUNT(*)"
FROM titles
WHERE price IS NOT NULL;
SELECT
COUNT(title_id) AS "COUNT(title_id)",
COUNT(price) AS "COUNT(price)",
COUNT(*) AS "COUNT(*)"
FROM titles
WHERE price IS NULL;
--SELECT 08.01.2014 Vitalie Bancu
SELECT
COUNT(*) AS "COUNT(*)"
FROM titles;
SELECT
COUNT(price) AS "COUNT(price)",
SUM(price) AS "SUM(price)",
AVG(price) AS "AVG(price)"
FROM titles;
SELECT
COUNT(DISTINCT price)
AS "COUNT(DISTINCT)",
SUM(DISTINCT price)
AS "SUM(DISTINCT)",
AVG(DISTINCT price)
AS "AVG(DISTINCT)"
FROM titles;
--SELECT 08.01.2014 Vitalie Bancu
SELECT COUNT(au_id)
AS "COUNT(au_id)"
FROM title_authors;
SELECT DISTINCT COUNT(au_id)
AS "DISTINCT COUNT(au_id)"
FROM title_authors;
SELECT COUNT(DISTINCT au_id)
AS "COUNT(DISTINCT au_id)"
FROM title_authors;
--SELECT 08.01.2014 Vitalie Bancu
SELECT
COUNT(price)
AS "COUNT(price)",
SUM(price)
AS "SUM(price)"
FROM titles;
SELECT
COUNT(price)
AS "COUNT(price)",
SUM(DISTINCT price)
AS "SUM(DISTINCT price)"
FROM titles;
SELECT
COUNT(DISTINCT price)
AS "COUNT(DISTINCT price)",
SUM(price)
AS "SUM(price)"
FROM titles;
SELECT
COUNT(DISTINCT price)
AS "COUNT(DISTINCT price)",
SUM(DISTINCT price)
AS "SUM(DISTINCT price)"
FROM titles;
--0608
--SELECT 08.01.2014 Vitalie Bancu
--Today the Thursday. Today the ninth of January.
-- Let's go.
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
au_id,
COUNT(*) AS "num_books"
FROM title_authors
GROUP BY au_id;
DESCRIBE title_authors;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
state,
COUNT(state) AS "COUNT(state)",
COUNT(*) AS "COUNT(*)"
FROM publishers
GROUP BY state;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
type,
SUM(sales) AS "SUM(sales)",
COUNT(sales) AS "COUNT(sales)",
COUNT(*) AS "COUNT(*)",
SUM(sales)/COUNT(sales)
AS "SUM/COUNT(sales)",
SUM(sales)/COUNT(*)
AS "SUM/COUNT(*)",
AVG(sales) AS "AVG(sales)"
FROM titles
GROUP BY type;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
type,
SUM(sales) AS "SUM(sales)",
AVG(sales) AS "AVG(sales)",
COUNT(sales) AS "COUNT(sales)"
FROM titles
GROUP BY type;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
type,
SUM(sales) AS "SUM(sales)",
AVG(sales) AS "AVG(sales)",
COUNT(sales) AS "COUNT(sales)"
FROM titles
WHERE price >= 13
GROUP BY type
ORDER BY "SUM(sales)" DESC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
pub_id,
type,
COUNT(*) AS "COUNT(*)"
FROM titles
GROUP BY pub_id, type
ORDER BY pub_id ASC, "COUNT(*)" DESC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
CASE
WHEN sales IS NULL
THEN 'Unknown'
WHEN sales <= 1000
THEN 'Not more than 1,000'
WHEN sales <= 10000
THEN 'Between 1,001 and 10,000'
WHEN sales <= 100000
THEN 'Between 10,001 and 100,000'
WHEN sales <= 1000000
THEN 'Between 100,001 and 1,000,000'
ELSE 'Over 1,000,000'
END
AS "Sales category",
COUNT(*) AS "Num titles"
FROM titles
GROUP BY
CASE
WHEN sales IS NULL
THEN 'Unknown'
WHEN sales <= 1000
THEN 'Not more than 1,000'
WHEN sales <= 10000
THEN 'Between 1,001 and 10,000'
WHEN sales <= 100000
THEN 'Between 10,001 and 100,000'
WHEN sales <= 1000000
THEN 'Between 100,001 and 1,000,000'
ELSE 'Over 1,000,000'
END
ORDER BY MIN(sales) ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT type
FROM titles
GROUP BY type;
SELECT DISTINCT type
FROM titles;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT price, AVG(sales) AS "AVG(sales)"
FROM titles
WHERE price IS NOT NULL
GROUP BY price
ORDER BY price ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
au_id,
COUNT(*) AS "num_books"
FROM title_authors
GROUP BY au_id
HAVING COUNT(*) >= 3;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
type,
COUNT(price) AS "COUNT(price)",
AVG(price * sales) AS "AVG revenue"
FROM titles
GROUP BY type
HAVING AVG(price * sales) > 1000000;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
type,
COUNT(price) AS "COUNT(price)"
FROM titles
GROUP BY type
HAVING AVG(price * sales) > 1000000;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
pub_id,
type,
COUNT(*) AS "COUNT(*)"
FROM titles
GROUP BY pub_id, type
HAVING COUNT(*) > 1
ORDER BY pub_id ASC, "COUNT(*)" DESC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
type,
SUM(sales) AS "SUM(sales)",
AVG(price) AS "AVG(price)"
FROM titles
WHERE pub_id IN ('P03', 'P04')
GROUP BY type
HAVING SUM(sales) > 10000
AND AVG(price) < 20;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_id, authors.city
FROM authors
INNER JOIN publishers
ON authors.city = publishers.city;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_fname, au_lname, a.city
FROM authors a
INNER JOIN publishers p
ON a.city = p.city;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_fname, au_lname, a.city
FROM authors a, publishers p
c
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
au_id,
pub_id,
a.state AS "au_state",
p.state AS "pub_state"
FROM authors a
CROSS JOIN publishers p;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
a.city,
au_id,
pub_id,
a.state AS "au_state",
p.state AS "pub_state"
FROM authors a
CROSS JOIN publishers p
WHERE a.city = p.city;
/*CROSS JOIN returns the Cartesian product of rows from tables in the join.
In other words, it will produce rows which combine each row from the first table with
each row from the second table*/
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT *
FROM authors, publishers;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
title_id,
pub_id,
pub_name
FROM publishers
NATURAL JOIN titles; --natural join соединяет таблицы по столбцам с одинаковыми именами
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
title_id,
pub_id,
pub_name,
advance
FROM publishers
NATURAL JOIN titles
NATURAL JOIN royalties
WHERE advance < 20000;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
a.au_id,
a.au_fname,
a.au_lname,
ta.title_id
FROM authors a
INNER JOIN title_authors ta
ON a.au_id = ta.au_id
ORDER BY a.au_id ASC, ta.title_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
t.title_id,
t.title_name,
t.pub_id,
p.pub_name
FROM titles t
INNER JOIN publishers p
ON p.pub_id = t.pub_id
ORDER BY t.title_name ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
a.au_id,
a.au_fname,
a.au_lname,
a.city,
a.state
FROM authors a
INNER JOIN publishers p
ON a.city = p.city
AND a.state = p.state
ORDER BY a.au_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
t.title_id,
t.title_name,
p.state,
p.country
FROM titles t
INNER JOIN publishers p
ON t.pub_id = p.pub_id
WHERE p.state = 'CA'
OR p.country NOT IN
('USA', 'Canada', 'Mexico')
ORDER BY t.title_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
a.au_id,
COUNT(ta.title_id) AS "Num books"
FROM authors a
INNER JOIN title_authors ta
ON a.au_id = ta.au_id
GROUP BY a.au_id
ORDER BY a.au_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
t.title_id,
t.title_name,
r.advance
FROM royalties r
INNER JOIN titles t
ON r.title_id = t.title_id
WHERE t.type = 'biography'
AND r.advance IS NOT NULL
ORDER BY r.advance DESC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
t.type,
COUNT(r.advance)
AS "COUNT(r.advance)",
SUM(r.advance)
AS "SUM(r.advance)"
FROM royalties r
INNER JOIN titles t
ON r.title_id = t.title_id
WHERE r.advance IS NOT NULL
GROUP BY t.type
ORDER BY t.type ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
t.type,
t.pub_id,
COUNT(r.advance) AS "COUNT(r.advance)",
SUM(r.advance) AS "SUM(r.advance)"
FROM royalties r
INNER JOIN titles t
ON r.title_id = t.title_id
WHERE r.advance IS NOT NULL
GROUP BY t.type, t.pub_id
ORDER BY t.type ASC, t.pub_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
ta.title_id,
COUNT(ta.au_id) AS "Num authors"
FROM authors a
INNER JOIN title_authors ta
ON a.au_id = ta.au_id
GROUP BY ta.title_id
HAVING COUNT(ta.au_id) > 1
ORDER BY ta.title_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
t.title_id,
t.title_name,
r.advance,
t.price * t.sales AS "Revenue"
FROM titles t
INNER JOIN royalties r
ON t.price * t.sales > r.advance * 10
AND t.title_id = r.title_id
ORDER BY t.price * t.sales DESC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
a.au_fname,
a.au_lname,
t.title_name
FROM authors a
INNER JOIN title_authors ta
ON a.au_id = ta.au_id
INNER JOIN titles t
ON t.title_id = ta.title_id
ORDER BY a.au_lname ASC, a.au_fname ASC,
t.title_name ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
a.au_fname,
a.au_lname,
t.title_name,
p.pub_name
FROM authors a
INNER JOIN title_authors ta
ON a.au_id = ta.au_id
INNER JOIN titles t
ON t.title_id = ta.title_id
INNER JOIN publishers p
ON p.pub_id = t.pub_id
ORDER BY a.au_lname ASC, a.au_fname ASC,
t.title_name ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
SUM(t.sales * t.price * r.royalty_rate) AS "Total royalties",
SUM(r.advance) AS "Total advances",
SUM((t.sales * t.price * r.royalty_rate) - r.advance) AS "Total due to authors"
FROM titles t
INNER JOIN royalties r
ON r.title_id = t.title_id
WHERE t.sales IS NOT NULL;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
ta.au_id,
t.title_id,
t.pub_id,
t.sales * t.price * r.royalty_rate * ta.royalty_share AS "Royalty share",
r.advance * ta.royalty_share AS "Advance share",
(t.sales * t.price * r.royalty_rate * ta.royalty_share) -
(r.advance * ta.royalty_share) AS "Due to author"
FROM title_authors ta
INNER JOIN titles t
ON t.title_id = ta.title_id
INNER JOIN royalties r
ON r.title_id = t.title_id
WHERE t.sales IS NOT NULL
ORDER BY ta.au_id ASC, t.title_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
a.au_id,
a.au_fname,
a.au_lname,
t.title_name,
(t.sales * t.price * r.royalty_rate * ta.royalty_share) -
(r.advance * ta.royalty_share) AS "Due to author"
FROM authors a
INNER JOIN title_authors ta
ON a.au_id = ta.au_id
INNER JOIN titles t
ON t.title_id = ta.title_id
INNER JOIN royalties r
ON r.title_id = t.title_id
WHERE t.sales IS NOT NULL
AND (t.sales * t.price * r.royalty_rate * ta.royalty_share) -
(r.advance * ta.royalty_share) > 0
ORDER BY a.au_id ASC, t.title_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
t.pub_id,
COUNT(t.sales) AS "Num books",
SUM(t.sales * t.price * r.royalty_rate) AS "Total royalties",
SUM(r.advance) AS "Total advances",
SUM((t.sales * t.price * r.royalty_rate) - r.advance) AS "Total due to authors"
FROM titles t
INNER JOIN royalties r
ON r.title_id = t.title_id
WHERE t.sales IS NOT NULL
GROUP BY t.pub_id
ORDER BY t.pub_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
ta.au_id,
COUNT(sales) AS "Num books",
SUM(t.sales * t.price * r.royalty_rate * ta.royalty_share) AS "Total royalties share",
SUM(r.advance * ta.royalty_share) AS "Total advances share",
SUM((t.sales * t.price * r.royalty_rate * ta.royalty_share) -
(r.advance * ta.royalty_share)) AS "Total due to author"
FROM title_authors ta
INNER JOIN titles t
ON t.title_id = ta.title_id
INNER JOIN royalties r
ON r.title_id = t.title_id
WHERE t.sales IS NOT NULL
GROUP BY ta.au_id
ORDER BY ta.au_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
t.pub_id,
ta.au_id,
COUNT(*) AS "Num books",
SUM(t.sales * t.price * r.royalty_rate * ta.royalty_share) AS "Total royalties share",
SUM(r.advance * ta.royalty_share) AS "Total advances share",
SUM((t.sales * t.price * r.royalty_rate * ta.royalty_share) -
(r.advance * ta.royalty_share)) AS "Total due to author"
FROM title_authors ta
INNER JOIN titles t
ON t.title_id = ta.title_id
INNER JOIN royalties r
ON r.title_id = t.title_id
INNER JOIN publishers p
ON p.pub_id = t.pub_id
WHERE t.sales IS NOT NULL
AND p.country IN ('USA')
GROUP BY t.pub_id, ta.au_id
HAVING SUM((t.sales * t.price * r.royalty_rate * ta.royalty_share) -
(r.advance * ta.royalty_share)) > 0
ORDER BY t.pub_id ASC, ta.au_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT a.au_fname, a.au_lname, a.city
FROM authors a;
SELECT p.pub_name, p.city
FROM publishers p;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT a.au_fname, a.au_lname, p.pub_name, a.city, p.city
FROM authors a
INNER JOIN publishers p
ON a.city = p.city;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT a.au_fname, a.au_lname, p.pub_name, a.city, p.city
FROM authors a
LEFT OUTER JOIN publishers p
ON a.city = p.city
ORDER BY p.pub_name ASC,
a.au_lname ASC, a.au_fname ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT a.au_fname, a.au_lname, p.pub_name, a.city, p.city
FROM authors a
RIGHT OUTER JOIN publishers p
ON a.city = p.city
ORDER BY p.pub_name ASC,
a.au_lname ASC, a.au_fname ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT a.au_fname, a.au_lname, p.pub_name, a.city, p.city
FROM authors a
FULL OUTER JOIN publishers p
ON a.city = p.city
ORDER BY p.pub_name ASC,
a.au_lname ASC, a.au_fname ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
a.au_id,
COUNT(ta.title_id) AS "Num books"
FROM authors a
LEFT OUTER JOIN title_authors ta
ON a.au_id = ta.au_id
GROUP BY a.au_id
ORDER BY a.au_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT a.au_id, a.au_fname, a.au_lname
FROM authors a
LEFT OUTER JOIN title_authors ta
ON a.au_id = ta.au_id
WHERE ta.au_id IS NULL;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT a.au_id, a.au_fname, a.au_lname,
tta.title_id, tta.title_name, tta.sales
FROM authors a
LEFT OUTER JOIN
(SELECT ta.au_id, t.title_id,
t.title_name, t.sales
FROM title_authors ta
INNER JOIN titles t
ON t.title_id = ta.title_id
WHERE sales > 100000) tta
ON a.au_id = tta.au_id
ORDER BY a.au_id ASC, tta.title_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
e1.emp_name AS "Employee name",
e2.emp_name AS "Boss name", e1.boss_id, e2.emp_id
FROM employees e1
INNER JOIN employees e2
ON e1.boss_id = e2.emp_id;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT a1.au_id, a1.au_fname,
a1.au_lname, a1.state
FROM authors a1
INNER JOIN authors a2
ON a1.state = a2.state
WHERE a2.au_id = 'A04';
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT t1.title_id, t1.sales,
t2.title_id AS "Better seller",
t2.sales AS "Higher sales"
FROM titles t1
INNER JOIN titles t2
ON t1.sales < t2.sales
WHERE t1.type = 'biography'
AND t2.type = 'biography'
ORDER BY t1.title_id ASC, t2.sales ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
a1.au_fname, a1.au_lname,
a2.au_fname, a2.au_lname
FROM authors a1
INNER JOIN authors a2
ON a1.state = a2.state
WHERE a1.state = 'NY'
ORDER BY a1.au_id ASC, a2.au_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
a1.au_fname, a1.au_lname,
a2.au_fname, a2.au_lname
FROM authors a1
INNER JOIN authors a2
ON a1.state = a2.state
AND a1.au_id <> a2.au_id
WHERE a1.state = 'NY'
ORDER BY a1.au_id ASC, a2.au_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
a1.au_fname, a1.au_lname,
a2.au_fname, a2.au_lname
FROM authors a1
INNER JOIN authors a2
ON a1.state = a2.state
AND a1.au_id < a2.au_id
WHERE a1.state = 'NY'
ORDER BY a1.au_id ASC, a2.au_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT pub_id
FROM titles
WHERE type = 'biography';
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT pub_name
FROM publishers
WHERE pub_id IN ('P01', 'P03');
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT DISTINCT pub_name
FROM publishers p
INNER JOIN titles t
ON p.pub_id = t.pub_id
WHERE t.type = 'biography';
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT pub_name
FROM publishers
WHERE pub_id IN
(SELECT pub_id
FROM titlescnas
WHERE type = 'biography');
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_id, city
FROM authors
WHERE city IN
(SELECT city FROM publishers);
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT DISTINCT a.au_id, a.city
FROM authors a
INNER JOIN publishers p
ON a.city = p.city;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_id, au_fname, au_lname
FROM authors
WHERE au_id NOT IN
(SELECT au_id FROM title_authors);
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_id, au_fname, au_lname
FROM authors a
WHERE NOT EXISTS
(SELECT *
FROM title_authors ta
WHERE a.au_id = ta.au_id);
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT a.au_id, a.au_fname, a.au_lname
FROM authors a
LEFT OUTER JOIN title_authors ta
ON a.au_id = ta.au_id
WHERE ta.au_id IS NULL;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_id, au_fname, au_lname, state
FROM authors
WHERE state IN
(SELECT state
FROM authors
WHERE au_id = 'A04');
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT a1.au_id, a1.au_fname,
a1.au_lname, a1.state
FROM authors a1
INNER JOIN authors a2
ON a1.state = a2.state
WHERE a2.au_id = 'A04';
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT title_id, price
FROM titles
WHERE price =
(SELECT MAX(price)
FROM titles);
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT a.au_id, a.city, p.pub_id
FROM authors a
INNER JOIN publishers p
ON a.city = p.city;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_id, city
FROM authors
WHERE city IN
(SELECT city
FROM publishers);
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT city
FROM publishers;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_id, city
FROM authors
WHERE city IN
('New York', 'San Francisco',
'Hamburg', 'Berkeley');
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT
candidate.title_id,
candidate.type,
candidate.sales
FROM titles candidate
WHERE sales >=
(SELECT AVG(sales)
FROM titles average
WHERE average.type = candidate.type);
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_id, au_fname, au_lname
FROM authors
WHERE au_id IN
(SELECT au_id
FROM title_authors
WHERE royalty_share = 1.0);
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_id, au_fname, au_lname
FROM authors
WHERE 1.0 IN
(SELECT royalty_share
FROM title_authors
WHERE title_authors.au_id =
authors.au_id);
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT pub_name
FROM publishers
WHERE pub_id IN
(SELECT pub_id
FROM titles
WHERE type = 'biography');
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT pub_name
FROM publishers
WHERE publishers.pub_id IN
(SELECT titles.pub_id
FROM titles
WHERE type = 'biography');
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT title_id,
price,
(SELECT AVG(price) FROM titles)
AS "AVG(price)",
price - (SELECT AVG(price) FROM titles)
AS "Difference"
FROM titles
WHERE type='biography';
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT title_id,
(SELECT au_id
FROM title_authors ta
WHERE au_order = 1
AND title_id = t.title_id)
AS "Author 1",
(SELECT au_id
FROM title_authors ta
WHERE au_order = 2
AND title_id = t.title_id)
AS "Author 2",
(SELECT au_id
FROM title_authors ta
WHERE au_order = 3
AND title_id = t.title_id)
AS "Author 3"
FROM titles t;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_id,
(SELECT COUNT(*)
FROM title_authors ta
WHERE ta.au_id = a.au_id)
AS "Num books"
FROM authors a
ORDER BY au_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_id,
(SELECT MAX(pubdate)
FROM titles t
INNER JOIN title_authors ta
ON ta.title_id = t.title_id
WHERE ta.au_id = a.au_id)
AS "Latest pub date"
FROM authors a;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT t1.title_id, t1.sales,
(SELECT SUM(t2.sales)
FROM titles t2
WHERE t2.title_id <= t1.title_id)
AS "Running total"
FROM titles t1;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT MAX(ta.count_titles) AS "Max titles"
FROM (SELECT COUNT(*) AS count_titles
FROM title_authors
GROUP BY au_id) ta;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_id, au_fname, au_lname, state
FROM authors
WHERE state =
(SELECT state
FROM publishers
WHERE pub_name = 'Tenterhooks Press');
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_id, au_fname, au_lname, state
FROM authors
WHERE state =
(SELECT state
FROM publishers
WHERE pub_name = 'XXX');
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT title_id, sales
FROM titles
WHERE sales >
(SELECT AVG(sales)
FROM titles);
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT ta.au_id, ta.title_id
FROM titles t
INNER JOIN title_authors ta
ON ta.title_id = t.title_id
WHERE sales >
(SELECT AVG(sales)
FROM titles)
ORDER BY ta.au_id ASC, ta.title_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_id, title_id
FROM title_authors ta
WHERE
(SELECT AVG(sales)
FROM titles t
WHERE ta.title_id = t.title_id)
>
(SELECT AVG(sales)
FROM titles)
ORDER BY au_id ASC, title_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT title_id, price
FROM titles
WHERE price >
(SELECT MAX(price)
FROM titles
GROUP BY type
HAVING type = 'biography');
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT pub_id, AVG(sales) AS "AVG(sales)"
FROM titles
GROUP BY pub_id
HAVING AVG(sales) >
(SELECT AVG(sales)
FROM titles);
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT ta1.au_id, ta1.title_id,
ta1.royalty_share
FROM title_authors ta1
WHERE ta1.royalty_share <
(SELECT MAX(ta2.royalty_share)
FROM title_authors ta2
WHERE ta1.title_id = ta2.title_id);
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT type, title_id, price
FROM titles t1
WHERE price >
(SELECT AVG(t2.price)
FROM titles t2
WHERE t1.type = t2.type)
ORDER BY type ASC, title_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT type, title_id, sales
FROM titles t1
WHERE sales <
(SELECT MAX(sales)
FROM titles t2
WHERE t1.type = t2.type
AND sales IS NOT NULL)
ORDER BY type ASC, title_id ASC;
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT pub_name
FROM publishers
WHERE pub_id IN
(SELECT pub_id
FROM titles
WHERE type = 'biography');
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT pub_name
FROM publishers
WHERE pub_id NOT IN
(SELECT pub_id
FROM titles
WHERE type = 'biography');
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_id, au_fname, au_lname
FROM authors
WHERE au_id NOT IN
(SELECT au_id
FROM title_authors);
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT DISTINCT a.au_id, au_fname, au_lname
FROM title_authors ta
INNER JOIN authors a
ON ta.au_id = a.au_id
WHERE title_id IN
(SELECT title_id
FROM titles
WHERE pub_id = 'P03');
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_id, au_fname, au_lname
FROM authors
WHERE au_id IN
(SELECT au_id
FROM title_authors
WHERE title_id IN
(SELECT title_id
FROM titles
WHERE type = 'biography'));
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_id, au_fname, au_lname
FROM authors
WHERE state = 'CA'
AND au_id IN
(SELECT au_id
FROM title_authors
WHERE royalty_share < 0.5
AND au_order > 1);
--SELECT 09.01.2014 Vitalie Bancu @VITALLYBANKOU
SELECT au_id, au_fname, au_lname
FROM authors a
WHERE au_id IN
(SELECT au_id
FROM title_authors
WHERE royalty_share < 1.0);
-- SQL tricks. (SELECT.) -- 09.01.2014