Ako písať SQL dotazy - podrobné príklady. Archívy kategórií: Knihy SQL

  • 02.08.2019

Žiadosti sa píšu bez úvodzoviek, od r MySQL, MS SQL a PostGree sú rozdielne.

SQL dotaz: získanie špecifikovaných (povinných) polí z tabuľky

SELECT id, country_title, count_people FROM table_name

Dostaneme zoznam záznamov: VŠETKY krajiny a ich obyvateľstvo. Názvy povinných polí sú oddelené čiarkami.

SELECT * FROM názov_tabulky

* označuje všetky polia. To znamená, že budú dojmy VŠETKO dátové polia.

SQL dotaz: výstup záznamov z tabuľky s výnimkou duplikátov

SELECT DISTINCT country_title FROM table_name

Získame zoznam záznamov: krajiny, v ktorých sa naši používatelia nachádzajú. Môže byť veľa používateľov z jednej krajiny. V tomto prípade je to vaša požiadavka.

SQL dotaz: zobrazenie záznamov z tabuľky podľa zadanej podmienky

SELECT id, country_title, city_title FROM table_name WHERE count_people> 100000000

Dostávame zoznam rekordov: krajiny, kde je počet ľudí viac ako 100 000 000.

SQL dotaz: zobrazenie záznamov z tabuľky s usporiadaním

SELECT id, city_title FROM table_name ORDER BY city_title

Dostaneme zoznam záznamov: mestá v abecednom poradí. Na začiatku A, na konci I.

SELECT id, city_title FROM table_name ORDER BY city_title DESC

Získame zoznam záznamov: mestá naopak ( DESC) v poriadku. Na začiatku ja, na konci A.

SQL dotaz: počítanie počtu záznamov

SELECT COUNT (*) FROM table_name

Dostaneme počet (počet) záznamov v tabuľke. V tomto prípade NEEXISTUJE ŽIADNY zoznam záznamov.

SQL dotaz: výstup požadovaného rozsahu záznamov

SELECT * FROM názov_tabulky LIMIT 2, 3

Z tabuľky dostaneme 2 (druhý) a 3 (tretí) záznam. Požiadavka je užitočná pri vytváraní navigácie na WEB stránkach.

SQL dotazy s podmienkami

Výstup záznamov z tabuľky podľa danej podmienky pomocou logických operátorov.

SQL dotaz: AND konštrukcia

SELECT id, city_title FROM table_name WHERE country = "Rusko" AND oil = 1

Dostávame zoznam záznamov: mestá z Ruska A mať prístup k rope. Pri použití operátora A, potom sa obe podmienky musia zhodovať.

SQL dotaz: ALEBO konštrukcia

SELECT id, city_title FROM table_name WHERE country = "Rusko" OR country = "USA"

Dostávame zoznam záznamov: všetky mestá z Ruska ALEBO USA. Pri použití operátora ALEBO, potom musí zodpovedať aspoň jedna podmienka.

SQL dotaz: AND NOT konštrukt

SELECT id, user_login FROM table_name WHERE country = "Russia" AND NOT count_comments<7

Dostávame zoznam záznamov: všetci používatelia z Ruska A kto urobil NIE MENEJ 7 komentárov.

SQL dotaz: IN (B) konštrukcia

SELECT id, user_login FROM table_name WHERE country IN ("Rusko", "Bulharsko", "Čína")

Získame zoznam záznamov: všetci používatelia, ktorí žijú v ( IN) (Rusko alebo Bulharsko alebo Čína)

SQL dotaz: NIE JE V konštrukcii

SELECT id, user_login FROM table_name WHERE country NOT IN ("Rusko", "Čína")

Získame zoznam záznamov: všetci používatelia, ktorí nežijú v ( NIE V) (Rusko alebo Čína).

SQL dotaz: konštrukcia IS NULL (prázdne alebo NIE prázdne hodnoty)

SELECT id, user_login FROM table_name WHERE status IS NULL

Dostaneme zoznam záznamov: všetci používatelia, ktorých stav nie je definovaný. NULL je samostatná téma, a preto sa kontroluje samostatne.

SELECT id, user_login FROM table_name WHERE state IS NOT NULL

Získame zoznam záznamov: všetci používatelia, kde je definovaný stav (NIE NULA).

SQL dotaz: konštrukcia LIKE

SELECT id, user_login FROM table_name WHERE priezvisko LIKE "Ivan%"

Získame zoznam záznamov: používatelia, ktorých priezvisko začína kombináciou „Ivan“. Znak % znamená AKÝKOĽVEK počet AKÝCHKOĽVEK znakov. Ak chcete nájsť znak %, musíte použiť escapujúci "Ivan \%".

SQL dotaz: konštrukcia BETWEEN

SELECT id, user_login FROM table_name WHERE plat MEDZI 25 000 AŽ 50 000

Dostávame zoznam záznamov: užívatelia, ktorí dostávajú platy od 25 000 do 50 000 vrátane.

Existuje VEĽA logických operátorov, preto si podrobne preštudujte dokumentáciu k SQL serveru.

Komplexné SQL dotazy

SQL dotaz: kombinovanie viacerých dotazov

(SELECT id, user_login FROM table_name1) UNION (SELECT id, user_login FROM table_name2)

Dostávame zoznam záznamov: užívateľov, ktorí sú zaregistrovaní v systéme, ako aj tých užívateľov, ktorí sú registrovaní na fóre samostatne. S operátorom UNION je možné kombinovať viacero dopytov. UNION funguje ako SELECT DISTINCT, to znamená, že zahodí duplicitné hodnoty. Ak chcete získať úplne všetky záznamy, musíte použiť operátor UNION ALL.

SQL dotaz: počítanie hodnôt polí ​​MAX, MIN, SUM, AVG, COUNT

Výstup jedna, maximálna hodnota počítadla v tabuľke:

SELECT MAX (počítadlo) FROM názov_tabuľky

Výstup jedna, minimálna hodnota počítadla v tabuľke:

SELECT MIN (počítadlo) FROM table_name

Zobrazenie súčtu všetkých hodnôt počítadla v tabuľke:

SELECT SUM (počítadlo) FROM table_name

Zobrazenie priemernej hodnoty počítadla v tabuľke:

SELECT AVG (counter) FROM table_name

Zobrazenie počtu počítadiel v tabuľke:

SELECT COUNT (počítadlo) FROM table_name

Zobrazenie počtu počítadiel v dielni č.1 v tabuľke:

SELECT COUNT (pult) FROM table_name WHERE office = "Obchod č. 1"

Toto sú najobľúbenejšie príkazy. Tam, kde je to možné, sa odporúča použiť na výpočet SQL dotazy tohto druhu, pretože žiadne programovacie prostredie sa nemôže porovnávať v rýchlosti spracovania údajov ako samotný SQL server pri spracovaní vlastných údajov.

SQL dotaz: zoskupovanie záznamov

SELECT kontinent, SUM (country_area) FROM country GROUP BY kontinent

Dostaneme zoznam záznamov: s názvom kontinentu a so súčtom oblastí všetkých ich krajín. To znamená, že ak existuje adresár krajín, kde má každá krajina zaznamenanú svoju oblasť, potom pomocou klauzuly GROUP BY môžete zistiť veľkosť každého kontinentu (na základe zoskupenia podľa kontinentov).

SQL dotaz: pomocou viacerých tabuliek cez alias

SELECT o.order_no, o.amount_paid, c.company FROM orders AS o, customer AS with WHERE o.custno = c.custno AND c.city = "Tyumen"

Dostávame zoznam záznamov: objednávky od zákazníkov, ktorí žijú iba v Ťumeni.

Pri správne navrhnutej databáze tohto typu je totiž dopyt najfrekventovanejší, preto bol v MySQL zavedený špeciálny operátor, ktorý pracuje mnohonásobne rýchlejšie ako kód napísaný vyššie.

VYBERTE o.číslo_objednávky, o.zaplatená_suma, z.spoločnosť Z objednávok AKO o LEFT PRIDAJTE SA k zákazníkovi AS z ON (z.custno = o.custno)

Vnorené poddotazy

SELECT * FROM table_name WHERE plat = (VYBERTE MAX (plat) OD zamestnanca)

Získame jeden záznam: informáciu o užívateľovi s maximálnou mzdou.

Pozor! Vnorené poddotazy sú jedným z úzkych miest na serveroch SQL. Spolu s ich flexibilitou a výkonom tiež výrazne zvyšujú zaťaženie servera. Čo vedie ku katastrofálnemu spomaleniu práce ostatných používateľov. Prípady rekurzívnych volaní s vnorenými dopytmi sú veľmi časté. Preto dôrazne odporúčam NEPOUŽÍVAŤ vnorené dotazy, ale rozdeliť ich na menšie. Alebo použite vyššie uvedenú kombináciu LEFT JOIN. Okrem tohto typu požiadaviek sú požiadavky zvýšeným ohniskom narušenia bezpečnosti. Ak sa rozhodnete použiť vnorené poddotazy, musíte ich navrhnúť veľmi opatrne a vykonať počiatočné spustenie na kópiách databáz (testovacích databáz).

SQL dotazy meniace údaje

SQL dotaz: INSERT

Inštrukcie VLOŽIŤ umožňujú vkladať záznamy do tabuľky. Jednoducho povedané, vytvorte v tabuľke riadok s údajmi.

Možnosť číslo 1. Inštrukcia sa často používa:

INSERT INTO table_name (id, user_login) VALUES (1, "ivanov"), (2, "petrov")

V tabulke " názov_tabuľky"Naraz sa vložia 2 (dvaja) používatelia.

Možnosť číslo 2. Je pohodlnejšie použiť štýl:

INSERT table_name SET id = 1, user_login = "ivanov"; INSERT table_name SET id = 2, user_login = "petrov";

To má svoje výhody aj nevýhody.

Hlavné nevýhody:

  • Mnoho malých SQL dotazov beží o niečo pomalšie ako jeden veľký SQL dotaz, ale ostatné dotazy budú zaradené do frontu na obsluhu. To znamená, že ak sa veľký SQL dotaz vykoná 30 minút, potom počas celej tejto doby budú zvyšok dotazov fajčiť bambus a čakať, kým na ne príde rad.
  • Požiadavka sa ukazuje byť masívnejšia ako predchádzajúca verzia.

Hlavné výhody:

  • Počas malých SQL dotazov nie sú blokované iné SQL dotazy.
  • Jednoduchosť čítania.
  • Flexibilita. V tejto možnosti nemôžete sledovať štruktúru, ale pridať len potrebné údaje.
  • Pri vytváraní archívov týmto spôsobom môžete jednoducho skopírovať jeden riadok a spustiť ho cez príkazový riadok (konzolu), čím neobnovíte celý ARCHÍV.
  • Štýl písania je podobný príkazu UPDATE, čo uľahčuje zapamätanie.

SQL dotaz: AKTUALIZÁCIA

UPDATE table_name SET user_login = "ivanov", user_surname = "Ivanov" WHERE id = 1

V tabulke " názov_tabuľky"V zázname s id = 1 sa hodnoty polí user_login a user_surname zmenia na zadané hodnoty.

SQL dotaz: DELETE

DELETE FROM table_name WHERE id = 3

Záznam s ID číslom 3 bude v tabuľke table_name vymazaný.

  1. Odporúča sa písať všetky názvy polí malými písmenami a v prípade potreby ich oddeliť vynútenou medzerou „_“ kvôli kompatibilite s rôznymi programovacími jazykmi, ako sú Delphi, Perl, Python a Ruby.
  2. Kvôli čitateľnosti píšte príkazy SQL VEĽKÝMI písmenami. Vždy si pamätajte, že kód po vás môžu prečítať iní ľudia a s najväčšou pravdepodobnosťou vy sami po N množstve času.
  3. Názov polí od začiatku podstatného mena a potom akcia. Napríklad: city_status, user_login, user_name.
  4. Pokúste sa vyhnúť záložným slovám v rôznych jazykoch, ktoré môžu spôsobiť problémy v SQL, PHP alebo Perl, ako napríklad (názov, počet, odkaz). Napríklad: odkaz môže byť použitý v MS SQL, ale je rezervovaný v MySQL.

Tento materiál je krátkou referenciou pre každodennú prácu a netvrdí, že je super mega autoritatívnym zdrojom, ktorý je primárnym zdrojom SQL dotazov pre konkrétnu databázu.

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 jasnejšie predstavili, 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.

Výber kníh, video kurzov a online zdrojov na štúdium databáz, základov relačnej teórie a jazyka SQL.

knihy

Alan Bewley „Naučte sa SQL“ (2007)

Táto kniha je vynikajúcou voľbou pre tých, ktorí sú na začiatku tŕnistej cesty k učeniu sa SQL. Umožní vám nielen získať potrebný základ počiatočných vedomostí, ale tiež vám povie o najobľúbenejších jemnostiach a výkonných nástrojoch jazyka, ktorý používajú skúsení programátori.
Mnoho tutoriálov o databázach, relačnej teórii a SQL je preplnených nudnou teóriou. Táto kniha je vítanou výnimkou pre jej ľahký a živý štýl. Autor šikovne predkladá čitateľovi informácie o SQL výrazoch a blokoch, typoch podmienok, spojeniach, poddotazoch a mnoho ďalších.
Na upevnenie vedomostí získaných v praxi autor vytvára cvičnú databázu MySQL a uvádza množstvo praktických príkladov dotazov pokrývajúcich všetok prezentovaný teoretický materiál.

Chris Fiiley "SQL" (2013)


Kniha sa zaoberá jazykovou verziou ANSI SQL-92 (SQL2). Podrobne je popísané, ako použiť dotazovací jazyk na riešenie príslušných tried úloh na získavanie a úpravu údajov a na prácu s objektmi databázovej štruktúry. Všetky príklady sú podrobne vysvetlené.
Osobitná pozornosť je v tejto publikácii venovaná rozdielom v dialektoch SQL pri implementácii najbežnejších DBMS: MySQL, Oracle, MS SQL Server a PostgreSQL.
Kniha je určená všetkým, ktorí si chcú samostatne naštudovať jazyk SQL alebo zdokonaliť svoje znalosti v tejto téme.

Anthony Molinaro „SQL. Zbierka receptov "(2009)


Toto vydanie je určené pre tých, ktorí už majú nejaké znalosti SQL a chcú sa v tejto oblasti zdokonaliť. Bude to veľmi užitočné aj pre odborníkov v oblasti databáz, keďže autor ponúka príklady riešenia problémov v rôznych DBMS: DB2, Oracle, PostgreSQL, MySQL a SQL Server.
Kniha vám pomôže naučiť sa používať SQL na riešenie širšieho spektra problémov: od operácií v rámci databázy až po získavanie údajov a ich prenos cez sieť do aplikácií.
Naučíte sa používať funkcie okien a špeciálne operátory, ako aj pokročilé metódy práce s dátovými skladmi: vytváranie histogramov, sumarizovanie údajov do blokov, vykonávanie agregácie kĺzavého rozsahu, generovanie priebežných súčtov a medzisúčtov. Budete môcť rozšíriť riadky na stĺpce a naopak, zjednodušiť výpočty v riadku a vykonať dvojitú expanziu sady výsledkov, vykonať prechod reťazca, ktorý vám umožní použiť SQL na analýzu reťazca na znaky, slová alebo prvky oddeleného reťazca. . Techniky navrhované autorom vám umožnia optimalizovať kód vašich aplikácií a otvoria vám nové možnosti jazyka SQL.

Alex Krigel a kol. „SQL. Užívateľská biblia, 2. vydanie (2010)


Kniha je jedinečná v tom, že každá kapitola poskytuje porovnanie implementácií určitých dotazov v dialektoch troch popredných DBMS. To z neho robí komplexný a praktický odkaz na jazyk SQL pre vývojárov od začiatočníkov až po guru, akýsi výukový program pre stolné počítače.
Zahŕňa témy od základov až po transakcie a zámky, funkcie databázy a bezpečnosť.
Na konci je uvedených niekoľko ďalších tém: Integrácia SQL do XML, OLAP Business Intelligence a ďalšie.

Eric Redmond, Jim R. Wilson „Sedem databáz za sedem týždňov. Úvod do moderných databáz a ideológie NoSQL "(2015)

Kniha pokrýva väčšinu moderných open source databáz: Redis, Neo4J, CouchDB, MongoDB, HBase, PostgreSQL a Riak. Ku každej databáze sú uvedené príklady práce s reálnymi údajmi, ktoré demonštrujú hlavné myšlienky a silné stránky.
Táto kniha osvetlí silné a slabé stránky každej zo siedmich databáz a naučí vás vybrať si tú, ktorá najlepšie vyhovuje vašim potrebám.

  • Návod

O čom je tento tutoriál

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), na zobrazenie zmien použite aktualizáciu z kontextového menu výberom príslušnej skupiny (napríklad Tabuľky), samotnej tabuľky alebo skupiny Stĺpce 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 živote, v hovorovej reči, väčšinou hovoríme: "Oracle DB", alebo dokonca len "Oracle", čo vlastne 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, zatiaľ čo 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]:

ZNÍŽIŤ 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 tieto údaje už mali v pôvodnej tabuľke, potom by príkaz „ALTER TABLE Zamestnanci ALTER ID stĺpca int NOT NULL“ úspešne skončil a príkaz „ALTER TABLE Zamestnanci ALTER COLUMN Name int NOT NULL“ by vygeneroval 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ž je možné priamo pri vytváraní tabuľky určiť primárny kľúč, 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ľ môže vidieť medzi hlavnými tabuľkami a pracovať s ňou ako s obyčajným stolom.

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 stojí za zmienku, že referenčné kľúče môžu obsahovať ďalšie možnosti ON DELETE CASCADE a ON UPDATE CASCADE, ktoré vám povedia, 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 zamestnávateľ II0 "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 – najprv 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 [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.

1 hlas

Vitajte na mojej blogovej stránke. Dnes si povieme niečo o SQL dotazoch pre začiatočníkov. Niektorí správcovia webu môžu mať otázku. Prečo sa učiť sql? Ty to nedokážeš?

Ukazuje sa, že to nebude stačiť na vytvorenie profesionálneho internetového projektu. Sql slúži na prácu s databázami a vytváranie aplikácií pre WordPress. Pozrime sa bližšie na to, ako používať dotazy.

Čo to je

Sql je štruktúrovaný dopytovací jazyk. Navrhnuté na definovanie typu údajov, poskytovanie prístupu k nim a spracovanie informácií v krátkych časových úsekoch. Popisuje komponenty alebo nejaký druh výsledkov, ktoré chcete vidieť na internetovom projekte.

Zjednodušene povedané, tento programovací jazyk umožňuje pridávať, upravovať, vyhľadávať a zobrazovať informácie v databáze. Popularita mysql je spôsobená tým, že sa používa na vytváranie dynamických internetových projektov založených na databáze. Preto, aby ste vytvorili funkčný blog, musíte sa tento jazyk naučiť.

Čo dokáže

Jazyk SQL umožňuje:

  • vytvárať tabuľky;
  • zmeniť prijímanie a ukladanie rôznych údajov;
  • kombinovať informácie do blokov;
  • chrániť údaje;
  • vytvárať požiadavky v prístupe.

Dôležité! Po riešení sql môžete písať aplikácie pre WordPress akejkoľvek zložitosti.

Aká štruktúra

Databáza pozostáva z tabuliek, ktoré môžu byť reprezentované ako súbor Excel.

Má meno, stĺpce a riadok s niekoľkými informáciami. Takéto tabuľky môžete vytvoriť pomocou dotazov SQL.

Čo potrebuješ vedieť


Najdôležitejšie pri učení Sql

Ako je uvedené vyššie, dotazy sa používajú na spracovanie a zadávanie nových informácií do databázy pozostávajúcej z tabuliek. Každý z jeho riadkov je samostatný záznam. Poďme teda vytvoriť databázu. Ak to chcete urobiť, napíšte príkaz:

Vytvorte databázu „bazaname“

V úvodzovkách napíšte názov databázy v latinke. Skúste jej vymyslieť zmysluplné meno. Nevytvárajte základňu ako "111", "www" a podobne.

Po vytvorení databázy nainštalujte:

SET NAMES ‘utf-8’

Je to nevyhnutné pre správne zobrazenie obsahu na stránke.

Teraz vytvoríme tabuľku:

VYTVORIŤ TABUĽKU 'bazaname'. 'Tabuľka' (

id INT (8) NOT NULL PRIMÁRNY KĽÚČ AUTO_INCREMENT,

log VARCHAR (10),

prejsť VARCHAR (10),

dátum DATE

V druhom riadku máme napísané tri atribúty. Pozrime sa, čo znamenajú:

  • Atribút NOT NULL znamená, že bunka nebude prázdna (toto pole je povinné);
  • hodnota AUTO_INCREMENT - automatické dopĺňanie;
  • PRIMARY KEY je primárny kľúč.

Ako pridať informácie

Ak chcete vyplniť polia vytvorenej tabuľky hodnotami, použite príkaz INSERT. Píšeme nasledujúce riadky kódu:

VLOŽIŤ DO 'tabuľky'

(login, pass, date) VALUES

(‚Vasa‘, ‚87654321‘,‘ 21.06.2017 18:38:44‘);

V zátvorkách uvádzame názvy stĺpcov a v ďalšom - hodnoty.

Dôležité! Dodržujte postupnosť názvov stĺpcov a ich význam.

Ako aktualizovať informácie

Ak to chcete urobiť, použite príkaz UPDATE. Pozrime sa, ako zmeniť heslo pre konkrétneho používateľa. Píšeme nasledujúce riadky kódu:

AKTUALIZOVAŤ „tabuľku“ SET pass = „12345678“ WHERE id = „1“

Teraz zmeňte heslo „12345678“. Zmeny sa vykonajú na riadku s „id“ = 1. Ak nenapíšete príkaz WHERE, zmenia sa všetky riadky, nie konkrétny.

Odporúčam vám kúpiť si knihu“ SQL for Dummies ". S jeho pomocou budete vedieť profesionálne pracovať s databázou krok za krokom. Všetky informácie sú štruktúrované od jednoduchých po zložité a budú dobre prijaté.

Ako vymazať záznam

Ak ste niečo napísali zle, opravte to príkazom DELETE. Funguje rovnako ako UPDATE. Napíšeme nasledujúci kód:

DELETE FROM 'table' WHERE id = '1'

Načítavanie informácií

Ak chcete získať hodnoty z databázy, použite príkaz SELECT. Napíšeme nasledujúci kód:

VYBERTE * Z „tabuľky“ WHERE id = „1“

V tomto príklade vyberieme všetky dostupné polia v tabuľke. Toto sa stane, ak do príkazu napíšete hviezdičku „*“. Ak potrebujete vybrať nejakú vzorovú hodnotu, napíšeme takto:

VYBERTE denník, odovzdajte tabuľku FROM WHERE id = '1'

Treba si uvedomiť, že schopnosť pracovať s databázami nebude stačiť. Na vytvorenie profesionálneho internetového projektu sa budete musieť naučiť pridávať údaje z databázy na stránky. Aby ste to dosiahli, oboznámte sa s webovým programovacím jazykom php. Toto vám pomôže triedny kurz od Michaila Rusakova .


Zhodiť stôl

Vyskytuje sa s požiadavkou DROP. Ak to chcete urobiť, napíšte nasledujúce riadky:

stôl DROP TABLE;

Výstup záznamu z tabuľky podľa konkrétnej podmienky

Zvážte takýto kód:

SELECT id, country, city FROM table WHERE people> 150000000

Zobrazí záznamy krajín, v ktorých je viac ako stopäťdesiat miliónov obyvateľov.

únie

Pomocou funkcie Join je možné prepojiť viacero stolov. Ako to funguje, pozrite si toto video podrobnejšie:

PHP a MySQL

Ešte raz chcem zdôrazniť, že dopytovanie pri tvorbe internetového projektu je bežná vec. Ak ich chcete použiť v dokumentoch php, postupujte takto:

  • K databáze sa pripájame pomocou príkazu mysql_connect ();
  • Pomocou mysql_select_db () vyberte požadovanú databázu;
  • Požiadavku spracujeme pomocou mysql_fetch_array ();
  • Spojenie ukončíme príkazom mysql_close ().

Dôležité! Práca s databázou nie je náročná. Hlavná vec je správne napísať žiadosť.

Začínajúci webmasteri si budú myslieť. Čo si o tejto téme prečítať? Chcel by som odporučiť knihu od Martina Grabera “ SQL pre obyčajných smrteľníkov ". Je napísaná tak, že začiatočníkom bude všetko jasné. Použite ju ako referenčnú knihu.

Ale toto je teória. Aká je situácia v praxi? V skutočnosti musí byť internetový projekt nielen vytvorený, ale musí sa dostať na vrchol spoločností Google a Yandex. Video kurz " Tvorba a propagácia webových stránok ».


Video návod

Stále máte otázky? Pozrite si online video podrobnejšie.

Výkon

Práca s písaním SQL dotazov teda nie je taká náročná, ako sa zdá, ale musí to urobiť každý správca webu. Pomôže to vyššie popísaným video kurzom. Prihlásiť sa na odber moja skupina VKontakte byť prvý, kto sa dozvie o objavení sa nových zaujímavých informácií.




Stránky pomocníka pre počítače

© Copyright 2021,
rzdoro.ru – stránka počítačovej pomoci

  • Kategórie
  • železo
  • Windows 10
  • Skenovanie
  • Windows 7
  • železo
  • Windows 10
  • Skenovanie
  • Windows 7