Zápis do sql tabuľky c. Požiadavky na zmenu pomocou príkazov SQL

Zápis do sql tabuľky c.  Požiadavky na zmenu pomocou príkazov SQL
Zápis do sql tabuľky c. Požiadavky na zmenu pomocou príkazov SQL

Tento článok je venovaný naplneniu databázových tabuliek údajmi, to znamená, že budeme študovať príkazy SQL na vkladanie nových záznamov. Malo by sa povedať, že záznam do tabuľky možno vykonať dvoma spôsobmi:

Metóda č.1.
Skúsme pridať záznam o novej krajine do tabuľky krajín. Syntax pridávania bude nasledovná:
INSERT INTO názov_tabuľky (pole_1, pole_2, ...) VALUES (Hodnota_1, Hodnota_2, ...); Na základe našej štruktúry tabuľky bude SQL dotaz vyzerať takto:
INSERT INTO countries (country_name, acronym_name) VALUES ("Rusko", "RU"); Takto sme do tabuľky pridali záznam o krajine „Rusko“. Všetko by tu malo byť jasné a jednoduché, hlavnou vecou je pozorne sa pozrieť na polia, ktoré uvádzate v prvých zátvorkách, a do druhej zapísať hodnoty v rovnakom poradí.

Metóda č.2.
Druhý spôsob je podľa mňa trochu jednoduchší, keďže vidíte, čo priraďujete a ku ktorému odboru. Verte mi, ak má tabuľka veľké množstvo stĺpcov, potom je veľmi ľahké zameniť alebo prehliadnuť poradie polí v prvej zátvorke a poradie hodnôt v druhej zátvorke. Syntax druhej metódy je:
INSERT INTO názov_tabuľky SET pole_1 = Hodnota_1, pole_2 = Hodnota_2, ... ; Poďme ďalej v tomto príklade Doplníme do tabuľky pár informácií osôb, pretože existuje viac polí a výhoda druhej metódy sa okamžite prejaví:
INSERT INTO osôb SET meno_mena="Ivan", priezvisko="Dulin", dátum_registrácie="2012-06-14", krajina="1"; Teraz naša tabuľka obsahuje nasledujúce údaje:


Pravdepodobne ste si všimli, že sme nešpecifikovali hodnotu pre vek, ale ukázalo sa, že je vyplnená... Všetko je správne - pre tohto odboru predvolenú hodnotu sme nastavili na 25. Teraz je teda náš Ivan Dulin uvedený v databáze s vekom 25 rokov. Možno to nie je najlepší príklad nastavenia predvolenej hodnoty pre pole veku, ale môžete nastaviť také vlastnosti pre polia, ako je napríklad hodnotenie používateľa stránky alebo počet zobrazení stránky. Pôvodne sú nastavené na 0.

Mali by ste tiež venovať pozornosť formátu dátumu v MySQL: YYYY-MM-DD. Ak to nedodržíte, vaše záznamy jednoducho nebudú zapísané do tabuľky.

Ako vidíte, pole profesie je vyplnené ako NULL, toto je prázdna hodnota. Pre toto pole.

Ako doplnok zvážte nasledujúci príkaz:
NAČÍTAJTE ÚDAJE LOCAL INFILE "D:\zapros.txt" DO TABUĽKY osoby; Čo si myslíte, že sme teraz urobili?! A urobili sme nasledovné: pridali údaje do tabuľky osôb zo súboru request.txt, ktorý sa nachádza na jednotke D. Informácie v súbore by mali mať nasledujúcu štruktúru:


Štruktúra údajov súboru musí spĺňať nasledujúce požiadavky:
  1. Každý nový záznam musí byť popísaný na novom riadku
  2. Údaje musia byť špecifikované úplne pre všetky polia. Ako vidíte, do poľa id sme zadali hodnotu NULL, pretože sa automaticky zvyšuje, takže požadovanú hodnotu zadá aj samotný MySQL.
  3. Polia sú od seba oddelené znakom tabulátora (kláves Tab).
  4. Zadané informácie sa musia zhodovať s typmi údajov konkrétneho poľa. Teda napríklad dátum vo formáte RRRR-MM-DD, celé číslo pre celé číslo atď.
Takto ste sa naučili zadávať nové údaje do databázových tabuliek. Ak chcete konsolidovať materiál, ktorý ste študovali, zadajte nasledujúce informácie:

Profesijný stôl:

Tabuľka osôb:

krstné meno priezvisko Vek dátum registrácie krajina povolanie
Leonid Bilak 45 2012-06-20 2 1
Yuri Nazarov 22 2012-06-21 3 1
Alla Savenko 25 2012-06-22 2 3
Irina Nikolaeva 31 2012-06-22 1 3

Nezabudnite pridať tieto položky, pretože ich budeme potrebovať pre našu štúdiu. príkaz SELECT(výber informácií z databázy), ktorým sa budeme venovať v ďalšom (štvrtom) článku o štúdiu SQL dotazov.

Programátori majú občas horúcu túžbu prečítať si niečo z databázy. Programátori sú nervózni a podráždení, strácajú spánok a horúčkovito ukazujú prstami na klávesnicu. V záujme prospechu všetkých a svetového mieru sa pozrime na jednoduchú správu databáz z C# pomocou ADO.NET a OLE DB. Hoci tento mechanizmus podporuje rôzne databázy ako Oracle, tu a teraz budeme používať MS SQL Server.

Dve hlavné úlohy pri práci s databázou

2. Vykonanie príkazu SQL, ktorý robí niečo na serveri (vkladanie, aktualizácia, mazanie, volanie funkcie alebo uloženej procedúry

3. Postupné čítanie z vybraného výberu riadok po riadku. Používa sa hlavne vo webových aplikáciách v desktopových aplikáciách je jednoduchšie stiahnuť celý výber naraz; RAM, úspora pri čítaní len nevyhnutných riadkov je zanedbateľná.

4. Zriedkavý prípad. Automatická aktualizácia tabuľky v databáze na základe zmien v DataTable (zvyčajne upravovaných cez vizuálne rozhranie). V reálnom živote sa údaje zvyčajne čítajú cez komplexný dopyt alebo pohľad na spojenie haldy, takže automatická synchronizácia nie je vhodná.

Hlavné triedy používané na tieto účely: OleDbConnection - pripojenie k databáze, vytvorené pomocou reťazca obsahujúceho parametre pripojenia, open, close, OleDbCommand - vytvorené pomocou inštancie pripojenia a príkazu sql, ak potrebujete vykonať aktualizáciu alebo získať jediná hodnota, potom stačí trieda, OleDbDataAdapter - vytvorený pomocou OleDbCommand, špecializuje sa na jednorazové čítanie množín riadkov v DataTable, dokáže automaticky vytvárať stĺpce DataTable na základe výberu, prenášať zmeny z DataTable do tabuľky v databáza, OleDbDataReader - sekvenčné čítanie riadkov v DataTable po jednom (interne funguje OleDbDataAdapter), DataTable / DataSet - hlavný kontajner pre dáta. Enumerácia OleDbType ukladá typy údajov databázy.

Používanie System.Data; pomocou System.Data.OleDb; // reťazec pripojenia, použitý systém Používatelia systému Windows(Integrované zabezpečenie=SSPI;) string connString = "Poskytovateľ=SQLOLEDB.1;Integrované zabezpečenie=SSPI;Pretrvávajúce informácie o zabezpečení=Nepravda;Počiatočný katalóg=názov databázy;Zdroj údajov=názov servera"; // alternatívny reťazec pripojenia pomocou autentifikácie MS SQL Server // connString = "Poskytovateľ=SQLOLEDB.1;Persist Security Info=False;Initial Catalog=databaseName;Connect Timeout=20;Data Source=serverName;Uid=userName;Pwd=userPassword ; " OleDbConnection dbConn = new OleDbConnection(connString); dbConn.Open(); someDataTable = new DataTable(); OleDbDataAdapter dbAdapter = new OleDbDataAdapter("vyberte COLUMN1, COLUMN2 z TEST_TABLE ORDER BY COLUMN2", dbConn); // vnútorná štruktúra prázdnej tabuľky sa vytvorí automaticky na základe načítaných údajov, ak už bola špecifikovaná štruktúra tabuľky (napríklad cez typizovaný DataSet), údaje sa zapíšu do stĺpcov so zodpovedajúcimi názvami alebo do nových; stĺpce budú pridané dbAdapter.Fill(someDataTable); // alternatívna možnosť na vyplnenie tabuľky v množine údajov // dbAdapter.Fill(someDataSet, "someDataTable"); dbConn.Close();

2. Vykonanie príkazu SQL, ktorý robí niečo na serveri (vkladanie, aktualizácia, mazanie, volanie funkcie alebo uloženej procedúry.

Za zmienku stoja najmä problémy s dátumami. Implementácia dátumov v .Net je extrémne pokrivená – dátumy spočiatku nemôžu byť prázdne, no v reálnom živote sú prázdne neustále. Najviac správne riešenie- použite špeciálnu triedu dátumu, ktorá opravuje chyby programátorov Microsoftu. Lazier vývojári uchovávajú všetky dátumy v kóde ako reťazce a konvertujú ich na DateTime len v prípade potreby, napríklad pri zápise do databázy alebo DataTable. DateTime s možnosťou Null nepomôže, pretože prázdny dátum v rozhraní by mal vyzerať prázdny riadok a pri zápise do databázy ako DBNull.Value - ani banálna nula v kóde sa neprevedie na tieto hodnoty bez ďalších tancov s tamburínou.

Prvá možnosť zahŕňa jednoduché zlúčenie reťazca dotazu. Považuje sa za zlý postup a obzvlášť nebezpečný vo webových aplikáciách, pretože je zraniteľný voči útokom hackerov. Problém s prázdnymi dátumami sa len tak ľahko nevyrieši. Navyše pri práci s dátumami sa objaví dodatočný problém- rôzne formáty dátumových reťazcov v závislosti od regionálnych nastavení .Net Framework, vývojového prostredia a servera SQL. Môže to vyzerať neskutočne - rovnaký dotaz funguje v SQL Managment Studio, ale pri spustení z kódu sa zrúti. Čiastočne uložené špeciálnym formátom dátumového reťazca, to sa však často robí v malých programoch na interné použitie, o ktorých existencii sa vonkajší svet nikdy nedozvie.

OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "INSERT INTO TEST_TABLE (INT_COLUMN, VARCHAR_COLUMN, DATETIME_COLUMN) VALUES (" + intVariable", " + stringVariable" , " + dateTimeVariable.ToString("yyyyMMdd") +"); dbCommand.ExecuteNonQuery();

Správna možnosť zahŕňa vytvorenie príkazu so sadou silne napísaných parametrov. Zvážte, že predchádzajúci odsek neexistoval.

OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "INSERT INTO TEST_TABLE (INT_COLUMN, VARCHAR_COLUMN, DATETIME_COLUMN) VALUES (?, ?, ?)"; dbCommand.Parameters.Add("INT_COLUMN", OleDbType.Integer).Value = intVariable; dbCommand.Parameters.Add("VARCHAR_COLUMN", OleDbType.VarChar).Value = stringPremenna; if (stringDate == "") ( dbCommand.Parameters.Add("DATETIME_COLUMN", OleDbType.DateTime).Value = DBNull.Value; ) else ( dbCommand.Parameters.Add("DATETIME_COLUMN", OleDbTypeal.eVu.D Convert.ToDateTime(stringDate) dbCommand.ExecuteNonQuery();

Uložená procedúra sa volá presne tým istým spôsobom, z dôvodu rozmanitosti existuje ďalšia možnosť zapisovania hodnôt do parametrov (netýka sa to konkrétne uloženej procedúry):

OleDbCommand someDbComm = new OleDbCommand("someStoredProcedure", this.dbConn); someDbComm.CommandType = CommandType.StoredProcedure; someDbComm.Parameters.Add("@parameter1", OleDbType.VarChar); someDbComm.Parameters.Add("@parameter2", OleDbType.VarChar); someDbComm.Parameters.Value = "Každý problém má vždy riešenie - jednoduché, pohodlné a samozrejme nesprávne"; someDbComm.Parameters.Value = "Henry Louis Mencken"; someDbComm.ExecuteNonQuery(); !}

Rozšírená verzia popisu parametra označujúca veľkosť poľa a väzbu na konkrétny stĺpec tabuľky.

DbCommand.Parameters.Add("VARCHAR_COLUMN", OleDbType.VarChar, 100, "VARCHAR_COLUMN").Value = stringPremenna;

Ak nepotrebujeme naviazať parameter príkazu na konkrétne pole DataTable, potom je najlepšie veľkosť neuvádzať vôbec, napríklad ak je reťazec menší ako zadaná dĺžka Varchar, potom dobrý framework .Net pridá medzery v reťazci až do zadanej dĺžky, čím sa poškodia údaje prenášané na server.

Hodnotu jedného poľa číta metóda ExecuteScalar().

OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "VYBRAŤ TEST_COLUMN Z TEST_TABLE WHERE ID_COLUMN = ?"; dbCommand.Parameters.Add("INT_COLUMN", OleDbType.Integer).Value = intVariable; int vysledok = Convert.ToInt32(dbCommand.ExecuteScalar());

Zvlášť treba poznamenať, že ExecuteScalar vracia Object a ak požiadavka nevrátila vôbec nič, tak výsledok bude null a konverzia na normálny dátový typ zlyhá s chybou. Ak je možná situácia, keď nedostaneme žiadnu odpoveď, potom musíme urobiť toto:

OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "VYBRAŤ TEST_COLUMN Z TEST_TABLE WHERE ID_COLUMN = ?"; dbCommand.Parameters.Add("INT_COLUMN", OleDbType.Integer).Value = intVariable; objekt vysledokObj = dbCommand.ExecuteScalar() int vysledok = -1; // predvolená hodnota znamená prázdny výsledok if(resultObj != null) ( result = Convert.ToInt32(dbCommand.ExecuteScalar()); )

3. Postupné čítanie z vybraného výberu riadok po riadku
Čítanie jedného riadku (niekoľko sa číta v slučke);

OleDbCommand dbCommand = new OleDbCommand(vyberte PERSON_ID, MENO, PRIEZVISKO z TEST_TABLE, dbConn); OleDbDataReader dbReader = dbCommand.ExecuteReader(); dbReader.Read(); názov reťazca = Convert.ToString(dbReader["NAME"]); string priezvisko = Convert.ToString(dbReader["PRIEZVISKO"]); dbReader.Close();

4. Zriedkavý prípad. Automatická aktualizácia tabuľky v databáze na základe zmien v DataTable (zvyčajne upravovaná cez vizuálne rozhranie).

Pre každý možný prípad je potrebné napísať štyri príkazy pre DbAdapter – select, insert, update, delete.

DbAdapter.InsertCommand = new OleDbCommand("vložiť do TEST_TABLE (NAME, FAMIL, AGE) values ​​​​(?, ?, ?)", dbConnection); dbAdapter.InsertCommand.Parameters.Add("NAME", OleDbType.VarChar, 100, "NAME"); dbAdapter.InsertCommand.Parameters.Add("FAMIL", OleDbType.VarChar, 100, "FAMIL"); // pre dátové typy s konštantnou dĺžkou je dĺžka zadaná v príkaze ignorovaná dbAdapter.InsertCommand.Parameters.Add("AGE", OleDbType.Integer, 100, "AGE"); // pridanie aktualizačného príkazu dbAdapter.UpdateCommand = new OleDbCommand("aktualizácia TEST_TABLE set NAME = ?, FAMIL = ?, AGE = ? kde ID = ?, dbConnection); dbAdapter.UpdateCommand.Parameters.Add("NAME", OleDbType.VarChar,100, "NAME"); dbAdapter.UpdateCommand.Parameters.Add("FAMIL", OleDbType.VarChar, 100, "FAMIL"); dbAdapter.UpdateCommand.Parameters.Add("AGE", OleDbType.Integer, 100, "AGE"); dbAdapter.UpdateCommand.Parameters.Add("ID", OleDbType.Integer, 100, "ID"); // pridanie príkazu na vymazanie dbAdapter.DeleteCommand = new OleDbCommand("delete from TEST_TABLE where ID = ?", dbConnection); dbAdapter.DeleteCommand.Parameters.Add("ID", OleDbType.Integer, 100, "ID"); try ( // prenesie všetky zmeny z DataTable do tabuľky v databáze dbAdapter.Update(table); ) catch (Chyba výnimky) ( MessageBox.Show("Chyba pri ukladaní údajov!" + error.Message); return; ) MessageBox Zobraziť("Zmeny uložené!");



Obsah článku
1. Najjednoduchšie MySQL dotazy
2. Jednoduché SELECT dotazy
3. Jednoduché otázky INSERT (nový záznam).
4. Jednoduchá AKTUALIZÁCIA(prepísať, pripojiť) otázky
5. Jednoduché DELETE (vymazanie záznamu) dotazy
6. Jednoduché DROP (vymazanie tabuľky) dotazy
7. Komplexné MySQL dotazy
8. MySQL dotazy a PHP premenné

1. Najjednoduchšie SQL dotazy

1. Zobrazí zoznam VŠETKÝCH databáz.

ZOBRAZIŤ databázy;
2. Vypíše VŠETKY tabuľky v databáze base_name.

ZOBRAZIŤ tabuľky v base_name;

2. Jednoduché SELECT dotazy do databázy MySQL

VYBRAŤ– dotaz, ktorý vyberá existujúce údaje z databázy. Môžete zadať špecifické parametre výberu pre výber. Napríklad podstata požiadavky v ruštine znie takto - VYBERTE také a také stĺpce Z takej a takej tabuľky, KDE sa parameter takého a takého stĺpca rovná hodnote.

1. Vyberie VŠETKY údaje v tabuľke tbl_name.

SELECT * FROM názov_tbl;
2. Zobrazuje počet záznamov v tabuľke tbl_name.

SELECT pocet(*) FROM tbl_name;
3. Vyberie (SELECT) z tabuľky (FROM) tbl_name limit (LIMIT) 3 záznamy, počnúc od 2.

SELECT * FROM tbl_name LIMIT 2,3;
4. Vyberie (SELECT) VŠETKY (*) záznamy z (FROM) tabuľky tbl_name a zoradí ich (ORDER BY) podľa poľa id v poradí.

SELECT * FROM tbl_name ORDER BY id;
5. Vyberie (SELECT) VŠETKY záznamy z (FROM) tabuľky tbl_name a zoradí ich (ORDER BY) podľa poľa id v REVERSE poradí.

SELECT * FROM tbl_name ORDER BY id DESC;
6. Vyberie ( VYBRAŤ) VŠETKY (*) záznamy z ( OD) tabuľky používateľov a triedi ich ( ZORADIŤ PODĽA) na ihrisku id vo vzostupnom poradí, limit ( LIMIT) prvých 5 záznamov.

SELECT * FROM užívateľov ORDER BY ID LIMIT 5;
7. Vyberie všetky záznamy z tabuľky používateľov, kde je pole meno zodpovedá hodnote Gena.

SELECT * FROM užívateľov WHERE fname="Gena";
8. Vyberie všetky záznamy z tabuľky používateľov, kde je hodnota poľa meno začať s Ge.

SELECT * FROM users WHERE fname LIKE "Ge%";
9. Vyberie všetky záznamy z tabuľky používateľov, Kde meno končí s na a zoradí záznamy vo vzostupnom poradí podľa hodnoty id.

SELECT * FROM users WHERE fname LIKE "%na" ORDER BY id;
10. Vyberie všetky údaje zo stĺpcov meno, meno od stola používateľov.

SELECT fname, lname FROM užívateľov;

11. Povedzme, že v tabuľke používateľských údajov máte krajinu. Ak teda chcete zobraziť LEN zoznam vyskytujúcich sa hodnôt (aby sa napríklad Rusko nezobrazovalo 20-krát, ale iba raz), potom použijeme DISTINCT. Vyvedie Rusko, Ukrajinu, Bielorusko z masy opakujúcich sa hodnôt. Teda zo stola používateľov reproduktory krajina Vypíšu sa VŠETKY UNIKÁTNE hodnoty

VYBERTE DISTINCT krajinu OD používateľov;
12. Vyberie VŠETKY riadkové údaje z tabuľky používateľov Kde Vek má hodnoty 18,19 a 21.

SELECT * FROM užívateľov WHERE age IN (18,19,21);
13. Vyberie MAXIMÁLNU hodnotu Vek v tabulke používateľov. Teda ak máte vo svojej tabuľke najväčšiu hodnotu Vek(z anglického veku) je 55, potom bude výsledkom dopytu 55.

SELECT max(vek) FROM užívateľov;
14. Vyberte údaje z tabuľky používateľov podľa polí názov A Vek KDE Vek má najmenšiu hodnotu.

SELECT meno, min(vek) FROM užívateľov;
15. Vyberte údaje z tabuľky používateľov na ihrisku názov KDE id NEROVNÁ SA 2.

SELECT meno FROM užívateľov WHERE id!="2";

3. Jednoduché otázky INSERT (nový záznam).

VLOŽIŤ– dotaz, ktorý vám umožní POČIATOČNE vložiť záznam do databázy. To znamená, že vytvorí NOVÝ záznam (riadok) v databáze.

1. robí nový vstup v tabulke používateľov, v teréne názov vloží Sergeja a v teréne Vek vložky 25. Takto sa pridáva do tabuľky Nový riadok s týmito hodnotami. Ak je stĺpcov viac, zostávajúce zostanú prázdne alebo s predvolenými hodnotami.

INSERT INTO užívateľov (meno, vek) VALUES ("Sergey", "25");

4. Jednoduché UPDATE dotazy do databázy MySQL

AKTUALIZOVAŤ– dotaz, ktorý vám umožňuje REZERVOVAŤ hodnoty polí alebo PRIDAŤ niečo do už existujúceho riadku v databáze. Existuje napríklad hotový riadok, ale v ňom je potrebné prepísať parameter veku, pretože sa časom zmenil.

1. V tabuľke používateľov Vek sa stáva 18.

AKTUALIZOVAŤ používateľov SET vek = "18" WHERE id = "3";
2. Všetko je rovnaké ako v prvej požiadavke, jednoducho sa zobrazí syntax požiadavky, kde sú prepísané dve alebo viac polí.
V tabulke používateľov WHERE id sa rovná hodnote 3 polí Vek dovŕši 18 rokov a krajina Rusko.

AKTUALIZOVAŤ SET používateľov vek = "18", krajina = "Rusko" WHERE id = "3";

5. Jednoduché DELETE (vymazanie záznamu) dotazy do databázy MySQL

VYMAZAŤ– dotaz, ktorý vymaže riadok z tabuľky.

1. Odstráni riadok z tabuľky používateľov KDE id rovná sa 10.

DELETE FROM users WHERE id = "10";

6. Jednoduché DROP (delete table) dotazy do databázy MySQL

POKLES– dotaz, ktorý vymaže tabuľku.

1. Vymaže celú tabuľku názov_tbl.

DROP TABLE názov_tbl;

7. Komplexné dotazy do databázy MySQL

Zaujímavé otázky, ktoré môžu byť užitočné aj pre skúsených používateľov

SELECT id,name,country FROM users,admins WHERE TO_DAYS(NOW()) - TO_DAYS(registration_date)<= 14 AND activation != "0" ORDER BY registration_date DESC;
Tento zložitý dotaz VYBERÁ stĺpce id, meno, krajina V TABUĽKÁCH používatelia, správcovia KDE dátum registrácie(dátum) nie starší 14 dni I aktivácia NEROVNÁ SA 0 , Triediť podľa dátum registrácie v opačnom poradí (nové ako prvé).

AKTUALIZOVAŤ používateľov SET vek = "18+" WHERE vek = (VYBERTE vek FROM používateľov WHERE muž = "muž");
Vyššie je uvedený príklad tzv žiadosť v rámci žiadosti v jazyku SQL. Aktualizujte vek medzi používateľmi na 18+, pričom pohlavie je muž. Neodporúčam takéto možnosti žiadosti. Z vlastnej skúsenosti poviem, že je lepšie vytvoriť niekoľko samostatných - rýchlejšie sa spracujú.

8. Databázové dotazy MySQL a PHP

V dopytoch MySQL na stránke PHP môžete vkladať premenné ako porovnávané hodnoty atď. Pár príkladov

1. Vyberie všetky záznamy z tabuľky používateľov, kde je pole meno zodpovedá hodnote premennej $name.

SELECT * FROM užívateľov WHERE fname="$name";
2. V tabuľke používateľov WHERE id sa rovná hodnote 3 polí Vek sa zmení na hodnotu premennej $vek.

AKTUALIZOVAŤ používateľov SET vek = "$vek" WHERE id = "3";

Pozor! Ak máte záujem o iný príklad, napíšte otázku do komentárov!

Odstraňovanie záznamov

Ak chcete odstrániť záznamy z tabuľky, použite operátor DELETE:

DELETE FROM Tablename WHERE podmienka;

Tento operátor odstráni záznamy (nie jednotlivé hodnoty stĺpcov) zo zadanej tabuľky, ktoré spĺňajú zadanú podmienku. Podmienka je logický výraz, ktorého rôzne konštrukcie boli diskutované v predchádzajúcich cvičeniach.

Nasledujúci dotaz vymaže záznamy z tabuľky Zákazník, kde je hodnota stĺpca LName "Ivanov":

VYMAZAŤ OD zákazníka

WHERE LName = "Ivanov"

Ak tabuľka obsahuje informácie o niekoľkých klientoch s priezviskom Ivanov, potom budú vymazaní všetci.

Príkaz WHERE môže obsahovať poddotaz na výber údajov (príkaz SELECT). Poddotazy v príkaze DELETE fungujú presne rovnako ako v príkaze SELECT. Nasledujúci dotaz odstráni všetkých klientov z mesta Moskva, zatiaľ čo jedinečný identifikátor mesta sa vráti pomocou poddotazu.

VYMAZAŤ OD zákazníka

WHERE IdCity IN (VYBERTE IdCity FROM City WHERE CityName = "Moskva")

Transact-SQL rozširuje štandardný SQL tým, že vám umožňuje použiť dodatočnú klauzulu FROM v príkaze DELETE. Toto rozšírenie, ktoré určuje spojenie, možno použiť namiesto poddotazu v klauzule WHERE na určenie riadkov, ktoré sa majú vymazať. Umožňuje vám zadať údaje z druhého FROM a odstrániť zodpovedajúce riadky z tabuľky v prvej klauzule FROM. Predošlý dotaz možno prepísať nasledovne

VYMAZAŤ OD zákazníka

OD zákazníka k INNER JOIN

Operácia odstraňovania záznamov z tabuľky je nebezpečná v tom zmysle, že je spojená s rizikom nevratnej straty dát v prípade sémantických (nie však syntaktických) chýb vo formulácii SQL výrazu. Aby ste sa vyhli akýmkoľvek problémom, pred odstránením záznamov sa odporúča najskôr spustiť príslušný výberový dotaz, aby ste zistili, ktoré záznamy sa vymažú. Takže napríklad pred vykonaním odstraňovacieho dotazu, o ktorom sme hovorili vyššie, by nebolo na škodu spustiť zodpovedajúci výberový dotaz.

VYBRAŤ *

OD zákazníka k INNER JOIN

Mesto c ON k.IdCity = c.IdCity AND c.CityName = "Moskva"

Ak chcete odstrániť všetky záznamy z tabuľky, jednoducho použite príkaz DELETE bez kľúčového slova WHERE. V tomto prípade sa samotná tabuľka so všetkými stĺpcami v nej definovaných uloží a je pripravená na vkladanie nových záznamov. Napríklad nasledujúci dotaz vymaže záznamy pre všetky produkty.

VYMAZAŤ Z produktu

Zadanie na samostatnú prácu: Formulujte dotaz v SQL na odstránenie všetkých objednávok, ktoré neobsahujú jeden produkt (t. j. všetky prázdne objednávky).

Príkaz INSERT vloží nové záznamy do tabuľky. V tomto prípade môžu byť hodnoty stĺpca doslovné konštanty alebo môžu byť výsledkom vykonania poddotazu. V prvom prípade sa na vloženie každého riadku používa samostatný príkaz INSERT; v druhom prípade sa vloží toľko riadkov, koľko ich vráti poddotaz.

Syntax operátora je nasledovná:

    VLOŽIŤ DO [ (,...) ]

    (VALUES(,…))

  1. | (ZÁKLADNÉ HODNOTY)

Ako môžete vidieť z prezentovanej syntaxe, zoznam stĺpcov je voliteľný (naznačujú to hranaté zátvorky v popise syntaxe). Ak chýba, zoznam vložených hodnôt musí byť úplný, to znamená poskytnúť hodnoty pre všetky stĺpce tabuľky. V tomto prípade musí poradie hodnôt zodpovedať poradiu určenému príkazom CREATE TABLE pre tabuľku, do ktorej sa vkladajú riadky. Okrem toho tieto hodnoty musia byť rovnakého typu údajov ako stĺpce, do ktorých sú zadané. Ako príklad zvážte vloženie riadka do tabuľky Produkt vytvorenej nasledujúcim príkazom CREATE TABLE:

    CREATE TABLE produkt

    maker char (1) NOT NULL,

    model varchar(4) NOT NULL,

    zadajte varchar(7) NOT NULL

Predpokladajme, že chcete pridať PC model 1157 od výrobcu B do tejto tabuľky.

    VLOŽIŤ DO produktu

    HODNOTY ("B" , 1157 , "PC" );

Ak zadáte zoznam stĺpcov, môžete zmeniť ich „prirodzené“ poradie:

    INSERT INTO Product (typ, model, výrobca)

    HODNOTY ("PC" , 1157 , "B" );

Zdalo by sa, že ide o úplne zbytočnú funkciu, ktorá len robí dizajn ťažkopádnejším. Vyhráva však, ak majú stĺpce predvolené hodnoty. Zvážte nasledujúcu štruktúru tabuľky:

    CREATE TABLE product_D

    maker char (1) NULL,

    model varchar(4) NULL,

    typ varchar (7) NIE JE NULL PREDCHODU "PC"

Všimnite si, že tu majú hodnoty všetkých stĺpcov predvolené hodnoty (prvé dva sú NULL a posledný stĺpec je typ - PC). Teraz by sme mohli napísať:

    INSERT INTO Product_D (model, výrobca)

    VALUES(1157; "B");

V tomto prípade bude chýbajúca hodnota pri vkladaní riadku nahradená predvolenou hodnotou - PC. Všimnite si, že ak v príkaze CREATE TABLE nie je stĺpcu priradená predvolená hodnota a je zadané obmedzenie NOT NULL, ktoré zakazuje použitie NULL v tomto stĺpci tabuľky, potom sa predpokladá predvolená hodnota NULL.

Vynára sa otázka: je možné nešpecifikovať zoznam stĺpcov a napriek tomu použiť predvolené hodnoty? Odpoveď je áno. Ak to chcete urobiť, namiesto explicitného zadania hodnoty použite rezervované slovo DEFAULT :

    INSERT INTO Product_D

    HODNOTY ("B" , 1158 , VÝCHOZÍ ) ;

Keďže všetky stĺpce majú predvolené hodnoty, na vloženie riadku s predvolenými hodnotami môžete napísať:

    INSERT INTO Product_D

    HODNOTY(predvolene, predvolene, predvolene);

Pre tento prípad však existuje špeciálna konštrukcia DEFAULT VALUES (pozri syntax operátora), pomocou ktorej je možné vyššie uvedený operátor prepísať do tvaru

    INSERT INTO Product_D DEFAULT VALUES ;

Všimnite si, že pri vkladaní riadku do tabuľky sa skontrolujú všetky obmedzenia uložené na túto tabuľku. Môžu to byť obmedzenia primárneho kľúča alebo jedinečného indexu, obmedzenia CHECK alebo obmedzenia referenčnej integrity. Ak dôjde k porušeniu akéhokoľvek obmedzenia, vloženie riadku bude odmietnuté. Pozrime sa teraz na prípad použitia poddotazu. Predpokladajme, že do tabuľky Product_D potrebujeme vložiť všetky riadky z tabuľky Product týkajúce sa modelov osobných počítačov (typ = 'PC'). Keďže hodnoty, ktoré potrebujeme, sú už v nejakej tabuľke, manuálne generovanie vložených riadkov je po prvé neefektívne a po druhé môže spôsobiť chyby pri zadávaní. Použitie poddotazu rieši tieto problémy:

Použitie symbolu „*“ v poddotazi je v tomto prípade opodstatnené, keďže poradie stĺpcov je pre obe tabuľky rovnaké. Ak by to tak nebolo, v príkaze INSERT, poddotaze alebo oboch by sa musel použiť zoznam stĺpcov, ktorý by sa zhodoval s poradím stĺpcov:

Tu, ako predtým, môžete zadať nie všetky stĺpce, ak chcete použiť existujúce predvolené hodnoty, napríklad:

V tomto prípade bude stĺpec typu tabuľky Product_D nahradený predvolenou hodnotou PC pre všetky vložené riadky.

Všimnite si, že pri použití poddotazu obsahujúceho predikát sa vložia len tie riadky, pre ktoré je hodnota predikátu TRUE (nie UNKNOWN!). Inými slovami, ak by stĺpec typu v tabuľke Produkt mohol mať hodnotu NULL a táto hodnota bola prítomná v niekoľkých riadkoch, tieto riadky by sa nevložili do tabuľky Produkt_D.

Umelá technika použitia poddotazu, ktorý tvorí riadok s klauzulou UNION ALL, vám umožňuje prekonať obmedzenie vloženia jedného riadku do príkazu INSERT pri použití konštruktora riadkov v klauzule VALUES. Ak teda potrebujeme vložiť niekoľko riadkov pomocou jedného príkazu INSERT, môžeme napísať:

    INSERT INTO Product_D

    Výrobca SELECT "B" AS, model 1158 AS, typ "PC" AS

    UNION VŠETKO

    SELECT "C", 2190, "Laptop"

    UNION VŠETKO

    SELECT "D", 3219, "Tlačiareň" ;

Použitie UNION ALL je vhodnejšie ako UNION, aj keď je zaručená absencia duplicitných riadkov, pretože v tomto prípade sa nevykoná žiadna kontrola na odstránenie duplikátov.

Treba poznamenať, že vkladanie viacerých n-tic pomocou konštruktora riadkov je už implementované v Systém správy relačných databáz (DBMS), vyvinutý spoločnosťou Microsoft Corporation.Structured Query Language) je univerzálny počítačový jazyk používaný na vytváranie, úpravu a manipuláciu s údajmi v relačných databázach. SQL Server 2008. Vzhľadom na túto možnosť je možné posledný dotaz prepísať takto:

    INSERT INTO Product_D VALUES

    ("B", 1158, "PC"),

    ("C", 2190, "Laptop"),