Základy programování v MySQL

Napsáno: 16.03.2014    


Kategorie: PC  -  MySQL





1. ÚVOD DO MYSQL





- MySQL je rela?ní databázový systém typu DBMS (Database Managment System), vlastn?ný spole?ností Oracle
- každá databáze v MySQL je tvo?ena z jedné nebo více tabulek, které mají ?ádky a sloupce
- v ?ádcích rozeznáváme jednotlivé záznamy (?ádek=>záznam)
- sloupce mají jméno a uvozují datový typ jednotlivých polí záznamu (sloupec=>pole)
- práce s databázemi, tabulkami a daty se provádí pomocí p?íkaz?, respektive dotaz?
- dotazy vycházejí z deklarativního programovacího jazyka SQL (Structured Query Language)
- systém MySQL je využitelný v ADO.NET, C, C++, JDBC, ODBC, Perl, PHP, Python, Ruby
- oficiální MySQL dokumentace: verze 4.1, verze 5.0, verze 5.1, verze 5.5, verze 5.6, verze 5.7
- systém MySQL je ší?en jako Open source: MySQL ke stažení
- pro vzdálenou správu MySQL p?es WWW je vhodný: phpMyAdmin, nebo ?eský Adminer
- další p?ehled informací o MySQL najdete také na: encyklopedii Wikipedie
- nejbližší alternativní verzí pro MySQL je komunitou rozvíjená v?tev MariaDB

2. DATABÁZE

2.1. Výpis databází MySQL

SHOW DATABASES;
- tento dotaz zobrazuje jména databází ve spušt?ném MySQL

2.2. Založení databáze

CREATE DATABASE nazev_databaze;
- tento p?íkaz vytvo?í databázi se jménem "nazev_databaze" (délka názvu m?že být max. 65 znak?)
- abychom mohli databázi používat musíme v ní vytvo?it jednu ?i více tabulek p?íkazem CREATE TABLE (viz níže)
- p?i práci v p?íkazovém ?ádku musíme ur?it aktivní databázi p?íkazem USE (viz níže)

2.3. Nastavení aktivní databáze

USE nazev_databaze;
- databázi "nazev_databaze" nastavíme takto jako aktivní a m?žeme s ní pracovat

2.4. Název aktuální databáze

SELECT DATABASE();
- vrací název aktuální databáze

2.5. Výpis seznamu tabulek v databázi

SHOW TABLES;
- zobrazí seznam tabulek aktuální databáze
SHOW TABLES FROM nazev_databaze;
- zobrazí seznam tabulek z databáze "nazev_databaze"
SHOW TABLE STATUS FROM nazev_databaze;
- zobrazí souhrnný seznam informací o jednotlivých tabulkách databáze, p?.: Avg_row_length, Data_length, Max_data_length, Index_length...

2.6. Zadávání p?íkaz? ze souboru

SOURCE cesta/soubor;
- p?.: SOURCE /moje/prikazy/zal_knih.mysql;
- MySQL vykoná všechny p?íkazy uvedené v souboru "zal_knih.mysql"

2.7. Smazání databáze

DROP DATABASE nazev_databaze;
- vymaže celou databázi se jménem "nazev_databaze", tedy všechny tabulky a data v nich uložená

3. TABULKY

3.1. Vytvo?ení tabulky

CREATE TABLE nazev_tabulky (nazev_sloupce datovy_typ,... );
- v databázi, která je práv? aktivní vytvo?íme novou tabulku (typu MYISAM)
- délka názvu tabulky (a sloupc?) m?že být max. 65 znak?
- p?íklad:
CREATE TABLE knihovna (autor VARCHAR(20),
kniha VARCHAR(20) NOT NULL PRIMARY KEY,
stran SMALLINT UNSIGNED,
rok YEAR(4),
poznamka ENUM('neprecteno','precteno','pujceno') DEFAULT 'neprecteno');
- datové typy jsou popsány v samostatné kapitole viz: datové typy

3.2. Typy tabulek

CREATE TABLE nazev_tabulky (nazev_sloupce datovy_typ,... ) TYPE=typ_tabulky;
- MYISAM - standard MySQL od verze 3.23.0; soubory s tabulkami mají koncovku .myd (data) a .myi (indexy)
- ISAM - standardní typ tabulky ve starších databázích; dnes nahrazen typem MYISAM
- MERGE - formát vhodný pro spojení MYISAM tabulek se stejn? nadefinovanými poli
- HEAP - tabulka tohoto typu je uložena pouze v pam?ti (m?že být velmi rychlá), má ale ?adu omezení
- INNODB - uzamykání tabulky je vykonáváno na úrovni ?ádk?; p?ed použitím je nutná kompilace MySQL s podporou INNODB
- BDB - typ tabulky podobný INNODB; zatím ve fázi testování
- p?ed nasazením jiného typu než MYISAM si prostudujte originální dokumentaci

3.3. Vytvo?ení do?asné tabulky

CREATE TEMPORARY TABLE nazev_tabulky (nazev_sloupce datovy_typ,... );
- takto vytvo?íme do?asnou, která po uzav?ení spojení s databází zanikne

3.4. Výpis popisu tabulky

DESCRIBE nazev_tabulky;
SHOW COLUMNS FROM nazev_tabulky;
- tento dotaz nám zobrazí definici požadované tabulky (názvy + datové typy + modifikátory)

3.5. Zm?ny v tabulce

ALTER TABLE nazev_tabulky prikaz1, prikaz2, prikaz3, prik...;
- provede n?jaký p?íkaz/p?íkazy s tabulkou "nazev_tabulky", viz dále:

Nový sloupec

.. ADD nazev_noveho_sloupce datovy_typ;
.. ADD COLUMN nazev_noveho_sloupce datovy_typ;
- p?íkaz p?idá do tabulky nový sloupec
- p?.: ALTER TABLE knihovna ADD COLUMN vydavatel VARCHAR(10);
- modifikátory:
.. FIRST
- p?idá nový sloupec na za?átek tabulky
- p?.: ALTER TABLE knihovna ADD COLUMN cislo SMALLINT FIRST;
.. AFTER nazev_sloupce;
- p?idá nový sloupec za sloupec "nazev_sloupce"
- p?.: ALTER TABLE knihovna ADD COLUMN zanr VARCHAR(10) AFTER kniha;

Smazání sloupce

.. DROP nazev_odstranovaneho_sloupce;
.. DROP COLUMN nazev_odstranovaneho_sloupce;
- p?íkaz odebere požadovaný sloupec
- p?.: ALTER TABLE knihovna DROP vydavatel;

Zm?na parametr?

.. CHANGE nazev_sloupce novy_nazev_sloupce nove_nastaveni;
- zm?ní datový typ a m?že sloupec i p?ejmenovat
- p?.: ALTER TABLE knihovna CHANGE kniha knihy VARCHAR(30) NOT NULL;

Modifikace parametr?

.. MODIFY nazev_sloupce nove_nastaveni;
- u požadovaného sloupce zm?ní datový typ
- p?.: ALTER TABLE knihovna MODIFY kniha VARCHAR(30) NOT NULL;

P?ejmenování tabulky

.. RENAME novy_nazev_tabulky;
- p?íkaz p?ejmenuje požadovanou tabulku
- p?.: ALTER TABLE knihovna RENAME knihovnicka;

3.6. Indexy a klí?e v tabulkách

SHOW KEYS FROM nazev_tabulky;
SHOW INDEX FROM nazev_tabulky;
- vypíše podrobné informace o primárních klí?ích a indexech v tabulce

3.7. Zamykání tabulek

LOCK TABLES nazev_tabulky READ, nazev_tabulky WRITE;
- uzamkne vyjmenované tabulky pro ?tení (READ), nebo zápis (WRITE)
- po uzamknutí mají právo ?tení, nebo zápisu v tabulce pouze ty p?íkazy, které se nachází mezi LOCK ... UNLOCK
UNLOCK TABLES;
- odem?ení všech zam?ených tabulek
BEGIN; dotaz1; dotaz2; dot...; COMMIT;
- pouze u typu tabulky InnoDB
- všechny dotazy se vykonají pouze za p?edpokladu, že se spojení MySQL nep?eruší až do vykonání COMMIT
- pokud je spojení b?hem dotazování p?erušeno, neprovede se ani jeden dotaz mezi BEGIN a COMMIT
SELECT co_nacist FROM odkud_nacist LOCK IN SHARE MODE;
- pouze u typu tabulky InnoDB
- dotaz po?ká až se dokon?í práv? probíhající dotazy a až potom na?te záznam

3.8. Smazání tabulky

DROP TABLE nazev_tabulky;
- odstraní z aktivní databáze tabulku s názvem "nazev_tabulky"

3.9. Optimalizace tabulky

OPTIMIZE TABLE nazev_tabulky;
- odstraní z tabuky nepot?ebná data po úkonech jako je mazání, rozd?lování ?ádk?, opravy v tabulce; dále set?ídí indexy a zaktualizuje statistiky

4. DATOVÉ TYPY

4.1. Základní informace

- pro omezení délky ?et?zce (maximální velikost je 255) používáme parametr "m", zápis je: datovy_typ(m)
- p?.: TINYINT(1), nebo VARCHAR(100)
- u reálných ?ísel používáme navíc parametr "d" (maximální velikost je 30)
- tímto parametrem omezíme délku ?ísla za desetinou ?árkou, zápis je: datovy_typ(m,d)
- p?.: FLOAT(5,3)
- sloupce ur?ené jako INDEXY (nebo i PRIMARY KEY) ozna?íme na konci deklarace tabulky:
- p?.: CREATE TABLE pokus (jm CHAR(20) NOT NULL, cis INT, PRIMARY KEY (jm), INDEX(cis));
- název indexu (INDEX nazev (sloupec)) zadáváme pokud bude index? více

4.2. Celá ?ísla

TINYINT
- rozsah hodnot od -128 do +127, bez znaménka (UNSIGNED) 0 až 255 (zabere 1 byte)
SMALLINT
- rozsah hodnot od -32 768 do 32 767, bez znaménka 0 až 65 535 (zabere 2 bytes)
MEDIUMINT
- rozsah hodnot od -8 388 608 do +8 388 607, bez znaménka 0 až 16 777 215 (zabere 3 bytes)
INT nebo INTEGER
- rozsah hodnot od -2 147 483 648 do +2 147 483 647, bez znaménka 0 až 4 294 967 295 (zabere 4 bytes)
BIGINT
- rozsah hodnot od -9 223 372 036 854 775 808 do +9 223 372 036 854 775 807, bez znaménka (UNSIGNED) tedy 0 až 18 446 744 073 709 551 615 (zabere 8 bytes)
BIT nebo BOOL
- synonymum pro TINYINT(1)

4.3. ?ísla s pohyblivou desetinou ?árkou

FLOAT
- rozsah hodnot od -3.402823466E+38 do 3.402823466E+38
DOUBLE
- rozsah hodnot od -1.7976931348623157E+308 do 1.7976931348623157E+308
DOUBLE PRECISION nebo REAL
- synonyma pro typ DOUBLE
DECIMAL(m,d)
- rozsah nastavíme parametry "m" (po?et ?íslic celkem) a "d" (po?et desetinných míst), maximální rozsah je stejný s typem DOUBLE
DEC(m,d) nebo NUMERIC(m,d)
- synonyma pro typ DECIMAL(m,d)

4.4. Datum a ?as

DATE
- datum ve formátu "rok-m?síc-den" respektive "RRRR-MM-DD" a v rozsahu 1000-01-01 až 9999-12-31
DATETIME
- datum a ?as v rozsahu 1000-01-01 00:00:00 až 9999-12-31 23:59:59 (formát je "RRRR-MM-DD HH:MM:SS")
TIMESTAMP(m)
- datum a ?as v rozsahu 1970-01-01 00:00:00 až 2037-01-01 00:00:00 (vždy se ukládá všech 14 ?ísel !)
- formát zobrazení (a pro dotazy) provedeme parametrem "m" s hodnotou 14 (nebo chyb?jící), 12, 10, 8, 6, 4, ?i 2
- "RRRRMMDDHHMMSS", "RRMMDDHHMMSS", "RRMMDDHHMM", "RRRRMMDD", "RRMMDD", "YYMM", "YY"
- pokud do bu?ky tohoto typu nic nezapíšeme MySQL sám doplní aktuální ?as zm?ny v daném ?ádku
TIME
- ?asový rozsah je od "-838:59:59" do "838:59:59" a formát datového typu "HH:MM:SS"
YEAR(m)
- p?i YEAR(4) bude rozsah 1901 až 2155, formát je "RRRR", p?i YEAR(2) bude rozsah 1970-2069

4.5. ?et?zce

CHAR(m)
- délka ?et?zce "m" m?že být v rozsahu 0-255
- pokud je vložený ?et?zec kratší než nastavíme, chyb?jící znaky jsou automaticky dopln?ny mezerami (má tedy "pevnou" velikost)
- CHAR (tedy bez "m") je považováno za CHAR(1)
VARCHAR(m)
- délka ?et?zce "m" m?že být v rozsahu 0-255
- pokud je vložený ?et?zec kratší než nastavíme, chyb?jící znaky se nedopl?ují (má tedy "plovoucí" velikost), ale navíc se ukládá informace o jeho délce
TINYBLOB nebo TINYTEXT
- délka ?et?zce je maximáln? 255 znak?
BLOB nebo TEXT
- délka ?et?zce je maximáln? 65 535 znak?
MEDIUMTEXT nebo MEDIUMBLOB
- délka ?et?zce (nebo dat) je maximáln? 16 777 215 znak?
LONGTEXT nebo LONGBLOB
- délka ?et?zce (nebo dat) je maximáln? 4 294 967 295 znak?
ENUM('prvek1','prvek2',...)
- pole p?edem definovaných ?et?zc? (prvk?) o maximálním po?tu 65 535
- v bu?ce tabulky pak m?že být pouze jeden z prvk?, které jsem p?eddefinovali
- místo názv? prvk? m?žeme používat i jejich po?adí, tedy: 1 (místo 'prvek1'), 2 (místo 'prvek2')...
SET('prvek1','prvek2',...)
- pole p?edem definovaných ?et?zc? (prvk?) o maximálním po?tu 64
- v bu?ce tabulky pak m?že být i více z prvk?, které jsme p?eddefinovali

4.6. Modifikátory

AUTO_INCREMENT
- systém si sám ve sloupci generuje unikátní (jedine?né) ?íselné hodnoty
- modifikátor lze použít pouze na celo?íselný datový typ
- (za deklarací nové tabulky m?žeme ješt? navíc ur?it výchozí hodnotu: ...AUTO_INCREMENT=50;)
BINARY
- pro CHAR a VARCHAR; tento typ bude brán jako binární a budou se tak rozlišovat malá a velká písmena
DEFAULT vychozi_hodnota
- pokud bude bu?ka prázdná, systém do ní automaticky p?i?adí hodnotu "vychozi_hodnota"
- ?et?zce nezapome?te psát v uvozovkách
FULLTEXT INDEX
- platí pro sloupce typu CHAR, VARCHAR a TEXT
- fultextový index slouží k rychlejšímu hledání dat v textových polích
- hledání v takovýchto polích provádíme pomocí píkaz? MATCH a AGAINST
- p?.: SELECT * FROM tabulka WHERE MATCH(sloupec) AGAINST("hledana_hodnota");
INDEX
- sloupec/sloupce ozna?ené jako INDEX umožní rychlejší p?ístup k dat?m která obsahují
NOT NULL
- pokud použijeme tento modifikátor, ozna?ený typ bude muset v každé bu?ce obsahovat n?jakou hodnotu
NULL
- opak NOT NULL; bu?ka m?že být prázdná
PRIMARY KEY
- ozna?ený typ bude sloužit jako primární klí? - p?i jeho použití musíme zárove? použít UNIQUE - sloupec nám tedy jedine?ným zp?sobem identifikuje záznamy v tabulce
UNIQUE
- v daném sloupci nesm?jí být v bu?kách stejné hodnoty, tedy co kus to unikát
UNSIGNED
- pokud použijeme modifikátor UNSIGNED, datový typ bude bez znaménka a posune se interval hodnot
- u ?ísel s pohyblivou desetinou ?árkou se interval použitím UNSIGNED neposunuje a bereou se jen kladná ?ísla
- p?.: TINYINT má rozsah -118 až +127 a TINYINT UNSIGNED má rozsah 0 až 255
ZEROFILL
- použití u ?ísel, dotaz doplní p?ed ?íslo nuly v celé jeho ší?ce
- p?.: pokud máme definováno MEDIUMINT(6) ZEROFILL a je v n?m hodnota 123, tak se nám zobrazí 000123

5. PRÁCE S DATY

5.1. Vkládání záznam?

INSERT INTO nazev_tabulky VALUES (seznam_hodnot);
- pro všechny sloupce v tabulce "nazev_tabulky" musíme vložit data
- p?.: INSERT INTO knihovna VALUES ('Oranžový Oto','Tropické ovoce',110,2003,'neprecteno');
- nebo jen do n?kterých sloupc?
- p?.: INSERT INTO knihovna (autor,kniha) VALUES ('Oranžový Oto','Tropické ovoce');

5.2. Vkládání záznam? ze souboru

LOAD DATA LOCAL INFILE 'jmeno_souboru' INTO TABLE nazev_tabulky;
- p?íkaz vloží do tabulky "nazev_tabulky" data ze souboru "jmeno_souboru", který je lokáln? uložen na PC
- p?.: LOAD DATA LOCAL INFILE 'nove_knihy.txt' INTO TABLE knihovna FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
- záznamy jsou v uvozovkách, odd?lené ?árkou a konce ?ádk? máme zakon?ené odentrováním
- pokud je po?adí sloupc? v souboru odlišné, musíme je p?ipsat do závorky za název tabulky
- modifikátory:
.. FIELDS TERMINATED BY 'neco'
- znak odd?lující jednotlivé záznamy, v?tšinou ?árka ',' nebo tabulátor '\t'
.. ENCLOSED BY 'neco'
- znak uzavírající hodnoty záznam?, v?tšinou uvozovky '"'
.. LINES TERMINATED BY 'neco'
- znak ukon?ující ?ádky, v?tšinou odentrování '\n'
.. LOW_PRIORITY
- p?.: LOAD DATA LOW_PRIORITY LOCAL INFILE...
- MySQL uloží data do tabulky až se s ní p?estanou všichni pracovat

5.3. Obnova záznam?

UPDATE nazev_tabulky SET jmeno_sloupce=nova_hodnota WHERE podminka;
- p?.: UPDATE knihovna SET stran='260' WHERE kniha='Lesnictví';
- u knihy "Lesnictví" jsme upravili po?et stran

5.4. Výpis záznam?

SELECT pozadavky FROM podminky_vyberu;
SELECT pozadavky FROM podminky_vyberu1 UNION SELECT pozadavky FROM podminky_vyberu2;
- p?.: SELECT autor FROM knihovna;
- tento dotaz nám vytáhne z tabulky "knihovna" všechny autory
- p?.: SELECT autor,kniha FROM knihovna;
- tento dotaz nám vytáhne z tabulky "knihovna" všechny autory a knihy
- p?.: SELECT kniha FROM knihovna UNION SELECT kniha FROM knihovna2;
- pomocí UNION m?žeme spojit výb?r z dvou tabulek ("pozadavky" musí být shodné); zavedeno v MySQL 4+
- pomocí UNION ALL budou výstupem i opakující se hodnoty, které UNION standardn? nevrací
- p?.: SELECT (2*5/3)+4;
- i tohle funguje!
- p?.: SELECT BENCHMARK(1000000,1+1);
- jednoduchý výkonnostní test rychlosti DB serveru
- p?.: EXPLAIN SELECT pozadavky FROM podminky_vyberu;
- p?íkazem EXPLAIN získáme informace o tom, jak MySQL dotaz SELECT provede
- seznam p?íkaz? a podmínek následuje:

Vyber vše

.. *
- p?.: SELECT * FROM knihovna;
- hv?zdi?ka nám vytáhne z tabulky "knihovna" všechna data

Výb?r ?ásti dat podle podmínky

.. WHERE podminka;
- p?.: SELECT * FROM knihovna WHERE poznamka='precteno';
- vytáhne všechny informace o knihách které jsou p?e?tené "precteno"
- p?.: SELECT kniha FROM knihovna WHERE poznamka='precteno';
- vytáhne názvy knih, které jsou ozna?eny jako p?e?tené "precteno"
- p?.: SELECT knihovna.kniha FROM knihovna,cetba WHERE knihovna.kniha=cetba.kniha;
- tabulku "knihovna" už známe, zde je navíc tabulka "cetba", která obsahuje informace o p?e?tených knihách
- p?íklad nám vytáhne názvy knih z knihovny ("knihovna"), které máme v knihovn? ("knihovna") a ?etli jsme je ("cetba")

Porovnávací operátory

.. = a další...
- = (rovno), <> (nerovno), < (menší), <= (menší nebo rovno), > (v?tší), >= (v?tší nebo rovno)
- <=> (rovno; v?etn? hodnot NULL), != (nerovno; stejné jako <>)
.. x BETWEEN x1 AND x2;
- ur?í zda se "x" nachází mezi hodnotami "x1" až "x2" (v?etn? t?chto hodnot)
- p?.: SELECT * FROM knihovna WHERE rok BETWEEN 1990 AND 2000;
- takto vypíšeme informace o knihách z knihovny, které vyšli mezi roky 1990 (v?etn?) a 2000 (v?etn?)
.. x NOT BETWEEN x1 AND x2;
- ur?í zda "x" je mimo hodnoty "x1" až "x2" (v?etn? t?chto hodnot); je to tedy opak k operátoru BETWEEN
.. IN (kde_hledat)
- hledá hodnoty dle zadaného seznamu
- p?.: SELECT kniha FROM knihovna WHERE rok IN(2001,2002,2003);
- MySQL vypíše knihy z let 2001-2003
- ! v závorce m?že být i standardní dotaz: SELECT neco FROM tabulka WHERE podminka;
.. NOT IN
- opak IN
.. IS NULL;
- nulová hodnota
- p?.: SELECT kniha FROM knihovna WHERE stran IS NULL;
- takto zjistíme knihy s nevypln?ným polí?kem po?et stran
.. IS NOT NULL
- opak nulové hodnoty
.. LIKE
- up?esn?ní výb?ru
- p?.: SELECT kniha FROM knihovna WHERE autor LIKE 'Z%';
- operátor LIKE vybere knihy jejichž autor za?íná od Z
- procento "%" nahrazuje libovolný po?et znak?, podtržítko "_" pouze jeden znak
.. NOT LIKE
- opak k operátoru LIKE

Regulární výrazy

.. x REGEXP r;
.. x RLIKE r;
- výsledkem je pravda - pokud hodnota "x" odpovídá regulární hodnot? "r"
.. x NOT REGEXP r;
.. x NOT RLIKE r;
- výsledkem je pravda - pokud hodnota "x" NEodpovídá regulární hodnot? "r"
- p?ehled symboliky regulárních výraz?:
- x* - po?et výskytu "x" je 0 nebo více
(- xy* - po?et výskytu "y" je 0 nebo více)
(- xyz* - po?et výskytu "z" je 0 nebo více)
(- (xyz)* - po?et výskytu "xyz" je 0 nebo více)
- x? - po?et výskytu "x" je 0 nebo 1
- x+ - po?et výskytu "x" je 1 nebo více
- x{n} - po?et výskytu "x" je n
- x{n,m} - po?et výskytu "x" je n až m
- x{n,} - po?et výskytu "x" je n nebo více
- ^x - ?et?zec za?íná "x"
- x$ - ?et?zec kon?í "x"
- . - jakýkoliv jeden znak
- [a-z] - jakýkoliv znak mezi "a" až "z"
- [0-9] - ?íslo
- [abcd123] - jakýkoliv znak ze závorky
- | - slouží pro odd?lení ?et?zc? ve výrazu
- a te? n?kolik p?íklad?:
- p?.: SELECT 'abcdefg' REGEXP 'cde';
- p?.: SELECT 'abcdefg' LIKE '%cde%';
- totožné p?íklady jejichž výsledkem je 1 (pravda)
- p?.: SELECT 'abcdefg' REGEXP '^cde$';
- p?.: SELECT 'abcdefg' LIKE 'cde';
- totožné p?íklady jejichž výsledkem je 0 (nepravda)
- p?.: SELECT 'abcdefg' REGEXP 'bc|ef';
- p?.: SELECT 'abcdefg' REGEXP 'ef|bc';
- p?.: SELECT 'abcdefg' LIKE '%bc%ef%';
- totožné p?íklady jejichž výsledkem je 1 (pravda)

Výb?r dat funkcí JOIN

.. tabulka1 LEFT JOIN tabulka2 podminka;
.. tabulka2 RIGHT JOIN tabulka1 podminka;
- p?.: SELECT * FROM tabulka1,tabulka2 WHERE tabulka1.id=tabulka2.id;
- p?.: SELECT * FROM tabulka1 LEFT JOIN tabulka2 ON tabulka1.id=tabulka2.id;
- oba p?edchozí p?íklady vykonávájí skoro to samé, ale funkce JOIN vrátí odpovídající ?ádky levé tabulky (tabulka1) bez ohledu na to, zda k t?mto ?ádk?m existuje n?jaký odpovídající ?ádek v druhé tabulce (tabulka2)
- funkce WHERE totiž nevrácí výsledek tam kde jsou nulové hodnoty (NULL)
- p?.: SELECT * FROM tabulka1 LEFT JOIN tabulka2 USING (id);
- zkrácený zápis p?edchozího p?íkladu

Pojmenování

.. jmeno AS nove_jmeno
- p?.: SELECT k.kniha FROM knihovna AS k, cetba AS c WHERE k.kniha=c.kniha;
- pomocí klí?ového slova AS m?žeme pojmenováním zkrátit zápis p?edchozího p?íkladu
- p?.: SELECT autor,kniha,(cena*0.95) AS 'cena_bez_dph' FROM knihovna;
- pokud bychom m?li u knih i cenu (sloupec "cena"), takto si ji necháme vypsat knihy a cenu bez DPH
- p?.: SELECT 'Jmeno:' AS 'jmeno_autora', autor FROM knihovna;
- zde nám MySQL vypíše vedle jmen autor? sloupec s názvem "jmeno_autora" s DEFAULT hodnotou "Jmeno:"

Spojení prom?nných

.. CONCAT(promenne_pro_spojeni)
- p?.: SELECT CONCAT(kniha,' - ',autor) AS knihautor FROM knihovna;
- vypíše novy sloupec "knihautor", který bude obsahovat data ve formátu: název knihy - název autora
.. CONCAT_WS(slucovac,promenne)
- p?.: SELECT CONCAT_WS('.','www','junext','net');
- vypíše: www.junext.net

Odstran?ní duplikát?

.. DISTINCT
- p?.: SELECT DISTINCT poznamka FROM knihovna;
- tento p?íklad nám vypíše jaké používáme poznámky, tedy P,N,U (bez DISTINCT by vypsal vše: P,N,U,P,P,N)

Slu?ování do skupin

.. GROUP BY
- p?.: SELECT poznamka, SUM(stran) AS 'celkem_stran' FROM knihovna GROUP BY poznamka;
- se?te (p?íkaz SUM) po?et stran u knih seskupených dle poznámek (P-p?e?teno, N-nep?e?teno...)

Omezení po?tu

.. LIMIT start,pocet;
- p?.: SELECT kniha FROM knihovna WHERE poznamka='neprecteno' LIMIT 0,5;
- najde názvy prvních 5 knih, které jsou v poznámce ozna?eny jako nep?e?tené
- v tomto p?ípad? lze použít i zápis: ...LIMIT 5;

Se?azení

.. ORDER BY podminka;
- p?.: SELECT * FROM knihovna ORDER BY autor,kniha;
- vybere z tabulky všechny informace a srovná je vzestupn? podle jmen autor? a názv? knih
.. ORDER BY podminka DESC;
- p?.: SELECT * FROM knihovna ORDER BY autor DESC;
- srovná výpis podle autor?, tentokrát sestupn?
.. ORDER BY RAND();
.. ORDER BY RAND(N);
- p?.: SELECT kniha FROM knihovna WHERE poznamka='neprecteno' ORDER BY RAND() LIMIT 1;
- výstupem je jedna nep?e?tená kniha náhodn? vybraná
- zadáním parametru "N" ur?íme výchozí hodnotu pro výpo?et náhodného ?ísla

Logické operátory

- výstupem jsou nalezené hodnoty, pop?ípad? pravdivostní hodnota: "1","true" (pravda) nebo "0","false" (nepravda)
.. AND, &&
- p?.: SELECT kniha FROM knihovna WHERE poznamka='neprecteno' AND rok<2000;
- AND nám zde vybere nep?e?tené knihy vydané p?ed rokem 2000
.. OR, ||
- p?.: SELECT kniha FROM knihovna WHERE poznamka='neprecteno' || poznamka='precteno';
- výstupem jsou všechny nep?e?tené a p?e?tené knihy
.. NOT, !
- negace dotazu nap?. SELECT NOT(1 AND 1); zde je výsledkem 0

Kontrolní funkce

.. CASE ... END;
- p?.: SELECT CASE hledana_hodnota WHEN 1 THEN 'jedna' WHEN 2 THEN 'dva' ELSE 'tri a vice' END;
- pokud hledana_hodnota bude 1 vypíše MySQL "jedna", pokud 2 vypíše "dva", v ostatních p?ípadech "tri a vice"
.. IF(podminka,pravda,nepravda);
- p?.: SELECT IF(10>9,'ano','ne');
- vypíše "ano"
.. IFNULL(podminka,vystup_pri_chybe);
- p?.: SELECT IFNULL(1/0,'chyba');
- d?líme nulou což je blbost, tak to vypíše "chyba"
.. NULLIF(promenna1,promenna2);
- vrací promenna1, pokud se promenna1 nerovná promenna2 (v opa?ném p?ípad? vrácí NULL)

Aritmetické operátory

- p?ehled operátor?: + (sou?et), - (ode?et), * (sou?in), / (podíl), % (zbytek po podílu)
- p?.: SELECT 8%3;
- výsledkem je hodnota 2

Manipulace s ?ísly (agrega?ní fce)

.. AVG(nazev_sloupce)
- spo?ítá pr?m?r numerických hodnot ve sloupci
- p?.: SELECT AVG(stran) FROM knihovna;
.. COUNT(nazev_sloupce)
- spo?ítá po?et hodnot ve sloupci
.. COUNT(DISTINCT nazev_sloupce)
- spo?ítá po?et jedine?ných hodnot ve sloupci
.. GREATEST(hodnota1,hodnota2,hodno...)
- p?.: SELECT GREATEST(10,3,7,24);
- vrátí nejv?tší hodnotu (24)
- funkce funguje i pro text (p?i zadání "J","U","N" vrátí U)
.. LEAST(hodnota1,hodnota2,hodno...)
- p?.: SELECT LEAST(10,3,7,24);
- vrátí nejmenší hodnotu (3)
- funkce funguje i pro text (p?i zadání "J","U","N" vrátí J)
.. MAX(nazev_sloupce)
- p?.: SELECT kniha, MAX(stran) FROM knihovna;
- dotaz nám najde knihu s nejvyšším po?tem stran
.. MIN(nazev_sloupce)
- opak MAX(nazev_sloupce)
.. MOD(delenec,delitel)
- vyplivne zbytek po d?lení
.. ROUND(cislo)
- zaokrouhlí zadané "cislo" na celé ?íslo
.. ROUND(cislo,pocet_mist)
- zaokrouhlí "cislo" na zadaný po?et desetiných
.. STD(nazev_sloupce)
- spo?ítá sm?rodatnou odchylku ?íselných hodnot ve sloupci
.. SUM(nazev_sloupce)
- provede sou?et ?íselných hodnot ve sloupci

Manipulace s textem

.. LENGTH(retezec);
- p?.: SELECT LENGTH('abeceda');
- funkce vrací délku ?et?zce; v tomto p?ípad? je to 7
.. LOCATE(co_hledat,v_cem,kde_zacit);
- p?.: SELECT LOCATE('ce','abeceda',1);
- hledá ?et?zec "ce" v ?et?zci "abeceda" od pozice 1; výsledkem je 4
.. SUBSTRING(retezec,kde_zacit);
- p?.: SELECT SUBSTRING('abeceda',4);
- vypíše ?et?zec od zadané pozice, tedy "ceda"
.. REPLACE(retezec,co_nahradit,cim_nahradit);
- p?.: SELECT REPLACE('abeceda','abec','nezb');
- nahrazuje ?ásti ?et?zce; vypíše "nezbeda"
.. REVERSE(retezec);
- p?.: SELECT REVERSE('abeceda');
- otá?í ?et?zce; vypíše "adeceba"
.. TRIM(retezec);
- p?.: SELECT TRIM(' abeceda ');
- oseká ?et?zec o mezery a vypíše "abeceda"
.. TRIM(BOTH retezec1 FROM retezec2);
- p?.: SELECT TRIM(BOTH 'a' FROM 'abeceda');
- vypíše "beced"
.. TRIM(LEADING retezec1 FROM retezec2);
- p?.: SELECT TRIM(LEADING 'a' FROM 'abeceda');
- vypíše "beceda"
.. TRIM(TRAILING retezec1 FROM retezec2);
- p?.: SELECT TRIM(TRAILING 'a' FROM 'abeceda');
- vypíše "abeced"
.. LTRIM(retezec);
- p?.: SELECT LTRIM(' abeceda ');
- vypíše "abeceda "
.. RTRIM(retezec);
- p?.: SELECT RTRIM(' abeceda ');
- vypíše " abeceda"
.. UPPER(retezec);
.. LOWER(retezec);
- p?.: SELECT UPPER('abeceda');
- vypíše "ABECEDA"
- UPPER p?evádí písmena zadaného ?et?zce na velká, LOWER na malá

Manipulace s datumem a ?asem

SELECT NOW();
- dotaz vrátí aktuální datum a ?as ve tvaru RRRR-MM-DD HH:MM:SS
- modifikace SELECT NOW()+0; vrátí tvar RRRRMMDDHHMMSS
SELECT CURRENT_DATE();
- aktuální datum (RRRR-MM-DD)
SELECT CURRENT_TIME();
- aktuální ?as (HH:MM:SS)
SELECT DATE_FORMAT(vstup,vystup);
- p?.: SELECT DATE_FORMAT(NOW(),"%w.%e.%y");
- %Y - rok RRRR (p?. 2003, 1999 ...)
- %y - rok RR (p?. 03, 99 ...)
- %m - m?síc MM (p?. 01, 06, 12 ...)
- %c - m?síc M nebo MM (p?. 1, 6, 12 ...)
- %M - název m?síce (p?. January ...)
- %b - název m?síce zkrácen? (p?. Jan, Feb ...)
- %u - ?íslo týdne v roce - %D - den ?adovou ?íslovkou (p?. 1st, 2nd ...)
- %d - den v m?síci DD (p?. 01, 02, 31 ...)
- %e - den v m?síci D nebo DD (p?. 1, 2, 31 ...)
- %w - ?íslo dne v týdnu D (p?. 0, 6 ...)
- %W - název dne v týdnu (p?. Sunday ...)
- %a - název dne v týdnu zkrácen? (p?. Sun, Mon ...)
- %j - ?íslo dne v roce DDD (p?. 000, 006, 366 ...)
- %H - hodina HH (p?. 00, 06, 23 ...)
- %k - hodina H nebo HH (p?. 0, 6, 23 ...)
- %h - hodina HH jen do 12 (p?. 01, 06, 12 ...)
- %l - hodina H nebo HH jen do 12 (p?. 1, 6, 12 ...)
- %i - minuty MM (p?. 01, 06, 59 ...)
- %s - sekundy SS (p?. 01, 06, 59 ...)
- %P - délka cyklu - p?ldenní nebo celodenní (p?. AM, PM)
- %% - znak %
SELECT QUARTER(datum);
- vrací ?íslovku ?tvrtletí dle zadaného data (RRRR-MM-DD)

Atd...

- v originální dokumentaci MySQL ( http://dev.mysql.com/doc/refman/5.1/en/functions.html) jsou ješt? další funkce
- pokud jste zde nenašli co pot?ebujete - laskav? se tam podívejte

Uživatelské prom?nné

SET @a=hodnota;
SELECT @a:=hodnota;
- do prom?nné "a" se uloží n?jaká "hodnota", kterou si MySQL pamatuje do konce aktuálního spojení
- (prom?nnou nelze zatím použít úpln? ve všech dotazech MySQL)
- p?.: SET @a='precteno'; SELECT * FROM knihovna WHERE poznamka=@a;

5.5. Výpis záznam? do souboru

SELECT * INTO OUTFILE 'nazev_vystupniho_souboru' FIELDS TERMINATED BY ';' FROM nazev_tabulky;
- p?íkaz zapíše data z tabulky "nazev_tabulky" do souboru a jednotlivé položky odd?lí st?edníkem
- p?.: SELECT * INTO OUTFILE 'prectene.txt' FIELDS TERMINATED BY ',' FROM knihovna WHERE poznamka='precteno';
- p?íklad zapíše do souboru informace o p?e?tených knihách a odd?lí je ?árkou

5.6. Mazání záznam?

DELETE FROM nazev_tabulky WHERE podminka;
- p?.: DELETE FROM knihovna WHERE kniha='Horník?v den';
- p?íkaz nám vymaže knihu "Horník?v den" z tabulky, tedy celý ?ádek
DELETE FROM nazev_tabulky;
- p?íkaz nám vymaže všechny záznamy v tabulce
TRUNCATE nazev_tabulky;
- d?lá to samé jako p?edešlý p?íkaz, ale je rychlejší (smaže tabulku a zase jí založí)









Diskuze ke článku
( Celkem: 0 )
Jméno:   
E-mail:   
Vzkaz: 
Aktivní odkaz přidáte takto:
link[http://www.adresa.cz]
Antispam:   
   



 
 
Zatím není vložen žádný komentář.
 
 

2013 © PiDi Soft |  Mapa stránek |  Odkazy