Pre odskusanie selektov je potrebna prax a priamy kontakt s nou.
Preto budeme zatial zo zaciatku pouzivat ukazkovu databazu Sakila pre MySQL .
Informacie o nej mozete najst na stranke https://dev.mysql.com/doc/sakila/en/sakila-introduction.html.
Dalsie informacie: https://www.quackit.com/mysql/tutorial/mysql_sample_database.cfm


Diagram databazy

diagram

Teória

Dátový typ NULL

Dátový typ NULL nie je zhodný s hodnotou 0, lebo 0 je určitá numerická hodnota vyjadrujúca počet. Ale hodnota NULL predstavuje "nič", ktorá môže byť použita pri ktoromkoľvek dátovom type. Vyhľadávanie hodnôt s hodnotou NULL je uskutočnované pomocou operátora IS.

SELECT * FROM table_name WHERE column_name IS NULL;

SELECT * FROM table_name WHERE column_name IS NOT NULL;
    

Syntax SELECT

SELECT column_name,column_name
FROM table_name;

SELECT * FROM table_name;

SELECT DISTINCT column_name
FROM table_name;

     

Podmienka WHERE

SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;

-- Operators
-- = 	Rovné
-- <> 	Nerovné. V niektorích verziách SQL sa používa !=
-- > 	Väčšie ako
-- < 	Menšie ako
-- >= 	Väčšie alebo rovné ako
-- <= 	Menšie alebo rovné ako
-- BETWEEN 	z rozsahu
-- LIKE 	hľadanie podľa výrazu
-- IN 	výber z udaných hodnôt

     

Spájanie podmienok

SELECT * FROM Customers
WHERE condition AND condition;

SELECT * FROM Customers
WHERE condition OR condition;

SELECT * FROM Customers
WHERE condition
AND (condition OR condition);

     

Zoradenie údajov

SELECT column_name, column_name
FROM table_name
ORDER BY column_name ASC;

SELECT column_name, column_name
FROM table_name
ORDER BY column_name DESC;

SELECT column_name, column_name
FROM table_name
ORDER BY column_name ASC, column_name DESC;

     

Obmedzenie počtu zobrazených údajov

-- SQL Server / MS Access Syntax
	SELECT TOP number column_name(s)
	FROM table_name;

-- MySQL Syntax
	SELECT column_name(s)
	FROM table_name
	LIMIT number;

-- Oracle Syntax
	SELECT column_name(s)
	FROM table_name
	WHERE ROWNUM <= number;

     

Vyhľadávanie podľa vzoru

-- 	pattern - je retazec

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;

SELECT column_name(s)
FROM table_name
WHERE column_name NOT LIKE pattern;

-- Špeciálne znaky
-- % 	nula alebo viac znakov
-- _ 	jeden znak
-- [charlist] [a-c] [abc] Množina znakov, z ktorej musí jedno obsahovať
-- [^charlist]	Množina znakov, z ktorej nesmie ani jedno obsahovať
-- [!charlist] Množina znakov, z ktorej nesmie ani jedno obsahovať

     

Podmienky IN a BETWEEN

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);

SELECT column_name(s)
FROM table_name
WHERE column_name NOT IN (value1,value2,...);

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

SELECT column_name(s)
FROM table_name
WHERE column_name NOT BETWEEN value1 AND value2;

     

Aliasy

-- Alias stĺpca
SELECT column_name AS alias_name
FROM table_name;

-- Alias tabuľky
SELECT column_name(s)
FROM table_name AS alias_name;

     

Zretazenie

-- MySQL
SELECT concat(column_name,' ',column_name)
FROM table_name;

-- Oracle SQL
SELECT column_name || ' ' || column_name
FROM table_name;


     

Operácie v select klauzule

select column_name + column_name from table_name;
select column_name - column_name from table_name;
select column_name * column_name from table_name;
select column_name / column_name from table_name;
select column_name % column_name from table_name;

     

Agregačné funkcie

SELECT AVG(column_name) FROM table_name;

-- COUNT(column_name) vráti počet hodnôt ( NULL hodnoty nebudú započítané )
SELECT COUNT(column_name) FROM table_name; 

-- COUNT(*) vráti počet záznamov v tabuľke
SELECT COUNT(*) FROM table_name; 

SELECT MAX(column_name) FROM table_name;

SELECT MIN(column_name) FROM table_name;

SELECT SUM(column_name) FROM table_name;

     

Využitie agregačných funkcií - GROUP BY, HAVING

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE condition
GROUP BY column_name; 

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE condition
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;

     

CASE

-- Oracle SQL
SELECT column_name1,
   CASE column_name2 
   WHEN when_value THEN statement_value
   WHEN when_value THEN statement_value
   ELSE statement_value END
   FROM table_name;

-- MySQL
SELECT column_name1,
   CASE column_name2 
   WHEN when_value THEN statement_value
   WHEN when_value THEN statement_value
   ELSE statement_value END CASE
   FROM table_name;

     

Zdroj: http://www.w3schools.com/sql/


Literatura

Literaturu ohladne selektov mozete najst:

Alebo aj kurz na W3Schools : SQL.


Odporucana literatura a priklady na odskusanie


Ulohy na precvicenie pre Sakila databazu.

  1. Zobraziť všetkých zákazníkov v databáze.
  2. Zobraziť všetky prenájmy v databáze.
  3. Zobraziť všetky platby v databáze.
  4. Zobraziť všetky obchody v databáze.
  5. Zobraziť všetkých členov personálu v databáze.
  6. Zobraziť všetky položky inventára v databáze.
  7. Zobraziť všetky kategórie v databáze.
  8. Zobraziť všetkých hercov, ktorých priezvisko začína na 'C'.
  9. Zobraziť všetky filmy, ktoré boli uvedené na trh v roku 2006.
  10. Zobraziť všetky prenájmy, ktoré sa uskutočnili v mesiaci máj.
  11. Zobraziť počet zákazníkov v databáze.
  12. Zobraziť počet prenájmov v databáze.
  13. Zobraziť celkovú sumu peňazí získaných obchodom.
  14. Zobraziť priemernú sumu peňazí získaných obchodom.
  15. Vyberte všetky filmy z tabuľky film, ktoré majú rating PG alebo G.
  16. Vyberte všetky filmy z tabuľky film, ktoré majú rating R a ich dĺžka trvania je medzi 90 a 120 minútami.
  17. Vyberte všetky filmy z tabuľky film, ktoré majú rating NC-17 alebo R a boli vydané v roku 2006.
  18. Vyberte všetky filmy z tabuľky film, ktoré majú rating PG alebo G a ich názov začína na písmeno 'S'.
  19. Vyberte všetky filmy z tabuľky film, ktoré majú rating PG alebo G a ich názov obsahuje slovo 'Dog'.
  20. Vyberte všetky filmy z tabuľky film, ktoré nemajú priradený žiadny jazyk.
  21. Vyberte všetky filmy z tabuľky film, ktoré majú rating NC-17, R alebo PG-13 a ich názov začína na písmeno 'C' alebo 'D'.