Vaicājumu veidošana SQL serverī. Piekļuves vaicājumi

Vaicājumi programmā Access ir galvenais rīks datu izgūšanai, atjaunināšanai un datu apstrādei datu bāzes tabulās. Programma Access saskaņā ar relāciju datu bāzu koncepciju vaicājumu izpildei izmanto strukturēto vaicājumu valodu (SQL). Jebkurš vaicājums programmā Access tiek īstenots, izmantojot SQL priekšrakstus.

Galvenais vaicājuma veids ir atlases vaicājums. Šī vaicājuma rezultāts ir jauna tabula, kas pastāv pirms vaicājuma aizvēršanas. Ieraksti tiek veidoti, apvienojot to tabulu ierakstus, uz kurām ir veidots vaicājums. Tabulas ierakstu apvienošanas veids tiek norādīts, definējot to attiecības datu shēmā vai veidojot vaicājumu. Vaicājumā formulētie atlases nosacījumi ļauj filtrēt ierakstus, kas veido tabulu savienošanas rezultātu.

Access var izveidot vairāku veidu vaicājumus:

  • atnest pieprasījumu- atlasa datus no vienas tabulas vai vaicājuma vai vairākām saistītām tabulām un citiem vaicājumiem. Rezultāts ir tabula, kas pastāv pirms vaicājuma aizvēršanas. Rezultātu tabulas ierakstu veidošana tiek veikta saskaņā ar noteiktajiem atlases nosacījumiem un izmantojot vairākas tabulas, to ierakstus apvienojot;
  • vaicājums, lai izveidotu tabulu- atlasa datus no savstarpēji saistītām tabulām un citiem vaicājumiem, bet atšķirībā no atlases vaicājuma saglabā rezultātu jaunā pastāvīgā tabulā;
  • atjaunināt, pievienot, dzēst pieprasījumus- ir darbības pieprasījumi, kuru rezultātā tiek mainīti dati tabulās.

Pieprasījumi programmā Access projektēšanas režīmā satur datu shēmu, kas parāda izmantotās tabulas, un vaicājuma formu, kas konstruē vaicājuma tabulas struktūru un ierakstu atlases nosacījumus (4.1. attēls).

Izmantojot vaicājumu, varat veikt šādus datu apstrādes veidus:

  • iekļaut vaicājumu tabulā lietotāja izvēlētos tabulas laukus;
  • veikt aprēķinus katrā no saņemtajiem ierakstiem;
  • atlasīt ierakstus, kas atbilst atlases kritērijiem;
  • izveidot jaunu virtuālo tabulu, pamatojoties uz saistīto tabulu ierakstu savienību;
  • grupēt ierakstus, kuriem vienā vai vairākos laukos ir vienādas vērtības, vienlaikus veic statistikas funkcijas citos grupas laukos un katrā grupā iekļauj vienu ierakstu rezultātā;
  • izveidot jaunu datu bāzes tabulu, izmantojot datus no esošajām tabulām;
  • atjaunināt laukus atlasītajā ierakstu apakškopā;
  • dzēst izvēlēto ierakstu apakškopu no datu bāzes tabulas;
  • pievienot atlasīto ierakstu apakškopu citai tabulai.

Vaicājumi programmā Access kalpo kā ierakstu avoti citiem vaicājumiem, veidlapām un pārskatiem. Izmantojot vaicājumu, no vairākām tabulām var ievākt pilnu informāciju noteikta tematiskās jomas dokumenta veidošanai, pēc tam ar to izveidot veidlapu - šī dokumenta elektronisku atveidojumu. Ja vednis izveido formu vai atskaiti, pamatojoties uz vairākām savstarpēji saistītām tabulām, tām automātiski tiek ģenerēts vaicājums kā ieraksta avots.
Lai konsolidētu, noskatieties video pamācību.

Pieprasījumi tiek rakstīti bez pēdiņām, kopš MySQL, MS SQL un PostGree tie ir dažādi.

SQL vaicājums: norādīto (obligāto) lauku iegūšana no tabulas

SELECT id, country_title, count_people FROM table_name

Mēs iegūstam ierakstu sarakstu: VISAS valstis un to iedzīvotāji. Obligāto lauku nosaukumus atdala ar komatiem.

SELECT * FROM tabulas_nosaukums

* apzīmē visus laukus. Tas ir, būs iespaidi VISS datu lauki.

SQL vaicājums: izvada ierakstus no tabulas, izņemot dublikātus

ATLASĪT ATŠĶIRĪGU valsti_nosaukums NO tabulas_nosaukums

Mēs iegūstam ierakstu sarakstu: valstis, kurās atrodas mūsu lietotāji. Var būt daudz lietotāju no vienas valsts. Šajā gadījumā tas ir jūsu pieprasījums.

SQL vaicājums: ierakstu parādīšana no tabulas atbilstoši noteiktajam nosacījumam

SELECT id, valsts_nosaukums, pilsētas_nosaukums FROM tabulas_nosaukums WHERE skaits_cilvēki> 100000000

Mēs iegūstam ierakstu sarakstu: valstis, kurās cilvēku skaits pārsniedz 100 000 000.

SQL vaicājums: ierakstu parādīšana no tabulas ar secību

SELECT id, city_title FROM table_name ORDER BY city_title

Mēs iegūstam ierakstu sarakstu: pilsētas alfabēta secībā. A sākumā, I beigās.

ATLASĪT ID, pilsētas_nosaukums FROM tabulas_nosaukums ORDER BY city_title DESC

Mēs iegūstam ierakstu sarakstu: pilsētas otrādi ( DESC) labi. Sākumā es, beigās A.

SQL vaicājums: ierakstu skaita skaitīšana

ATLASĪT COUNT (*) NO tabulas_nosaukums

Mēs iegūstam ierakstu skaitu (skaitu) tabulā. Šajā gadījumā NAV ierakstu saraksta.

SQL vaicājums: izvadiet nepieciešamo ierakstu diapazonu

SELECT * FROM tabulas_nosaukums LIMIT 2, 3

No tabulas iegūstam 2 (otro) un 3 (trešo) ierakstus. Pieprasījums noder, veidojot navigāciju WEB lapās.

SQL vaicājumi ar nosacījumiem

Ierakstu izvade no tabulas saskaņā ar doto nosacījumu, izmantojot loģiskos operatorus.

SQL vaicājums: UN konstrukcija

SELECT id, city_title FROM table_name WHERE valsts = "Krievija" UN nafta = 1

Mēs iegūstam ierakstu sarakstu: pilsētas no Krievijas UN ir pieejama nafta. Kad tiek izmantots operators UN, tad abiem nosacījumiem ir jāsakrīt.

SQL vaicājums: VAI konstrukcija

SELECT id, city_title FROM table_name WHERE valsts = "Krievija" VAI valsts = "ASV"

Mēs saņemam ierakstu sarakstu: visas pilsētas no Krievijas VAI ASV. Kad tiek izmantots operators VAI, tad ir jāatbilst vismaz vienam nosacījumam.

SQL vaicājums: UN NOT konstruēt

SELECT id, user_login FROM table_name WHERE country = "Krievija" UN NOT count_comments<7

Mēs saņemam ierakstu sarakstu: visi lietotāji no Krievijas UN kurš izgatavoja NE MAZĀK 7 komentāri.

SQL vaicājums: IN (B) konstrukcija

SELECT id, user_login FROM table_name WHERE country IN ("Krievija", "Bulgārija", "Ķīna")

Mēs iegūstam ierakstu sarakstu: visi lietotāji, kas dzīvo ( IN) (Krievija, Bulgārija vai Ķīna)

SQL vaicājums: NAV būvniecībā

SELECT id, user_login FROM table_name WHERE country NOT IN ("Krievija", "Ķīna")

Mēs iegūstam ierakstu sarakstu: visi lietotāji, kuri nedzīvo ( NAV IEKŠĀ) (Krievija vai Ķīna).

SQL vaicājums: IS NULL konstrukcija (tukšas vai NAV tukšas vērtības)

SELECT id, user_login FROM tabulas_nosaukums WHERE statuss IS NULL

Mēs saņemam ierakstu sarakstu: visi lietotāji, kuru statuss nav definēts. NULL ir atsevišķa tēma, tāpēc tā tiek pārbaudīta atsevišķi.

SELECT id, user_login FROM tabulas_nosaukums WHERE stāvoklis NAV NULL

Mēs iegūstam ierakstu sarakstu: visi lietotāji, kuriem ir noteikts statuss (NAV NULLE).

SQL vaicājums: LIKE konstrukcija

SELECT id, user_login FROM tabulas_nosaukums WHERE uzvārds LIKE "Ivan%"

Mēs iegūstam ierakstu sarakstu: lietotāji, kuru uzvārds sākas ar kombināciju "Ivans". Zīme % nozīmē JEBKURU JEBKURU rakstzīmju skaitu. Lai atrastu % zīmi, jāizmanto atsoļa "Ivans \%".

SQL vaicājums: BETWEEN konstrukcija

SELECT id, user_login FROM tabulas_nosaukums WHERE alga NO 25000 UN 50000

Mēs iegūstam ierakstu sarakstu: lietotāji, kuri saņem algas no 25 000 līdz 50 000 ieskaitot.

Ir DAUDZ loģisko operatoru, tāpēc rūpīgi izpētiet SQL servera dokumentāciju.

Sarežģīti SQL vaicājumi

SQL vaicājums: vairāku vaicājumu apvienošana

(ATLASES ID, lietotāja_pieteikšanās NO tabulas_nosaukums1) SAVIENĪBA (ATLASĪT ID, lietotāja_pieteikšanās NO tabulas_nosaukums2)

Mēs iegūstam ierakstu sarakstu: lietotāji, kuri ir reģistrēti sistēmā, kā arī tie lietotāji, kuri ir reģistrēti forumā atsevišķi. Ar UNION operatoru var apvienot vairākus vaicājumus. UNION darbojas kā SELECT DISTINCT, tas ir, tas atmet dublētās vērtības. Lai iegūtu pilnīgi visus ierakstus, jums jāizmanto operators UNION ALL.

SQL vaicājums: lauku vērtību MAX, MIN, SUM, AVG, COUNT skaitīšana

Viena izvade, maksimālā skaitītāja vērtība tabulā:

SELECT MAX (skaitītājs) NO tabulas_nosaukums

Viena, minimālās skaitītāja vērtības izvade tabulā:

SELECT MIN (skaitītājs) NO tabulas_nosaukums

Visu skaitītāja vērtību summas parādīšana tabulā:

SELECT SUM (skaitītājs) NO tabulas_nosaukums

Skaitītāja vidējās vērtības parādīšana tabulā:

SELECT AVG (skaitītājs) NO tabulas_nosaukums

Skaitītāju skaita parādīšana tabulā:

ATLASĪT COUNT (skaitītāju) NO tabulas_nosaukums

Skaitītāju skaita attēlojums darbnīcā Nr.1 ​​tabulā:

SELECT COUNT (skaitītājs) FROM table_name WHERE office = "Veikals Nr. 1"

Šīs ir vispopulārākās komandas. Ja iespējams, aprēķiniem ieteicams izmantot šāda veida SQL vaicājumus, jo neviena programmēšanas vide nevar salīdzināt datu apstrādes ātrumu kā pats SQL serveris, apstrādājot savus datus.

SQL vaicājums: ierakstu grupēšana

ATLASĪT kontinentu, SUM (country_area) FROM valsts GROUP BY kontinents

Mēs iegūstam ierakstu sarakstu: ar kontinenta nosaukumu un visu to valstu platību summu. Tas ir, ja ir valstu direktorijs, kurā katrai valstij ir reģistrēts tās apgabals, tad, izmantojot klauzulu GROUP BY, var uzzināt katra kontinenta lielumu (pamatojoties uz grupēšanu pēc kontinentiem).

SQL vaicājums: vairāku tabulu izmantošana, izmantojot aizstājvārdu

SELECT o.order_no, o.amount_paid, c.company FROM orders AS o, klients AS ar WHERE o.custno = c.custno UN c.city = "Tyumen"

Mēs saņemam ierakstu sarakstu: pasūtījumi no klientiem, kuri dzīvo tikai Tjumeņā.

Faktiski ar pareizi noformētu šāda veida datubāzi vaicājums ir visizplatītākais, tāpēc MySQL tika ieviests īpašs operators, kas darbojas daudzkārt ātrāk nekā iepriekš rakstītais kods.

ATLASĪT o.pasūtījuma_nr., o.apmaksātā summa, z.uzņēmums NO pasūtījumiem KĀ o LEFT JOIN klientam AS z IESLĒGTS (z.custno = o.custno)

Ligzdoti apakšvaicājumi

SELECT * FROM tabulas_nosaukums WHERE alga = (SELECT MAX (alga) FROM darbiniekam)

Mēs iegūstam vienu ierakstu: informāciju par lietotāju ar maksimālo algu.

Uzmanību! Ligzdotie apakšvaicājumi ir viens no SQL serveru vājajiem punktiem. Kopā ar savu elastību un jaudu tie arī ievērojami palielina servera slodzi. Kas izraisa citu lietotāju darba katastrofālu palēnināšanos. Rekursīvu zvanu gadījumi ar ligzdotiem vaicājumiem ir ļoti izplatīti. Tāpēc es stingri iesaku NElietot ligzdotos vaicājumus, bet sadalīt tos mazākos. Vai arī izmantojiet iepriekš minēto LEFT JOIN kombināciju. Papildus šāda veida pieprasījumiem pieprasījumi ir pastiprināts drošības pārkāpumu perēklis. Ja nolemjat izmantot ligzdotos apakšvaicājumus, tie ir ļoti rūpīgi jāizstrādā un jāveic sākotnējās darbības ar datu bāzu kopijām (testa datubāzēm).

SQL vaicājumi maina datus

SQL vaicājums: INSERT

Instrukcijas IEVIETOTļauj ievietot ierakstus tabulā. Vienkāršiem vārdiem sakot, tabulā izveidojiet rindu ar datiem.

Iespējas numurs 1. Bieži tiek izmantota instrukcija:

INSERT INTO tabulas_nosaukums (id, lietotāja_pieteikšanās) VĒRTĪBAS (1, "ivanov"), (2, "petrov")

Tabulā " tabulas_nosaukums"Uzreiz tiks ievietoti 2 (divi) lietotāji.

Opcijas numurs 2. Ērtāk ir izmantot stilu:

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

Tam ir savas priekšrocības un trūkumi.

Galvenie trūkumi:

  • Daudzi mazi SQL vaicājumi darbojas nedaudz lēnāk nekā viens liels SQL vaicājums, bet citi vaicājumi tiks ievietoti apkalpošanas rindā. Tas ir, ja liels SQL vaicājums tiek izpildīts 30 minūtes, tad visu šo laiku pārējie vaicājumi kūpinās bambusu un gaidīs savu kārtu.
  • Pieprasījums izrādās masīvāks nekā iepriekšējā versija.

Galvenās priekšrocības:

  • Mazo SQL vaicājumu laikā citi SQL vaicājumi netiek bloķēti.
  • Lasīšanas vieglums.
  • Elastība. Šajā opcijā jūs nevarat sekot struktūrai, bet pievienot tikai nepieciešamos datus.
  • Veidojot arhīvus šādā veidā, jūs varat viegli kopēt vienu rindiņu un palaist to caur komandrindu (konsoli), tādējādi neatjaunojot visu ARHĪVU.
  • Rakstīšanas stils ir līdzīgs paziņojumam UPDATE, kas atvieglo to atcerēšanos.

SQL vaicājums: UPDATE

UPDATE tabulas_nosaukums SET user_login = "ivanov", lietotāja_uzvārds = "Ivanov" WHERE id = 1

Tabulā " tabulas_nosaukums"Ierakstā ar id = 1 lauku user_login un user_surname vērtības tiks mainītas uz norādītajām vērtībām.

SQL vaicājums: DELETE

DZĒST NO tabulas_nosaukums WHERE id = 3

Ieraksts ar id numuru 3 tiks dzēsts tabulā table_name.

  1. Ieteicams visus lauku nosaukumus rakstīt ar maziem burtiem un, ja nepieciešams, atdalīt tos ar piespiedu atstarpi "_", lai nodrošinātu saderību ar dažādām programmēšanas valodām, piemēram, Delphi, Perl, Python un Ruby.
  2. Lai nodrošinātu lasāmību, rakstiet SQL komandas ar LIELajiem burtiem. Vienmēr atcerieties, ka citi cilvēki var izlasīt kodu pēc jums un, visticamāk, jūs pats pēc N laika.
  3. Nosauciet laukus no lietvārda sākuma un pēc tam darbību. Piemēram: city_status, user_login, user_name.
  4. Centieties izvairīties no atkāpšanās vārdiem dažādās valodās, kas var radīt problēmas SQL, PHP vai Perl, piemēram, (nosaukums, skaits, saite). Piemēram: saiti var izmantot MS SQL, bet tā ir rezervēta MySQL.

Šis materiāls ir īsa atsauce ikdienas darbam, un tas nepretendē uz īpaši autoritatīvu avotu, kas ir primārais SQL vaicājumu avots konkrētai datubāzei.

Katrs no mums regulāri sastopas un lietojam dažādas datu bāzes. Izvēloties e-pasta adresi, mēs strādājam ar datu bāzi. Datu bāzes izmanto meklētājprogrammas, bankas klientu datu glabāšanai utt.

Bet, neskatoties uz pastāvīgo datu bāzu izmantošanu, pat daudziem programmatūras sistēmu izstrādātājiem ir daudz "tukšu vietu", jo vienu un to pašu terminu interpretācijas ir atšķirīgas. Pirms SQL valodas aplūkošanas mēs sniegsim īsu datu bāzes terminu definīciju. Tātad.

Datu bāze - fails vai failu kopa sakārtotu datu struktūru un to attiecību glabāšanai. Ļoti bieži vadības sistēmu sauc par datu bāzi – tā ir tikai informācijas krātuve noteiktā formātā un var strādāt ar dažādām DBVS.

tabula - Iedomājieties mapi, kurā tiek glabāti dokumenti, kas sagrupēti pēc noteikta kritērija, piemēram, pēdējā mēneša pasūtījumu saraksts. Šī ir tabula datorā. Atsevišķai tabulai ir savs unikālais nosaukums.

Datu tips - kāda veida informāciju atļauts glabāt atsevišķā kolonnā vai rindā. Tie var būt cipari vai teksts noteiktā formātā.

Kolonna un rinda- mēs visi strādājām ar izklājlapām, kurās ir arī rindas un kolonnas. Jebkura relāciju datu bāze ar tabulām darbojas līdzīgi. Līnijas dažreiz sauc par ierakstiem.

Primārā atslēga- katrai tabulas rindai var būt viena vai vairākas kolonnas tās unikālajai identifikācijai. Bez primārās atslēgas ir ļoti grūti atjaunināt, modificēt un dzēst vajadzīgās rindas.

Kas ir SQL?

SQL(angļu — strukturētā vaicājuma valoda) tika izstrādāta tikai darbam ar datu bāzēm un šobrīd ir standarts visām populārajām DBVS. Valodas sintakse sastāv no neliela operatoru skaita un ir viegli apgūstama. Bet, neskatoties uz ārējo vienkāršību, tas ļauj izveidot sql vaicājumus sarežģītām operācijām ar jebkura izmēra datu bāzi.

Kopš 1992. gada pastāv vispārpieņemts standarts, ko sauc par ANSI SQL. Tas definē operatoru pamatsintaksi un funkcijas, un to atbalsta visi DBVS tirgus līderi, piemēram, ORACLE.Visas valodas iespējas nav iespējams aplūkot vienā mazā rakstā, tāpēc īsumā apskatīsim tikai pamata SQL vaicājumus. . Piemēri skaidri parāda valodas vienkāršību un iespējas:

  • datu bāzu un tabulu izveide;
  • datu ienešana;
  • ierakstu pievienošana;
  • informācijas grozīšana un dzēšana.

SQL datu tipi

Visas datu bāzes tabulas kolonnas glabā vienu un to pašu datu tipu. SQL datu tipi ir tādi paši kā citās programmēšanas valodās.

Izveidojiet tabulas un datu bāzes

Ir divi veidi, kā izveidot jaunas datu bāzes, tabulas un citus vaicājumus SQL:

  • izmantojot DBVS konsoli
  • Izmantojot datu bāzes serverī iekļautos tiešsaistes administrēšanas rīkus.

Operators izveido jaunu datu bāzi IZVEIDOT DATU BĀZI<наименование базы данных>; ... Kā redzat, sintakse ir vienkārša un kodolīga.

Mēs izveidojam tabulas datu bāzē ar priekšrakstu CREATE TABLE ar šādiem parametriem:

  • tabulas nosaukums
  • kolonnu nosaukumi un datu veidi

Piemēram, izveidosim preču tabulu ar šādām kolonnām:

Mēs izveidojam tabulu:

IZVEIDOT TABULU Prece

(preces_id CHAR (15) NOT NULL,

vendor_id CHAR (15) NOT NULL,

preces_nosaukums CHAR (254) NULL,

commodity_price DECIMAL (8,2) NULL,

commodity_desc VARCHAR (1000) NULL);

Tabulā ir piecas kolonnas. Aiz nosaukuma ir norādīts datu veids, kolonnas atdala ar komatiem. Kolonnas vērtība var būt nulle (NULL) vai tā ir jāaizpilda (NOT NULL), un tā tiek noteikta, izveidojot tabulu.

Datu iegūšana no tabulas

Datu atlases operators ir visbiežāk izmantotie SQL vaicājumi. Lai iegūtu informāciju, ir jānorāda, ko no šādas tabulas vēlamies atlasīt. Sāksim ar vienkāršu piemēru:

ATLASĪT preces_nosaukums FROM Prece

Pēc SELECT priekšraksta mēs norādām kolonnas nosaukumu, lai iegūtu informāciju, un FROM definē tabulu.

Vaicājuma izpildes rezultāts būs visas tabulas rindas ar Commodity_name vērtībām tādā secībā, kādā tās tika ievadītas datu bāzē, t.i. bez šķirošanas. Rezultāta pasūtīšanai tiek izmantots papildu punkts ORDER BY.

Vaicājumam par vairākiem laukiem mēs tos uzskaitām, atdalot tos ar komatiem, kā parādīts šajā piemērā:

ATLASĪT preces_id, preces_nosaukums, preces_cena NO preces

Vaicājuma rezultātā ir iespējams iegūt visu rindas kolonnu vērtību. Lai to izdarītu, izmantojiet zīmi "*":

SELECT * FROM Prece

  • Papildus SELECT atbalsta:
  • Datu kārtošana (ORDER BY operators)
  • Atlase atbilstoši nosacījumiem (KUR)
  • Grupēšanas termins (GROUP BY)

Pievienojiet līniju

Lai tabulai pievienotu rindu, tiek izmantoti SQL vaicājumi ar INSERT priekšrakstu. Papildināšanu var veikt trīs veidos:

  • pievienot jaunu veselu rindu;
  • virknes daļa;
  • vaicājuma rezultāti.

Lai pievienotu pilnu rindu, jānorāda tabulas nosaukums un jaunās rindas kolonnu (lauku) vērtības. Sniegsim piemēru:

IEVADĪT PREČU VĒRTĪBĀS ("106", "50", "Coca-Cola", "1.68", "Bez Alcogol")

Piemērā tabulai tiek pievienots jauns produkts. Vērtības katrai kolonnai ir norādītas aiz VALUES. Ja kolonnai nav atbilstošas ​​vērtības, tad jānorāda NULL. Kolonnas tiek aizpildītas ar vērtībām tādā secībā, kāda norādīta tabulas izveides laikā.

Ja pievienojat tikai daļu no rindas, jums ir skaidri jānorāda kolonnu nosaukumi, kā parādīts piemērā:

INSERT INTO Prece (preču_id, piegādātāja_id, preces_nosaukums)

VĒRTĪBAS ("106", '50 "," Coca-Cola ",)

Mēs ievadījām tikai preces, piegādātāja un tā nosaukuma identifikatorus, bet pārējos laukus atstājām tukšus.

Vaicājuma rezultātu pievienošana

INSERT galvenokārt izmanto rindu pievienošanai, taču to var izmantot arī SELECT priekšraksta rezultātu pievienošanai.

Datu maiņa

Lai mainītu informāciju datu bāzes tabulas laukos, jāizmanto priekšraksts UPDATE. Operatoru var izmantot divos veidos:

  • Visas tabulas rindas ir atjauninātas.
  • Tikai noteiktai līnijai.

UPDATE ir trīs galvenie elementi:

  • tabula, kurā jāveic izmaiņas;
  • lauku nosaukumi un to jaunās vērtības;
  • nosacījumi maināmo rindu atlasei.

Apskatīsim piemēru. Pieņemsim, ka preces ar ID = 106 izmaksas ir mainījušās, tāpēc šī rinda ir jāatjaunina. Mēs rakstām šādu operatoru:

ATJAUNINĀT Preču SET commodity_price = "3,2" WHERE commodity_id = "106"

Mēs norādījām tabulas nosaukumu, mūsu gadījumā Prece, kurā tiks veikta atjaunināšana, pēc tam pēc SET - kolonnas jauno vērtību un atradām nepieciešamo ierakstu, norādot nepieciešamo ID vērtību WHERE.

Lai modificētu vairākas kolonnas, pēc SET priekšraksta ir norādīti vairāki kolonnu un vērtību pāri, atdalot tos ar komatiem. Apskatīsim piemēru, kas atjaunina produkta nosaukumu un cenu:

UPDATE Preču SET commodity_name = 'Fanta', commodity_price = "3.2" WHERE commodity_id = "106"

Lai noņemtu informāciju kolonnā, varat iestatīt to uz NULL, ja tabulas struktūra to atļauj. Jāatceras, ka NULL ir tieši "nē" vērtība, nevis nulle teksta vai skaitļu veidā. Izdzēsīsim preces aprakstu:

ATJAUNINĀT Preču SET commodity_desc = NULL WHERE commodity_id = "106"

Notiek rindu dzēšana

SQL vaicājumi tabulas rindu dzēšanai tiek izpildīti ar DELETE priekšrakstu. Ir divi lietošanas gadījumi:

  • atsevišķas rindas tabulā tiek dzēstas;
  • visas tabulas rindas tiek dzēstas.

Piemērs vienas rindas dzēšanai no tabulas:

dzēst no preces, WHERE preces_id = "106"

Pēc DELETE FROM norādām tās tabulas nosaukumu, kurā tiks dzēstas rindas. Klauzulā WHERE ir ietverts nosacījums, saskaņā ar kuru tiks atlasītas dzēšanai paredzētās rindas. Piemērā mēs dzēšam rindu produktam ar ID = 106. Ļoti svarīgi ir norādīt KUR. izlaižot šo paziņojumu, tiks dzēstas visas tabulas rindas. Tas attiecas arī uz lauku vērtības maiņu.

DELETE priekšraksts neietver kolonnu nosaukumus vai metarakstzīmes. Tas dzēš rindas pilnībā, bet nevar izdzēst vienu kolonnu.

SQL izmantošana programmā Microsoft Access

To parasti izmanto interaktīvi, lai izveidotu tabulas, datu bāzes, pārvaldītu, modificētu, analizētu datus datu bāzē un iegultu SQL Access vaicājumus, izmantojot ērtu interaktīvu vaicājumu noformētāju (Query Designer), ar kura palīdzību jūs varat izveidot un nekavējoties izpildīt jebkuras ierīces SQL paziņojumus. sarežģītība...

Tiek atbalstīts arī piekļuves režīms serverim, kurā Access DBMS var izmantot kā SQL vaicājumu ģeneratoru jebkuram ODBC datu avotam. Šī iespēja ļauj Access lietojumprogrammām mijiedarboties ar jebkuru formātu.

SQL paplašinājumi

Tā kā SQL vaicājumiem nav visas procesuālās programmēšanas valodu iespējas, piemēram, cilpas, zari utt., datu bāzes pārdevēji izstrādā savu SQL versiju ar uzlabotām iespējām. Pirmkārt, tas ir atbalsts saglabātajām procedūrām un procesuālo valodu standarta operatoriem.

Visizplatītākie valodas dialekti:

  • Oracle datu bāze - PL / SQL
  • Interbase, Firebird — PSQL
  • Microsoft SQL Server — Transact-SQL
  • PostgreSQL — PL / pgSQL.

SQL internetā

MySQL tiek izplatīts saskaņā ar GNU vispārējo publisko licenci. Ir komerciāla licence ar iespēju izstrādāt pielāgotus moduļus. Kā neatņemama sastāvdaļa tā ir iekļauta populārākajos interneta serveru komplektos, piemēram, XAMPP, WAMP un LAMP, un ir vispopulārākā DBVS lietojumprogrammu izstrādei internetā.

To izstrādāja Sun Microsystems, un pašlaik to atbalsta Oracle Corporation. Tiek atbalstītas datu bāzes līdz 64 terabaitiem, SQL: 2003 sintakses standarts, datu bāzes replikācija un mākoņpakalpojumi.

Tabulas izteiksmes apakšvaicājumiem tiek nosaukti nosaukumi un tie tiek izmantoti tur, kur paredzama tabula. Ir divu veidu tabulas izteiksmes:

    atvasinātas tabulas;

    vispārinātas tabulas izteiksmes.

Šīs divas tabulas izteiksmju formas ir aplūkotas turpmākajās apakšnodaļās.

Atvasinātās tabulas

Atvasināta tabula ir tabulas izteiksme, kas iekļauta vaicājuma noteikumā FROM. Atvasinātās tabulas var izmantot, ja kolonnu aizstājvārdi nav iespējami, jo SQL tulkotājs apstrādā citu paziņojumu, pirms ir zināms aizstājvārds. Tālāk sniegtajā piemērā ir mēģināts izmantot kolonnas aizstājvārdu situācijā, kad tiek apstrādāta cita klauzula, pirms ir zināms aizstājvārds:

IZMANTOT SampleDb; SELECT MONTH (EnterDate) kā ievades_mēnesis FROM Works_on GROUP BY enter_month;

Mēģinot izpildīt šo vaicājumu, tiks parādīts šāds kļūdas ziņojums:

207. ziņojums, 16. līmenis, 1. stāvoklis, 5. rindiņa. Nederīgs kolonnas nosaukums “enter_month”. (207. ziņojums: 16. līmenis, 1. stāvoklis, 5. rindiņa Nederīgs kolonnas nosaukums ievades_mēnesis)

Kļūdas iemesls ir tas, ka klauzula GROUP BY tiek apstrādāta pirms saistītā SELECT saraksta apstrādes, un, apstrādājot šo grupu, kolonnas enter_month aizstājvārds nav zināms.

Šo problēmu var atrisināt, izmantojot atvasinātu tabulu, kurā ir iepriekšējais vaicājums (bez GROUP BY klauzulas), jo klauzula FROM tiek izpildīta pirms GROUP BY klauzulas:

IZMANTOT SampleDb; SELECT enter_month FROM (SELECT MONTH (EnterDate) kā ievades_mēnesis FROM Works_on) AS m GROUP BY enter_month;

Šī vaicājuma izpildes rezultāts būs šāds:

Parasti tabulas izteiksmi var novietot jebkurā vietā SELECT priekšrakstā, kur var parādīties tabulas nosaukums. (Tabulas izteiksmes rezultāts vienmēr ir tabula vai īpašos gadījumos izteiksme.) Šis piemērs parāda tabulas izteiksmes izmantošanu SELECT priekšraksta atlases sarakstā:

Šī vaicājuma rezultāts:

Vispārinātas tabulas izteiksmes

Kopējā tabulas izteiksme (CTE) ir nosaukta tabulas izteiksme, ko atbalsta Transact-SQL valoda. Vispārējās tabulas izteiksmes tiek izmantotas šādos divu veidu vaicājumos:

    nerekursīvs;

    rekursīvs.

Šie divi pieprasījumu veidi ir apskatīti turpmākajās sadaļās.

OTB un nerekursīvie vaicājumi

Varat izmantot nerekursīvo OTB formu kā alternatīvu atvasinātajām tabulām un skatiem. Parasti OTB nosaka AR klauzulām un izvēles vaicājums, kas atsaucas uz nosaukumu, kas izmantots klauzulā WITH. Transact-SQL atslēgvārds WITH ir neskaidrs. Lai izvairītos no neskaidrībām, beidziet priekšrakstu pirms klauzulas WITH ar semikolu.

IZMANTOT AdventureWorks2012; SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue> (SELECT AVG (TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR (OrderDate) = "2005") AND Freight> (SELECT AVG (TotalDue) FROM Sales.OrderHeader0) 2,5;

Vaicājums šajā piemērā atlasa pasūtījumus, kuru kopējie nodokļi (TotalDue) ir lielāki par vidējo visiem nodokļiem un kuru pārvadāšanas izmaksas (Freight) ir lielākas par 40% no nodokļu vidējās vērtības. Šī vaicājuma galvenā īpašība ir tā apjoms, jo apakšvaicājums ir jāraksta divas reizes. Viens no iespējamiem veidiem, kā samazināt vaicājuma konstrukcijas lielumu, ir izveidot skatu, kas satur apakšvaicājumu. Bet šis risinājums ir nedaudz sarežģīts, jo tas prasa izveidot skatu un pēc vaicājuma izpildes beigām to dzēst. Labākā pieeja būtu izveidot OTB. Tālāk sniegtajā piemērā ir parādīta nerekursīva OTB izmantošana, kas saīsina iepriekš sniegto vaicājuma definīciju:

IZMANTOT AdventureWorks2012; WITH cena_aprēķins (gads_2005) AS (SELECT AVG (TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR (OrderDate) = "2005") SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue> (SELECT year_Free_calc) 0 FROM.

Sintakse klauzulai WITH nerekursīvos vaicājumos ir:

Parametrs cte_name apzīmē OTB nosaukumu, kas identificē iegūto tabulu, un parametrs column_list apzīmē kolonnu sarakstu tabulas izteiksmē. (Iepriekš esošajā piemērā OTB nosaukums ir cena_aprēķins, un tai ir viena kolonna, gads_2005.) Parametrs inner_query ir priekšraksts SELECT, kas definē atbilstošās tabulas izteiksmes rezultātu kopu. Pēc tam definēto tabulas izteiksmi var izmantot ārējā vaicājumā outer_query. (Ārējais vaicājums iepriekš minētajā piemērā izmanto OTB cena_aprēķins un tā kolonna gads_2005, lai vienkāršotu dubulto ligzdošanas vaicājumu.)

OTB un rekursīvie vaicājumi

Šajā sadaļā ir parādīts paaugstinātas sarežģītības materiāls. Tāpēc, lasot to pirmo reizi, ieteicams to izlaist un atgriezties pie tā vēlāk. OTB var ieviest rekursijas, jo OTB var saturēt atsauces uz sevi. Pamata OTB sintakse rekursīvajam vaicājumam izskatās šādi:

Parametriem cte_name un column_list ir tāda pati nozīme kā OTB nerekursīviem vaicājumiem. WITH klauzulas pamatteksts sastāv no diviem vaicājumiem, ko apvieno operators SAVIENĪBA VISU... Pirmais vaicājums tiek izsaukts tikai vienu reizi, un tas sāk uzkrāt rekursijas rezultātu. Operatora UNION ALL pirmais operands neattiecas uz OTB. Šo vaicājumu sauc par atsauces vaicājumu vai avotu.

Otrais pieprasījums satur saiti uz OTB un atspoguļo tā rekursīvo daļu. Šī iemesla dēļ to sauc par rekursīvo dalībnieku. Pirmajā rekursīvās daļas izsaukumā OTB atsauce atspoguļo atsauces vaicājuma rezultātu. Rekursīvais dalībnieks izmanto vaicājuma pirmā izsaukuma rezultātu. Pēc tam sistēma atkārtoti izsauc rekursīvo daļu. Zvans rekursīvajam dalībniekam tiek pārtraukts, kad iepriekšējais izsaukums tam atgriež tukšu rezultātu kopu.

Operators UNION ALL savieno pašlaik uzkrātās virknes, kā arī papildu virknes, kuras rekursīvajam dalībniekam pievieno pašreizējais izsaukums. (Operatora UNION ALL klātbūtne nozīmē, ka no rezultāta netiks noņemtas dublētās rindas.)

Visbeidzot, parametrs outer_query definē ārējo vaicājumu, kas izmanto OTB, lai saņemtu visus zvanus uz abu dalībnieku savienību.

Lai demonstrētu rekursīvu OTB veidlapu, mēs izmantojam tabulu Lidmašīna, kas definēta un aizpildīta ar kodu, kas parādīts tālāk esošajā piemērā:

IZMANTOT SampleDb; CREATE TABLE Lidmašīna (ContainingAssembly VARCHAR (10), ContainedAssembly VARCHAR (10), QuantityContained INT, UnitCost DECIMAL (6,2)); INSERT INTO Airplane VALUES ("Lidmašīna", "Fizelāža", 1, 10); INSERT INTO Airplane VALUES ("Lidmašīna", "Spārni", 1, 11); INSERT INTO Airplane VALUES ("Lidmašīna", "Aste", 1, 12); INSERT INTO Airplane VALUES ("Fizelāža", "Salons", 1, 13); INSERT INTO Airplane VALUES ("Fizelāža", "Kabīne", 1, 14); INSERT INTO Airplane VALUES ("Fizelāža", "Deguns", 1, 15); INSERT INTO Airplane VALUES ("Salons", NULL, 1.13); INSERT INTO Airplane VALUES ("Cabin", NULL, 1, 14); INSERT INTO Airplane VALUES ("Deguns", NULL, 1, 15); INSERT INTO Airplane VALUES ("Wings", NULL, 2, 11); INSERT INTO Airplane VALUES ("Tail", NULL, 1, 12);

Lidmašīnas tabulā ir četras kolonnas. Kolonnā ContainingAssembly ir norādīts mezgls, un kolonnā ContainedAssembly ir norādītas daļas (viena pēc otras), kas veido atbilstošo mezglu. Zemāk esošajā attēlā ir sniegts iespējamā gaisa kuģa tipa un tā sastāvdaļu grafisks attēls:

Lidmašīnu tabula sastāv no šādām 11 rindām:

Tālāk esošajā piemērā ir parādīta klauzula WITH, ko izmanto, lai definētu vaicājumu, kas aprēķina katras montāžas kopējās izmaksas:

IZMANTOT SampleDb; WITH sarakstu_of_detaļu (montāža1, daudzums, izmaksas) AS (SELECT ContainingAssembly, QuantityContained, UnitCost FROM Airplane WHERE ContainedAssembly IS NULL UNION ALL SELECT a.ContainingAssembly, a.QuantityContained, CAST (l.contained) *DECl.quantity (ASV) ) NO detaļu_saraksta l, lidmašīna a WHERE l.assembly1 = a.ContainedAssembly) SELECT montāža1 "Daļa", daudzums "Daudz.", izmaksas "Cena" NO detaļu_saraksta;

WITH klauzula definē OTB sarakstu ar nosaukumu list_of_parts ar trim kolonnām: montāža1, daudzums un izmaksas. Pirmais SELECT priekšraksts piemērā tiek izsaukts tikai vienu reizi, lai saglabātu rekursijas procesa pirmā soļa rezultātus. SELECT priekšraksts piemēra pēdējā rindā parāda šādu rezultātu.

Pēdējā atjaunināšana: 07/05/2017

Iepriekšējā tēmā SQL Management Studio tika izveidota vienkārša datu bāze ar vienu tabulu. Tagad definēsim un izpildīsim pirmo SQL vaicājumu. Lai to izdarītu, atveriet SQL Management Studio, ar peles labo pogu noklikšķiniet uz augšējā līmeņa elementa Object Explorer (servera nosaukums) un parādītajā konteksta izvēlnē atlasiet Jauns vaicājums:

Pēc tam programmas centrālajā daļā tiks atvērts logs SQL komandu ievadīšanai.

Izpildīsim vaicājumu tabulā, kas tika izveidota iepriekšējā tēmā, jo īpaši mēs no tās iegūsim visus datus. Mūsu datubāzi sauc par universitāti, un tabula ir dbo.Students, tāpēc, lai iegūtu datus no tabulas, mēs ievadīsim šādu vaicājumu:

IZVĒLĒTIES * NO universitāte.dbo.Students

Paziņojums SELECT ļauj atlasīt datus. FROM norāda avotu, no kurienes iegūt datus. Faktiski ar šo vaicājumu mēs sakām "ATLASĪT visu NO tabulas universitāte.dbo.Students". Ir vērts atzīmēt, ka tabulas nosaukumam tiek izmantots tās pilns ceļš, norādot datu bāzi un shēmu.

Pēc vaicājuma ievadīšanas rīkjoslā noklikšķiniet uz pogas Izpildīt vai arī varat nospiest taustiņu F5.

Vaicājuma izpildes rezultātā programmas apakšā parādās neliela tabula, kurā tiek parādīti vaicājuma rezultāti - tas ir, visi dati no tabulas Studenti.

Ja mums ir jāveic vairāki vaicājumi vienai un tai pašai datu bāzei, mēs varam izmantot komandu USE, lai veiktu datu bāzi. Šajā gadījumā, veicot vaicājumus tabulām, pietiek norādīt to nosaukumu bez datu bāzes un shēmas nosaukuma:

IZMANTO universitāti SELECT * FROM Students

Šajā gadījumā mēs veicam pieprasījumu visam serverim, mēs varam piekļūt jebkurai servera datu bāzei. Bet mēs varam arī izpildīt vaicājumus tikai noteiktā datubāzē. Lai to izdarītu, ar peles labo pogu noklikšķiniet uz vajadzīgās datu bāzes un konteksta izvēlnē atlasiet vienumu Jauns vaicājums:

Ja šajā gadījumā vēlamies izpildīt vaicājumu iepriekš izmantotajai tabulai Studenti, tad vaicājumā nebūtu jānorāda datu bāzes nosaukums un shēma, jo šīs vērtības jau būtu skaidras.