Skip to content

Instantly share code, notes, and snippets.

@mgechev
Created April 16, 2011 14:57
Show Gist options
  • Save mgechev/923167 to your computer and use it in GitHub Desktop.
Save mgechev/923167 to your computer and use it in GitHub Desktop.
16.04.2011 - Exercise_For_Test1
SET SCHEMA SHIPS;
--Имената и годините на пускане на всички кораби, които имат същото име като
--своя клас.
SELECT NAME, LAUNCHED
FROM SHIPS
WHERE NAME = CLASS;
SET SCHEMA MOVIES;
--Всички филми, чието заглавие съдържа едновременно думите 'Star' и 'Trek' (не
--непременно в този ред). Резултатите да се подредят по година (първо най-новите
--филми), а филмите от една и съща година - по азбучен ред.
SELECT TITLE
FROM MOVIE
WHERE TITLE LIKE 'Star%Trek' OR TITLE LIKE 'Trek%Star'
ORDER BY YEAR DESC, TITLE ASC;
--Заглавията и годините на филмите, в които са играли звезди, родени между
--1.1.1970 и 1.7.1980.
SELECT STARSIN.MOVIETITLE, STARSIN.MOVIEYEAR
FROM STARSIN JOIN MOVIESTAR ON MOVIESTAR.NAME = STARSIN.STARNAME
WHERE MOVIESTAR.BIRTHDATE BETWEEN '1970-1-1' AND '1980-1-7';
SET SCHEMA SHIPS;
--Имената на всички кораби, за които едновременно са изпълнени следните
--условия: (1) участвали са в поне една битка и (2) имената им (на корабите)
--започват с C или K.
SELECT SHIPS.NAME, OUTCOMES.RESULT
FROM SHIPS RIGHT OUTER JOIN OUTCOMES ON SHIPS.NAME = OUTCOMES.SHIP
WHERE SHIPS.NAME LIKE 'C%' OR SHIPS.NAME LIKE 'K%';
--Всички държави, които имат потънали в битка кораби.
SELECT DISTINCT CLASSES.COUNTRY
FROM
CLASSES JOIN SHIPS ON CLASSES.CLASS = SHIPS.CLASS JOIN OUTCOMES ON SHIPS.NAME = OUTCOMES.SHIP
WHERE OUTCOMES.RESULT = 'sunk';
--Всички държави, които нямат нито един потънал кораб.
SELECT DISTINCT COUNTRY
FROM CLASSES
WHERE COUNTRY NOT IN ((SELECT DISTINCT CLASSES.COUNTRY
FROM
CLASSES JOIN SHIPS ON CLASSES.CLASS = SHIPS.CLASS JOIN OUTCOMES ON SHIPS.NAME = OUTCOMES.SHIP
WHERE OUTCOMES.RESULT = 'sunk'));
--(От държавен изпит) Имената на класовете, за които няма кораб, пуснат на вода
--(launched) след 1921 г. Ако за класа няма пуснат никакъв кораб, той също трябва
--да излезе в резултата.
SELECT DISTINCT CLASSES.CLASS
FROM CLASSES LEFT OUTER JOIN SHIPS ON CLASSES.CLASS = SHIPS.CLASS
WHERE SHIPS.LAUNCHED > 1921 OR SHIPS.NAME IS NULL;
--Името, държавата и калибъра (bore) на всички класове кораби с 6, 8 или 10
--оръдия. Калибърът да се изведе в сантиметри (1 инч е приблизително 2.54 см).
SELECT SHIPS.NAME AS NAME, CLASSES.COUNTRY AS COUNTRY, (CLASSES.BORE * 2.54) AS BORE
FROM CLASSES JOIN SHIPS ON SHIPS.CLASS = CLASSES.CLASS
WHERE NUMGUNS = 6 OR NUMGUNS = 8 OR NUMGUNS = 10;
--Държавите, които имат класове с различен калибър (напр. САЩ имат клас с 14
--калибър и класове с 16 калибър, докато Великобритания има само класове с 15).
SELECT DISTINCT C1.COUNTRY
FROM CLASSES AS C1 JOIN CLASSES AS C2 ON C1.COUNTRY = C2.COUNTRY
WHERE C1.BORE <> C2.BORE;
--Страните, които произвеждат кораби с най-голям брой оръдия (numguns).
SELECT DISTINCT COUNTRY
FROM CLASSES
WHERE NUMGUNS >= ALL (SELECT CLASSES.NUMGUNS
FROM CLASSES);
SET SCHEMA PC;
--Компютрите, които са по-евтини от всеки лаптоп на същия производител
SELECT P1.CODE
FROM PC AS P1 JOIN PRODUCT AS P2 ON P2.MODEL = P1.MODEL
WHERE P1.PRICE <= ALL (SELECT LAPTOP.PRICE
FROM LAPTOP JOIN PRODUCT ON LAPTOP.MODEL = PRODUCT.MODEL
WHERE PRODUCT.MAKER = P2.MAKER);
--Компютрите, които са по-евтини от всеки лаптоп и принтер на същия производител.
SELECT P1.CODE
FROM PC AS P1 JOIN PRODUCT AS P2 ON P2.MODEL = P1.MODEL
WHERE P1.PRICE <= ALL (SELECT LAPTOP.PRICE
FROM LAPTOP JOIN PRODUCT ON LAPTOP.MODEL = PRODUCT.MODEL
WHERE PRODUCT.MAKER = P2.MAKER)
AND P1.PRICE <= ALL (SELECT PRINTER.PRICE
FROM PRINTER JOIN PRODUCT ON PRINTER.MODEL = PRODUCT.MODEL
WHERE PRODUCT.MAKER = P2.MAKER);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment