Difference between revisions of "Dotazy nad jednou tabulkou"

From Wikivyuka
Jump to: navigation, search
m
m
 
(2 intermediate revisions by the same user not shown)
Line 12: Line 12:
  
 
  SELECT FIRST_NAME, LAST_NAME FROM employees;  
 
  SELECT FIRST_NAME, LAST_NAME FROM employees;  
 +
 +
Pokud budeme chtít do výstupu dotazu vypsat jméno a příjmení v jednom textovém řetězci, použijeme spojení textových atirubtů pomocí znaku ||.
 +
 +
SELECT FIRST_NAME||' '||LAST_NAME FROM employees;
  
 
V případě, že bychom chtěli pouze seznam příjmení všech zaměstanců bez opakování stejných jmen, použijeme klíčové slovo ''DISTINCT'', které eliminuje výstup - bude bez opakování stejných řádků:
 
V případě, že bychom chtěli pouze seznam příjmení všech zaměstanců bez opakování stejných jmen, použijeme klíčové slovo ''DISTINCT'', které eliminuje výstup - bude bez opakování stejných řádků:
Line 42: Line 46:
 
  SELECT FIRST_NAME, LAST_NAME FROM employees WHERE DEPARTMENT_ID IS NULL;
 
  SELECT FIRST_NAME, LAST_NAME FROM employees WHERE DEPARTMENT_ID IS NULL;
  
Budeme-li chtít získat jmenný seznam zaměstnanců oddělení 80, využijeme možnosti setřídít výsledek podle příjmení, případně i podle dvou atributů současně, nejprve dle příjmení a pak křestního jména:
+
Budeme-li chtít získat jmenný seznam zaměstnanců oddělení 80, využijeme možnosti setřídit výsledek podle příjmení, případně i podle dvou atributů současně, nejprve dle příjmení a pak křestního jména:
  
 
  SELECT FIRST_NAME, LAST_NAME FROM employees WHERE DEPARTMENT_ID=80 ORDER BY LAST_NAME;
 
  SELECT FIRST_NAME, LAST_NAME FROM employees WHERE DEPARTMENT_ID=80 ORDER BY LAST_NAME;
Line 48: Line 52:
 
  SELECT FIRST_NAME, LAST_NAME FROM employees WHERE DEPARTMENT_ID=80 ORDER BY LAST_NAME, FIRST_NAME;
 
  SELECT FIRST_NAME, LAST_NAME FROM employees WHERE DEPARTMENT_ID=80 ORDER BY LAST_NAME, FIRST_NAME;
  
http://gis.vsb.cz/wikivyuka/index.php/Prostorov%C3%A9_datab%C3%A1ze_-_cvi%C4%8Den%C3%AD
+
[http://gis.vsb.cz/wikivyuka/index.php/Prostorov%C3%A9_datab%C3%A1ze_-_cvi%C4%8Den%C3%AD Hlavní stránka předmětu]

Latest revision as of 05:59, 25 February 2015

Structured Query Language (SQL) představuje sadu příkazů, které umožňují pracovat s databází. Základem jazyka SQL je příkaz SELECT. Popis jeho plné notace je uveden na stránce Vyhledávání.

Opakování budeme provádět nad databází HR, ke které jsme získali přístup aktivací uživatele hr. Schema databáze je uvedeno na obrázku Schema HR.

Nejjednodušší forma dotazu - získáme obsah celé tabulky Zamestnanci:

SELECT * FROM employees;

V ORACLE se nerozlišuje psaní malými a velkými písmeny, takže název tabulky i klíčová slova lze psát různým způsobem - employees x EMPLOYEES, select x SELECT.

Výběr některých sloupců dosáhneme použitím projekce, tj. uvedením názvů sloupců za klíčové slovo SELECT. Zde je uveden dotaz, jehož výsledkem je jmenný seznam zaměstnanců:

SELECT FIRST_NAME, LAST_NAME FROM employees; 

Pokud budeme chtít do výstupu dotazu vypsat jméno a příjmení v jednom textovém řetězci, použijeme spojení textových atirubtů pomocí znaku ||.

SELECT FIRST_NAME||' '||LAST_NAME FROM employees;

V případě, že bychom chtěli pouze seznam příjmení všech zaměstanců bez opakování stejných jmen, použijeme klíčové slovo DISTINCT, které eliminuje výstup - bude bez opakování stejných řádků:

SELECT DISTINCT LAST_NAME FROM employees;

Budeme-li chtít ve výsledku změnit číselné hodnoty nějakého sloupce, lze je přímo dopočítat a na výstupu sloupec také přejmenovat pomocí tzv. alias, za slovem AS:

SELECT LAST_NAME, SALARY + 100 AS "Vyplata s odmenou" FROM employees;

Pro výběr záznamů z tabulky, které vyhovují určité podmínce, použijeme operaci selekce. Zapisujeme ji za klíčové slovo WHERE a podle datového typu atributu volíme zápis podmínky. Pro jmenný seznam zaměstnanců z oddělení 80 pak příkaz vypadá následně:

SELECT FIRST_NAME, LAST_NAME FROM employees WHERE DEPARTMENT_ID=80;

V podmínce je možno použít operátory:

=   rovná se                        AND       a současně
<   je menší než                    OR        nebo
>   je větší než                    NOT       negace
<=  je menší nebo rovno             BETWEEN   pro intervalové hodnoty
>=  je větší nebo rovno             IS (NOT)  ne/shoda s hodnotou NULL
<>  není rovno (dle standardu ISO)  LIKE      shoda s maskou v řetězci

Například vyhledání všech zaměstanců, jejichž jméno začíná na K využije operátor LIKE pro porovnání s maskou řetězce a navíc zástupný znak % za jakékoli jiné znaky (i žádný znak).

SELECT LAST_NAME AS "Zamestnanci s příjemním na 'K'" FROM employees WHERE last_name LIKE 'K%' ;

Pro vyhledání zaměstnanců, kteří nejsou přiděleni k žádnému oddělení, použijeme podmínku, kde zjistíme hodnotu NULL u atributu DEPARTMENT_ID.

SELECT FIRST_NAME, LAST_NAME FROM employees WHERE DEPARTMENT_ID IS NULL;

Budeme-li chtít získat jmenný seznam zaměstnanců oddělení 80, využijeme možnosti setřídit výsledek podle příjmení, případně i podle dvou atributů současně, nejprve dle příjmení a pak křestního jména:

SELECT FIRST_NAME, LAST_NAME FROM employees WHERE DEPARTMENT_ID=80 ORDER BY LAST_NAME;
SELECT FIRST_NAME, LAST_NAME FROM employees WHERE DEPARTMENT_ID=80 ORDER BY LAST_NAME, FIRST_NAME;

Hlavní stránka předmětu