Jednoduché SQL dotazy - krátká nápověda a příklady. Dodatek D

SQL (ˈɛsˈkjuˈɛl; anglicky strukturovaný dotazovací jazyk - „strukturovaný dotazovací jazyk“) je deklarativní programovací jazyk používaný k vytváření, úpravě a správě dat v relační databázi.

Soulad se standardy SQL pro různé databáze:

SQL (Structured Query Language - strukturovaný dotazovací jazyk). SQL je primárně informační logický jazyk určený k popisu uložených dat, k načtení uložených dat a k úpravě dat.

SQL není programovací jazyk. Jak se SQL stalo složitějším, stalo se více aplikačním programovacím jazykem a uživatelé nyní mohou používat nástroje pro tvorbu vizuálních dotazů.

SQL je jazyk, který nerozlišuje velká a malá písmena. Řetězce v SQL jsou uzavřeny v jednoduchých uvozovkách.

Jazyk SQL je sbírka příkazů. SQL příkazy se dělí na:

    Data Definition Language (DDL) - jazyk pro popis schémat v ANSI, sestává z příkazů, které vytvářejí objekty (tabulky, indexy, pohledy atd.) v databázi (CREATE, DROP, ALTER atd.).

    Operátory manipulace s daty (Data Manipulation Language, DML) jsou sadou příkazů, které určují, jaké hodnoty jsou v tabulkách kdykoli prezentovány (INSERT, DELETE, SELECT, UPDATE atd.).

    příkazy definice přístupu k datům (Data Control Language, DCL) – sestává z nástrojů, které určují, zda povolit uživateli provádět určité akce či nikoli (GRANT/REVOKE, LOCK/UNLOCK).

    Operátory jazyka TCL (Transaction Control Language).

Bohužel se tyto termíny nepoužívají univerzálně ve všech implementacích. Jsou zdůrazněny ANSI a jsou užitečné na koncepční úrovni, ale většina programů SQL je málo zpracovává odděleně, takže se v podstatě stávají funkčními kategoriemi příkazů SQL.

VYBERTE sekci PŘIPOJTE SE

    Jednoduché JOIN (=průnik JOIN =INNER JOIN) - znamená zobrazit pouze společné záznamy obou tabulek. Způsob, jakým jsou záznamy považovány za sdílené, určují pole ve výrazu spojení. Například následující položka: FROM t1 JOIN t2 ON t1. id = t2. id

    znamená, že se zobrazí záznamy se stejným ID, které existují v obou tabulkách.

    LEFT JOIN (nebo LEFT OUTER JOIN) znamená zobrazit všechny záznamy z levé tabulky (ta, který je ve výrazu spojení první) bez ohledu na to, zda existují odpovídající záznamy v pravé tabulce. Pokud v pravé tabulce nejsou žádné záznamy, nastaví se prázdná hodnota NULL.

    RIGHT JOIN (nebo RIGHT OUTER JOIN) funguje na rozdíl od LEFT JOIN - zobrazuje všechny záznamy z pravé (druhé) tabulky a pouze ty, které se shodují z levé (první) tabulky.

    Další typy spojení JOIN: MINUS - odečítání; FULL JOIN - kompletní spojení; CROSS JOIN - „Každý s každým“ nebo operace karteziánského produktu.

SELECT JOIN SUBSTRING INSERT INTO users_auth VALUES (výchozí, "root" , MD5("root"));

    INSERT IGNORE Pokud zadáte klíčové slovo IGNORE v příkazu INSERT s řádky, které mají více hodnot, budou všechny řádky, které mají v této tabulce duplicitní PRIMARY nebo UNIQUE klíče, ignorovány a nebudou vloženy. Pokud nezadáte IGNORE, tato operace vložení se přeruší, když narazí na řádek, který má duplicitní hodnotu pro existující klíč.

INSERT IGNORE INTO prices VALUES(VÝCHOZÍ, 1, 1111, "Fr", 50, 50, 1, 1)

Příkaz REPLACE se od INSERT liší pouze tím, že pokud je v tabulce záznam se stejnou hodnotou v indexovaném poli (unikátní index) jako nový záznam, pak se starý záznam před přidáním nového smaže.

AKTUALIZOVAT< tablename>SET ( | ) .,.< COLUMN name> = < VALUE expresslon>.< predlcate>[KDE< cursor name>|

KDE PROUD

(*pouze pro přílohu*) ] ;

UPDATE peers SET zone= "voip" ; # aktualizovat všechny řádky ve sloupci zóny peers tabulky UPDATE stat SET whp= "13x13x13" WHERE id = 1 ; UPDATE countries SET nm_ukr= ( SELECT del_country. ukrajinsky FROM del_countries WHERE countries. nm_en= del_country. anglicky ) ;

Využití WordPressu, nastavení: v tabulce wp_posts smažte všechny výskyty řádku

UPDATE wp_posts SET post_content = REPLACE (post_content, "" , "" );

ODSTRANIT Z

    [ KDE | WHERE CURRENT OF (*pouze příloha*) ];

    Všimněte si, že spuštění tohoto příkazu neovlivní existující řádky v tabulce, příkaz pouze změní výchozí hodnotu pro budoucí příkazy INSERT. Chcete-li odstranit jakoukoli výchozí hodnotu, použijte

    Produkty ALTER TABLE ALTER COLUMN cena DROP DEFAULT ;

    Příkaz dělá to samé jako nastavení výchozí hodnoty na null. Vzhledem k tomu, že odstranění výchozí hodnoty implicitně nastaví hodnotu null, nebudou hlášeny žádné chyby, pokud bude odstraněna existující výchozí hodnota.

    Funguje jako výchozí hodnota pro sloupec. V tomto případě má sloupec timetracking datový typ timestamp, což znamená, že jeho výchozí hodnotu lze nastavit na vestavěnou funkci now(), tzn. při přidání nového řádku do sloupce bude zaznamenáno aktuální datum a čas ALTER TABLE timetracking ALTER COLUMN date_wd SET DEFAULT now();

    Přidání omezení. Chcete-li přidat omezení, použije se syntaxe tabulky pro definování tohoto omezení. Například: ALTER TABLE produkty ADD CHECK (název ""); ALTER TABLE produkty ADD CONSTRAINT some_name UNIQUE (product_no); ALTER TABLE produkty PŘIDAT CIZÍ KLÍČ (id_skupiny produktů) REFERENCE skupiny_produktů;

    Chcete-li přidat nenulovou podmínku, kterou nelze zapsat jako omezení tabulky, použijte syntaxi:

    ALTER TABLE produkty ALTER COLUMN product_no SET NOT NULL;

    Zadané omezení bude vynuceno okamžitě, takže data v tabulce je musí před přidáním omezení splňovat.

Agregační funkce

Ve standardním SQL je 5 agregačních funkcí:

    POČET - funkce vrací počet řádků, které splňují určitá kritéria.,

    SUM - vrací součet (celkem) hodnot v konkrétním sloupci. Řádky sloupců s hodnotami NULL jsou funkcí SUM ignorovány.

    AVG - průměrná hodnota ve sloupci,

Agregační funkce se používají jako názvy polí v klauzuli dotazu SELECT s jednou výjimkou: názvy polí se používají jako argumenty. Funkce SUM a AVG mohou pracovat pouze s číselnými poli. Funkce COUNT, MAX, MIN pracují s numerickými i znakovými poli. Při aplikaci na pole znaků mohou funkce MAX a MIN pracovat s ekvivalenty znaků ASCII.

SELECT Count(Books.ID) AS [Počet knih] FROM Books;

Použití CROUP BY umožňuje aplikovat agregační funkce na skupiny záznamů.

SELECT Count(Books.ID) AS [Počet knih] FROM Books GROUP BY [Spisovatel];

Zhlédnutí (ZOBRAZIT)

VIEW je datový objekt, který neobsahuje žádná data o svém vlastníkovi. Je to typ tabulky, jejíž obsah je načten z jiných tabulek spuštěním dotazu.

Základní tabulky jsou tabulky, které obsahují data. Existuje však i jiný typ tabulky: - pohledy (VIEW). Pohledy jsou tabulky, jejichž obsah je vybrán nebo získán z jiných tabulek. Fungují v dotazech a příkazech DML stejně jako hlavní tabulky, ale neobsahují žádná vlastní data. Pohledy jsou jako okna, přes která prohlížíte informace, které jsou skutečně uloženy v podkladové tabulce.

    Příkaz CREATE VIEW. Pohled se vytvoří pomocí příkazu CREATE VIEW. Skládá se ze slov CREATE VIEW, názvu pohledu, který je potřeba vytvořit, slova JAKO (JAK) a poté dotazu. Vytvořme zobrazení Londonstaff: CREATE VIEW Londonstaff AS SELECT * FROM Salespeople WHERE city = "London";

    Toto zobrazení se používá stejně jako jakákoli jiná tabulka. Lze jej dotazovat, upravovat, vkládat, odstraňovat a připojovat k jiným tabulkám a pohledům. Žádost o předložení.

    Typy datSQL(Jako vStr, jako ve standardu)

    Typy řetězců

    Číselné datové typy

    Měna, Znak, Binární datové typy

    Booleovský typ. Převody

    Příklady jednoduchých SQL dotazů

    Nejjednodušší SELECT dotazy

    Příkaz SQL SELECT je nejdůležitější a nejčastěji používaný příkaz. Je určen k získávání informací z databázových tabulek.

    Zjednodušená syntaxe příkazu SELECT je následující.

    VYBERTE [ VŠE | DISTINCT ] select_item_commalist

    FROM table_reference_commalist

    [WHERE podmíněný_výraz]

    [GROUP BY column_name_commalist]

    [MÁ podmíněný_výraz]

    [ ORDER BY order_item_commalist ]

    Hranaté závorky označují prvky, které nemusí být v požadavku přítomny.

    Klíčové slovo SELECT sděluje databázi, že příkaz je žádostí o získání informací.

    Za slovem SELECT odděleným čárkami jsou uvedeny názvy polí (seznam atributů), jejichž obsah je požadován.

    Požadovaným klíčovým slovem v klauzuli dotazu SELECT je slovo FROM. Za klíčovým slovem FROM následuje čárkami oddělený seznam názvů tabulek, ze kterých se získávají informace.

    Vyberte například název, popis z filmu

    Pořadí sloupců v této tabulce odpovídá pořadí polí zadaných v dotazu

    Pokud potřebujete zobrazit hodnoty všech sloupců tabulky, můžete místo uvedení jejich názvů použít symbol „*“ (hvězdička).

    VYBRAT * Z filmu;

    V tomto případě bude výsledkem dotazu celá tabulka filmu.

    Ještě jednou upozorníme na skutečnost, že tabulky získané jako výsledek SQL dotazu zcela nesplňují definici relačního vztahu. Zejména mohou obsahovat n-tice (řádky) s identickými hodnotami atributů.

    Například dotaz „seznam jmen aktérů“ lze napsat následovně.

    vybrat jméno od herce;

    Jeho výsledkem bude tabulka, tabulka obsahuje shodné řádky. Chcete-li vyloučit duplicitní záznamy z výsledku dotazu SELECT, použijte klíčové slovo DISTINCT.

    Pokud dotaz SELECT načte více polí, DISTINCT eliminuje duplicitní řádky, ve kterých jsou hodnoty všech vybraných polí identické.

    Předchozí dotaz lze napsat následovně.

    vybrat odlišné jméno od herce;

    Výsledkem je tabulka, ve které jsou vyloučeny duplicitní řádky.

    Klíčové slovo ALL má na rozdíl od DISTINCT opačný efekt, to znamená, že při jeho použití jsou do výstupu zahrnuty duplicitní řádky.

    Režim určený klíčovým slovem ALL je výchozí, takže se pro tyto účely v reálných dotazech prakticky nepoužívá.

    Použití klauzule WHERE v příkazu SELECT umožňuje zadat výraz podmínky (predikát), který se vyhodnotí jako pravdivý nebo nepravdivý pro hodnoty polí řádku tabulky, na které odkazuje příkaz SELECT.

    Klauzule WHERE určuje, které řádky zadaných tabulek by měly být vybrány.

    Tabulka vyplývající z dotazu obsahuje pouze ty řádky, pro které se podmínka (predikát) zadaná v klauzuli WHERE vyhodnotí jako pravdivá.

    Příklad: Napište dotaz, který načte příjmení všech aktérů se jménem PENELOPE< (меньше), >vyberte příjmení z herce

    kde first_name="PENELOPE";

    Podmínky uvedené v klauzuli WHERE mohou používat porovnávací operace definované operátory = (rovná se), > (větší než),

    * v tomto příkladu jsou data vzorkována sloučením tabulek users a users_rights. Jsou kombinovány pomocí polí user_id (v tabulce user_rights) a id (users). Pole názvu se načte z první tabulky a všechna pole z druhé.

    3. Vzorkování s časovými a/nebo datovými intervaly

    a) je znám výchozí bod a určitý časový interval:

    * budou vybrány údaje za poslední hodinu (pole datum).

    b) datum zahájení a datum ukončení jsou známy:

    25.10.2017 a 25.11.2017.

    c) datum zahájení a ukončení + čas jsou známy:

    * vyberte data mezi 25.03.2018 0 hodin 15 minut a 25.04.2018 15 hodin 33 minut a 9 sekund.

    d) vytáhnout data za určitý měsíc a rok:

    * extrahujte data, kde pole data obsahuje hodnoty pro duben 2018.

    4. Vzorkování maximálních, minimálních a průměrných hodnot:

    > SELECT max (plocha), min (plocha), avg (area) FROM country

    * max – maximální hodnota; min — minimum; prům. - průměr.

    5. Použití délky řetězce:

    * tento dotaz by měl zobrazit všechny uživatele, jejichž jméno se skládá z 5 znaků.

    Příklady dotazů, které jsou složitější nebo zřídka používané

    1. Zřetězení se seskupením vybraných dat do jednoho řádku (GROUP_CONCAT):

    * data jsou načtena z tabulky uživatelů pro pole id, všechna jsou umístěna na jednom řádku, hodnoty jsou odděleny čárkami.

    2. Seskupení dat podle dvou nebo více polí:

    > VYBRAT * FROM uživatelů GROUP BY CONCAT(title, "::", narození)

    * shrnuto, v tomto příkladu nahrajeme data z tabulky uživatelů a seskupíme je podle polí titulu a narození. Před seskupením sloučíme pole do jednoho řádku s oddělovačem ::.

    3. Sloučení výsledků ze dvou tabulek (UNION):

    > (SELECT id, fio, address, "Users" jako typu FROM users)
    UNIE
    (SELECT id, fio, address, "Customers" jako typu FROM customers)

    * v tomto příkladu jsou data vzorkována z tabulek uživatelů a zákazníků.

    4. Vzorek průměrů seskupených pro každou hodinu:

    SELECT avg(teplota), DATE_FORMAT(datetimeupdate, "%Y-%m-%d %H") jako hour_datetime FROM archiv GROUP BY DATE_FORMAT(datetimeupdate, "%Y-%m-%d %H")

    * zde vyjmeme průměrnou hodnotu pole teploty z archivní tabulky a seskupíme podle pole datetimeupdate (s časovým dělením pro každou hodinu).

    VLOŽIT

    Syntaxe 1:

    > VLOŽIT DO

() HODNOTY ()

Syntaxe 2:

> VLOŽIT DO

VALUES()

* kde tabulka je název tabulky, do které zadáváme data; pole — seznam polí oddělených čárkami; hodnoty — výpis hodnot oddělených čárkami.
* první možnost vám umožní vložit pouze uvedená pole - ostatní obdrží výchozí hodnoty. Druhá možnost bude vyžadovat vložení všech polí.

Příklady použití vložky

1. Vložení více řádků do jednoho dotazu:

> INSERT INTO cities ("jméno", "země") VALUES ("Moskva", "Rusko"), ("Paříž", "Francie"), ("Funafuti" , "Tuvalu");

* v tomto příkladu přidáme 3 záznamy v jednom SQL dotazu.

2. Vkládání z jiné tabulky (kopírování řádků, INSERT + SELECT):

* extrahujte všechny záznamy z tabulky měst, jejichž názvy začínají na „M“ a přidejte je do tabulky měst-nová.

Aktualizovat (UPDATE)

Syntax:

* kde tabulka je název tabulky; pole — pole, u kterého budeme měnit hodnotu; hodnota - nová hodnota; podmínky - podmínka (bez ní je provádění aktualizace nebezpečné - můžete nahradit všechna data v celé tabulce).

Aktualizace pomocí náhrady (REPLACE):

AKTUALIZOVAT

SET = REPLACE(, "", "");

AKTUALIZACE měst SET jméno = REPLACE(jméno, "Maskva", "Moskva");

Pokud chceme hrát na jistotu, můžeme nejprve zkontrolovat výsledek výměny pomocí SELECT:

Smazat (DELETE)

Syntax:

* kde tabulka je název tabulky; podmínky - podmínka (stejně jako v případě UPDATE je použití DELETE bez podmínky nebezpečné - DBMS nebude žádat potvrzení, ale jednoduše smaže všechna data).

Vytvoření tabulky

Syntax:

> VYTVOŘIT TABULKU

( , )

> VYTVOŘIT TABULKU, POKUD NEEXISTUJE `users_rights` (
`id` int(10) bez znaménka NOT NULL,
`user_id` int(10) bez znaménka NOT NULL,
`rights` int(10) unsigned NOT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8;

* kde tabulka je název tabulky (v příkladu user_rights); pole1, pole2 - název polí (v příkladu jsou vytvořena 3 pole - id, user_id, rights); options1, options2 — parametry pole (v příkladu int(10) unsigned NOT NULL ); možnosti tabulky — obecné parametry tabulky (v příkladu ENGINE=InnoDB DEFAULT CHARSET=utf8 ).

Použití požadavků v PHP

Připojení k databázi:

mysql_connect("localhost", "login", "heslo") or die("Chyba připojení MySQL");
mysql_select_db("název_db");
mysql_query("SET NAMES "utf8"");

* kde je navázáno připojení k databázi na lokálním serveru (localhost); přihlašovací údaje pro připojení - přihlašovací jméno a heslo (přihlašovací jméno a heslo); db_name se používá jako základ; Použité kódování je UTF-8.

Můžete také vytvořit trvalé připojení:

mysql_pconnect("localhost", "login", "heslo") or die("Chyba připojení MySQL");

* existuje však možnost dosažení maximálního povoleného limitu hostingu. Tato metoda by měla být použita na našich vlastních serverech, kde můžeme sami kontrolovat situaci.

Kompletní připojení:

* v PHP se provádí automaticky, kromě trvalých připojení (mysql_pconnect).

Dotaz na MySQL (Mariadb) v PHP se provádí pomocí funkce mysql_query() a načítání dat z dotazu se provádí pomocí mysql_fetch_array():

$result = mysql_query("SELECT * FROM users");
while ($mass = mysql_fetch_array($result)) (
echo $mass . "
";
}

* v tomto příkladu byl proveden dotaz na tabulku uživatelů. Výsledek dotazu je umístěn do proměnné $result. Dále použijeme while cyklus, jehož každá iterace načte pole dat a umístí je do proměnné $mass – v každé iteraci pracujeme s jedním řádkem databáze.

Použitá funkce mysql_fetch_array() vrací asociativní pole, se kterým se pohodlně pracuje, ale existuje i alternativa - mysql_fetch_row(), která vrací běžné číslované pole.

Stínění

Pokud potřebujete do řetězce dotazu vložit speciální znak, například %, musíte použít escapování pomocí znaku zpětného lomítka - \

Například:

* pokud takový dotaz spustíte bez escapování, znak % bude interpretován jako libovolný počet znaků po 100.

To je vše. Pokud potřebujete pomoc s vyplněním žádosti, napište mi

Dotazy jsou psány bez uvozovek, protože se liší pro MySQL, MS SQL a PostGree.

SQL dotaz: získání zadaných (potřebných) polí z tabulky SELECT id, country_title, count_people FROM table_name

Získáme seznam záznamů: VŠECHNY země a jejich populace. Názvy povinných polí jsou označeny oddělenými čárkami.

SELECT * FROM název_tabulky

* označuje všechna pole. To znamená, že se zobrazí ABSOLUTNĚ VŠECHNA datová pole.

SQL dotaz: zobrazení záznamů z tabulky s výjimkou duplikátů SELECT DISTINCT country_title FROM table_name

Získáme seznam záznamů: země, kde se nacházejí naši uživatelé. Může být mnoho uživatelů z jedné země. V tomto případě je to váš požadavek.

SQL dotaz: zobrazení záznamů z tabulky na základě dané podmínky SELECT id, country_title, city_title FROM table_name WHERE count_people>100000000

Získáme seznam rekordů: země, kde je počet lidí vyšší než 100 000 000.

SQL dotaz: zobrazení záznamů z tabulky s řazením SELECT id, název_města FROM název_tabulky ORDER BY název_města

Získáme seznam záznamů: města v abecedním pořadí. Na začátku A, na konci Z.

SELECT id, název_města FROM název_tabulky ORDER BY název_města DESC

Získáme seznam záznamů: města v obráceném (DESC) pořadí. Na začátku já, na konci A.

SQL dotaz: počítání počtu záznamů SELECT COUNT(*) FROM název_tabulky

Dostaneme počet (počet) záznamů v tabulce. V tomto případě NEEXISTUJE ŽÁDNÝ seznam záznamů.

SQL dotaz: výstup požadovaného rozsahu záznamů SELECT * FROM název_tabulky LIMIT 2, 3

Z tabulky získáme 2 (druhý) a 3 (třetí) záznamy. Dotaz je užitečný při vytváření navigace na WEB stránkách.

SQL dotazy s podmínkami

Zobrazení záznamů z tabulky na základě dané podmínky pomocí logických operátorů.

SQL dotaz: AND konstrukce SELECT id, název_města FROM název_tabulky WHERE country="Russia" AND oil=1

Dostáváme seznam záznamů: města z Ruska A mají přístup k ropě. Při použití operátoru AND se musí obě podmínky shodovat.

SQL dotaz: OR (OR) konstrukce SELECT id, název_města FROM název_tabulky WHERE country="Russia" OR country="USA"

Dostáváme seznam záznamů: všechna města z Ruska NEBO USA. Při použití operátoru OR musí odpovídat ALESPOŇ jedna podmínka.

SQL dotaz: AND NOT konstrukce SELECT id, user_login FROM table_name WHERE country="Russia" AND NOT count_comments , =) pokud je jedním z operandů sloupec, pak výchozí typ řazení sloupce určuje řazení použité pro porovnání. Pokud jsou oba operandy sloupce, pak typ řazení pro levý operand určuje použité řazení. Pokud ani jeden operand není sloupec, použije se řazení BINARY.
  • Operátor BETWEEN...AND je ekvivalentní použití dvou výrazů s operátory >= a = y AND x

     Nahoru