Učenie sa jazyka SQL. Venované Real Dummies alebo MySQL pre začiatočníkov

Predkladám Vám do pozornosti voľný preklad článku SQL pre začiatočníkov

Čoraz viac moderných webových aplikácií interaguje s databázami, pričom zvyčajne používa daný jazyk SQL... Našťastie pre nás sa tento jazyk dá celkom ľahko naučiť. V tomto článku sa začneme učiť základy SQL dotazov a ako interagujú s databázou. MySQL.

Čo potrebuješ

SQL (Structured Query Language) je jazyk určený na interakciu so systémami správy relačných databáz (DBMS) ako napr. MySQL, Oracle, Sqlite a ďalšie. Na spustenie SQL dotazov z tohto článku predpokladám, že ste nainštalovali MySQL... Tiež odporúčam použiť phpMyAdmin ako nástroj na vizuálne zobrazenie MySQL.

Nasledujúce aplikácie vám uľahčia inštaláciu MySQL a phpMyAdmin do vášho počítača:

  • WAMP pre Windows
  • MAMP pre Mac

Začnime vykonávať dotazy na príkazovom riadku. WAMP už ho obsahuje v konzole MySQL... Pre MAMP, možno si budete musieť prečítať toto.

CREATE DATABASE: Vytvorenie databázy

Naša úplne prvá požiadavka. Vytvoríme databázu, s ktorou budeme pracovať.

Najprv otvorte konzolu MySQL a prihláste sa. Pre WAMP, predvolene sa používa prázdne heslo. Pre MAMP heslo musí byť "root".

Po prihlásení napíšte túto požiadavku a kliknite Zadajte:

VYTVORIŤ DATABÁZU my_first_db;

Všimnite si, že na koniec dotazu sa pridáva bodkočiarka (;), rovnako ako na koniec riadku vo vašom kóde.

Tiež kľúčové slová VYTVORIŤ DATABÁZU nerozlišujú veľké a malé písmená ako všetky kľúčové slová v SQL... Pre lepšiu čitateľnosť ich ale napíšeme veľkými písmenami.

Poznámka: sada znakov a zoraďovanie

Ak chcete nastaviť predvolenú znakovú sadu a poradie zoraďovania, použite podobný dotaz:

VYTVORIŤ DATABÁZU my_first_db PREDCHOZÍ SET ZNAKOV utf8 COLLATE utf8_general_ci;

Zoznam podporovaných znakových sád a porovnávaní nájdete na MySQL.

ZOBRAZIŤ DATABÁZY: Zoznam všetkých databáz

Tento dotaz sa používa na zobrazenie všetkých databáz.

DROP DATABASE: Zahodí databázu

Pomocou tohto dotazu môžete zrušiť existujúcu databázu.

Pri tomto dopyte buďte opatrní, pretože nezobrazuje žiadne upozornenia. Keď budete mať tabuľky a údaje v databáze, dotaz ich všetky okamžite odstráni.

Technicky povedané, toto nie je požiadavka. Je to "operátor" a nevyžaduje bodkočiarku na konci.

Informuje MySQLže je potrebné vybrať predvolenú databázu a pracovať s ňou až do konca relácie. Teraz sme pripravení vytvoriť tabuľky a zvyšok v tejto databáze.

Čo je databázová tabuľka?

Tabuľku v databáze si môžete predstaviť ako bežnú tabuľku alebo ako súbor csv so štruktúrovanými údajmi.

Ako v tomto príklade, tabuľka má názvy riadkov a stĺpce údajov. Pomocou SQL dotazov môžeme vytvoriť túto tabuľku. Údaje môžeme tiež pridávať, čítať, upravovať a mazať.

CREATE TABLE: Vytvorenie tabuľky

Pomocou tohto dotazu môžeme vytvoriť tabuľku v databáze. Prepáčte, dokumentácia pre MySQL nie je veľmi priateľský k novým používateľom. Štruktúra tohto dotazu môže byť veľmi zložitá, ale začneme jednoduchou.

Nasledujúci dotaz vytvorí tabuľku s dvoma stĺpcami.

Používatelia CREATE TABLE (používateľské meno VARCHAR (20), dátum vytvorenia DATE);

Upozorňujeme, že dopyt môžeme napísať na viacero riadkov a použiť Tab na odsadenie.

Prvý riadok je jednoduchý. Vytvoríme tabuľku s názvom používateľov... Ďalej sú v zátvorkách uvedené stĺpce tabuľky oddelené čiarkami. Za každým názvom stĺpca nasleduje napríklad typ údajov VARCHAR alebo DÁTUM.

VARCHAR (20) znamená, že stĺpec je typu reťazca a nemôže mať viac ako 20 znakov. DÁTUM- dátový typ určený na ukladanie dátumov vo formáte: "RRRR-MM-DD".

Primárny kľúč

Pred vykonaním tohto dotazu musíme vložiť stĺpec ID používateľa, ktorý bude PRIMÁRNYM KĽÚČOM. Bez toho, aby sme zachádzali do prílišných podrobností, môžete si primárny kľúč predstaviť ako spôsob, ako rozpoznať každý riadok údajov v tabuľke.

Žiadosť vyzerá takto:

Používatelia CREATE TABLE (user_id INT AUTO_INCREMENT PRIMARY KEY, meno používateľa VARCHAR (20), dátum vytvorenia DATE);

INT- 32-bitový typ celého čísla (numerický). AUTOMATICKÝ PRÍRASTOK automaticky vytvorí nové identifikačné číslo vždy, keď sa pridá riadok s údajmi. Nie je to potrebné, ale je to s ním pohodlnejšie.

Tento stĺpec nemusí byť celé číslo, hoci ide o najbežnejší typ údajov. Stĺpec primárneho kľúča je voliteľný, ale odporúča sa ho použiť na zlepšenie výkonu a architektúry vašej databázy.

Spustíme dotaz:

ZOBRAZIŤ TABUĽKY: Zoznam všetkých tabuliek

Dotaz vám umožňuje získať zoznam všetkých tabuliek v aktuálnej databáze.

VYSVETLITE: Zobrazte štruktúru tabuľky

Tento dotaz použite na zobrazenie štruktúry existujúcej tabuľky.

V dôsledku toho sa zobrazia polia (stĺpce) a ich vlastnosti.

DROP TABLE: Zahodí stôl

Tiež DOPRAŤ DATABÁZY, tento dotaz vymaže tabuľku a jej obsah bez akéhokoľvek varovania.

ALTER TABLE: Úprava tabuľky

Takýto dotaz môže byť zložitý, pretože môže vykonať viacero zmien v tabuľke. Pozrime sa na niekoľko jednoduchých príkladov.

Vďaka čitateľnosti SQL, táto požiadavka je samozrejmá.

Odstránenie je rovnako jednoduché. Dotaz používajte opatrne, údaje sa vymažú bez varovania.

Znova pridáme pole email, neskôr bude stále potrebné:

Používatelia ALTER TABLE PRIDAŤ e-mail VARCHAR (100) ZA užívateľským menom;

Niekedy možno budete musieť zmeniť vlastnosti stĺpca, nemusíte ho odstraňovať a vytvárať znova.

Táto požiadavka premenuje pole užívateľské meno v user_name a zmení jeho typ z VARCHAR (20) na VARCHAR (30)... Takéto zmeny neovplyvnia údaje v tabuľke.

INSERT: Pridanie údajov do tabuľky

Pridajme záznamy do tabuľky pomocou dotazov.

Ako môžeš vidieť, HODNOTY () obsahuje zoznam hodnôt oddelených čiarkami. Hodnoty reťazca sú uzavreté v jednoduchých úvodzovkách. Hodnoty musia byť v poradí špecifikovanom pri vytváraní tabuľky.

Všimnite si, že prvá hodnota je NULOVÝ pre primárny kľúč, ktorého pole sme pomenovali ID používateľa... Všetko preto, že pole je označené ako AUTOMATICKÝ PRÍRASTOK a id sa vygeneruje automaticky. Prvý riadok údajov bude mať id 1. Ďalší riadok, ktorý sa má pridať, je 2 atď.

Alternatívna syntax

Tu je ďalšia syntax na vkladanie reťazcov.

Tentokrát sme použili kľúčové slovo SET namiesto HODNOTY... Všimnime si niekoľko vecí:

  • Stĺpec je možné vynechať. Pole sme napríklad nepriradili hodnotu ID používateľa pretože je označený ako AUTOMATICKÝ PRÍRASTOK... Ak do poľa s typom nepriradíte hodnotu VARCHAR, potom štandardne prevezme hodnotu prázdneho reťazca (pokiaľ nebola pri vytváraní tabuľky určená iná predvolená hodnota).
  • Na každý stĺpec možno odkazovať názvom. Polia teda môžu byť v akomkoľvek poradí, na rozdiel od predchádzajúcej syntaxe.

Alternatívne číslo syntaxe 2

Tu je ďalší príklad.

Rovnako ako predtým, na polia môžete odkazovať podľa názvu, môžu ísť v ľubovoľnom poradí.

Tento dotaz použite na získanie ID posledného vloženého riadku.

TERAZ ()

Je čas ukázať vám, ako používať funkcie MySQL v žiadostiach.

Funkcia TERAZ () vráti aktuálny dátum. Použite ho na automatické pridanie aktuálneho dátumu do poľa typu DÁTUM.

Upozorňujeme, že sme dostali varovanie od MySQL ale to nie je až také dôležité. Dôvodom je funkcia TERAZ () vlastne vracia časovú informáciu.

Vytvorili sme pole dátum_vytvorenia ktorý môže obsahovať iba dátum a nie čas, takže údaje boli skrátené. Namiesto TERAZ () by sme mohli použiť AKTUÁLNE () ktorý vráti iba aktuálny dátum, ale konečný výsledok by bol rovnaký.

SELECT: Načítanie údajov z tabuľky

Je zrejmé, že údaje, ktoré sme napísali, sú zbytočné, kým ich nedokážeme prečítať. Na záchranu prichádza žiadosť VYBRAŤ.

Najjednoduchší príklad použitia žiadosti VYBRAŤ na čítanie údajov z tabuľky:

Hviezdička (*) znamená, že chceme získať všetky stĺpce v tabuľke. Ak potrebujete získať iba určité stĺpce, použite niečo takéto:

Častejšie chceme získať iba určité riadky, nie všetky. Napríklad získajme e-mailovú adresu používateľa nettuts.

Je to podobné ako podmienka IF. WHERE vám umožňuje nastaviť podmienku v dotaze a získať požadovaný výsledok.

Pre podmienku rovnosti sa používa jednoduché znamienko (=), nie dvojité (==), ktoré pravdepodobne používate pri programovaní.

Môžete použiť aj ďalšie podmienky:

A a ALEBO sa používajú na kombináciu podmienok:

Upozorňujeme, že číselné hodnoty nemusia byť uzavreté v úvodzovkách.

IN ()

Používa sa na porovnanie s viacerými hodnotami.

PÁČI SA MI TO

Umožňuje vám nastaviť šablónu pre vyhľadávanie.

Znak percenta (%) sa používa na určenie vzoru.

ORDER BY doložkou

Túto podmienku použite, ak chcete, aby sa výsledok vrátil zoradený:

Predvolené poradie je ASC(Vzostupne). Pridať DESC triediť v opačnom poradí.

LIMIT ... OFFSET ...

Môžete obmedziť počet vrátených riadkov.

LIMIT 2 berie prvé dva riadky. LIMIT 1 OFFSET 2 zaberie jeden riadok po prvých dvoch. LIMIT 2, 1 znamená to isté, iba prvé číslo je posun a druhé obmedzuje počet riadkov.

AKTUALIZÁCIA: Aktualizácia údajov v tabuľke

Tento dotaz sa používa na aktualizáciu údajov v tabuľke.

Väčšinou používané v spojení s KDE aktualizovať konkrétne riadky. Ak je podmienka KDE nezadané, zmeny sa použijú na všetky riadky.

Na obmedzenie meniteľných reťazcov môžete použiť LIMIT.

DELETE: Odstránenie údajov z tabuľky

Tiež , tento dotaz sa často používa v spojení s podmienkou KDE.

SKRAŤ TABUĽKU

Ak chcete odstrániť obsah z tabuľky, použite dotaz, ako je tento:

VYMAZAŤ Z používateľov;

Pre lepší výkon použitia .

Tiež vynuluje počítadlo poľa AUTOMATICKÝ PRÍRASTOK, takže novo pridané riadky budú mať ID rovné 1. Pri použití to sa nestane a počítadlo bude naďalej rásť.

Únikové hodnoty reťazca a špeciálne slová

Hodnoty reťazca

Niektoré postavy je potrebné utiecť, inak môžu nastať problémy.

Opačná lomka (\) sa používa na escapovanie.

Je to veľmi dôležité z bezpečnostných dôvodov. Všetky používateľské údaje musia byť pred zápisom do databázy escapované. V PHP použite funkciu mysql_real_escape_string () alebo pripravené príkazy.

Špeciálne slová

Keďže v r MySQL veľa rezervovaných slov ako VYBRAŤ alebo Aby ste sa vyhli nejasnostiam, uzavrite názvy stĺpcov a tabuliek do úvodzoviek. Okrem toho musíte používať nie obyčajné úvodzovky, ale spätné začiarknutia (`).

Povedzme, že z nejakého dôvodu chcete pridať stĺpec s názvom :

Záver

Ďakujem za prečítanie článku. Dúfam, že som vám ten jazyk mohol ukázať SQL veľmi funkčné a ľahko sa učí.

Tento tutoriál je niečo ako "pečiatka mojej pamäte" pre jazyk SQL (DDL, DML), t.j. sú to informácie, ktoré sa nahromadili počas mojej profesionálnej činnosti a neustále sa mi ukladajú v hlave. To je pre mňa postačujúce minimum, ktoré sa pri práci s databázami využíva najčastejšie. Ak je potrebné použiť úplnejšie konštrukty SQL, zvyčajne sa obrátim na knižnicu MSDN umiestnenú na internete. Podľa môjho názoru je veľmi ťažké udržať všetko v hlave a nie je to potrebné. Ale je veľmi užitočné poznať základné konštrukcie, pretože sú použiteľné v takmer rovnakej forme v mnohých relačných databázach ako Oracle, MySQL, Firebird. Rozdiely sú najmä v dátových typoch, ktoré sa môžu v detailoch líšiť. Základných konštrukcií jazyka SQL nie je až tak veľa a pri neustálom precvičovaní sa rýchlo zapamätajú. Napríklad na vytváranie objektov (tabuľky, obmedzenia, indexy atď.) stačí mať po ruke textový editor prostredia (IDE) na prácu s databázou a nie je potrebné študovať vizuálne nástroje zaostrené na prácu so špecifickým typom databázy (MS SQL, Oracle, MySQL, Firebird, ...). Je to pohodlné aj preto, že všetok text máte na očiach a nemusíte behať cez množstvo kariet, aby ste vytvorili napríklad index alebo obmedzenie. Pri neustálej práci s databázou je vytváranie, zmena a najmä opätovné vytváranie objektu pomocou skriptov mnohonásobne rýchlejšie, ako keby sa to dialo vo vizuálnom režime. Aj v režime skriptu (teda s náležitou starostlivosťou) je jednoduchšie nastaviť a ovládať pravidlá pre pomenovanie objektov (môj subjektívny názor). Okrem toho je vhodné použiť skripty, keď zmeny vykonané v jednej databáze (napríklad testovacej) je potrebné preniesť v rovnakej forme do inej (produktívnej) databázy.

Jazyk SQL je rozdelený do niekoľkých častí, tu rozoberiem jeho 2 najdôležitejšie časti:
  • DML - Data Manipulation Language, ktorý obsahuje nasledujúce konštrukcie:
    • SELECT - výber údajov
    • INSERT - vloženie nových údajov
    • UPDATE - aktualizácia údajov
    • DELETE - vymazanie údajov
    • MERGE - zlúčenie dát
Pretože Som praktik, v tomto návode bude málo teórie ako takej a všetky konštrukcie budú vysvetlené na praktických príkladoch. Okrem toho verím, že programovací jazyk a najmä SQL sa dá v praxi zvládnuť len tak, že ho precítite a pochopíte, čo sa stane, keď spustíte tú či onú konštrukciu.

Tento tutoriál je založený na princípe Krok za krokom, t.j. je potrebné čítať postupne a najlepšie hneď po príkladoch. Ak sa však počas cesty potrebujete dozvedieť viac o príkaze podrobnejšie, použite špecifické vyhľadávanie na internete, napríklad v knižnici MSDN.

Pri písaní tohto návodu bola použitá databáza MS SQL Server verzie 2014, na spúšťanie skriptov som použil MS SQL Server Management Studio (SSMS).

Stručne o MS SQL Server Management Studio (SSMS)

SQL Server Management Studio (SSMS) je nástroj pre Microsoft SQL Server na konfiguráciu, správu a správu databázových komponentov. Tento nástroj obsahuje editor skriptov (ktorý budeme hlavne používať) a grafický program, ktorý pracuje s objektmi a nastaveniami servera. Hlavným nástrojom v SQL Server Management Studio je Object Explorer, ktorý umožňuje používateľovi prezerať, získavať a manipulovať s objektmi servera. Tento text je čiastočne prevzatý z Wikipédie.

Ak chcete vytvoriť nový editor skriptov, použite tlačidlo Nový dotaz:

Ak chcete zmeniť aktuálnu databázu, môžete použiť rozbaľovací zoznam:

Ak chcete vykonať konkrétny príkaz (alebo skupinu príkazov), vyberte ho a stlačte tlačidlo Vykonať alebo kláves F5. Ak je v editore momentálne iba jeden príkaz alebo potrebujete vykonať všetky príkazy, nemusíte nič vyberať.

Po spustení skriptov, najmä tých, ktoré vytvárajú objekty (tabuľky, stĺpce, indexy), sa zmeny zobrazia pomocou aktualizácie z kontextového menu, zvýraznením príslušnej skupiny (napríklad Tabuľky), samotnej tabuľky alebo skupiny Columns v nej.

V skutočnosti je to všetko, čo potrebujeme vedieť, aby sme mohli vykonať tu uvedené príklady. Zvyšok nástroja SSMS sa ľahko naučíte sami.

Trochu teórie

Relačná databáza (RDB, alebo ďalej v kontexte len databáza) je kolekcia tabuliek, ktoré sú vzájomne prepojené. Zhruba povedané, databáza je súbor, v ktorom sú dáta uložené v štruktúrovanej forme.

DBMS je riadiaci systém pre tieto databázy, t.j. ide o súbor nástrojov pre prácu s konkrétnym typom databázy (MS SQL, Oracle, MySQL, Firebird, ...).

Poznámka
Pretože v reálnom živote, v hovorovej reči, väčšinou hovoríme: "Oracle DB", alebo dokonca len "Oracle", čo v skutočnosti znamená "Oracle DBMS", potom sa v kontexte tohto tutoriálu niekedy použije termín DB. Z kontextu bude myslím jasné, o čo ide.

Tabuľka je zbierka stĺpcov. Stĺpce môžu byť tiež nazývané polia alebo stĺpce, všetky tieto slová sa budú používať ako synonymá na vyjadrenie toho istého.

Tabuľka je hlavným objektom RDB, všetky údaje RDB sú uložené riadok po riadku v stĺpcoch tabuľky. Reťazce, záznamy sú tiež synonymá.

Pre každú tabuľku, ako aj pre jej stĺpce sú uvedené názvy, pomocou ktorých sa k nim následne pristupuje.
Názov objektu (názov tabuľky, názov stĺpca, názov indexu atď.) v MS SQL môže mať maximálnu dĺžku 128 znakov.

Pre referenciu- v databáze ORACLE môžu mať názvy objektov maximálnu dĺžku 30 znakov. Preto si pre konkrétnu databázu musíte vypracovať vlastné pravidlá pre pomenovanie objektov, aby ste dodržali limit na počet znakov.

SQL je jazyk, ktorý vám umožňuje vykonávať dotazy v databáze pomocou DBMS. V špecifickom DBMS môže mať jazyk SQL špecifickú implementáciu (vlastný dialekt).

DDL a DML sú podmnožinou jazyka SQL:

  • Jazyk DDL sa používa na vytváranie a úpravu štruktúry databázy, t.j. vytvárať / upravovať / mazať tabuľky a odkazy.
  • Jazyk DML umožňuje manipuláciu s údajmi tabuľky, t.j. s jej líniami. Umožňuje vám vyberať údaje z tabuliek, pridávať do tabuliek nové údaje a aktualizovať a odstraňovať existujúce údaje.

V SQL sa dajú použiť 2 typy komentárov (jednoriadkové a viacriadkové):

Jednoriadkový komentár
a

/ * viacriadkový komentár * /

V skutočnosti to na teóriu bude stačiť.

DDL - Data Definition Language

Zoberme si napríklad tabuľku s údajmi o zamestnancoch vo forme obvyklej pre osobu, ktorá nie je programátorom:

V tomto prípade majú stĺpce tabuľky tieto názvy: Osobné číslo, celé meno, Dátum narodenia, E-mail, Pozícia, Oddelenie.

Každý z týchto stĺpcov možno charakterizovať typom údajov, ktoré obsahuje:

  • Osobné číslo - celé číslo
  • Celé meno - reťazec
  • Dátum narodenia - dátum
  • E-mail - reťazec
  • Pozícia - reťazec
  • Oddelenie - reťazec
Typ stĺpca je charakteristika, ktorá označuje, aký druh údajov môže daný stĺpec uchovávať.

Na začiatok bude stačiť zapamätať si iba tieto základné dátové typy používané v MS SQL:

Význam Notácia MS SQL Popis
Šnúrka s premenlivou dĺžkou varchar (N)
a
nvarchar (N)
Pomocou čísla N môžeme určiť maximálnu možnú dĺžku riadku pre príslušný stĺpec. Napríklad, ak chceme povedať, že hodnota stĺpca „name“ môže obsahovať maximálne 30 znakov, tak ju musíme nastaviť na typ nvarchar (30).
Rozdiel medzi varchar a nvarchar je v tom, že varchar ukladá reťazce vo formáte ASCII, kde jeden znak je 1 bajt, a nvarchar ukladá reťazce vo formáte Unicode, kde každý znak má 2 bajty.
Typ varchar by ste mali použiť iba vtedy, ak ste si 100% istý, že pole nepotrebuje ukladať znaky Unicode. Napríklad varchar možno použiť na ukladanie e-mailových adries, pretože zvyčajne obsahujú iba znaky ASCII.
Šnúrka s pevnou dĺžkou znak (N)
a
nchar (N)
Tento typ sa líši od reťazca s premennou dĺžkou tým, že ak je reťazec kratší ako N znakov, potom sa vždy doplní doprava na dĺžku N medzerami a v tejto podobe sa uloží do databázy, t.j. zaberá presne N znakov v databáze (kde jeden znak zaberá 1 bajt pre char a 2 bajty pre nchar). V mojej praxi sa tento typ používa veľmi zriedkavo a ak sa používa, tak sa používa najmä vo formáte char (1), t.j. keď je pole definované jedným znakom.
Celé číslo int Tento typ nám umožňuje používať v stĺpci iba celé čísla, kladné aj záporné. Pre informáciu (teraz to nie je pre nás také podstatné) - rozsah čísel, ktoré typ int umožňuje, je od -2 147 483 648 do 2 147 483 647. Zvyčajne ide o hlavný typ, ktorý sa používa na nastavenie identifikátorov.
Skutočné alebo skutočné číslo plavák Zjednodušene povedané, ide o čísla, v ktorých môže byť prítomná desatinná čiarka.
dátum dátum Ak potrebujete uložiť iba Dátum do stĺpca, ktorý pozostáva z troch komponentov: Číslo, Mesiac a Rok. Napríklad 15.02.2014 (15.2.2014). Tento typ je možné použiť pre stĺpec „Dátum prijatia“, „Dátum narodenia“ atď. v prípadoch, keď je pre nás dôležité opraviť iba dátum, alebo keď časová zložka nie je pre nás dôležitá a možno ju vyradiť alebo ak nie je známa.
čas čas Tento typ je možné použiť, ak je potrebné do stĺpca uložiť len časové údaje, t.j. Hodiny, minúty, sekundy a milisekundy. Napríklad 17:38: 31,3231603
Napríklad denný "Flight Departure Time".
dátum a čas Dátum Čas Tento typ vám umožňuje súčasne uložiť dátum aj čas. Napríklad 15.02.2014 17:38: 31.323
Môže to byť napríklad dátum a čas udalosti.
Vlajka trocha Tento typ je vhodný na ukladanie hodnôt ako „Áno“ / „Nie“, kde „Áno“ bude uložené ako 1 a „Nie“ bude uložené ako 0.

Taktiež nesmie byť špecifikovaná hodnota poľa, ak to nie je zakázané, na tento účel sa používa kľúčové slovo NULL.

Ak chcete spustiť príklady, vytvorte základ testu s názvom Test.

Jednoduchú databázu (bez zadania ďalších parametrov) je možné vytvoriť spustením nasledujúceho príkazu:

Test VYTVORENIA DATABÁZY
Databázu môžete vymazať príkazom (pri tomto príkaze by ste mali byť veľmi opatrní):

Test DROP DATABASE
Ak chcete prejsť do našej databázy, môžete spustiť príkaz:

Test POUŽITIA
Prípadne vyberte Testovať databázu z rozbaľovacieho zoznamu v oblasti ponuky SSMS. Pri práci často používam tento spôsob prepínania medzi základňami.

Teraz v našej databáze môžeme vytvoriť tabuľku pomocou popisov tak, ako sú, pomocou medzier a znakov cyriliky:

VYTVORIŤ TABUĽKU [Zamestnanci] ([Osobné číslo] int, [Celé meno] nvarchar (30), [Dátum narodenia] dátum, nvarchar (30), [Pozícia] nvarchar (30), [Oddelenie] nvarchar (30))
V tomto prípade musíme mená uzavrieť do hranatých zátvoriek [...].

V databáze je však pre väčšie pohodlie lepšie špecifikovať všetky názvy objektov v latinskej abecede a nepoužívať v názvoch medzery. V MS SQL zvyčajne v tomto prípade každé slovo začína veľkým písmenom, napríklad pre pole „Personálne číslo“ by sme mohli nastaviť názov PersonnelNumber. V mene môžete použiť aj čísla, napríklad PhoneNumber1.

Na poznámku
V niektorých DBMS môže byť vhodnejší nasledujúci formát pomenovania „PHONE_NUMBER“, napríklad tento formát sa často používa v databáze ORACLE. Prirodzene, pri zadávaní názvu poľa je žiaduce, aby sa nezhodoval s kľúčovými slovami používanými v DBMS.

Z tohto dôvodu môžete zabudnúť na syntax hranatých zátvoriek a vymazať tabuľku [Zamestnanci]:

ZOBRAZIŤ TABUĽKU [Zamestnanci]
Napríklad tabuľka so zamestnancami môže byť pomenovaná „Zamestnanci“ a jej polia môžu byť pomenované takto:

  • ID – osobné číslo (ID zamestnanca)
  • Meno - celé meno
  • Narodeniny - Dátum narodenia
  • Email – E-mail
  • Pozícia - Pozícia
  • Oddelenie - Oddelenie
Veľmi často sa na pomenovanie poľa identifikátora používa slovo ID.

Teraz si vytvoríme tabuľku:

VYTVORIŤ TABUĽKU Zamestnanci (ID int, meno nvarchar (30), dátum narodenia, e-mail nvarchar (30), pozícia nvarchar (30), oddelenie nvarchar (30))
Na zadanie požadovaných stĺpcov môžete použiť voľbu NOT NULL.

Pre existujúcu tabuľku je možné polia predefinovať pomocou nasledujúcich príkazov:

Aktualizácia poľa ID ALTER TABLE Zamestnanci ALTER COLUMN ID int NOT NULL - Aktualizácia poľa Názov ALTER TABLE Zamestnanci ALTER COLUMN Name nvarchar (30) NOT NULL

Na poznámku
Všeobecný koncept jazyka SQL pre väčšinu DBMS zostáva rovnaký (aspoň to môžem posúdiť podľa DBMS, s ktorými som pracoval). Rozdiel medzi DDL v rôznych DBMS spočíva najmä v dátových typoch (tu sa môžu líšiť nielen ich názvy, ale aj detaily implementácie), mierne sa môžu líšiť aj špecifiká implementácie jazyka SQL (tj podstata príkazy sú rovnaké, ale môžu existovať malé rozdiely v dialekte, bohužiaľ, neexistuje jeden štandard). Keď poznáte základy SQL, môžete ľahko prechádzať z jedného DBMS na druhý, pretože v tomto prípade stačí pochopiť detaily implementácie príkazov v novom DBMS, t.j. vo väčšine prípadov postačí jednoduché prirovnanie.

Vytvoriť tabuľku VYTVORIŤ TABUĽKU Zamestnanci (ID int, - v ORACLE je typ int ekvivalentom (obal) pre číslo (38) Meno nvarchar2 (30), - nvarchar2 v ORACLE je ekvivalentom nvarchar v MS SQL Dátum narodenia, E-mail nvarchar2 (30 ) , Pozícia nvarchar2 (30), Oddelenie nvarchar2 (30)); - aktualizácia polí ID a Name (tu sa používa MODIFY (…) namiesto ALTER COLUMN) ALTER TABLE Zamestnanci MODIFY (ID int NOT NULL, Name nvarchar2 (30) NOT NULL); - pridanie PK (v tomto prípade konštrukcia vyzerá ako v MS SQL, bude zobrazená nižšie) ALTER TABLE Zamestnanci ADD OBMEDZENIE PK_Zamestnanci PRIMÁRNY KĽÚČ (ID);
Pre ORACLE sú rozdiely z hľadiska implementácie typu varchar2, jeho kódovanie závisí od nastavenia databázy a text je možné uložiť napríklad v kódovaní UTF-8. Okrem toho, dĺžka poľa v ORACLE môže byť nastavená v bajtoch aj v znakoch, na to sa používajú ďalšie možnosti BYTE a CHAR, ktoré sú špecifikované za dĺžkou poľa, napríklad:

NAME varchar2 (30 BYTE) - kapacita poľa bude 30 bajtov NAME varchar2 (30 CHAR) - kapacita poľa bude 30 znakov
Ktorá možnosť bude štandardne použitá BYTE alebo CHAR, v prípade jednoduchej indikácie typu varchar2 (30) v ORACLE závisí od nastavenia databázy, dá sa to niekedy nastaviť aj v nastaveniach IDE. Vo všeobecnosti sa niekedy môžete ľahko zmiasť, takže v prípade ORACLE, ak sa používa typ varchar2 (a to je tu niekedy opodstatnené, napríklad pri použití kódovania UTF-8), radšej výslovne napíšem CHAR ( pretože je zvyčajne pohodlnejšie čítať dĺžku reťazca v znakoch).

Ale v tomto prípade, ak tabuľka už obsahuje nejaké údaje, potom pre úspešné vykonanie príkazov je potrebné, aby boli vyplnené polia ID a Name vo všetkých riadkoch tabuľky. Ukážme si to na príklade, vložte údaje do tabuľky do polí ID, Pozícia a Oddelenie, to sa dá urobiť pomocou nasledujúceho skriptu:

VLOŽTE HODNOTY zamestnancov (IČO, Pozícia, Oddelenie) (1000, N "Riaditeľ", N "Administratíva"), (1001, N "Programátor", N "IT"), (1002, N "Účtovník", N "Účtovníctvo" ), (1003, N "Senior Programátor", N "IT")
V tomto prípade príkaz INSERT tiež vygeneruje chybu, pretože pri vkladaní sme neuviedli hodnotu požadovaného poľa Názov.
Ak by sme už tieto údaje mali v pôvodnej tabuľke, tak príkaz „ALTER TABLE Zamestnanci ALTER COLUMN ID int NOT NULL“ by bol úspešný a príkaz „ALTER TABLE Zamestnanci ALTER COLUMN Name int NOT NULL“ by vypísal chybové hlásenie, že v poli Názov sú hodnoty NULL (nešpecifikované).

Pridajte hodnoty do poľa Názov a znova vyplňte údaje:


Taktiež možnosť NOT NULL je možné použiť priamo pri vytváraní novej tabuľky, t.j. v kontexte príkazu CREATE TABLE.

Najprv vymažte tabuľku pomocou príkazu:

DROP TABLE Zamestnanci
Teraz vytvorte tabuľku s povinnými stĺpcami ID a Názov:

VYTVORIŤ TABUĽKU Zamestnanci (ID int NOT NULL, Meno nvarchar (30) NOT NULL, Dátum narodenia, Email nvarchar (30), Pozícia nvarchar (30), Oddelenie nvarchar (30))
Za názov stĺpca môžete napísať aj hodnotu NULL, čo bude znamenať, že v ňom budú povolené hodnoty NULL (nešpecifikované), ale nie je to potrebné, pretože táto charakteristika sa štandardne predpokladá.

Ak je naopak potrebné, aby bol existujúci stĺpec voliteľný na vyplnenie, potom použijeme nasledujúcu syntax príkazu:

ALTER TABLE Zamestnanci ALTER STĹPEC Názov nvarchar (30) NULL
Alebo jednoducho:

ALTER TABLE Zamestnanci ALTER STĹPEC Meno nvarchar (30)
Taktiež pomocou tohto príkazu môžeme zmeniť typ poľa na iný kompatibilný typ, prípadne zmeniť jeho dĺžku. Rozšírme napríklad pole Názov na 50 znakov:

ALTER TABLE Zamestnanci ALTER STĹPEC Meno nvarchar (50)

Primárny kľúč

Pri vytváraní tabuľky je žiaduce, aby mala jedinečný stĺpec alebo množinu stĺpcov, ktorá je jedinečná pre každý jej riadok – podľa tejto jedinečnej hodnoty je možné záznam jednoznačne identifikovať. Táto hodnota sa nazýva primárny kľúč tabuľky. Pre našu tabuľku Zamestnanci môže byť takouto jedinečnou hodnotou stĺpec ID (ktorý obsahuje „Personálne číslo zamestnanca“ – aj keď v našom prípade je táto hodnota pre každého zamestnanca jedinečná a nemožno ju opakovať).

Primárny kľúč k existujúcej tabuľke môžete vytvoriť pomocou príkazu:

ALTER TABLE Zamestnanci ADD CONSTRAINT PK_Employees PRIMÁRNY KĽÚČ (ID)
Kde „PK_Employees“ je názov obmedzenia zodpovedného za primárny kľúč. Na pomenovanie primárneho kľúča sa zvyčajne používa predpona „PK_“, za ktorou nasleduje názov tabuľky.

Ak primárny kľúč pozostáva z niekoľkých polí, tieto polia musia byť uvedené v zátvorkách oddelené čiarkami:

ALTER TABLE table_name ADD CONSTRAINT názov_obmedzenia PRIMÁRNY KĽÚČ (pole1, pole2, ...)
Stojí za zmienku, že v MS SQL všetky polia, ktoré sú zahrnuté v primárnom kľúči, nesmú byť NULL.

Taktiež primárny kľúč je možné definovať priamo pri vytváraní tabuľky, t.j. v kontexte príkazu CREATE TABLE. Vymažeme tabuľku:

DROP TABLE Zamestnanci
A potom ho vytvorte pomocou nasledujúcej syntaxe:

VYTVORIŤ TABUĽKU Zamestnanci (ID int NIE JE NULL, Meno nvarchar (30) NIE JE NULL, Dátum narodenia, Email nvarchar (30), Pozícia nvarchar (30), Oddelenie nvarchar (30), OBMEDZENIE PK_Zamestnanci PRIMÁRNY KĽÚČ (ID) - popíšte predsa PK polia ako obmedzenie)
Po vytvorení vyplňte údaje do tabuľky:

VLOŽIŤ Zamestnanci (IČO, Pozícia, Oddelenie, Meno) HODNOTY (1000, N "Riaditeľ", N "Administratíva", N "Ivanov I.I."), (1001, N "Programátor", N "IT", N " Petrov PP " ), (1002, N" účtovník ", N" účtovníctvo ", N" Sidorov SS "), (1003, N" hlavný programátor ", N" IT ", N" Andreev A. A.")
Ak primárny kľúč v tabuľke pozostáva iba z hodnôt jedného stĺpca, možno použiť nasledujúcu syntax:

VYTVORIŤ TABUĽKU Zamestnanci (ID int NOT NULL CONSTRAINT PK_Employees PRIMARY KEY, - špecifikujte ako charakteristiku poľa Meno nvarchar (30) NOT NULL, Dátum narodenia, Email nvarchar (30), Pozícia nvarchar (30), Oddelenie nvarchar (30))
V skutočnosti môže byť názov obmedzenia vynechaný, v takom prípade mu bude priradený systémový názov (napríklad „PK__Employee__3214EC278DA42077“):

VYTVORIŤ TABUĽKU Zamestnanci (ID int NOT NULL, Meno nvarchar (30) NOT NULL, Dátum narodenia, E-mail nvarchar (30), Pozícia nvarchar (30), Oddelenie nvarchar (30), PRIMÁRNY KĽÚČ (ID))
alebo:

VYTVORIŤ TABUĽKU Zamestnanci (ID int NIE JE NULL PRIMÁRNY KĽÚČ, Meno nvarchar (30) NIE JE NULL, Dátum narodenia, E-mail nvarchar (30), Pozícia nvarchar (30), Oddelenie nvarchar (30))
Odporúčam však vždy explicitne špecifikovať názov obmedzenia pre trvalé tabuľky, pretože explicitne daným a zrozumiteľným názvom, bude s ním následne jednoduchšie manipulovať, napríklad ho môžete vymazať:

ALTER TABLE Zamestnanci DROP CONSTRAINT PK_Employees
Ale takú krátku syntax bez uvedenia názvov obmedzení je vhodné použiť pri vytváraní dočasných databázových tabuliek (názov dočasnej tabuľky začína # alebo ##), ktoré sa po použití vymažú.

Poďme si to zhrnúť

Doteraz sme pokryli nasledujúce príkazy:
  • VYTVORIŤ TABUĽKU názov_tabuľky (vyčíslenie polí a ich typov, obmedzenia) - slúži na vytvorenie novej tabuľky v aktuálnej databáze;
  • DOP TABLE table_name - slúži na vymazanie tabuľky z aktuálnej databázy;
  • ALTER TABLE názov_tabuľky ZMENIŤ STĹPEC názov_stĺpca… - používa sa na aktualizáciu typu stĺpca alebo na zmenu jeho nastavení (napríklad na určenie charakteristiky NULL alebo NOT NULL);
  • ALTER TABLE názov_tabuľky PRIDAŤ OBMEDZENIE názov_obmedzenia PRIMÁRNY KĽÚČ(pole1, pole2, ...) - pridanie primárneho kľúča do existujúcej tabuľky;
  • ALTER TABLE názov_tabuľky OBMEDZENIE DROP názov_obmedzenia - odstráni obmedzenie z tabuľky.

Trochu o dočasných stoloch

Výňatok z MSDN. V MS SQL Server existujú dva typy dočasných tabuliek: lokálne (#) a globálne (##). Lokálne dočasné tabuľky sú viditeľné iba pre ich tvorcov, kým sa neskončí pripojenie k inštancii SQL Server, hneď ako sú prvýkrát vytvorené. Lokálne dočasné tabuľky sú automaticky zrušené po odpojení používateľa od inštancie SQL Server. Globálne dočasné tabuľky sú viditeľné pre všetkých používateľov počas akýchkoľvek relácií pripojenia po vytvorení týchto tabuliek a sú zrušené, keď sa všetci používatelia, ktorí odkazujú na tieto tabuľky, odpoja od inštancie SQL Server.

V systémovej databáze tempdb sa vytvárajú dočasné tabuľky, t.j. ich vytvorením nezasypávame hlavnú základňu, inak sú dočasné stoly úplne totožné s obyčajnými stolmi, dajú sa aj zahodiť príkazom DROP TABLE. Bežnejšie sa používajú lokálne (#) dočasné tabuľky.

Na vytvorenie dočasnej tabuľky môžete použiť príkaz CREATE TABLE:

VYTVORIŤ TABUĽKU #Temp (ID int, názov nvarchar (30))
Keďže dočasná tabuľka v MS SQL je podobná bežnej tabuľke, môžete ju zrušiť aj sami pomocou príkazu DROP TABLE:

DROP TABLE #Temp

Tiež je možné vytvoriť dočasnú tabuľku (ako samotná riadna tabuľka) a okamžite ju vyplniť údajmi vrátenými dotazom pomocou syntaxe SELECT ... INTO:

VYBERTE ID, Meno DO #Temp FROM Zamestnancov

Na poznámku
Implementácia dočasných tabuliek sa môže v rôznych DBMS líšiť. Napríklad v ORACLE a Firebird DBMS musí byť štruktúra dočasných tabuliek vopred definovaná príkazom CREATE GLOBAL TEMPORARY TABLE s uvedením špecifík ukladania údajov do nej, potom ju používateľ vidí medzi hlavnými tabuľkami a pracuje s ňou ako s obyčajný stôl.

Normalizácia databázy - rozdelenie do podtabuľiek (referenčných kníh) a definovanie vzťahov

Naša súčasná tabuľka Zamestnanci má nevýhodu v tom, že do polí Pozícia a Oddelenie môže používateľ zadať ľubovoľný text, ktorý je primárne plný chýb, keďže jeden zamestnanec môže jednoducho zadať „IT“ ako oddelenie a druhý zamestnanec napr. zadajte „IT oddelenie“, na treťom „IT“. V dôsledku toho bude nejasné, čo tým používateľ myslel, t.j. Sú títo zamestnanci zamestnancami toho istého oddelenia, alebo je používateľ opísaný sám a ide o 3 rôzne oddelenia? Navyše v tomto prípade nebudeme môcť správne zoskupiť údaje pre niektoré zostavy, kde môže byť potrebné zobraziť počet zamestnancov v kontexte každého oddelenia.

Druhou nevýhodou je množstvo uloženia týchto informácií a ich duplicita, t.j. pri každom zamestnancovi je uvedený celý názov oddelenia, čo si vyžaduje miesto v databáze na uloženie každého znaku z názvu oddelenia.

Treťou nevýhodou je zložitosť aktualizácie týchto polí, ak sa zmení názov pozície, napríklad ak potrebujete premenovať pozíciu „Programátor“ na „Junior Programmer“. V tomto prípade budeme musieť vykonať zmeny v každom riadku tabuľky, v ktorom sa pozícia rovná "Programátor".

Aby sa predišlo týmto nedostatkom, používa sa takzvaná normalizácia databázy – jej rozdelenie na podtabuľky, referenčné tabuľky. Netreba zachádzať do džungle teórie a študovať, čo sú normálne formy, stačí pochopiť podstatu normalizácie.

Vytvorme si 2 tabuľky „Pozície“ a „Útvary“, prvá sa bude volať Pozície a druhá Útvary:

VYTVORIŤ TABUĽKU Pozície (ID int IDENTITA (1,1) NIE JE NULL OBMEDZENIE PK_Positions PRIMÁRNY KĽÚČ, Názov nvarchar (30) NIE JE NULL) VYTVORENIE TABUĽKY Oddelenia (ID int IDENTITY (1,1) NIE JE NULL OBMEDZENIE PK_Oddelenia PRIMÁRNY KĽÚČ (30nvar) ) NIE JE NULL)
Všimnite si, že tu sme použili novú možnosť IDENTITA, ktorá hovorí, že údaje v stĺpci ID sa budú číslovať automaticky od 1 s krokom 1, t.j. pri pridávaní nových záznamov im budú postupne priradené hodnoty 1, 2, 3 atď. Takéto polia sa bežne označujú ako automatické zvyšovanie. V tabuľke môže byť definované iba jedno pole s vlastnosťou IDENTITY a zvyčajne, ale nie nevyhnutne, je takéto pole primárnym kľúčom pre túto tabuľku.

Na poznámku
V rôznych DBMS môže byť implementácia polí s počítadlom vykonaná vlastným spôsobom. Napríklad v MySQL je takéto pole definované pomocou voľby AUTO_INCREMENT. V skorších verziách ORACLE a Firebird bolo možné túto funkciu emulovať pomocou SEQUENCE. Ale pokiaľ viem, ORACLE teraz pridal možnosť GENERATED AS IDENTITY.

Vyplňte tieto tabuľky automaticky na základe aktuálnych údajov zaznamenaných v poliach Pozícia a Oddelenie v tabuľke Zamestnanci:

Vyplňte pole Názov v tabuľke Pozície jedinečnými hodnotami z poľa Pozícia v tabuľke Zamestnanci VLOŽTE Pozície (Názov) VYBERTE ODDIELNU Pozíciu OD zamestnancov, KDE pozícia NIE JE NULL - vyraďte záznamy, ktorých pozícia nie je zadaná
Urobme to isté pre tabuľku oddelení:

INSERT Departments (Name) SELECT DISTINCT Department FROM Zamestnanci, KDE oddelenie NENÍ NULL
Ak teraz otvoríme tabuľky Pozície a Oddelenia, uvidíme očíslovanú množinu hodnôt pre pole ID:

VYBERTE * Z pozícií

VYBERTE * Z oddelení

Tieto tabuľky budú teraz zohrávať úlohu referenčných kníh na priraďovanie pozícií a oddelení. Teraz sa budeme odvolávať na ID práce a oddelenia. Najprv vytvorte nové polia v tabuľke Zamestnanci na uloženie údajov identifikátora:

Pridajte pole pre ID pozície ALTER TABLE Zamestnanci ADD PositionID int - pridajte pole pre ID oddelenia ALTER TABLE Zamestnanci ADD DepartmentID int
Typ referenčných polí by mal byť rovnaký ako v odkazoch, v tomto prípade je to int.

Do tabuľky môžete tiež pridať niekoľko polí naraz pomocou jedného príkazu, pričom polia budú oddelené čiarkami:

ALTER TABLE Zamestnanci ADD PositionID int, DepartmentID int
Teraz pre tieto polia napíšeme odkazy (referenčné obmedzenia - FOREIGN KEY), aby používateľ nemohol do týchto polí zapísať hodnoty, ktoré chýbajú medzi hodnotami ID nájdenými v referenčných knihách.

ALTER TABLE Zamestnanci PRIDAŤ OBMEDZENIE FK_Employees_PositionID CUDZÍ KĽÚČ (ID pozície) REFERENCIE Pozície (ID)
A to isté urobíme pre druhé pole:

ALTER TABLE Zamestnanci PRIDAŤ OBMEDZENIE FK_Employees_DepartmentID CUDZÍ KĽÚČ (ID oddelenia) REFERENCIE Oddelenia (ID)
Teraz bude môcť používateľ do týchto polí zadať iba hodnoty ID z príslušného adresára. Preto, aby mohol použiť nové oddelenie alebo pozíciu, bude musieť najprv pridať nový záznam do príslušného adresára. Pretože pozície a oddelenia sú teraz uložené v adresároch v jednej kópii, potom na zmenu názvu stačí zmeniť iba v adresári.

Názov referenčného obmedzenia je zvyčajne zložený, pozostáva z predpony "FK_", potom nasleduje názov tabuľky a za podčiarkovníkom je názov poľa, ktoré odkazuje na identifikátor referenčnej tabuľky.

Identifikátor (ID) je zvyčajne interná hodnota, ktorá sa používa iba pre odkazy a aká hodnota je tam uložená, je vo väčšine prípadov úplne ľahostajná, takže sa nemusíte snažiť zbaviť sa dier v postupnosti čísel, ktoré vznikajú. v priebehu práce s tabuľkou, napríklad po vymazaní záznamov z referenčnej knihy.

Tabuľka ALTER TABLE ADD CONSTRAINT názov_obmedzenia CUDZÍ KĽÚČ (pole1, pole2, ...) REFERENCIE referenčná_tabuľka (pole1, pole2, ...)
V tomto prípade je v tabuľke "dir_table" primárny kľúč reprezentovaný kombináciou niekoľkých polí (field1, field2, ...).

V skutočnosti teraz aktualizujme polia PositionID a DepartmentID s hodnotami ID z adresárov. Na tento účel použijeme príkaz DML UPDATE:

UPDATE e SET PositionID = (SELECT ID FROM Positions WHERE Name = e.Position), DepartmentID = (SELECT ID FROM Departments WHERE Name = e.Department) FROM Zamestnanci e
Pozrime sa, čo sa stalo spustením dotazu:

VYBERTE * OD zamestnancov

To je všetko, polia PositionID a DepartmentID sú vyplnené podľa pozícií a oddelení s identifikátormi, nie sú potrebné polia Pozícia a Oddelenie v tabuľke Zamestnanci, tieto polia môžete vymazať:

ZMENIŤ TABUĽKU Zamestnanci VYPUSTIŤ STĹPEC Pozícia, oddelenie
Teraz má tabuľka nasledujúcu podobu:

VYBERTE * OD zamestnancov

ID názov narodeniny Email PositionID ID oddelenia
1000 Ivanov I.I. NULOVÝ NULOVÝ 2 1
1001 Petrov P.P. NULOVÝ NULOVÝ 3 3
1002 Sidorov S.S. NULOVÝ NULOVÝ 1 2
1003 Andreev A.A. NULOVÝ NULOVÝ 4 3

Tie. v dôsledku toho sme sa zbavili ukladania nadbytočných informácií. Teraz môžeme podľa čísla pozície a oddelenia jednoznačne určiť ich názvy pomocou hodnôt v referenčných tabuľkách:

SELECT e.ID, e.Name, p.Name PositionName, d.Name DepartmentName FROM Zamestnanci e LEFT JOIN Departments d ON d.ID = e.DepartmentID LEFT JOIN Pozície p ON p.ID = e.PositionID

V inšpektorovi objektov môžeme vidieť všetky objekty vytvorené pre túto tabuľku. Odtiaľ môžete s týmito objektmi vykonávať rôzne manipulácie – napríklad objekty premenovať alebo odstrániť.

Za zmienku tiež stojí, že tabuľka môže odkazovať sama na seba, t.j. môžete vytvoriť rekurzívny odkaz. Do našej tabuľky so zamestnancami si napríklad pridáme ďalšie pole ManagerID, ktoré bude ukazovať na zamestnanca, ktorému je tento zamestnanec podriadený. Vytvorme pole:

ALTER TABLE Zamestnanci ADD ManagerID int
V tomto poli je povolená hodnota NULL, pole bude prázdne, ak napríklad nad zamestnancom nie sú nadriadení.

Teraz vytvorte CUDZÍ KĽÚČ v tabuľke Zamestnanci:

ALTER TABLE Zamestnanci ADD CONSTRAINT FK_Employees_ManagerID CUDZÍ KĽÚČ (ID manažéra) REFERENCIE Zamestnanci (ID)
Poďme teraz vytvoriť diagram a uvidíme, ako na ňom vyzerajú vzťahy medzi našimi tabuľkami:

V dôsledku toho by sme mali vidieť nasledujúci obrázok (tabuľka Zamestnanci je prepojená s tabuľkami Pozície a Odbory a odkazuje aj sama na seba):

Nakoniec by sa malo povedať, že referenčné kľúče môžu obsahovať ďalšie možnosti ON DELETE CASCADE a ON UPDATE CASCADE, ktoré hovoria, ako sa správať pri odstraňovaní alebo aktualizácii záznamu, na ktorý sa odkazuje v referenčnej tabuľke. Ak tieto možnosti nie sú špecifikované, potom nemôžeme zmeniť ID v referenčnej tabuľke pre záznam, na ktorý sú odkazy z inej tabuľky, taktiež nebudeme môcť vymazať takýto záznam z referencie, kým nevymažeme všetky riadky odkazujúce na tento záznam, alebo odkazy v týchto riadkoch aktualizujeme na inú hodnotu.

Napríklad, poďme znova vytvoriť tabuľku s možnosťou ON DELETE CASCADE pre FK_Employees_DepartmentID:

DROP TABLE Zamestnanci CREATE TABLE Zamestnanci (ID int NOT NULL, Meno nvarchar (30), Dátum narodenia, E-mail nvarchar (30), PositionID int, DepartmentID int, ManagerID int, OBMEDZENIE PK_Employees PRIMÁRNY KĽÚČ (ID), OBMEDZENIE Depart FK_EmployeID FORD ) REFERENCIE Oddelenia (ID) NA VYMAZANIE KASKÁDY, OBMEDZENIE FK_Employees_PositionID CUDZÍ KĽÚČ (ID pozície) REFERENCIE Pozície (ID), OBMEDZENIE FK_Employees_ManagerID CUDZÍ KĽÚČ (ID manažéra) REFERENCIE ID pozícií (ID), Meno zamestnávateľa (ID) NIvanovSERT,01 VALUESERT, zamestnávateľ "19550219", 2,1, NULL), (1001, N "Petrov PP", "19831203", 3,3,1003), (1002, N "Sidorov SS", "19760607", 1,2,1000) , (1003, N "Andreev AA", "19820417", 4,3,1000)
Odstránime oddelenie s ID 3 z tabuľky oddelení:

DELETE Departments WHERE ID = 3
Pozrime sa na údaje v tabuľke Zamestnanci:

VYBERTE * OD zamestnancov

ID názov narodeniny Email PositionID ID oddelenia ManagerID
1000 Ivanov I.I. 1955-02-19 NULOVÝ 2 1 NULOVÝ
1002 Sidorov S.S. 1976-06-07 NULOVÝ 1 2 1000

Ako vidíte, údaje pre oddelenie 3 boli vymazané aj z tabuľky Zamestnanci.

Voľba ON UPDATE CASCADE sa správa podobne, ale funguje, keď sa aktualizuje hodnota ID vo vyhľadávaní. Ak napríklad zmeníme ID pozície v adresári úloh, potom sa DepartmentID v tabuľke Zamestnanci aktualizuje na novú hodnotu ID, ktorú sme zadali v adresári. Ale v tomto prípade to jednoducho nebude možné preukázať, pretože stĺpec ID v tabuľke Oddelenia má možnosť IDENTITA, ktorá nám nedovolí vykonať nasledujúcu požiadavku (zmena ID oddelenia 3 na 30):

AKTUALIZÁCIA ID SADY oddelení = 30, KDE ID = 3
Hlavná vec je pochopiť podstatu týchto 2 možností ON DELETE CASCADE a ON UPDATE CASCADE. Tieto možnosti používam vo veľmi zriedkavých prípadoch a odporúčam vám, aby ste si ich použitie v obmedzení odkazovania dobre premysleli. ak omylom vymažete záznam z vyhľadávacej tabuľky, môže to viesť k veľkým problémom a vytvoriť reťazovú reakciu.

Obnovme oddelenie 3:

Udeliť povolenie na pridanie / zmenu hodnoty IDENTITY SET IDENTITY_INSERT Oddelenia ZAPNUTÉ VLOŽIŤ Oddelenia (ID, Názov) HODNOTY (3, N "IT") - zakázať pridávanie / zmenu hodnoty IDENTITY SET IDENTITY_INSERT Oddelenia VYPNUTÉ
Poďme úplne vyčistiť tabuľku Zamestnanci pomocou príkazu TRUNCATE TABLE:

SKRAŤ TABUĽKU Zamestnanci
A znova do nej znova načítajte údaje pomocou predchádzajúceho príkazu INSERT:

VLOŽTE HODNOTY zamestnancov (ID, Meno, Narodeniny, ID pozície, ID oddelenia, ID manažéra) (1000, N "Ivanov I.I.", "19550219", 2,1, NULL), (1001, N "Petrov P.P." , "19831203", 3 ,3,1003), (1002, N "Sidorov SS", "19760607", 1,2,1000), (1003, N "Andreev AA", "19820417" , 4,3,1000)

Poďme si to zhrnúť

V súčasnosti bolo do našich vedomostí pridaných niekoľko ďalších príkazov DDL:
  • Pridanie vlastnosti IDENTITY do poľa - umožňuje automaticky vyplniť toto pole (pole počítadla) pre tabuľku;
  • ALTER TABLE názov_tabuľky PRIDAŤ list_of_fields_with_characteristics - umožňuje pridávať nové polia do tabuľky;
  • ALTER TABLE názov_tabuľky PUSTIŤ STĹPEC zoznam_polí - umožňuje vymazať polia z tabuľky;
  • ALTER TABLE názov_tabuľky PRIDAŤ OBMEDZENIE názov_obmedzenia CUDZÍ KĽÚČ(polia) LITERATÚRA referenčná_tabuľka (polia) - umožňuje definovať vzťah medzi tabuľkou a referenčnou tabuľkou.

Ďalšie obmedzenia - UNIQUE, DEFAULT, CHECK

S obmedzením UNIQUE môžete povedať, že hodnoty pre každý riadok v danom poli alebo skupine polí musia byť jedinečné. V prípade tabuľky Zamestnanci môžeme takéto obmedzenie uložiť na pole Email. Stačí predvyplniť e-mail hodnotami, ak ešte nie sú definované:

AKTUALIZOVAŤ NASTAVENIE E-mailu zamestnancov = " [e-mail chránený]"WHERE ID = 1 000 AKTUALIZÁCIA NASTAVENIA E-mailu zamestnancov =" [e-mail chránený]"WHERE ID = 1 001 AKTUALIZÁCIA NASTAVENIA E-mailu zamestnancov =" [e-mail chránený]"WHERE ID = 1 002 AKTUALIZÁCIA NASTAVENIA E-mailu zamestnancov =" [e-mail chránený]"KDE ID = 1003
A teraz môžete na toto pole uložiť obmedzenie jedinečnosti:

ALTER TABLE Zamestnanci ADD CONSTRAINT UQ_Employees_Email UNIQUE (E-mail)
Používateľ teraz nebude môcť zadať rovnaký e-mail pre viacerých zamestnancov.

Obmedzenie jedinečnosti je zvyčajne pomenované nasledovne – najskôr nasleduje predpona „UQ_“, potom názov tabuľky a za podčiarkovníkom je názov poľa, na ktoré sa toto obmedzenie vzťahuje.

Ak by teda mala byť kombinácia polí v kontexte riadkov tabuľky jedinečná, uvádzame ich oddelené čiarkami:

ALTER TABLE table_name ADD CONSTRAINT názov_obmedzenia UNIQUE (pole1, pole2, ...)
Pridaním obmedzenia DEFAULT do poľa môžeme nastaviť predvolenú hodnotu, ktorá bude nahradená, ak pri vkladaní nového záznamu toto pole nie je uvedené v zozname polí príkazu INSERT. Toto obmedzenie je možné nastaviť priamo pri vytváraní tabuľky.

Pridajme nové pole Dátum schôdzky do tabuľky Zamestnanci a nazvime ho HireDate a povedzme, že predvolená hodnota pre toto pole je aktuálny dátum:

ALTER TABLE Zamestnanci PRIDAŤ dátum prenájmu NOT NULL DEFAULT SYSDATETIME ()
Alebo ak stĺpec HireDate už existuje, môžete použiť nasledujúcu syntax:

ALTER TABLE Zamestnanci PRIDAŤ PREDCHOZÝ SYSTÉMDATETIME () PRE HireDate
Tu som neuviedol názov obmedzenia, keďže v prípade DEFAULT som bol toho názoru, že to nie je až také kritické. Ale ak to urobíte priateľsky, potom si myslím, že by ste nemali byť leniví a mali by ste dať normálne meno. Toto sa vykonáva takto:

ALTER TABLE Zamestnanci PRIDAŤ OBMEDZENIE DF_Employees_HireDate PREDVOLANÝ SYSDATETIME () FOR HireDate
Keďže tento stĺpec predtým neexistoval, pri jeho pridaní do každého záznamu sa do poľa HireDate vloží aktuálna hodnota dátumu.

Pri pridávaní nového záznamu sa automaticky vloží aj aktuálny dátum, samozrejme, ak ho výslovne nenastavíme, t.j. nebudú uvedené v zozname stĺpcov. Ukážme si to na príklade bez zadania poľa HireDate v zozname pridaných hodnôt:

INSERT Zamestnanci (ID, meno, e-mail) VALUES (1004, N "Sergeev S.S.", " [e-mail chránený]")
Pozrime sa, čo sa stalo:

VYBERTE * OD zamestnancov

ID názov narodeniny Email PositionID ID oddelenia ManagerID HireDate
1000 Ivanov I.I. 1955-02-19 i [e-mail chránený] 2 1 NULOVÝ 2015-04-08
1001 Petrov P.P. 1983-12-03 [e-mail chránený] 3 4 1003 2015-04-08
1002 Sidorov S.S. 1976-06-07 [e-mail chránený] 1 2 1000 2015-04-08
1003 Andreev A.A. 1982-04-17 [e-mail chránený] 4 3 1000 2015-04-08
1004 Sergeev S.S. NULOVÝ [e-mail chránený] NULOVÝ NULOVÝ NULOVÝ 2015-04-08

Obmedzenie CHECK sa používa, keď je potrebné skontrolovať hodnoty vložené do poľa. Toto obmedzenie uveďme napríklad na pole osobného čísla, čo je identifikátor (ID) zamestnanca. Pomocou tohto obmedzenia povedzme, že personálne čísla by mali mať hodnotu medzi 1000 a 1999:

ALTER TABLE Zamestnanci PRIDAŤ OBMEDZENIE CK_Employees_ID CHECK (ID MEDZI 1000 A 1999)
Obmedzenie sa zvyčajne nazýva rovnako, najskôr príde predpona „CK_“, potom názov tabuľky a názov poľa, na ktoré je toto obmedzenie uložené.

Skúsme vložiť neplatnú položku, aby sme skontrolovali, či obmedzenie funguje (mali by sme dostať zodpovedajúcu chybu):

INSERT HODNOTY zamestnancov (ID, E-mail) (2000, " [e-mail chránený]")
Teraz zmeňte vloženú hodnotu na 1500 a uistite sa, že záznam je vložený:

INSERT HODNOTY zamestnancov (ID, E-mail) (1500, " [e-mail chránený]")
Môžete tiež vytvoriť obmedzenia UNIQUE a CHECK bez zadania názvu:

ALTER TABLE Zamestnanci PRIDAŤ JEDINEČNÝ (E-mail) ALTER TABLE Zamestnanci ADD CHECK (ID 1000 AŽ 1999)
Ale to nie je dobrý postup a je lepšie špecifikovať názov obmedzenia explicitne, pretože aby ste na to prišli neskôr, čo bude náročnejšie, budete musieť objekt otvoriť a zistiť, za čo je zodpovedný.

Pri dobrom mene sa mnohé informácie o obmedzení dajú spoznať priamo podľa jeho názvu.

A preto všetky tieto obmedzenia môžu byť vytvorené okamžite pri vytváraní tabuľky, ak ešte neexistuje. Vymažeme tabuľku:

DROP TABLE Zamestnanci
A znova ho vytvoríme so všetkými vytvorenými obmedzeniami pomocou jedného príkazu CREATE TABLE:

VYTVORIŤ TABUĽKU Zamestnanci (ID int NIE JE NULL, Meno nvarchar (30), Dátum narodenia, E-mail nvarchar (30), ID pozície int, ID oddelenia int, Dátum náboru NOT NULL DEFAULT SYSDATETIME (), - pre DEFAULT hodím výnimku CONSTRAINT PK_Employees PRIMARY KEY (ID), OBMEDZENIE FK_Employees_DepartmentID CUDZÍ KĽÚČ (ID oddelenia) REFERENCIE Oddelenia (ID), OBMEDZENIE FK_Employees_PositionID CUDZÍ KĽÚČ (ID pozície) REFERENCIE Pozície (ID), OBMEDZENIE UQ_Employees_Email JEDINEČNÝ E-mail

VLOŽTE HODNOTY zamestnancov (ID, meno, narodeniny, e-mail, ID pozície, ID oddelenia) (1 000, N "Ivanov I.I.", "19550219", " [e-mail chránený]", 2,1), (1001, N" Petrov P.P. "," 19831203 "," [e-mail chránený]", 3,3), (1002, N" Sidorov S.S. "," 19760607 "," [e-mail chránený]", 1,2), (1003, N" Andreev A.A. "," 19820417 "," [e-mail chránený]",4,3)

Trochu o indexoch vytvorených pri vytváraní obmedzení PRIMARY KEY a UNIQUE

Ako môžete vidieť na obrázku vyššie, pri vytváraní obmedzení PRIMARY KEY a UNIQUE sa automaticky vytvorili indexy s rovnakými názvami (PK_Employees a UQ_Employees_Email). V predvolenom nastavení je index pre primárny kľúč vytvorený ako ZAHRNUTÝ a pre všetky ostatné indexy ako NEZAHRNUTÝ. Treba povedať, že nie všetky DBMS majú koncept klastrovaného indexu. Tabuľka môže mať iba jeden CLUSTERED index. CLUSTERED - znamená, že záznamy tabuľky budú zoradené podľa tohto indexu, môžete tiež povedať, že tento index má priamy prístup ku všetkým údajom tabuľky. Toto je takpovediac hlavný index tabuľky. Zhruba je to index priskrutkovaný k stolu. Klastrovaný index je veľmi výkonný nástroj, ktorý vám môže pomôcť optimalizovať vaše dotazy, zatiaľ na to pamätajte. Ak chceme povedať, že klastrovaný index sa nemá použiť v primárnom kľúči, ale v inom indexe, potom pri vytváraní primárneho kľúča musíme zadať možnosť NONCLUSTERED:

ALTER TABLE názov_tabuľky PRIDAŤ OBMEDZENIE názov_obmedzenia PRIMÁRNY KĽÚČ NEZAHRNUTÝ (pole1, pole2, ...)
Urobme napríklad index obmedzení PK_Employees nezhlukovaný a index obmedzenia UQ_Employees_Email zoskupený. V prvom rade odstránime tieto obmedzenia:

ALTER TABLE Zamestnanci DROP CONSTRAINT PK_Employees ALTER TABLE Zamestnanci DROP CONSTRAINT UQ_Employees_Email
Teraz ich poďme vytvoriť s možnosťami KLUSTEROVANÉ a NEZAHRNUTÉ:

ALTER TABLE Zamestnanci ADD CONSTRAINT PK_Employees PRIMÁRNY KĽÚČ NEZAHRNUTÝ (ID) ALTER TABLE Zamestnanci PRIDAŤ OBMEDZENIE UQ_Employees_Email UNIQUE CLUSTERED (E-mail)
Teraz, po načítaní z tabuľky Zamestnanci, vidíme, že záznamy sú zoradené podľa zoskupeného indexu UQ_Employees_Email:

VYBERTE * OD zamestnancov

ID názov narodeniny Email PositionID ID oddelenia HireDate
1003 Andreev A.A. 1982-04-17 [e-mail chránený] 4 3 2015-04-08
1000 Ivanov I.I. 1955-02-19 [e-mail chránený] 2 1 2015-04-08
1001 Petrov P.P. 1983-12-03 [e-mail chránený] 3 3 2015-04-08
1002 Sidorov S.S. 1976-06-07 [e-mail chránený] 1 2 2015-04-08

Predtým, keď bol index PK_Employees zoskupeným indexom, boli záznamy štandardne zoradené podľa ID.

Ale v tomto prípade je to len príklad, ktorý ukazuje podstatu klastrovaného indexu, pretože s najväčšou pravdepodobnosťou sa do tabuľky Zamestnanci budú odosielať dotazy pomocou poľa ID a v niektorých prípadoch môže samo fungovať ako referenčná kniha.

Pri vyhľadávaní sa zvyčajne odporúča, aby bol klastrovaný index vytvorený na primárnom kľúči v žiadostiach často odkazujeme na identifikátor adresára, aby sme získali napríklad meno (pozícia, oddelenie). Tu si pripomenieme, čo som napísal vyššie, že klastrovaný index má priamy prístup k riadkom tabuľky a z toho vyplýva, že môžeme získať hodnotu ľubovoľného stĺpca bez ďalšej réžie.

Na najčastejšie vzorkované polia je výhodné aplikovať zhlukovaný index.

Niekedy je kľúč vytvorený v tabuľkách náhradným poľom, v takom prípade je užitočné uložiť možnosť CLUSTERED indexu pre vhodnejší index a zadať možnosť NONCLUSTERED pri vytváraní náhradného primárneho kľúča.

Poďme si to zhrnúť

V tejto fáze sme sa zoznámili so všetkými typmi obmedzení v ich najjednoduchšej forme, ktoré sa vytvárajú príkazom v tvare "ALTER TABLE názov_tabuľky ADD CONSTRAINT názov_obmedzenia ...":
  • PRIMÁRNY KĽÚČ- primárny kľúč;
  • CUDZÍ KĽÚČ- nastavenie prepojení a kontrola referenčnej integrity údajov;
  • UNIKÁTNY- umožňuje vytvárať jedinečnosť;
  • KONTROLA- umožňuje správnosť zadaných údajov;
  • DEFAULT- umožňuje nastaviť predvolenú hodnotu;
  • Za zmienku tiež stojí, že všetky obmedzenia je možné odstrániť pomocou príkazu „ ALTER TABLE názov_tabuľky OBMEDZENIE DROP názov_obmedzenia ".
Čiastočne sme sa dotkli aj témy indexov a analyzovali sme koncept klastra ( KLUSTROVANÝ) a nezhlukovaný ( NEZAHRNUTÝ) index.

Vytvárajte samostatné indexy

Sebadôvera sa tu vzťahuje na indexy, ktoré nie sú vytvorené pre obmedzenie PRIMÁRNY KĽÚČ alebo UNIKÁTNE.

Indexy podľa poľa alebo polí možno vytvoriť pomocou nasledujúceho príkazu:

CREATE INDEX IDX_Employees_Name ON Zamestnanci (meno)
Tiež tu môžete určiť možnosti CLUSTERED, NENCLUSTERED, UNIQUE a tiež môžete určiť smer triedenia pre každé jednotlivé pole ASC (predvolene) alebo DESC:

VYTVORIŤ JEDINEČNÝ NEZAHRNUTÝ INDEX UQ_Employees_EmailDesc ON Zamestnanci (E-mail DESC)
Pri vytváraní indexu bez klastrov možno uvoľniť možnosť NONCLUSTERED, pretože je predvolená a zobrazuje sa tu jednoducho na označenie polohy možnosti ZAHRNUTÉ alebo NEZAHRNUTÉ v príkaze.

Index môžete odstrániť pomocou nasledujúceho príkazu:

DROP INDEX IDX_Employees_Name ON Zamestnanci
Jednoduché indexy, ako sú obmedzenia, možno vytvoriť v kontexte príkazu CREATE TABLE.

Napríklad znova zhodíme tabuľku:

DROP TABLE Zamestnanci
A znova ho vytvoríme so všetkými vytvorenými obmedzeniami a indexmi pomocou jedného príkazu CREATE TABLE:

VYTVORIŤ TABUĽKU Zamestnanci (ID int NOT NULL, Meno nvarchar (30), Dátum narodenia, E-mail nvarchar (30), PositionID int, DepartmentID int, Dátum náboru NOT NULL CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETIME (), ManagerID int, PRIERMARYINT OBMEDZENIE FK_Employees_DepartmentID CUDZÍ KĽÚČ (ID oddelenia) REFERENCIE Oddelenia (ID), OBMEDZENIE FK_Employees_PositionID CUDZÍ KĽÚČ (ID pozície) REFERENCES Pozície (ID), OBMEDZENIE FK_Employees_ManagerID)01 INDEX IDENTIFIKÁTOR CUDZÍHO KĽÚČ (IDme INDEX 1010CHECKE)
Nakoniec vložíme do tabuľky našich zamestnancov:

VLOŽTE HODNOTY zamestnancov (ID, Meno, Narodeniny, E-mail, ID pozície, ID oddelenia, ID manažéra) (1000, N "Ivanov I.I.", "19550219", " [e-mail chránený]", 2,1, NULL), (1001, N" Petrov P.P. "," 19831203 "," [e-mail chránený]", 3,3,1003), (1002, N" Sidorov S.S. "," 19760607 "," [e-mail chránený]", 1,2,1000), (1003, N" Andreev A.A. "," 19820417 "," [e-mail chránený]",4,3,1000)
Okrem toho stojí za zmienku, že hodnoty môžete zahrnúť do nezhlukovaného indexu tak, že ich zadáte do poľa INCLUDE. Tie. v tomto prípade bude index INCLUDE trochu pripomínať zoskupený index, len teraz index nie je priskrutkovaný k tabuľke, ale potrebné hodnoty sú priskrutkované k indexu. V súlade s tým môžu takéto indexy výrazne zlepšiť výkon výberových dotazov (SELECT), ak sú v indexe prítomné všetky uvedené polia, potom nemusí byť vôbec potrebné pristupovať k tabuľke. To však prirodzene zvyšuje veľkosť indexu, pretože hodnoty uvedených polí sú v indexe duplikované.

Výňatok z MSDN. Všeobecná syntax príkazu na vytváranie indexov

VYTVORIŤ [JEDINEČNÉ] [ZOSTAVENÉ | NEZAHRNUTÉ] INDEX index_name ZAPNUTÝ (stĺpec [ASC | DESC] [, ... n]) [INCLUDE (názov_stĺpca [, ... n])]

Poďme si to zhrnúť

Indexy môžu zvýšiť rýchlosť získavania údajov (SELECT), ale indexy spomaľujú rýchlosť úpravy údajov tabuľky, pretože po každej úprave bude systém musieť prebudovať všetky indexy pre konkrétnu tabuľku.

V každom prípade sa odporúča nájsť optimálne riešenie, zlatú strednú cestu, aby výkon vzorkovania aj úprava údajov boli na správnej úrovni. Stratégia vytvárania indexov a ich počet môže závisieť od mnohých faktorov, napríklad od toho, ako často sa menia údaje v tabuľke.

Záver DDL

Ako vidíte, DDL nie je až také zložité, ako by sa na prvý pohľad mohlo zdať. Tu sa mi podarilo ukázať takmer všetky jeho základné konštrukcie, len s použitím troch tabuliek.

Hlavná vec je pochopiť podstatu a zvyšok je vecou praxe.

Veľa šťastia s týmto úžasným jazykom s názvom SQL.

Teoretické základy SQL Server 2012 DBMS sú jednoduché a dostupné.Uvedená inštalácia, konfigurácia a podpora MS SQL Server 2012. Je popísaný jazyk pre manipuláciu s dátami Transact-SQL. Zahŕňa vytváranie databázy, úpravu tabuliek a ich obsahu, dotazy, indexy, zobrazenia, spúšťače, uložené procedúry a funkcie definované používateľom.
Zobrazená je implementácia zabezpečenia pomocou autentifikácie, šifrovania a autorizácie. Pozornosť je venovaná automatizácii úloh správy DBMS. Zvažuje sa vytváranie záloh dát a vykonávanie obnovy systému. Popisuje služby Microsoft Analysis Services, Microsoft Reporting Services a ďalšie nástroje obchodnej analýzy. Počíta sa s technológiou práce s XML dokumentmi, správou priestorových dát, fulltextovým vyhľadávaním a mnohými ďalšími. Pre začínajúcich programátorov.

V modernom svete majú informácie najvyššiu hodnotu, no rovnako dôležité je vedieť tieto informácie spravovať. Táto kniha sa zameriava na dotazovací jazyk SQL a správu databáz. Zahŕňa všetko od základných dopytov až po zložité manipulácie pomocou zjednotení, poddotazov a transakcií. Ak sa snažíte pochopiť organizáciu a správu databáz, táto kniha bude vynikajúcim praktickým sprievodcom a poskytne vám všetky potrebné nástroje. Charakteristickým rysom tejto publikácie je jedinečný spôsob prezentácie materiálu, ktorý odlišuje sériu O \ 'Reilly Head First od mnohých nudných kníh venovaných programovaniu.

Táto kniha vám ukáže, ako pracovať s príkazmi a príkazmi SQL, vytvárať a konfigurovať relačné databázy, načítavať a upravovať databázové objekty, spúšťať výkonné dotazy, zvyšovať výkon a vytvárať bezpečnosť. Naučíte sa používať DDL príkazy a API, integrovať XML a Java skriptovanie, používať SQL objekty, vytvárať webové servery, pracovať so vzdialeným prístupom a vykonávať distribuované transakcie.
V tejto knihe nájdete informácie, ako je práca s databázami v pamäti, streamingové a vstavané databázy, databázy pre mobilné a vreckové zariadenia a mnohé ďalšie.

SQL for Mortals je úplný úvod do štruktúrovaného dotazovacieho jazyka, napísaný špeciálne pre začiatočníkov.

Ak ste nováčikom v správe databáz, táto kniha vás naučí, ako jednoducho a plynulo pracovať s SQL pomocou jednoduchých dotazov a zložitých operácií. Na zvládnutie SQL:

- Pochopte význam konceptov správy databáz pomocou stručného a jednoduchého úvodu do relačných databáz.
- Postupujte podľa týchto pokynov na používanie základných príkazov SQL na vyhľadávanie informácií v tabuľkách údajov a prácu s nimi. Naučte sa vyberať a sumarizovať údaje, ako aj šikovne ich spravovať.
- Efektívne pracujte so zloženými dátovými tabuľkami aplikovaním pokročilých techník dotazovania na viac ako jednu tabuľku naraz, vytváraním zložitých dotazov a poddotazov.
- Vytvorte nové dátové listy pre maloobchodné obchodné aplikácie. Naučte sa dôležité princípy efektívneho návrhu databázy a techniky integrity a ochrany údajov.
- Naučte sa aplikovať SQL s programovacími jazykmi pomocou špeciálnej kapitoly o programátoroch.

SQL je starší ako väčšina z nás, takže nemôžem tvrdiť, že prostredníctvom tejto knihy sprostredkúvam nejaké výnimočné veci. Čo robí tento titul jedinečným, je jeho štíhla veľkosť. Ak hľadáte skutočne kompaktného praktického sprievodcu SQL, potom je táto kniha určená práve vám. Pre začiatočníkov som sa pokúsil obmedziť oceán na vedro, aby som ich vybavil znalosťami SQL v čo najkratšom čase. Jazyk SQL je príliš objemný a odhalenie každého aspektu tohto obrovského jazyka je veľmi únavná úloha. Bez ohľadu na najmenej využívané funkcie je táto kniha vydaná, aby sa zamerala na operatívnejšie oblasti jazyka. Má vám pomôcť rýchlo sa naučiť SQL sami. Nasleduje výukový prístup, v ktorom sú k dispozícii stovky praktických cvičení doplnených o ilustrácie, ktoré vás naučí SQL v krátkom čase. Kniha bez akéhokoľvek preháňania odhalí SQL v rekordnom čase. Kniha explicitne pokrýva bezplatnú platformu DBMS číslo 1 na svete na odhalenie SQL: Oracle Database Express Edition. Vybral som si Oracle XE, pretože je bezplatný na vývoj, nasadenie a distribúciu; rýchle sťahovanie; a jednoduché na spravovanie.

Začiatok Oracle PL / SQL vám umožní začať používať vstavaný jazyk, ktorý musí poznať každý vývojár Oracle a správca databáz. Oracle Database je preplnená vstavanými funkciami aplikácií, ktoré sú na používanie zadarmo, a PL / SQL je vašou vstupenkou, aby ste sa naučili a používali tieto funkcie z vášho vlastného kódu. S ním môžete centralizovať obchodnú logiku v databáze, môžete zložiť aplikačnú logiku a môžete automatizovať úlohy správy databáz a aplikácií.

Autor Don Bales poskytuje v Beginning Oracle PL / SQL rýchly a príkladmi nabitý tutoriál. Učte sa z Donových rozsiahlych skúseností a objavte najbežnejšie používané aspekty PL/SQL bez toho, aby ste strácali čas na nejasné a zastarané funkcie.

Kniha „SQL. Užívateľská biblia “je jedinečná v tom, že každá kapitola porovnáva implementáciu štandardu dotazovacieho jazyka SQL v troch popredných DBMS. Výsledkom je komplexná a praktická príručka pre používateľov databáz, od začiatočníkov až po profesionálov. Táto kniha o SQL pohodlne spája teóriu s praxou, poskytuje popis nových technológií a pomôže vám pochopiť mnohé nuansy štandardu dotazovacieho jazyka SQL a jeho implementácií. Dá sa použiť ako referencia – akýsi desktopový manuál.
- Naučte sa základy dotazovacieho jazyka SQL a relačných databáz
- Majster práce s tabuľkami, pohľadmi, sekvenciami a inými databázovými objektmi
- Naučte sa používať transakcie a zámky vo viacužívateľskom prostredí
- Preskúmajte funkcie, ktoré ponúka štandard SQL a traja poprední predajcovia databáz
- Naučte sa pristupovať k metaúdajom a implementovať ochranu databázy
- Preskúmajte ďalšie témy: Integrácia SQL do XML, OLAP Business Intelligence a ďalšie

Ak máte základné znalosti HTML, potom sa s pomocou Robina Nixona, skúseného vývojára a autora mnohých najpredávanejších kníh o webmasteringu, môžete ľahko naučiť, ako vytvárať dynamické stránky, ktoré sa vyznačujú vysokou úrovňou interakcie používateľa.
Objavte kombináciu PHP a MySQL, zistite, ako uľahčujú vytváranie moderných webových stránok a pridajte do týchto technológií silu javascriptu na vytváranie špičkových aplikácií.
Tento tutoriál sa zaoberá každou technológiou samostatne, ukazuje vám, ako skombinovať PHP, MySQL a JavaScript do koherentného celku, a poskytuje úvod do najmodernejších konceptov webového programovania. Použite podrobné príklady a kontrolné zoznamy v každej kapitole, ktoré vám pomôžu precvičiť si to, čo ste sa naučili.

Táto príručka vám pomôže:
- ovládať základy PHP a objektovo orientovaného programovania;
- dôkladne si preštudovať MySQL, počnúc štruktúrou databáz a končiac prípravou zložitých dopytov;
- vytvárať webové stránky pomocou PHP a MySQL na kombinovanie formulárov a iných HTML kompozitov;
- naučiť sa javascript, od funkcií a spracovania udalostí až po prístup k modelu objektu dokumentu (DOM);
- používať knižnice a softvérové ​​balíky vrátane systému Smarty, softvérového úložiska PEAR a Yahoo! Používateľské rozhranie;
- uskutočňujte hovory Ajax a premeňte svoju webovú stránku na vysoko dynamické informačné prostredie;
- nahrávať súbory a obrázky na webovú stránku a pracovať s nimi, kontrolovať údaje zadané používateľom;
- zabezpečiť bezpečnosť svojich aplikácií.

Dopyty nefungujú dostatočne rýchlo? Zaujíma vás funkcia databázy v pamäti v roku 2014? Už vás nebavia telefonáty od frustrovaných používateľov? Kniha Granta Fritcheyho SQL Server Query Performance Tuning je odpoveďou na vaše problémy s výkonom dotazov na SQL Server. Kniha je prepracovaná tak, aby zahŕňala najnovšie funkcie a techniky optimalizácie výkonu, najmä vrátane novo pridaných funkcií databázy v pamäti, predtým známych pod kódovým názvom Project Hekaton. Táto kniha poskytuje nástroje, ktoré potrebujete na to, aby ste k svojim otázkam pristupovali s ohľadom na výkon.

Ladenie výkonu SQL Server Query vás prevedie pochopením príčin slabého výkonu, ako ich identifikovať a ako ich opraviť. Naučíte sa byť proaktívni pri stanovovaní základných línií výkonu pomocou nástrojov, ako sú Performance Monitor a Extended Events. Naučíte sa rozpoznať prekážky a zneškodniť ich skôr, než zazvoní telefón. Dozviete sa aj niekoľko rýchlych riešení, ale dôraz je kladený na navrhovanie pre výkon a jeho správne fungovanie a na predchádzanie problémom skôr, ako k nim dôjde. Potešte svojich používateľov. Stíšte ten zvoniaci telefón. Uveďte princípy a lekcie z ladenia výkonu SQL Server Query do praxe ešte dnes.

Zahŕňa funkcie v pamäti z projektu Hekaton
Pomáha stanoviť základné línie výkonu a monitorovať ich
Návody na riešenie problémov a odstraňovanie prekážok, ktoré frustrujú používateľov
Čo sa naučíte
- Stanovte základné línie výkonu a monitorujte ich
- Rozpoznať a odstrániť úzke miesta vedúce k pomalému výkonu
- V prípade potreby nasaďte rýchle opravy a sledujte dlhodobé riešenia
- Implementujte osvedčené postupy v T-SQL, aby ste minimalizovali riziko výkonu
- Navrhnite výkon, ktorý potrebujete, prostredníctvom starostlivého návrhu dopytov a indexov
- Využite najnovšie funkcie optimalizácie výkonu v SQL Server 2014
- Pochopte nové funkcie databázy v pamäti, ktoré boli predtým kódovo označené ako Project Hekaton

Kniha SQL za 10 minút ponúka jednoduché a praktické riešenia pre tých, ktorí chcú rýchlo dosiahnuť výsledky. Po absolvovaní všetkých 22 lekcií, z ktorých každá nezaberie viac ako 10 minút, sa naučíte všetko potrebné na precvičenie SQL. Príklady v tejto knihe sú vhodné pre IBM DB2, Microsoft Access, Microsoft SQL Server, MySQL, Oracle, PostgreSQL, SQLite, MariaDB a Apache OpenOffice Base. Vizuálne príklady vám pomôžu pochopiť, ako sú SQL príkazy štruktúrované. Tipy poskytujú skratky k riešeniam. Varovania vám pomôžu vyhnúť sa bežným chybám. Poznámky poskytnú dodatočné objasnenie.

V tomto článku som sa pokúsil spojiť všetky hlavné body Transact-SQL pomôcť začínajúcim databázovým programátorom naučiť sa jazyk a písať dotazy a aplikácie Transact-SQL.

Programovanie databáz a konkrétnejšie databázy so systémom Microsoft SQL Server sa stali veľmi populárnymi, a preto som sa rozhodol vytvoriť akúsi minipríručku, v ktorej nájdete všetky hlavné body s vysvetleniami a samozrejme s príkladmi. .

Na precvičenie písania SQL dotazov alebo vytvárania databázových objektov môžete použiť bezplatnú edíciu SQL Server Express, v čase zostavovania referencie je najnovšia verzia Microsoft SQL Server 2014 Express.

Referencia Transact-SQL pre začiatočníkov - popis referencie

Táto príručka bude vyzerať takto, najprv uvediem malý obsah s navigáciou, potom začne samotná príručka, ku každej položke budú komentáre, vysvetlivky a príklady. Tiež, ak sme už podrobne preskúmali alebo použili niekde v materiáloch na našej stránke tento alebo ten predmet alebo akciu, samozrejme, dám odkazy, aby ste videli podrobné príklady alebo ako použiť túto alebo inú akciu v praxi. ..

Keďže obsiahnuť úplne všetko sa jednoducho nedá, tak sa nečudujte, že ste tu niečo nenašli. Ešte raz opakujem, že táto príručka bola vytvorená pre začínajúcich programátorov Transact-SQL, ako aj pre jednoduchých správcov, ktorí pravidelne potrebujú sťahovať nejaké údaje zo servera SQL.

Pre podrobné štúdium jazyka T-SQL odporúčam prečítať si moju knihu “The T-SQL Programmer's Way. Návod na jazyk Transact-SQL “, v ktorom hovorím o jazyku T-SQL čo najpodrobnejšie, s veľkým množstvom príkladov.

Databáza

Dokonca aj začínajúci programátor Transact-SQL potrebuje vedieť, ako sa vytvára databáza alebo ako sa menia jej vlastnosti, takže predtým, ako sa pozrieme na tabuľky, pohľady, funkcie a čokoľvek iné, prejdime si proces vytvárania, úpravy a zrušenia Transact-SQL. databázy.

Tvorba

Ak chcete vytvoriť databázu, musíte spustiť nasledujúci dotaz:

Test CREATE DATABASE

kde test je názov databázy.

Podrobnejšie o vytváraní databázy na SQL serveri sme si povedali v článku Ako vytvoriť databázu v MS SQL 2008

Odstraňuje sa

Ak potrebujete vymazať databázu, môžete použiť dotaz:

DROP DATABASE test

Zmena

Na zmenu parametrov databázy môžete použiť grafické rozhranie Management Studio, v ktorom sú všetky parametre podrobne popísané, alebo môžete posielať dopyty ALTER DATABASE, napríklad pre povolenie automatickej kompresie testovacej databázy, použite nasledujúci dotaz

ALTER DATABASE test SET AUTO_SHRINK ON; --A na vypnutie testu ALTER DATABASE SET AUTO_SHRINK OFF;

Dúfam, že je to jasné, príkaz ALTER DATABASE zmeniť, otestovať názov databázy na zmenu, príkaz SET indikujúci, že budeme meniť parametre databázy, AUTO_SHRINK samotný parameter, ON / OFF hodnotu parametra.

Typy údajov

Najbežnejšie a najčastejšie používané

Presné čísla

  • tinyint - 1 bajt
  • smallint - 2 bajty
  • int - 4 bajty
  • bigint - 8 bajtov
  • číselné a desiatkové ( pevná presnosť a typ mierky)
  • peniaze - 8 bajtov
  • malé peniaze - 4 bajty

Približné čísla

  • float [(n)] - veľkosť závisí od n (n môže byť od 1 do 53, predvolená hodnota je 53)
  • skutočné - 4 bajty

dátum a čas

  • dátum - dátum
  • čas - čas
  • datetime je dátum, ktorý obsahuje čas dňa so zlomkami sekundy v 24-hodinovom formáte.

Reťazce znakov

  • char [(n)] je reťazec s pevnou dĺžkou, kde n je dĺžka reťazca (od 1 do 8000). Veľkosť úložiska je n bajtov.
  • varchar [(n | max)] je reťazec s pevnou dĺžkou, kde n je dĺžka reťazca (od 1 do 8000). Ak zadáte max, potom maximálna veľkosť úložiska bude 2 ^ 31-1 bajtov (2 GB), a ak zadáte n, potom skutočná dĺžka vstupných údajov plus 2 bajty.
  • text - dáta reťazca s premenlivou dĺžkou, maximálna veľkosť 2 147 483 647 bajtov (2 GB).
  • nchar [(n)] je reťazec Unicode s pevnou dĺžkou, kde n je dĺžka reťazca (od 1 do 4000). Veľkosť úložiska je dvojnásobkom hodnoty n v bajtoch
  • nvarchar [(n | max)] je reťazec Unicode s pevnou dĺžkou, kde n je dĺžka reťazca (od 1 do 4000). Ak zadáte max, maximálna veľkosť úložiska je 2 ^ 31-1 bajtov (2 GB), a ak n, potom dvojnásobok skutočnej dĺžky vstupu plus 2 bajty.
  • ntext - dáta reťazca s premenlivou dĺžkou s maximálnou dĺžkou reťazca 1 073 741 823 bajtov.

Binárne dáta

  • binárne [(n)] - binárne dáta s pevnou dĺžkou, veľkosťou n bajtov, kde n je hodnota od 1 do 8000. Veľkosť úložiska je n bajtov.
  • varbinary [(n | max)] - binárne dáta s premenlivou dĺžkou, kde n môže byť v rozsahu od 1 do 8000. Ak zadáte max, potom bude maximálna veľkosť úložiska 2 ^ 31-1 bajtov (2 GB). Keď je zadané n, veľkosť úložiska je skutočná dĺžka vstupných údajov plus 2 bajty.
  • obrázok - binárne dáta s premenlivou dĺžkou, v rozsahu od 0 do 2 ^ 31 - 1 (2 147 483 647) bajtov.

Iné

  • xml - ukladanie xml údajov. Podrobne sme sa zaoberali materiálom Transact-sql - práca s xml, a ak vôbec neviete, čo je XML, potom sme o tom hovorili v článku Základy XML pre začiatočníkov.
  • tabuľka - uloženie výslednej sady riadkov.

Tabuľky

Príkladov na vytváranie tabuliek je na tejto stránke dosť, keďže takmer v každom článku týkajúcom sa SQL uvádzam príklad vytvorenia testovacej tabuľky, no na upevnenie vedomostí si vytvorte, upravte a vymažte testovaciu tabuľku. Poďme sa pozrieť na to, ako sú nastavené dátové typy polí v tabuľkách Transact-SQL.

Tvorba

CREATE TABLE test_table (IDENTITA (1,1) NIE JE NULL, - identifikátor, celé číslo int, hodnoty NULL nie sú povolené (50) NULL, --NAME, dĺžka reťazca 50 znakov, hodnoty NULL sú povolené NULL, -- súčet, približná číselná hodnota, hodnoty NULL sú povolené NULL, --dátum a čas, hodnoty NULL sú povolené (100) NULL - reťazec 100 znakov, hodnoty NULL sú povolené) ON GO

Pridanie stĺpca

ALTER TABLE test_table ADD prosto_pole numeric (18, 0) NULL
  • test_table je názov tabuľky;
  • add - príkaz na pridanie;
  • prosto_pole - názov stĺpca;
  • pole numeric (18, 0) - typ údajov nového stĺpca;
  • NULL je parameter, ktorý znamená, že do tohto poľa možno uložiť hodnotu NULL.

Zmena typu údajov

Zmeňme dátový typ nového poľa, ktoré sme práve vytvorili (prosto_pole) z numerického (18, 0) na bigint a zväčšme dĺžku poľa komentára na 300 znakov.

ALTER TABLE test_table ALTER COLUMN prosto_pole bigint; ALTER TABLE test_table ALTER COLUMN komentár varchar (300);

Poznámka! SQL server nebude môcť zmeniť typ údajov, ak prevod hodnôt v týchto poliach nie je možný, v takom prípade budete musieť odstrániť stĺpec so všetkými údajmi a znova pridať alebo vymazať všetky údaje v tomto lúka.

Odstránenie stĺpca

Ak chcete odstrániť konkrétny stĺpec, použite príkaz drop, napríklad na odstránenie poľa prosto_pole použite nasledujúci dotaz

ALTER TABLE test_table DROP COLUMN prosto_pole

Zhodiť stôl

Aby sme vymazali tabuľku, napíšeme si taký jednoduchý dotaz, kde test_table je tabuľka, ktorú treba vymazať

DROP TABLE test_table

zastupovanie

Veľmi užitočným objektom v databáze je pohľad (VIEW) alebo podľa nás len pohľad. Ak niekto nevie, potom pohľad je druh uloženého dotazu, ku ktorému je možné pristupovať rovnako ako k tabuľke. Vytvorme pohľad založený na testovacej tabuľke test_table a predpokladajme, že veľmi často potrebujeme napísať dotaz, napríklad podľa podmienky je súčet viac ako 1000, takže aby sme tento dotaz nepísali zakaždým, keď budeme písať pohľad raz a neskôr sa o ňom budeme odvolávať.

Tvorba

CREATE VIEW test_view AS SELECT id, fio, comment FROM test_table WHERE summa> 1000 GO

Príklad prístupu k pohľadu:

SELECT * FROM test_view

Zmena

ALTER VIEW test_view AS SELECT id, fio, comment FROM test_table WHERE summa> 1500 GO

Odstraňuje sa

DROP VIEW test_view

Systémové pohľady

V MS SQL Server DBMS existujú systémové objekty, ktoré môžu poskytnúť niekedy celkom užitočné informácie, napríklad systémové pohľady. Teraz budeme analyzovať niekoľko takýchto reprezentácií. Môžete na ne odkazovať rovnakým spôsobom ako na bežné zobrazenia ( napríklad vyberte * v zobrazení názvu)

  • sys.all_objects - obsahuje všetky databázové objekty vrátane takých parametrov ako: názov, typ, dátum vytvorenia a iné.
  • sys.all_columns - vráti všetky stĺpce tabuľky s ich podrobnými charakteristikami.
  • sys.all_views - Vráti všetky zobrazenia databázy.
  • sys.tables - všetky tabuľky v databáze.
  • sys.triggers - Všetky spúšťače v databáze.
  • sys.databases - všetky databázy na serveri.
  • sys.sysprocesses - aktívne procesy, relácie v databáze.

V skutočnosti je ich veľa, takže sa nedá všetko rozobrať. Ak chcete vidieť, ako sa dajú využiť v praxi, tak to sme už urobili napríklad v materiáloch

Funkcie

MS SQL server umožňuje vytvárať funkcie, ktoré vrátia určité údaje, inými slovami, používateľ si môže funkciu napísať sám a následne ju použiť, napríklad keď je potrebné získať hodnoty, ktoré vyžadujú zložité výpočty alebo zložitý výber údajov . Niekedy len kvôli zmenšeniu kódu, keď volanie funkcie nahradí často požadované hodnoty v rôznych dotazoch a aplikáciách.

Tvorba

CREATE FUNCTION test_function (@ par1 bigint, @ par2 float) VRACI varchar (300) AS BEGIN DECLARE @rezult varchar (300) SELECT @ rezult = komentár FROM test_table WHERE id = @ par1 AND summa> @ par2 RETURN @rezult KONIEC
  • CREATE FUNCTION - príkaz na vytvorenie funkčného objektu;
  • test_funkcia - názov novej funkcie;
  • @ par1 a @ par2 sú vstupné parametre;
  • RETURNS varchar (300) - typ vráteného výsledku;
  • DECLARE @rezult varchar (300) - deklarácia premennej s typom varchar (300);
  • Príkaz select sú v našom prípade akcie funkcie;
  • RETURN @rezult - vráti výsledok;
  • BEGIN a END sú začiatok a koniec kódu funkcie.

Príklad použitia v požiadavke:

SELECT testovacia funkcia (1, 20)

Zmena

ALTER FUNCTION test_function (@ par1 bigint, @ par2 float) VRÁTI varchar (300) AKO ZAČIATOK DECLARE @rezult varchar (300) SELECT @ rezult = komentár FROM test_table_new WHERE id = @ par1 AND summa> = @ par2 RETURN @rezult KONIEC

Odstraňuje sa

DROP FUNCTION test_funkcie

Vstavané funkcie

Okrem toho, že SQL Server umožňuje vytvárať vlastné funkcie, poskytuje aj možnosť využívať vstavané funkcie, ktoré pre vás vývojári DBMS už napísali. Je ich veľa, preto som tie najčastejšie rozdelil do skupín a pokúsil som sa ich stručne opísať.

Systémové funkcie

Tu uvediem niekoľko príkladov funkcií, ktoré vracajú rôzne systémové údaje.

  • @@ VERSION - vráti verziu SQL servera;
  • @@ SERVERNAME - vráti názov servera;
  • SUSER_NAME () - prihlasovacie meno používateľa na server, inými slovami, aké prihlasovacie meno používa tento alebo ten používateľ;
  • user_name () - meno užívateľa databázy;
  • @@ SERVICENAME - názov služby DBMS;
  • @@ IDENTITY - posledný identifikátor vložený do tabuľky;
  • db_name () - názov aktuálnej databázy;
  • db_id () - identifikátor databázy.

Súhrnné funkcie

Funkcie, ktoré vypočítavajú nejakú hodnotu na základe množiny (skupiny) hodnôt. Ak pri volaní týchto funkcií potrebujete zadať stĺpec na zobrazenie výsledku, musíte údaje zoskupiť (zoskupiť podľa) podľa tohto poľa. Túto konštrukciu sme podrobne preskúmali v článku Transact-SQL zoskupenia údajov skupiny podľa

  • avg - vráti priemer;
  • počet - počet hodnôt;
  • max - maximálna hodnota;
  • min je minimálna hodnota;
  • súčet je súčet hodnôt.

Príklad použitia:

SELECT COUNT (*) ako počet, SUM (summa) ako súčet, MAX (id) ako maximum, MIN (id) ako minimum, AVG (summa) ako avg FROM test_table

Reťazcové funkcie

Tento typ funkcie pracuje podľa toho s reťazcami.

Vľavo (reťazcový výraz, Postavy) - Vráti zadaný počet znakov v reťazci začínajúcom zľava.

Príklad

SELECT LEFT ("Príklad funkcie vľavo", 10) --Výsledok "Príklad zapnutý"

Správny (reťazcový výraz, Postavy) - vráti zadaný počet znakov v reťazci začínajúcom sprava

Príklad

SELECT Right („Príklad fungovania funkcie Right“, 10) – Výsledok „klauzuly Right“

Len (riadok) - vráti dĺžku reťazca.

Príklad

SELECT len („Príklad fungovania funkcie len“) – Výsledok 28

Nižšia (riadok) - vráti reťazec, v ktorom sú všetky znaky skonvertované na malé písmená.

Príklad

SELECT nižšia ("Príklad nižšej funkcie") --Výsledok "príkladu nižšej funkcie"

Horná (riadok) - vráti reťazec, v ktorom sú všetky znaky veľké.

Príklad

SELECT Upper --Výsledok "PRÍKLAD HORNEJ FUNKCIE"

Ltrim (riadok) - vráti reťazec bez všetkých počiatočných medzier.

Príklad

SELECT ltrim ("Príklad funkcie ltrim") --Výsledok "Príklad funkcie ltrim"

Rtrim (riadok) - vráti reťazec s odstránenými všetkými medzerami vpravo

Príklad

SELECT Rtrim („Príklad funkcie Rtrim“) – Výsledok „Príklad funkcie Rtrim“

Vymeňte (riadok, čo hľadáme, čo nahrádzame) - nahradí všetky výskyty uvedené v druhom parametri v reťazcovom výraze znakmi uvedenými v treťom parametri.

Príklad

SELECT Replace ("Príklad fungovania funkcie Nahradiť", "pre prácu", "VÝMENA") - Výsledok "Príklad VÝMENY funkcie Nahradiť"

Replikovať (riadok, počet opakovaní) - zopakuje reťazec (prvý parameter) toľkokrát, koľkokrát je uvedené v druhom parametri.

Príklad

SELECT Replicate ("Example Replicate", 3) - Výsledok "Example Replicate Example Replicate Example Replicate"

Obrátené (riadok) - vráti všetko v opačnom poradí.

Príklad

SELECT Reverse („Príklad fungovania funkcie Reverse“) – Výsledok „esreveR iitsknuf etobar opremirP“

priestor (počet miest) - Vráti reťazec ako zadaný počet medzier.

Príklad

SELECT medzera (10) - výsledok ""

Podreťazec (riadok, východisková pozícia, koľko znakov) - vráti reťazec, dĺžku čísla špecifikovaného v treťom parametri, počnúc znakom uvedeným v druhom parametri.

Príklad

SELECT Substring ("Príklad práce funkcie Substring", 11, 14) - Výsledok "práce funkcie"

Matematické funkcie

Okrúhly (číslo, presnosť zaokrúhľovania) - zaokrúhli číselný výraz na počet znakov zadaný v druhom parametri

Príklad

SELECT Round (10,4569, 2) – výsledok „10,4600“

Poschodie (číslo) - Vráti celé číslo zaokrúhlené nadol.

Príklad

SELECT poschodie (10,4569) – výsledok „10“

Strop (číslo) - Vráti celé číslo zaokrúhlené nahor.

Príklad

SELECT Ceiling (10,4569) – výsledok „11“

Moc (číslo, stupňa) - vráti číslo umocnené v druhom parametri.

Príklad

SELECT Power (5,2) - Výsledok "25"

Námestie (číslo) - vráti číselnú hodnotu na druhú

Príklad

SELECT štvorec (5) - výsledok "25"

Abs (číslo) - vráti absolútnu kladnú hodnotu

Príklad

SELECT Abs (-5) - Výsledok "5"

Log(číslo) - prirodzený logaritmus s pohyblivou rádovou čiarkou.

Príklad

SELECT Denník (5) - Výsledok "1,6094379124341"

Pi- Pi.

Príklad

SELECT Pi () - Výsledok "3,14159265358979"

Rand- vráti náhodné číslo s pohyblivou rádovou čiarkou od 0 do 1

Príklad

SELECT rand () - výsledok "0,713273187517105"

Funkcie dátumu a času

Získať dátum ()- vráti aktuálny dátum a čas

Príklad

SELECT Getdate () - Výsledok "2014-10-24 16: 36: 23,683"

deň(dátum) - vráti deň od dátumu.

Príklad

SELECT Day (Getdate ()) - Výsledok "24"

mesiac(dátum) – Vráti číslo mesiaca z dátumu.

Príklad

SELECT mesiac (Getdate ()) – výsledok „10“

rok (dátum) - vráti rok od dátumu

Príklad

SELECT rok (Getdate ()) - Výsledok "2014"

DATEPART(dátumová časť, dátum) - vráti zadaný úsek z dátumu (DD, MM, RRRR atď.)

Príklad

SELECT DATEPART (MM, GETDATE ()) – výsledok „10“

Isdate (dátum) - skontroluje zadaný výraz, či ide o dátum

Príklad

SELECT Isdate (GETDATE ()) – výsledok „1“

Konverzné funkcie

Obsadenie (ako dátový typ výrazu) Je funkcia na konverziu jedného typu na iný. V príklade skonvertujeme float na int

Príklad

SELECT CAST (10,54 ako int) --výsledok 10

Konvertovať – (dátový typ, výraz, formát dátumu) Je funkcia na konverziu jedného typu údajov na iný. Veľmi často sa používa na konverziu dátumu pomocou tretieho voliteľného parametra, formátu dátumu.

Príklad

SELECT GETDATE (), CONVERT (DATE, GETDATE (), 104) --Výsledok --2014-10-24 15: 20: 45,270 - žiadna konverzia; --2014-10-24 po konverzii.

Tabuľkové funkcie

Sú vytvorené s cieľom získať z nich údaje ako z tabuliek, ale po rôznych druhoch výpočtov. O tabuľkových funkciách sme podrobne hovorili v materiáli Transact-sql - Tabuľkové funkcie a dočasné tabuľky

Tvorba

--názov našej funkcie CREATE FUNCTION fun_test_tabl (--prichádzajúce parametre a ich typ @id INT) --návratová hodnota, t.j. table RETURNS TABLE AS - okamžite vráti výsledok RETURN (- samotný dotaz alebo niektoré výpočty SELECT * FROM test_table kde id = @id) GO

Zmena

--názov našej funkcie ALTER FUNCTION fun_test_tabl (--prichádzajúce parametre a ich typ @id INT) --návratová hodnota, t.j. tabuľka VRÁTI TABUĽKA AKO - okamžite vráti výsledok RETURN (- samotný dotaz alebo niektoré výpočty SELECT * FROM test_table kde id = @id a suma> 100) GO

Odstraňuje sa

DROP FUNCTION fun_test_tabl

Ako vidíte, na vytvorenie, úpravu alebo vymazanie takýchto funkcií sa používajú rovnaké operátory ako pre bežné funkcie, rozdiely sú len v tom, aký typ funkcia vráti.

Príklad volania tejto funkcie

SELECT * FROM fun_test_tabl (1)

Postupy

Postupy Je množina príkazov SQL, ktoré sa skompilujú raz a môžu mať, podobne ako funkcie, rôzne parametre. Používa sa na zjednodušenie výpočtov, vykonávanie skupinových akcií.

Tvorba

CREATE PROCEDURE sp_test_procedure (@id INT) AS - deklarovať premenné DECLARE @sum FLOAT --SQL príkazy SET @sum = 100 AKTUALIZÁCIA test_table SET summa = summa + @sum WHERE id = @id GO

Zmena

ALTER PROCEDURE sp_test_procedure (@id int) AS - deklarovať premenné DECLARE @sum float --SQL príkazy SET @sum = 500 AKTUALIZÁCIA test_table SET summa = summa + @sum KAM IDE id = @id

Odstraňuje sa

DROP PROCEDURE sp_test_procedure

Výzva postupu

Môžete to nazvať rôznymi spôsobmi, napríklad:

EXECUTE sp_test_procedure 1 --alebo EXEC sp_test_procedure 1

Kde EXECUTE a EXEC volajú procedúru sp_test_procedure, respektíve názov našej procedúry, 1 hodnotu parametra

Systémové postupy

Systémové postupy Sú postupy na vykonávanie rôznych administratívnych akcií na objektoch na serveri a na konfigurácii samotného servera. Volajú sa rovnakým spôsobom ako bežné procedúry, ale v kontexte akejkoľvek databázy.

Je ich veľa, preto uvediem len niekoľko príkladov.

sp_configure- postup na zobrazenie a vykonanie zmien v konfigurácii jadra DBMS. Prvý parameter je názov konfiguračného parametra, druhý parameter je hodnota.

Príklad

Zmeňte hodnotu parametra EXEC sp_configure "Ad Hoc Distributed Queries", 1 prekonfigurujte - použite EXEC sp_configure - stačí zobraziť hodnoty všetkých parametrov

kde 'Ad Hoc Distributed Queries' je názov parametra, resp. hodnota, ktorú chceme zmeniť, prekonfigurácia použije zadanú hodnotu.

V praxi sme tento postup použili v článku Interbase Transact-SQL Query

sp_executesql- Vykoná príkaz alebo sadu príkazov Transact-SQL, ktoré možno generovať dynamicky. Tento postup sme použili pri zaznamenávaní zmien údajov o materiáli do tabuľky v Transact-SQL

Príklad

EXECUTE sp_executesql N "SELECT * FROM test_table WHERE id = @id", N "@id int", @id = 1

Kde prvý parameter je príkaz sql (reťazec v Unicode), druhý je definícia všetkých parametrov zabudovaných do príkazu sql, tretí je hodnota parametrov.

sp_help- vráti podrobné informácie o akomkoľvek objekte v databáze.

Príklad

EXECUTE sp_help "test_table"

sp_rename- premenuje objekt v databáze. Dá sa použiť na premenovanie tabuliek, indexov, názvov stĺpcov v tabuľkách.Tento postup sa neodporúča používať na premenovanie užívateľských procedúr, spúšťačov, funkcií.

Príklad premenovania tabuľky

EXEC sp_rename "test_table", "test_table_new"

kde prvý parameter je objekt so starým názvom a druhý parameter je nový názov objektu.

Príklad premenovania stĺpca v tabuľke

EXEC sp_rename "test_table.summa", "summa_new", "COLUMN"

Tretí parameter označuje, že sa stĺpec premenúva.

Spúšťače

Spúšť Je to normálny postup, ale vyvoláva ho udalosť, nie používateľ. Udalosťou môže byť napríklad vloženie nového riadku do tabuľky (insert), aktualizácia údajov v tabuľke (update) alebo vymazanie údajov z tabuľky (delete).

Tvorba

CREATE TRIGGER trg_test_table_update ON test_table pre UPDATE - môže tiež odstrániť, vložiť príkazy AS BEGIN --sql v prípade UPDATE END GO

Zmena

ALTER TRIGGER trg_test_table_update ON test_table pre vloženie --môže tiež odstrániť, aktualizovať AS BEGIN --sql príkazy v prípade vloženia END GO

Odstraňuje sa

DROP TRIGGER trg_test_table_update

Povoliť zakázať

- zakázať DISABLE TRIGGER trg_test_table_update ON test_table; --povolenie ENABLE TRIGGER trg_test_table_update ON test_table;

O spúšťačoch sme hovorili v článku – Ako vytvoriť spúšťač v Transact-SQL.

Indexy

Ide o databázový objekt, ktorý zlepšuje výkon pri získavaní údajov triedením údajov podľa špecifického poľa. Ak nakreslíme analógiu, potom je napríklad oveľa jednoduchšie a rýchlejšie vyhľadať určitú informáciu v knihe podľa jej obsahu, ako keby tam tento obsah nebol. V MS SQL Server DBMS existujú nasledujúce typy indexov:

Klastrovaný index- pri takomto indexe sa riadky v tabuľke triedia daným kľúčom, t.j. podľa zadaného poľa. Tento typ indexu pre tabuľku na serveri MS SQL môže mať iba jeden a počnúc MS SQL 2000 sa automaticky vytvára, keď je v tabuľke špecifikovaný primárny kľúč (PRIMARY KEY).

Nezhlukovaný index- pri použití tohto typu indexu index obsahuje reťazcové ukazovatele zoradené podľa zadaného poľa a nie samotné reťazce, vďaka čomu dochádza k rýchlemu hľadaniu požadovaného reťazca. Tabuľka môže mať niekoľko takýchto indexov.

Index úložiska stĺpcov- tento typ indexu je založený na technológii ukladania údajov tabuľky nie vo forme riadkov, ale vo forme stĺpcov (odtiaľ názov), tabuľka môže mať jeden columnstore index.

Pri použití tohto typu indexu sa tabuľka okamžite stane iba na čítanie, inými slovami, už nebude možné pridávať alebo meniť údaje v tabuľke, preto budete musieť zakázať index, pridávať / upravovať údaje a potom povoľte index späť.

Takéto indexy sú vhodné pre veľmi veľké súbory údajov používané v úložisku.

Operácie, ktoré využívajú agregačné funkcie pomocou zoskupovania, sú s takýmto indexom oveľa rýchlejšie (niekoľkokrát!).

Index Columnstore je dostupný od verzie 2012 SQL Server vo verziách Enterprise, Developer a Evaluation.

Tvorba

Klastrovaný index

VYTVORTE KLUSTEROVÝ INDEX idx_clus_one NA test_table (id) GO

Kde CREATE CLUSTERED INDEX je inštrukcia na vytvorenie zoskupeného indexu, idx_clus_one je názov indexu, test_table (id) je tabuľka a pole kľúča na triedenie.

Nezhlukovaný index

VYTVORIŤ INDEX idx_no_clus ON test_table (summa) GO

Index úložiska stĺpcov

CREATE columnstore INDEX idx_columnstore ON test_table (date_create) GO

Odpojenie

- zakázať ALTER INDEX idx_no_clus ON test_table DISABLE - povoliť, znova zostaviť ALTER INDEX idx_no_clus ON test_table REBUILD

Odstraňuje sa

DROP INDEX idx_no_clus ON test_table GO

Kurzory

kurzor - je to druh dátového typu, ktorý sa používa najmä v procedúrach a spúšťačoch. Ide o obyčajný dataset, t.j. výsledok dotazu.

Príklad (toto všetko v kóde postupu)

Deklarujte premenné DECLARE @id BIGINT DECLARE @fio VARCHAR (100) DECLARE @summa FLOAT - deklarujte kurzor DECLARE test_cur CURSOR FOR SELECT id, fio, summa FROM test_table - otvorte kurzor OPEN test_cur - prečítajte si údaje prvého riadku v kurzore - a zapísať ich do premenných FETCH NEXT FROM test_cur DO @id, @fio, @summa - spustiť cyklus až do konca riadkov v kurzore WHILE @@ FETCH_STATUS = 0 BEGIN - pre každú iteráciu cyklu môžeme spustiť sql inštrukcie - .................. SQL príkazy ................. - prečítajte si ďalší riadok kurzora FETCH NEXT FROM test_cur DO @id , @fio, @summa KONIEC --zavrieť kurzor ZAVRIEŤ test_cur DEALLOCATE test_cur

Ďalšie informácie o kurzoroch nájdete v téme Používanie kurzorov a slučiek v Transact-SQL.

Žiadosti DML

DML (Jazyk manipulácie s údajmi) Sú príkazy SQL používané na manipuláciu s údajmi. Patria sem výber, aktualizácia, vloženie, odstránenie.

VYBRAŤ

Príklad

SELECT * FROM test_table

AKTUALIZOVAŤ

Používa sa na aktualizáciu údajov

Príklad

Všetky riadky v tabuľke sa aktualizujú UPDATE test_table SET summa = 500 – aktualizujú sa iba riadky s id väčším ako 10 UPDATE test_table SET summa = 100 WHERE id> 10

VLOŽIŤ

Operátor pre pridávanie údajov

Pridanie jedného riadku INSERT INTO test_table (fio, summa, date_create, komentár) VALUES ("celé meno", 100, "26.10.2014", "testovací záznam") - hromadné pridanie na základe dotazu INSERT INTO test_table SELECT fio, summa, date_create , komentár FROM test_table

VYMAZAŤ

Pomocou tohto operátora môžete vymazať údaje.

Príklad

Čistenie celej tabuľky DELETE test_table - vymazanie iba riadkov, ktoré spĺňajú podmienku DELETE test_table WHERE summa> 100

To je všetko, sprievodca sa skončil! Dúfam, že ti nejako pomohol. Veľa štastia!

Od autora: Nazvali vás čajníkom? Tak toto je opraviteľné! Každý samovar bol kedysi čajníkom! Alebo bol raz každý profesionál samovar? Nie, opäť niečo nie je v poriadku! Celkovo vzaté, MySQL je pre začiatočníkov.

Prečo figuríny potrebujú MySQL

Ak sa vážne chystáte prepojiť svoj život s internetom, hneď pri prvých krokoch na „webe“ narazíte na tento DBMS. MySQL možno pokojne nazvať „celointernetovým“ databázovým systémom. Bez neho sa nezaobíde ani jeden viac či menej seriózny zdroj, nachádza sa v administračnom paneli každého hostingu. A za jej účasti sú postavené predovšetkým populárne CMS a dokonca aj vlastné motory.

Vo všeobecnosti sa bez tejto platformy nezaobídete. Na jej štúdium však potrebujete aj správny prístup, správne nástroje a hlavne túžbu a trpezlivosť. Dúfam, že toho posledného máte veľa. A pripravte sa na to, že sa vám uvarí mozog a z hlavy vám bude padať para ako z ozajstného čajníka

Ale MySQL je pre figuríny také ťažké, iba ak sa ho začnete učiť nesprávne. Takúto chybu neurobíme a oboznamovanie sa s touto technológiou začneme od úplného začiatku.

Základné pojmy

Najprv si prejdime základné pojmy, ktoré v tomto príspevku spomenieme:

Databáza (DB) je hlavnou súčasťou DBMS. Databáza obsahuje tabuľky, ktoré pozostávajú zo stĺpcov a záznamov (riadkov). Bunky vytvorené na priesečníku obsahujú štruktúrované údaje určitého typu.

DBMS (database management system) - súbor všetkých softvérových modulov pre správu databáz.

SQL je štruktúrovaný dotazovací jazyk, pomocou ktorého vývojár „komunikuje“ s jadrom (serverom) DBMS. Ako každý programovací jazyk, aj SQL má svoju vlastnú syntax, sadu príkazov a operátorov, podporované dátové typy.

Myslím si, že na začiatok máme dosť teoretických vedomostí. Chýbajúce medzery v teórii „vymaľujeme“ praxou. Teraz už zostáva len vybrať správny softvérový nástroj.

Nájdenie správneho nástroja

Keď som sa poriadne „prehrabal“ v celej škále MySQL shellov pre začiatočníkov, uvedomil som si, že tieto jednoducho neexistujú. Všetky softvérové ​​produkty pre správu DBMS vyžadujú už nainštalovaný databázový server. Vo všeobecnosti som sa opäť rozhodol nevynájsť „skúter“ a rozhodol som sa pre domáci balík Denwer. Môžete si ho stiahnuť na oficiálnej webovej stránke.

Už obsahuje všetky komponenty DBMS, čo umožňuje začiatočníkovi začať praktické zoznámenie sa s MySQL hneď po jednoduchej a zrozumiteľnej inštalácii. Okrem toho Denwer obsahuje niekoľko ďalších nástrojov potrebných pre začínajúceho vývojára: lokálny server, PHP.

Prvé kroky

Nebudem popisovať proces inštalácie „pánskej“ sady, keďže tam sa všetko deje automaticky. Po spustení inštalácie máte čas iba stlačiť potrebné klávesy. Presne to, čo potrebujete v fiktívnej verzii MySQL.

Po dokončení procesu inštalácie spustite lokálny server a počkajte niekoľko sekúnd. Potom do panela s adresou prehliadača zadajte localhost.

Na stránke "Hurá, ide to!" postupujte podľa jedného z odkazov na obrázku. Potom sa dostanete do phpMyAdmin - shell pre správu databázy.

Kliknutím na odkaz http://downloads.mysql.com/docs/world.sql.zip si stiahnete vzorovú testovaciu databázu z oficiálnej stránky MySQL. Znova prejdite na phpMyAdmin, v hlavnom menu hore prejdite na záložku „Importovať“. V okne "Importovať do aktuálneho" v prvej časti ("Súbor na import") nastavte hodnotu "Prehliadať počítač".

V okne prieskumníka vyberte archív so stiahnutou vzorovou databázou. Nezabudnite kliknúť na tlačidlo „OK“ v spodnej časti hlavného okna.

Odporúčam vám, aby ste zatiaľ nemenili zadané hodnoty parametrov. To môže viesť k nesprávnemu zobrazeniu údajov importovaného zdroja. Ak phpMyAdmin vypíše chybu, že nedokáže rozpoznať algoritmus kompresie databázy, rozbaľte ho a zopakujte celý proces importu od začiatku.

Ak všetko prebehlo v poriadku, tak sa v hornej časti objaví hlásenie programu, že import prebehol úspešne a vľavo v zozname DB je ďalšie (slovo).

Pozrime sa na jeho štruktúru zvnútra, aby ste si vedeli jasnejšie predstaviť, s čím sa budete musieť popasovať.

Kliknite na názov databázy MySQL pre začiatočníkov. Pod ním sa zobrazí zoznam tabuliek, z ktorých sa skladá. Kliknite na jeden z nich. Potom prejdite na hornú položku ponuky „Štruktúra“. Hlavná pracovná oblasť zobrazuje štruktúru tabuľky: všetky názvy stĺpcov, typy údajov a všetky atribúty.