Pridávanie údajov do tabuľky SQL. Základy T-SQL

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 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 vráti poddotaz.

Syntax operátora je nasledovná:

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

    (HODNOTY(,…) )

  1. | ( ZÁKLADNÉ HODNOTY )

Ako môžete vidieť z prezentovanej syntaxe, zoznam stĺpcov je voliteľný (hovorí sa 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. Poradie hodnôt sa musí zhodovať s poradím určeným 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

Nech je potrebné pridať do tejto tabuľky PC model 1157 od výrobcu B. Môžete to urobiť nasledujúcim vyhlásením:

    VLOŽIŤ DO produktu

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

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

    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:

    VYTVORIŤ TABUĽKU produkt_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 po vložení riadka chýbajúca hodnota nahradená predvolenou hodnotou PC. Všimnite si, že ak nie je zadaná žiadna predvolená hodnota pre stĺpec v príkaze CREATE TABLE a nie je zadané žiadne 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 kladná. 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 by ste mohli napísať:

    INSERT INTO Product_D

    HODNOTY (DEFAULT , DEFAULT , DEFAULT ) ;

Pre tento prípad však existuje špeciálna konštrukcia DEFAULT VALUES (pozri syntax operátora), ktorú možno použiť na prepísanie vyššie uvedeného operátora ako

    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árny kľúč alebo jedinečný index, kontrolné obmedzenia typu CHECK, obmedzenia referenčnej integrity. Ak dôjde k porušeniu akéhokoľvek obmedzenia, vloženie riadku bude odmietnuté. Zvážte teraz prípad použitia poddotazu. Predpokladajme, že do tabuľky Product_D chceme vložiť všetky riadky z tabuľky Product týkajúce sa modelov osobné počítače(typ='PC'). Keďže hodnoty, ktoré potrebujeme, sú už v nejakej tabuľke, manuálne vytváranie vložených riadkov je po prvé neefektívne a po druhé, môže dovoliť vstupné chyby. 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, zoznam stĺpcov by sa musel použiť buď v príkaze INSERT, alebo v poddotazi, alebo v oboch, ktoré by sa zhodovali 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 nastavený na predvolenú hodnotu 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 Product_D.

Na prekonanie obmedzenia vkladania jedného riadku do príkazu INSERT pri použití konštruktora riadkov v klauzule VALUES je umelým trikom použitie poddotazu, ktorý tvorí riadok s klauzulou UNION ALL. Ak teda potrebujeme vložiť viacero riadkov jedným príkazom 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é, že nebudú žiadne duplicitné riadky, pretože v tomto prípade nebude kontrola duplikátov.

Treba poznamenať, že vkladanie viacerých n-tic pomocou konštruktora reťazcov je už implementované v Systém správy relačných databáz (DBMS) vyvinutý spoločnosťou Microsoft Corporation.Structured Query Language je všeobecný 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ť môže byť posledný dotaz prepísaný takto:

    INSERT INTO Product_D VALUES

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

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

Okrem vyššie uvedeného príkazu SELECT obsahuje jazyk DML (Data Manipulation Language) tri ďalšie príkazy: INSERT, UPDATE a DELETE. Podobne ako príkaz SELECT, aj tieto tri príkazy fungujú buď s tabuľkami alebo zobrazeniami. Tento článok sa zaoberá príkazom INSERT a ďalšie dva príkazy sú popísané v nasledujúcom článku.

INSERT vyhlásenie vloží riadky (alebo časti riadkov) do tabuľky. Existujú dve rôzne formy tohto pokynu:

INSERT tab_name [(col_list)] PREDVOLENÉ HODNOTY | VALUES (( DEFAULT | NULL | výraz ) [ ,...n]) INSERT INTO tab_name | view_name [(col_list)] (select_statement | execute_statement) Konvencie syntaxe

Prvá forma výpisu umožňuje vložiť jeden riadok (alebo jeho časť) do tabuľky. A druhá forma príkazu INSERT umožňuje vložiť do tabuľky množinu výsledkov príkazu SELECT alebo uloženú procedúru vykonanú príkazom EXECUTE. Uložená procedúra musí vrátiť údaje, ktoré sa majú vložiť do tabuľky. Pri použití s ​​príkazom INSERT môže príkaz SELECT vybrať hodnoty z inej alebo rovnakej tabuľky, do ktorej sa vkladajú údaje, pokiaľ sú typy údajov zodpovedajúcich stĺpcov kompatibilné.

Pre oba formuláre musí byť typ údajov každej vloženej hodnoty kompatibilný s typom údajov príslušného stĺpca tabuľky. Všetky reťazce a dočasné údaje musia byť uzavreté v úvodzovkách; Číselné hodnoty nemusia byť uzavreté v úvodzovkách.

Jednoriadková vložka

Pre obe formy príkazu INSERT je explicitný zoznam stĺpcov voliteľný. Absencia zoznamu stĺpcov je ekvivalentná špecifikovaniu všetkých stĺpcov tabuľky.

Parameter DEFAULT VALUES vloží predvolené hodnoty pre všetky stĺpce. Stĺpce s typom údajov TIMESTAMP alebo vlastnosťou IDENTITY sa štandardne vkladajú s hodnotami automaticky generované systémom. Pre stĺpce iných typov údajov sa vloží zodpovedajúca nenulová predvolená hodnota, ak existuje, alebo v opačnom prípade NULL. Ak pre stĺpec hodnoty NULL nie sú povolené a nie je pre ne definovaná žiadna predvolená hodnota, príkaz INSERT zlyhá a zobrazí sa príslušná správa.

Nasledujúci príklad vloží riadky do tabuľky Zamestnanec v databáze SampleDb a demonštruje, ako použiť príkaz INSERT na vloženie malého množstva údajov do databázy:

USE SampleDb; INSERT INTO Employee VALUES(34990, "Andrey", "Batonov", "d1"); INSERT INTO Employee VALUES(38640, "Aleksey", "Vasin", "d3");

Existujú dva rôzne cesty vloženie hodnôt do nového riadku. Príkaz INSERT v príklade nižšie explicitne používa kľúčové slovo NULL a vloží hodnotu NULL do príslušného stĺpca:

USE SampleDb; INSERT INTO Employee VALUES(34991, "Andrey", "Batonov", NULL);

Ak chcete vložiť hodnoty do niektorých (ale nie do všetkých) stĺpcov tabuľky, zvyčajne musíte tieto stĺpce explicitne špecifikovať. Nešpecifikované stĺpce musia povoliť hodnoty NULL alebo musia mať pre ne definovanú predvolenú hodnotu.

USE SampleDb; INSERT INTO Employee(Id, First Name, LastName) VALUES (34992, "Andrey", "Batonov");

Predchádzajúce dva príklady sú ekvivalentné. V tabuľke Zamestnanec je jediným stĺpcom, ktorý povoľuje hodnoty null, stĺpec DepartmentNumber a pre všetky ostatné stĺpce bola táto hodnota zakázaná klauzulou NOT NULL v príkaze CREATE TABLE.

Poradie hodnôt v vetné HODNOTY Príkazy INSERT sa môžu líšiť od poradia špecifikovaného v príkaze CREATE TABLE. V takom prípade sa ich poradie musí zhodovať s poradím, v akom sú príslušné stĺpce uvedené v zozname stĺpcov. Nasleduje príklad vkladania údajov v inom poradí, ako bolo pôvodné:

USE SampleDb; INSERT INTO Zamestnanec(Číslo oddelenia, Priezvisko, Id, Meno) VALUES ("d1", "Batonov", 34993, "Andrey");

Vkladanie viacerých riadkov

Druhá forma príkazu INSERT vloží do tabuľky jeden alebo viac riadkov vybraných poddotazom. Nižšie uvedený príklad ukazuje, ako vložiť riadky do tabuľky pomocou druhej formy príkazu INSERT. V tomto prípade sa vykoná dotaz na výber čísel a názvov oddelení nachádzajúcich sa v Moskve a načítanie výsledného súboru do novej tabuľky vytvorenej skôr.

Nová tabuľka MoscowDepartment vytvorená vo vyššie uvedenom príklade má rovnaké stĺpce ako existujúca tabuľka Department, s výnimkou chýbajúceho stĺpca Location. Poddotaz v príkaze INSERT vyberie všetky riadky v tabuľke Oddelenie, pre ktoré je hodnota stĺpca Umiestnenie Moskva, ktoré sa potom vložia do novej tabuľky vytvorenej na začiatku dotazu.

Nižšie uvedený príklad ukazuje ďalší spôsob vkladania riadkov do tabuľky pomocou druhej formy príkazu INSERT. V tomto prípade sa vykoná dotaz na získanie personálnych čísel, čísiel projektov a dátumov začiatku projektu pre všetkých zamestnancov s pozíciou „Manažér“, ktorí pracujú na projekte p2, a potom sa výsledná sada načíta do novej tabuľky vytvorenej na začiatku. z dotazu:

USE SampleDb; CREATE TABLE ManagerTeam(EmpId INT NOT NULL, ProjectNumber CHAR(4) NOT NULL, EnterDate DATE); INSERT INTO ManagerTeam(EmpId, ProjectNumber, EnterDate) SELECT EmpId, ProjectNumber, EnterDate FROM Works_on WHERE Job = "Manažér";

Pred vložením riadkov pomocou príkazu INSERT boli tabuľky MoscowDepartment a ManagerTeam (v príkladoch vyššie) prázdne. Ak tabuľka už existovala a obsahovala riadky údajov, pridali by sa do nej nové riadky.

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 strkajú prsty do klávesnice. V záujme väčšieho dobra a svetového mieru sa pozrime na jednoduchú databázovú prácu 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. Sekvenčné čítanie z výberu-výberu riadok po riadku. Používa sa najmä vo webových aplikáciách, v desktopových aplikáciách je jednoduchšie stiahnuť si celý výber naraz RAM, úspora pri čítaní len tých riadkov, ktoré potrebujete, 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). IN skutočný životúdaje sa zvyčajne čítajú prostredníctvom zložitého dotazu s množstvom spojení alebo zobrazenia, takže automatická synchronizácia nie je vhodná.

Hlavné triedy používané na tieto účely: OleDbConnection - pripojenie k databáze, vytvoríme ho reťazcom obsahujúcim parametre pripojenia, otvoríme, zatvoríme, OleDbCommand - vytvoríme ho pomocou inštancie pripojenia a príkazu sql, ak stačí aktualizovať alebo získať jednu hodnotu, potom stačí trieda, OleDbDataAdapter - vytvorený pomocou OleDbCommand, špecializuje sa na jednorazové čítanie sád 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áze, OleDbDataReader - sekvenčné čítanie riadkov v DataTable po jednom (interne funguje OleDbDataAdapter), DataTable / DataSet je 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žíva sa 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ázdny stôl sa vytvoria automaticky na základe načítaných údajov, ak je štruktúra tabuľky už nastavená (napríklad cez napísaný DataSet), údaje sa zapíšu do stĺpcov s rovnakými názvami alebo sa pridajú nové stĺpce 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á - spočiatku dátumy nemôžu byť prázdne, ale v reálnom živote sú prázdne neustále. Najsprávnejším riešením je použiť špeciálnu triedu dátumu, ktorá opravuje záseky programátorov spoločnosti Microsoft. Lenivejší vývojári uchovávajú všetky dátumy v kóde ako reťazce a konvertujú ich na DateTime iba 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ť ako prázdny reťazec a keď sa zapíše do databázy ako DBNull.Value - a banálna nula v kóde sa neprevedie na tieto hodnoty bez ďalšieho tanca s tamburína.

Prvá možnosť zahŕňa banálne lepenie reťazca dotazu. počíta zlá prax a je obzvlášť nebezpečný vo webových aplikáciách, pretože je zraniteľný hackerské útoky. Problém s prázdnymi dátumami sa len tak ľahko nevyrieši. Pri práci s dátumami sa navyše objavuje ďalší problém – rôzne formáty reťazcov dátumov v závislosti od regionálnych nastavení .Net Frameworku, vývojového prostredia a sql servera. Môže to vyzerať neskutočne – rovnaký dotaz funguje aj v SQL Management Studio, ale pri spustení z kódu sa zrúti. Čiastočne uložené špeciálnym formátom dátumového reťazca. Často sa to však 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. Zoberme si, že predchádzajúci odsek nebol.

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", OleDateeTimeValu.u. Convert.ToDateTime(stringDate); ) dbCommand.ExecuteNonQuery();

Uložená procedúra sa volá presne rovnakým spôsobom, pre zmenu kvôli inej možnosti zapisovania hodnôt do parametrov (nesúvisí to konkrétne s uloženou procedúrou):

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 chybné"; 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 viazať parameter príkazu na konkrétne pole DataTable, potom je najlepšie neurčovať veľkosť vôbec, napríklad ak je reťazec menší ako zadaná dĺžka Varchar, potom rámec good.Net pridajte do reťazca medzery na špecifikovanú dĺžku, čí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());

Špeciálne treba poznamenať, že ExecuteScalar vracia Object a ak dotaz nevrátil vôbec nič, tak výsledok bude null a konverzia na normálny dátový typ zlyhá. 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. Sekvenčné čítanie z výberu-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ý DbAdapter je potrebné zaregistrovať štyri príkazy možný prípad- vybrať, vložiť, aktualizovať, odstrániť.

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("update 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 vymazania 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 Show("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é UPDATE (prepísanie, pripojenie) dotazy
5. Jednoduché požiadavky DELETE (vymazanie záznamu).
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 (výber) dopyty do databázy MySQL

VYBRAŤ- dotaz, ktorý vyberá už existujúce údaje z databázy. Môžete zadať určité možnosti výberu pre výber. Napríklad podstata požiadavky v ruštine znie takto - VYBERTE také a také stĺpce FROM takej a takej tabuľky WHERE parameter takého a takého stĺpca sa 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í položky 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 jeden), použite DISTINCT. Vyvodí z množstva opakujúcich sa hodnôt Rusko, Ukrajina, Bielorusko. Takže od stola používateľov stĺpci krajina Zobrazia 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 v tabuľke najvyššiu hodnotu Vek(z angl. age) je 55, potom výsledok dotazu bude 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 nadobúda 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ý záznam v tabulke používateľov, v teréne názov vloží Sergeja a v teréne Vek vložky 25. Tým je tabuľka pripojená 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 na databázu MySQL

AKTUALIZOVAŤ- dotaz, ktorý vám umožňuje PREPÍSAŤ hodnoty polí alebo PRIDAŤ niečo do už existujúceho riadku v databáze. Existuje napríklad hotový reťazec, ale treba v ňom prepísať parameter veku, keďže sa časom menil.

1. Tabuľka 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, len zobrazuje syntax požiadavky, kde sú prepísané dve alebo viac polí.
Tabuľka používateľov WHERE id je hodnota 3 polí Vek stáva 18 a krajina Rusko.

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

5. Jednoduché DELETE (odstránenie záznamu) dotazy na databázu MySQL

VYMAZAŤ je dotaz, ktorý odstráni 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 (vymazanie tabuľky) dopyty do databázy MySQL

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

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

DROP TABLE názov_tbl;

7. Komplexné dotazy na databázu MySQL

Zaujímavé otázky, ktoré môžu použiť aj skúsení používatelia

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ší ako 14 dní a aktivácia NEROVNÁ SA 0 , Triediť podľa dátum registrácie v opačnom poradí (nové na začiatku).

AKTUALIZOVAŤ používateľov SET vek = "18+" WHERE vek = (VYBERTE vek FROM používateľov WHERE muž = "muž");
Vyššie uvedené je príkladom tzv dotaz v dotaze v SQL. Aktualizujte vek medzi používateľmi na 18+, pričom pohlavie je muž. Tento typ žiadosti neodporúčam. Z osobnej skúsenosti poviem, že je lepšie vytvoriť niekoľko samostatných - rýchlejšie sa vypracujú.

8. Databázové dotazy MySQL a PHP

V dopytoch MySQL na stránke PHP môžete vkladať premenné ako porovnávacie 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. Tabuľka používateľov WHERE id je hodnota 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!

V tomto článku budeme analyzovať možno jeden z najdôležitejších SQL dotazy. Toto dotazy na pridanie a vymazanie záznamov z databázovej tabuľky. Pretože, VEĽMI často pridať nové záznamy do tabuľky a urobte to automaticky, potom je potrebné tento materiál preštudovať.

Začať SQL dotaz na pridanie nového záznamu do tabuľky:

INSERT INTO users (login, pass) values("TestUser", "123456")

Pri pridávaní záznamu je prvým príkazom " VLOŽIŤ DO", potom názov tabuľky, do ktorej vložíme záznam. Ďalej nasledujú názvy polí, ktoré chceme vyplniť do zátvoriek. A potom do zátvoriek za slovo " hodnoty"začneme vypisovať hodnoty polí, ktoré sme vybrali. Po vykonaní tohto dotazu sa v našej tabuľke objaví nový záznam."

Niekedy sa vyžaduje aktualizovať záznam v tabuľke, na to je nasledovné SQL dotaz:

AKTUALIZÁCIA SET login = "TestUser2", pass="1234560" WHERE login="TestUser"

Tento dotaz je zložitejší, pretože obsahuje „ KDE", ale o tom trochu nižšie. Najprv príde príkaz" AKTUALIZOVAŤ", potom názov tabuľky a po " SET" popíšeme hodnoty všetkých polí, ktoré chceme zmeniť. Bolo by to jednoduché, ale vyvstáva otázka: " Ktorý záznam by sa mal aktualizovať?". Na to existuje" KDE". V tomto prípade aktualizujeme záznam, pole " Prihlásiť sa"na čom záleží" TestUser". Upozorňujeme, že ak existuje niekoľko takýchto záznamov, potom všetko bude aktualizované! Toto je veľmi dôležité pochopiť, inak riskujete stratu tabuľky.

Povedzme si o tom trochu viac KDE". Okrem jednoduchých kontrol rovnosti existujú aj nerovnosti, ako aj logické operácie: A A ALEBO.

AKTUALIZÁCIA NASTAVENIA používateľov prihlásenia = "TestUser2", pass="1234560" WHERE id< 15 AND login="TestUser"

The SQL dotaz aktualizuje tieto záznamy id ktorých je menej 15 A lúka " Prihlásiť sa"má význam" TestUser"Dúfam, že ste prišli na dizajn." KDE"pretože je to veľmi dôležité. Presne" KDE“ sa používa, keď načítavanie záznamov z tabuliek, a to je najčastejšie používaná úloha pri práci s databázami.

A nakoniec jednoduché SQL dotaz na odstránenie záznamov z tabuľky:

DELETE FROM users WHERE login="TestUser2"

Po príkaze " VYMAZAŤ Z" ide názov tabuľky, v ktorej chcete záznamy vymazať. Ďalej popíšeme konštrukciu "KDE". Ak záznam spĺňa popísané podmienky, vymaže sa. Opäť pozor, v závislosti od počtu záznamov, ktoré splniť podmienku po " KDE“, ľubovoľný počet z nich môže byť odstránený.