Piemērs vaicājuma (Query) izveidei MS SQL Server datu bāzē. Datu bāze atrodas lokālā *.mdf failā. Kā uzrakstīt SQL vaicājumus — detalizēti piemēri DataGridView vadīklas ievietošanai un datu bāzes sakaru iestatīšanai

Piemērs vaicājuma (Query) izveidei MS SQL Server datu bāzē. Datu bāze atrodas lokālā *.mdf failā. Kā uzrakstīt SQL vaicājumus — detalizēti piemēri DataGridView vadīklas ievietošanai un datu bāzes sakaru iestatīšanai

Piemērs vaicājuma (Query) izveidei MS SQL Server datu bāzē. Datu bāze atrodas lokālā *.mdf failā

Problēmas stāvoklis

Ir norādīta datu bāze, kas atrodas Education.mdf failā. Datu bāzē ir divas savstarpēji saistītas tabulas Students un Session.

Tabulas ir savstarpēji saistītas ar lauku ID_Book.

Izmantojot Microsoft Visual Studio rīkus, izveidojiet vaicājumu Query1, kuram būs šāda struktūra:

Lauka nosaukums Tabula
Skaits_grāmata Students
Vārds Students
Matemātika Sesija
Informātika Sesija
Filozofija Sesija
Vidēji Skaitļošanas lauks

Izpilde (soli pa solim instrukcijas)

1. Lejupielādējiet Microsoft Visual Studio
2. Savienojiet Education.mdf datubāzi ar datu bāzu sarakstu utilītprogrammā Server Explorer

Lai netērētu laiku Education.mdf datu bāzes tabulu izstrādei un saistīšanai, var lejupielādēt iepriekš sagatavotas datu bāzes arhīvu. Pēc lejupielādes un saglabāšanas noteiktā mapē datu bāze ir jāizpako un jāsavieno ar datu bāzu sarakstu utilītprogrammā Server Explorer.

Datu bāzes savienošana tiek īstenota vienā no vairākiem standarta veidiem:

  • izvēlnē Rīki izvēloties komandu “Savienot ar datu bāzi...”;
  • utilītprogrammā Server Explorer atlasot pogu (komandu) “Savienot ar datu bāzi...”.

Rezultātā tiks atvērts vedņa logs, kurā, izmantojot vairākas darbības (logus), jākonfigurē datu bāzes savienojums.

Rīsi. 1. Datu bāzes pievienošanas/savienošanas metodes

Detalizēts apraksts par to, kā savienot datu bāzi, piemēram, Microsoft SQL Server programmā Microsoft Visual Studio, ir sniegts tēmā:

  • Izveidošanas/savienojuma piemērs es lokālā Microsoft SQL Server datu bāze, kas atrodas *.mdf failā

Pēc savienojuma izveides Server Explorer utilīta logs izskatīsies tā, kā parādīts 2. attēlā.

Rīsi. 2. Server Explorer utilīta ar pievienotu Education.mdf datu bāzi

3. Jauna pieprasījuma pievienošana. Jauna vaicājumu komanda

Varat izveidot vaicājumus datu bāzē. Mūsu gadījumā mums ir jāizveido pieprasījums saskaņā ar uzdevuma nosacījumiem.

Vaicājums tiek izveidots, izmantojot komandu “New Query”, kas tiek izsaukta no konteksta izvēlnes (3. attēls). Lai izsauktu komandu, ar peles labo pogu noklikšķiniet lauka apgabalā, kas ir iezīmēts, lai parādītu Education.mdb datu bāzes elementus. Jāņem vērā, ka pieprasījumus sistēma nesaglabā. Skati tiek izmantoti, lai parādītu saglabātos (sarežģītos) vaicājumus.

3. attēlā parādīta konteksta izvēlne, kas tiek izsaukta, noklikšķinot uz cilnes Skati. Šajā izvēlnē jāizvēlas komanda “Jauns vaicājums”. Šī komanda atrodas citu datu bāzes komponentu (tabulu, diagrammu utt.) konteksta izvēlņu sarakstā.

Rīsi. 3. Jauna vaicājuma komanda

Rezultātā atvērsies logs “Pievienot tabulu”, kurā jāizvēlas tās tabulas, kuru dati tiks izmantoti vaicājumā (4. attēls).

Rīsi. 4. Vaicājumā izmantojamo tabulu izvēle

Mūsu gadījumā mums ir jāatlasa abas tabulas.

Rezultātā Microsoft Visual Studio logs izskatīsies tā, kā parādīts 5. attēlā.

Rīsi. 5. MS Visual Studio logs pēc pieprasījuma izveidošanas

Tabulās ir jāatlasa lauki, kas tiks izmantoti vaicājumā. Lauku atlases secībai jāatbilst tam, kā tie tiek parādīti pieprasījumā saskaņā ar uzdevuma nosacījumiem. Tas nozīmē, ka vispirms tiek atlasīti Studentu tabulas lauki (NumBook, Name), un pēc tam tiek atlasīti Sesijas tabulas lauki (Matemātika, Informātika, Filozofija).

Mūsu gadījumā lauku izvēle ir parādīta 6. attēlā.

Rīsi. 6. Pieprasījuma lauku atlase

Kā redzams 6. attēlā, sistēmas ģenerēts vaicājums SQL valodā tiek parādīts loga apakšā

ATLASĪT Students.Num_Book, Student.Name, Sesion.Matemātika, Sesija.Informātika, Sesija.Filozofija NO
4. Pievienojiet aprēķināto lauku Average

Lai izveidotu aprēķināto lauku Average , logā, kurā tiek parādīts SQL vaicājums, jāmaina šī vaicājuma teksts. Piemēram:

ATLASĪT Students.Num_Book, Student.Name, Session.Matemātika, Sesija.Informātika, Sesija.Filozofija, (Sesija.Matemātika + Sesija.Informātika + Sesija.Filozofija) / 3.0 AS Average NO Sesija IEKŠĒJĀ JOIN Students ON Session.ID_Book = Student.ID_Book

Tiek pievienots aprēķina lauks Average, kas ir vidējais aritmētiskais (7. attēls).

SQL — Strukturētā vaicājumu valoda.
Šajā pārskatā mēs apskatīsim visizplatītākos SQL vaicājumu veidus.
SQL standarts ir definēts ANSI(Amerikas Nacionālais standartu institūts).
SQL ir valoda, kas īpaši paredzēta relāciju datu bāzēm.

SQL sadalīšana:


DDL
(Datu definīcijas valoda) - tā sauktā shēmas apraksta valoda ANSI, sastāv no komandām, kas datu bāzē izveido objektus (tabulas, indeksus, skatus utt.).
DML(Datu manipulācijas valoda) ir komandu kopa, kas nosaka, kādas vērtības jebkurā laikā tiek attēlotas tabulās.
DCD(Datu pārvaldības valoda) sastāv no iespējām, kas nosaka, vai atļaut lietotājam veikt noteiktas darbības vai nē. Tie ir daļa no ANSI DDL. Neaizmirstiet šos vārdus. Tās nav dažādas valodas, bet SQL komandu sadaļas, kas sagrupētas pēc to funkcijām.

Datu veidi:

SQL serveris — datu tipi

Apraksts

bigint (starp 8)

bigint (starp 8)

binārs(n)

binārs(n) vai attēlu

raksturs
(sinonīms char)

valsts raksturs vai ntext

raksturs mainīgs(sinonīms char mainīgs varchar)

nacionālais raksturs ir atšķirīgs vai ntext

Datums un laiks

datums un laiks

decimālzīme

aka ciparu

dubultā precizitāte

dubultā precizitāte

vesels skaitlis (starp 4) (sinonīms: starpt)

vesels skaitlis (starp 4)

nacionālais raksturs(sinonīms: nacionālais raksturs, nchar)

nacionālais raksturs

Skaitlis(sinonīmi: decimālzīme, dec)

nacionālais raksturs ir atšķirīgs(sinonīmi: nacionālā zīme ir atšķirīga, nvarchar)

Dažāds nacionālais raksturs

Mazs datums laiks

datums un laiks

smallint (starp 2)

smallint (starp 2)

Maza nauda

sql_variant

Vairs netiek atbalstīts

Ntext
Sākot ar SQL Server 2005, to nav ieteicams lietot.

Laika zīmogs

Nav atbalstīts

tinyint (starp 1)

tinyint (starp 1)

Unikālais identifikators

unikālais identifikators

varbinārs(n)

varbinārs(n) vai attēlu

mazs datums laiks

datums un laiks

smallint (starp 2)

smallint (starp 2)

maza nauda

sql_variant

Nav atbalstīts

laika zīmogs

Nav atbalstīts

tinyint (starp 1)

tinyint (starp 1)

unikālais identifikators

unikālais identifikators

varbinārs(n)

varbinārs(n) vai attēlu

Datu tipu tabula programmā SQL Server 2000

KAS IR PIEPRASĪJUMS?

Pieprasīt ir komanda, ko sniedzat savai datu bāzes programmai. Vaicājumi ir daļa no DML valodas. Visi SQL vaicājumi sastāv no vienas komandas. Šīs komandas struktūra ir maldinoši vienkārša, jo tā ir jāpaplašina, lai veiktu ļoti sarežģītus novērtējumus un datu manipulācijas.

SELECT komanda:

ATLASĪT“Atlasīt” ir visbiežāk lietotā komanda, ko izmanto, lai atlasītu datus no tabulas.
Vaicājuma veids, izmantojot SELECT:

SELECT id, lietotāja_vārds, pilsēta, dzimšanas_diena NO lietotāju_bāzes;

Šāds vaicājums no tabulas users_base parādīs visas norādīto kolonnu vērtības, atdalot tās ar komatiem pēc komandas SELECT. Varat arī parādīt visas kolonnas ar vienu rakstzīmi, * t.i. SELECT * FROM lietotāju_bāze ; - šāds vaicājums parādīs visus datus no tabulas.

SELECT komandu struktūra:

SELECT (kolonnu nosaukumi, kas atdalīti ar komatiem, kas ir jāparāda vaicājumā) FROM (tabulas nosaukums datu bāzē)
- Šis ir vienkāršākais pieprasījuma veids. Ērtai datu izguvei ir papildu komandas (skatiet zemāk “Funkcijas”)

DML komandas:

Vērtības var ievietot un noņemt no laukiem, izmantojot trīs DML (datu manipulācijas valodas) komandas:
IEVIETOT(Ievietot)
ATJAUNINĀT(Atjaunināšana, modifikācija),
DZĒST(Dzēst)

INSERT komanda:

INSERT INTO lietotāju_bāze (lietotāja_vārds, pilsēta, dzimšanas_diena) VĒRTĪBAS ('Aleksandrs', 'Rostova', '20.06.1991');

Komanda INSERT nāk ar prefiksu INTO (in to), tad iekavās ir to kolonnu nosaukumi, kurās jāievieto dati, pēc tam nāk komanda VALUES (vērtības) un iekavās vērtības nāk pēc kārtas (tas ir nepieciešams ievērot vērtību secību ar kolonnām , vērtībām jābūt tādā pašā secībā kā jūsu norādītajām kolonnām).

UPDATE komanda:

UPDATE users_base SET user_name = 'Aleksejs';

Komanda UPDATE atjaunina vērtības tabulā. Vispirms nāk pati komanda UPDATE, tad tabulas nosaukums, aiz komandas SET (set), tad kolonnas nosaukums un tā vērtība pēdiņās (pēdiņas tiek liktas, ja vērtība ir virknes formātā, ja tā ir skaitliska vērtība un kolonna nav saistīts ar datu tipu vchar vai citiem virkņu veidiem, pēdiņām nav nozīmes.)

DELETE komanda:

DELETE FROM users_base WHERE user_name = 'Vasīlijs';

Komanda DELETE izdzēš visu rindu un identificē rindu, izmantojot WHERE kritēriju. Šajā gadījumā šis vaicājums dzēstu visas rindas, kurās kolonnas user_name vērtība bija Vasilijs. Par WHERE kritēriju un citiem runāsim nedaudz vēlāk.

Kritēriji, funkcijas, nosacījumi utt. kas mums palīdz SQL:

WHERE klauzula ir komandas SELECT un citu DML komandu klauzula, kas ļauj iestatīt predikātus, kuru nosacījums var būt patiess vai nepatiess jebkurai tabulas rindai. Komanda izgūst tikai tās tabulas rindas, kurām šis apgalvojums ir patiess.
Piemērs:
SELECT id, pilsēta, dzimšanas_diena FROM lietotāju_bāze WHERE lietotāja_vārds = 'Aleksejs';- šāds vaicājums parādīs tikai tās rindas, kas atbilst WHERE nosacījumam, proti, visas rindas, kurās ailē user_name ir vērtība Aleksejs.

ORDER BY - nosacījums atlasīto rindu kārtošanai. Ir 2 kritēriji ASC un DESC. ASC (šķirošana no A līdz Z vai no 0 līdz 9)

DESC (pretēji ASC).
Piemērs:
SELECT id, pilsēta, dzimšanas_diena FROM lietotāju_bāze ORDER BY user_name ASC; - šāds vaicājums parādīs vērtības, kas sakārtotas pēc kolonnas user_name no A līdz Z (A-Z; 0-9)

Šo nosacījumu var izmantot arī kopā ar WHERE klauzulu.
Piemērs:
SELECT id, city, birth_day FROM users_base WHERE user_name = 'Aleksejs' ORDER BY id ASC;

DISTINCT ir arguments, kas nodrošina veidu, kā no SELECT klauzulas izslēgt dubultās vērtības. Tie. ja kolonnā ir dublētas vērtības, pieņemsim, user_name, tad DISTINCT parādīs tikai vienu vērtību, piemēram, jūsu datu bāzē ir 2 cilvēki vārdā Aleksejs, tad vaicājums, izmantojot funkciju DISTINCT, parādīs tikai 1 vērtību. ar ko saskaras pirmais...
Piemērs:
SELECT DISTINCT lietotājvārdu NO lietotāju_bāzes;- šāds vaicājums parādīs visu ierakstu vērtības kolonnā user_name, taču tie netiks atkārtoti, t.i. ja jums būtu bezgalīgi daudz atkārtotu vērtību, tad tās netiks rādītas...

UN - izmanto divus Būla (formā A UN B) argumentus un novērtē tos pret patiesību, vai tie abi ir patiesi.
Piemērs:
SELECT * FROM users_base WHERE city = 'Rostova' AND user_name = 'Aleksandrs';- parādīs visas vērtības no tabulas, kurā vienā rindā parādās pilsētas nosaukums (šajā gadījumā Rostova un lietotāja vārds Aleksandrs.

VAI - ņem divus Būla (formā A VAI B) argumentus un novērtē, vai viens no tiem ir pareizs.

SELECT * FROM users_base WHERE city = 'Rostova' VAI user_name = 'Aleksandrs';- parādīs visas vērtības no tabulas, kurā rindā parādās Rostovas pilsētas nosaukums vai lietotājvārds Aleksandrs.

NOT — izmanto vienu Būla vērtību (formā NOT A) kā argumentus un maina tā vērtību no false uz patiesu vai patiesu uz nepatiesu.
SELECT * FROM users_base WHERE city = 'Rostova' OR NOT user_name = 'Aleksandrs';- parādīs visas vērtības no tabulas, kurā Rostovas pilsētas nosaukums parādās vienā rindā vai lietotājvārds nav tieši Aleksandrs.

IN - definē vērtību kopu, kurā noteiktā vērtība var būt vai var nebūt iekļauta.
SELECT * FROM users_base WHERE city IN ('Vladivostoka', 'Rostova');- šāds vaicājums parādīs visas vērtības no tabulas, kurā pilsētas kolonnā ir norādīto pilsētu nosaukumi

Starp ir līdzīgs IN operatoram. Atšķirībā no definēšanas ar skaitļiem no kopas, kā to dara IN, BETWEEN definē diapazonu, kura vērtībām jāsamazinās, lai predikāts būtu patiess.
SELECT * FROM users_base WHERE id BETWEEN 1 UN 10;- parāda visas vērtības no tabulas, kas id kolonnā būs diapazonā no 1 līdz 10

COUNT — izveido vaicājumā atlasīto lauku rindu numurus vai vērtības, kas nav NULL.
SELECT COUNT (*) FROM users_base ;- parādīs rindu skaitu šajā tabulā.
IZVĒLĒTIES SKAITS (ATDOT lietotājvārdu) NO lietotāju_bāzes ;- parādīs rindu skaitu ar lietotājvārdiem (neatkārtoti)

SUM - rada visu atlasīto vērtību aritmētisko summu konkrētajam laukam.
SELECT SUM (id) FROM lietotāju_bāze ;- parādīs visu id kolonnas rindu vērtību summu.

AVG - aprēķina visas šī lauka atlasītās vērtības.
SELECT AVG (id) FROM lietotāju_bāze ;- parādīs visu id kolonnas atlasīto vērtību vidējo vērtību

MAX — rada lielāko no visām atlasītajām vērtībām šim laukam.

MIN - rada mazāko no visām atlasītajām vērtībām šim laukam.

Tabulu izveide:

CREATE TABLE user_base (id integer, user_name text, city text, birth_day datetime);- izpildot šādu komandu, tiks izveidota tabula, kurai es minēju piemērus... Šeit viss ir vienkārši, mēs rakstām komandu CREATE TABLE, kam seko tabulas nosaukums, kuru mēs vēlamies izveidot, tad iekavās, atdalītas ar komatiem, kolonnu nosaukumi un to datu tips. Šis ir standarta veids, kā izveidot tabulu SQL. Tagad es sniegšu piemēru tabulu izveidei programmā SQL Server 2005:

IESLĒGT ANSI_NULLS
AIZIET
IESLĒGT QUOTED_IDENTIFIER
AIZIET
JA NAV (SELECT * FROM sys.objects WHERE objekta_id = OBJEKTA_ID(N."") UN ierakstiet (N"U"))
SĀKT
IZVEIDOT TABULU .(

NAV NULL,
NAV NULL,
NAV NULL,
PRIMĀRĀ ATSLĒGA KLUSTERĒ
A.S.C.


BEIGAS
AIZIET
IESLĒGT ANSI_NULLS
AIZIET
IESLĒGT QUOTED_IDENTIFIER
AIZIET
JA NAV (SELECT * FROM sys.objects WHERE objekta_id = OBJEKTA_ID(N."") UN ierakstiet (N"U"))
SĀKT
IZVEIDOT TABULU .(
IDENTITĀTE(1,1) NAV NULL,
NULL,
NULL,
PRIMĀRĀ ATSLĒGA KLUSTERĒ
A.S.C.
) IESLĒGTS (IGNORE_DUP_KEY = IZSL.).
) IESLĒGTS TEXTIMAGE_ON
BEIGAS
AIZIET
IESLĒGT ANSI_NULLS
AIZIET
IESLĒGT QUOTED_IDENTIFIER
AIZIET
JA NAV (SELECT * FROM sys.objects WHERE objekta_id = OBJEKTA_ID(N."") UN ierakstiet (N"U"))
SĀKT
IZVEIDOT TABULU .(
IDENTITĀTE(1,1) NAV NULL,
NULL,
NULL,
PRIMĀRĀ ATSLĒGA KLUSTERĒ
A.S.C.
) IESLĒGTS (IGNORE_DUP_KEY = IZSL.).
) IESL
BEIGAS

Sintakse SQL Server 2005 ir cita tēma, es tikai gribēju parādīt, ka es aprakstīju SQL programmēšanas pamatus, jūs varat sasniegt virsotni pats, zinot pamatus.

Ja jums ir kādi jautājumi par šo tēmu, lūdzu, rakstiet man

SQL jeb strukturētā vaicājuma valoda ir valoda, ko izmanto, lai pārvaldītu datus relāciju datu bāzes sistēmā (RDBMS). Šajā rakstā tiks apskatītas bieži lietotās SQL komandas, kas jāzina katram programmētājam. Šis materiāls ir ideāli piemērots tiem, kuri vēlas papildināt savas zināšanas par SQL pirms darba intervijas. Lai to izdarītu, apskatiet rakstā sniegtos piemērus un atcerieties, ka pētījāt datu bāzes pa pāriem.

Ņemiet vērā, ka dažām datu bāzu sistēmām ir nepieciešams semikolu katra priekšraksta beigās. Semikols ir standarta rādītājs uz katra priekšraksta beigām SQL. Piemēri izmanto MySQL, tāpēc ir nepieciešams semikolu.

Piemēru datu bāzes izveide

Izveidojiet datu bāzi, lai parādītu, kā komandas darbojas. Lai strādātu, jums būs jālejupielādē divi faili: DLL.sql un InsertStatements.sql. Pēc tam atveriet termināli un piesakieties MySQL konsolē, izmantojot šādu komandu (rakstā tiek pieņemts, ka MySQL jau ir instalēts sistēmā):

Mysql -u sakne -p

Pēc tam ievadiet savu paroli.

Palaidiet šādu komandu. Sauksim datubāzi par “universitāti”:

IZVEIDOT DATU BĀZES universitāte; LIETOT universitāti; AVOTS ; AVOTS

Komandas darbam ar datu bāzēm

1. Skatiet pieejamās datu bāzes

RĀDĪT DATU BĀZES;

2. Izveidojiet jaunu datu bāzi

IZVEIDOT DATU BĀZI;

3. Izmantojamās datu bāzes izvēle

IZMANTOT ;

4. Importējiet SQL komandas no .sql faila

AVOTS ;

5. Dzēsiet datu bāzi

DROP DATU BĀZI ;

Darbs ar galdiem

6. Apskatiet datubāzē pieejamās tabulas

RĀDĪT TABULAS;

7. Izveidojiet jaunu tabulu

IZVEIDOT TABLU ( , , PRIMĀRĀ ATSLĒGA ( ), ĀRĒJĀ ATSLĒGA ( ) ATSAUCES ());

Integritātes ierobežojumi, izmantojot CREATE TABLE

Iespējams, jums būs jāizveido ierobežojumi noteiktām tabulas kolonnām. Veidojot tabulu, varat iestatīt šādus ierobežojumus:

  • tabulas šūnai nevar būt NULL vērtība;
  • primārā atslēga - PRIMARY KEY (kolas_nosaukums1, kolonnas_nosaukums2, ...) ;
  • ārējā atslēga - SVEŠĀ ATSLĒGA (col_namex1, …, col_namexn) ATSAUKSMES tabulas_nosaukums(col_namex1, …, col_namexn) .

Varat norādīt vairāk nekā vienu primāro atslēgu. Šajā gadījumā jūs iegūsit saliktu primāro atslēgu.

Piemērs

Izveidojiet tabulu "instruktors":

CREATE TABLE instruktors (ID CHAR(5), nosaukums VARCHAR(20) NOT NULL, nodaļas_nosaukums VARCHAR(20), alga NUMURS(8,2), PRIMARY KEY (ID), ĀRĒJĀ ATSLĒGA (dept_name) REFERENCES nodaļa(dept_name));

8. Tabulas informācija

Varat skatīt dažādu informāciju (vērtības veidu, atslēgu vai ne) par tabulas kolonnām, izmantojot šādu komandu:

APRAKSTS ;

9. Datu pievienošana tabulai

INSERT INTO (, , , ...) VĒRTĪBAS ( , , , …);

Pievienojot datus katrai tabulas kolonnai, nav jānorāda kolonnu nosaukumi.

INSERT INTO VĒRTĪBAS ( , , , …);

10. Tabulas datu atjaunināšana

ATJAUNINĀT IESTATĪT = , = , ... KUR ;

11. Visu datu noņemšana no tabulas

DZĒST NO ;

12. Dzēst tabulu

NOLIETOT TABULU ;

Komandas vaicājumu izveidei

13. ATLASĪT

SELECT izmanto, lai izgūtu datus no noteiktas tabulas:

ATLASĪT , , … NO ;

Šī komanda var parādīt visus datus no tabulas:

ATLASĪT * NO ;

14. SELECT DISTINCT

Tabulas kolonnās var būt datu dublikāti. Izmantojiet SELECT DISTINCT, lai izgūtu tikai datus, kas nav dublikāti.

ATLASĪT ATŠĶIRĪGU , , … NO ;

15. KUR

Varat izmantot atslēgvārdu WHERE sadaļā SELECT, lai vaicājumā norādītu nosacījumus:

ATLASĪT , , … NO KUR ;

Pieprasījumā var norādīt šādus nosacījumus:

  • tekstu salīdzināšana;
  • skaitlisko vērtību salīdzināšana;
  • loģiskie operatori UN (un), VAI (vai) un NOT (negācija).

Piemērs

Izmēģiniet šādas komandas. Pievērsiet uzmanību nosacījumiem, kas norādīti sadaļā KUR:

SELECT * FROM kurss WHERE dept_name=’Comp. Sci.”; SELECT * FROM kursa WHERE kredītpunkti>3; SELECT * FROM course WHERE dept_name="Sak. zinātne." UN kredīti>3;

16. GROUP BY

Operatoru GROUP BY bieži izmanto kopā ar tādām apkopotām funkcijām kā COUNT, MAX, MIN, SUM un AVG, lai grupētu izvades vērtības.

ATLASĪT , , … NO GROUP BY ;

Piemērs

Parādīsim katras fakultātes kursu skaitu:

SELECT COUNT(kursa_id), nodaļas_nosaukums FROM kursa GROUP BY nodaļas_nosaukums;

17. ŅEMOT

Atslēgvārds HAVING tika pievienots SQL, jo WHERE nevar izmantot, lai strādātu ar apkopotām funkcijām.

ATLASĪT , , ... NO GROUP BY ŅEMOT

Piemērs

Parādīsim fakultāšu sarakstu, kurās ir vairāk nekā viens kurss:

SELECT COUNT(kursa_id), nodaļas_nosaukums FROM kursa GROUP BY nodaļas_nosaukums HAVING COUNT(kursa_id)>1;

18. PASŪTĪJUMS PĒC

ORDER BY tiek izmantots, lai kārtotu vaicājuma rezultātus dilstošā vai augošā secībā. ORDER BY kārtos augošā secībā, ja vien nav norādīts ASC vai DESC.

ATLASĪT , , … NO PASŪTĪT PĒC , , …ASC|DESC;

Piemērs

Parādīsim kursu sarakstu kredītpunktu augošā un dilstošā secībā:

SELECT * FROM kursa PASŪTĪT PĒC kredītpunktiem; SELECT * FROM kursa ORDER BY kredītpunkti DESC;

19. STARP

BETWEEN izmanto, lai atlasītu datu vērtības no noteikta diapazona. Var izmantot ciparu un teksta vērtības, kā arī datumus.

ATLASĪT , , … NO KUR STARP UN ;

Piemērs

Parādīsim to instruktoru sarakstu, kuru alga ir lielāka par 50 000, bet mazāka par 100 000:

SELECT * FROM instruktors, KUR alga NO 50000 UN 100000;

20. LIKE

Operators LIKE tiek izmantots WHERE, lai norādītu līdzīgas vērtības meklēšanas modeli.

Ir divi bezmaksas operatori, kas tiek izmantoti LIKE:

  • % (nav, viena vai vairākas rakstzīmes);
  • _ (viena rakstzīme).
ATLASĪT , , … NO KUR PATĪK ;

Piemērs

Parādīsim sarakstu ar kursiem, kuru nosaukumos ir "līdz" un to kursu sarakstu, kuru nosaukumi sākas ar "CS-":

SELECT * FROM kursa WHERE nosaukums LIKE ‘%to%’; SELECT * FROM kurss WHERE kursa_id LIKE "CS-___";

21. IN

Izmantojot IN, WHERE klauzulai varat norādīt vairākas vērtības:

ATLASĪT , , … NO KUR IN ( , , …);

Piemērs

Parādīsim sarakstu ar studentiem no Comp majors. Zinātne, fizika un elektroenerģija Ang.:

SELECT * FROM students WHERE dept_name IN ('Comp. Sci.', 'Physics', 'Elec. Eng.');

22. PIEVIENOJIES

JOIN izmanto, lai saistītu divas vai vairākas tabulas, izmantojot tajās kopīgus atribūtus. Tālāk esošajā attēlā ir parādīti dažādi veidi, kā pievienoties SQL. Ņemiet vērā atšķirību starp kreiso ārējo savienojumu un labo ārējo savienojumu:

ATLASĪT , , … NO PIEVIENOJIES IESLĒGTS = ;

1. piemērs

Parādīsim visu kursu sarakstu un attiecīgo informāciju par fakultātēm:

SELECT * FROM kurss JOIN departamentam ON kurss.dept_name=department.dept_name;

2. piemērs

Mēs parādīsim visu nepieciešamo kursu sarakstu un informāciju par tiem:

SELECT prereq.course_id, title, dept_name, credits, prereq_id FROM prereq LEFT OUTTER JOIN ON prereq.course_id=course.course_id;

3. piemērs

Mēs parādīsim visu kursu sarakstu neatkarīgi no tā, vai tie ir nepieciešami vai nē:

SELECT course.course_id, title, dept_name, credits, prereq_id FROM prereq RIGHT OUTTER JOIN ON prereq.course_id=course.course_id;

23.Skatīt

Skats ir virtuāla SQL tabula, kas izveidota izteiksmes izpildes rezultātā. Tas satur rindas un kolonnas un ir ļoti līdzīgs parastajai SQL tabulai. View vienmēr parāda jaunāko informāciju no datu bāzes.

Radīšana

IZVEIDOT SKATU KĀ IZVĒLĒTIES , , … NO KUR ;

Noņemšana

NOMET SKATU ;

Piemērs

Izveidosim skatu, kas sastāv no kursiem ar 3 kredītpunktiem:

24.Apkopotās funkcijas

Šīs funkcijas tiek izmantotas, lai iegūtu apkopotu rezultātu saistībā ar attiecīgajiem datiem. Tālāk ir plaši izmantotas apkopotās funkcijas.

  • COUNT (col_name) - atgriež rindu skaitu;
  • SUM (col_name) - atgriež šīs kolonnas vērtību summu;
  • AVG (col_name) - atgriež dotās kolonnas vidējo vērtību;
  • MIN (kolonnas_nosaukums) - atgriež dotās kolonnas mazāko vērtību;
  • MAX (col_name) — atgriež dotās kolonnas lielāko vērtību.

25. Ligzdoti apakšvaicājumi

Ligzdotie apakšvaicājumi ir SQL vaicājumi, kas ietver klauzulas SELECT , FROM un WHERE, kas ligzdotas citā vaicājumā.

Piemērs

Atradīsim kursus, kas tika pasniegti 2009. gada rudenī un 2010. gada pavasarī:

SELECT DISTINCT kursa_id FROM sadaļa WHERE semestris = 'Rudens' UN gads= 2009 AND kursa_id IN (SELECT kursa_id FROM sadaļa WHERE semestris = 'Pavasaris' UN gads= 2010);

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ēšanas dienesti, 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 apskatīšanas mēs sniegsim īsu datu bāzes terminu definīciju. Tātad.

Datu bāze - fails vai failu kolekcija 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āsimies mapi, kurā glabājas dokumenti, sagrupēti pēc noteiktas pazīmes, piemēram, pasūtījumu saraksts par pēdējo mēnesi. Šī ir tabula datorā. Atsevišķai tabulai ir savs unikālais nosaukums.

Datu tips - informācijas veids, ko atļauts glabāt atsevišķā kolonnā vai rindā. Tie var būt skaitļi vai noteikta formāta teksts.

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

Primārā atslēga- Katrai tabulas rindai var būt viena vai vairākas kolonnas, lai to unikāli identificētu. Bez primārās atslēgas ir ļoti grūti atjaunināt, mainīt un dzēst vēlamā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 skaita operatoru, un to ir viegli iemācīties. Bet, neskatoties uz šķietamo 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 nosaka operatoru pamatsintaksi un funkcijas, un to atbalsta visi DBVS tirgus līderi, piemēram, ORACLE. Nav iespējams vienā īsā rakstā aplūkot visas valodas iespējas, 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 paraugu ņemš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. Datu tipi SQL ir tādi paši kā citās programmēšanas valodās.

Veidojam 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 interaktīvos 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ē, izmantojot 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:

Izveidojiet 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);

Tabula sastāv no piecām kolonnām. Pēc nosaukuma tiek norādīts datu tips, kolonnas tiek atdalītas ar komatiem. Kolonnas vērtība var pieņemt tukšas vērtības (NULL) vai ir jāaizpilda (NOT NULL), un tas tiek noteikts, izveidojot tabulu.

Datu izgūšana no tabulas

Datu ieneses operators ir visbiežāk izmantotais SQL vaicājums. Lai iegūtu informāciju, mums jānorāda, ko mēs vēlamies atlasīt no šādas tabulas. Vispirms vienkāršs piemērs:

SELECT commodity_name FROM Commodity

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

Vaicājuma 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 jebkādas šķirošanas. Rezultāta pasūtīšanai tiek izmantots papildu punkts ORDER BY.

Lai meklētu vairākus laukus, uzskaitiet tos, atdalot tos ar komatiem, kā parādīts šajā piemērā:

ATLASĪT preces_id, preces_nosaukums, preces_cena NO Preces

Kā vaicājuma rezultātu 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)
  • Izvēle atbilstoši nosacījumiem (KUR)
  • Grupēšanas termins (GROUP BY)

Pievienojiet rindiņu

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

  • pievienot jaunu veselu rindu;
  • stīgas daļa;
  • vaicājuma rezultāti.

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

INSERT INTO Preču VĒRTĪBAS ("106", "50", "Coca-Cola", "1.68", "Bez alkohola ,)

Piemērā tabulai tiek pievienots jauns produkts. Katras kolonnas vērtības 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ā, kas 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 konkrētai līnijai.

UPDATE sastāv no trim galvenajiem elementiem:

  • 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 produktam ar ID=106 cena ir mainījusies, 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ā Commodity, kur tiks veikta atjaunināšana, pēc tam pēc SET - kolonnas jauno vērtību un atradām vēlamo ierakstu, norādot nepieciešamo ID vērtību WHERE.

Lai mainītu vairākas kolonnas, SET priekšrakstam seko vairāki kolonnu vērtību pāri, kas atdalīti ar komatiem. Apskatīsim piemēru, kurā tiek atjaunināts preces nosaukums un cena:

UPDATE Commodity SET commodity_name=’Fanta’, commodity_price = "3.2" WHERE commodity_id = "106"

Lai noņemtu informāciju kolonnā, varat tai piešķirt vērtību NULL, ja tabulas struktūra to atļauj. Jāatceras, ka NULL ir tieši “nē” vērtība, nevis nulle teksta vai skaitļa veidā. Noņemsim produkta aprakstu:

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

Notiek rindu noņemšana

SQL vaicājumi rindu dzēšanai tabulā tiek izpildīti, izmantojot 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:

DELETE FROM Commodity WHERE preces_id = "106"

Pēc DELETE FROM norādām tās tabulas nosaukumu, kurā tiks dzēstas rindas. Klauzula WHERE satur nosacījumu, saskaņā ar kuru rindas tiks atlasītas dzēšanai. Piemērā mēs izdzēšam produktu līniju ar ID=106. Norādīt KUR ir ļoti svarīgi, jo izlaižot šo paziņojumu, tiks dzēstas visas tabulas rindas. Tas attiecas arī uz lauku vērtības maiņu.

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

SQL izmantošana programmā Microsoft Access

Parasti to izmanto interaktīvi, lai izveidotu tabulas, datu bāzes, pārvaldītu, modificētu, analizētu datus datu bāzē un ieviestu SQL Access vaicājumus, izmantojot ērtu interaktīvu vaicājumu noformētāju (Query Designer), ar kuru jūs varat izveidot un nekavējoties izpildīt jebkuras sarežģītības SQL paziņojumus.

Tiek atbalstīts arī servera piekļuves režīms, kurā Access DBMS var izmantot kā SQL vaicājumu ģeneratoru jebkuram ODBC datu avotam. Šī funkcija ļ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, atzarošana utt., DBVS ražotā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 DBVS tiek izplatīta saskaņā ar bezmaksas GNU vispārējo publisko licenci. Ir komerciāla licence ar iespēju izstrādāt pielāgotus moduļus. Kā komponents tas ir iekļauts 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āzu replikācija un mākoņpakalpojumi.

Tabulas izteiksmes tiek saukti par apakšvaicājumiem, kas tiek izmantoti, ja ir sagaidāma tabulas klātbūtne. 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 gadījumos, kad kolonnu aizstājvārdu izmantošana nav iespējama, jo SQL tulkotājs apstrādā citu paziņojumu, pirms ir zināms aizstājvārds. Tālāk esošajā piemērā ir parādīts mēģinājums 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 ievades_mēnesis;

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 tāds, ka klauzula GROUP BY tiek apstrādāta, pirms tiek apstrādāts atbilstošs priekšraksta SELECT saraksts, un, apstrādājot 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 klauzulas GROUP BY:

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

Šī vaicājuma 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.) Tālāk sniegtajā piemērā parādīta tabulas izteiksmes izmantošana SELECT priekšraksta atlases sarakstā:

Šī vaicājuma rezultāts:

Vispārējas tabulas izteiksmes

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

    nerekursīvs;

    rekursīvs.

Šie divi pieprasījumu veidi ir apskatīti nākamajās sadaļās.

OTB un nerekursīvie vaicājumi

Nerekursīvo OTB formu var izmantot kā alternatīvu atvasinātajām tabulām un skatiem. Parasti OTB nosaka AR klauzulām un papildu vaicājums, kas atsaucas uz nosaukumu, kas izmantots klauzulā WITH. Transact-SQL atslēgvārda WITH nozīme ir neskaidra. Lai izvairītos no neskaidrībām, priekšraksts pirms WITH ir jābeidz ar semikolu.

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

Vaicājums šajā piemērā atlasa pasūtījumus, kuru kopējie nodokļi (TotalDue) ir lielāki par visu nodokļu vidējo vērtību un kuru pārvadāšanas izmaksas (Freight) ir lielākas par 40% no vidējiem nodokļiem. Šī vaicājuma galvenā īpašība ir tā garums, 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 tam dzēst to pēc vaicājuma izpildes. Labāka pieeja būtu izveidot OTB. Tālāk esošajā piemērā ir parādīta nerekursīva OTB izmantošana, kas saīsina iepriekš minēto 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_ price_cal20c) FROM_cence_cal20c. ) /2,5;

WITH klauzulas sintakse nerekursīvos vaicājumos ir šāda:

Parametrs cte_name apzīmē OTB nosaukumu, kas definē iegūto tabulu, un parametrs column_list apzīmē tabulas izteiksmes kolonnu sarakstu. (Iepriekš esošajā piemērā OTB sauc par price_calc, un tai ir viena kolonna, gads_2005.) Parametrs inner_query ir priekšraksts SELECT, kas norāda atbilstošās tabulas izteiksmes rezultātu kopu. Pēc tam definēto tabulas izteiksmi var izmantot vaicājumā outer_query. (Ārējais vaicājums iepriekš minētajā piemērā izmanto OTB price_calc un tās sleju year_2005, lai vienkāršotu divkārši ligzdoto 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 vēlāk. OTB var izmantot, lai ieviestu 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 savieno 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 neatsaucas uz OTB. Šo vaicājumu sauc par atsauces vaicājumu vai avotu.

Otrais vaicājums satur atsauci uz OTB un attēlo 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 pirmā vaicājuma izsaukuma rezultātu. Pēc tam sistēma vēlreiz izsauc rekursīvo daļu. Zvans rekursīvajam dalībniekam tiek pārtraukts, kad iepriekšējais zvans tam atgriež tukšu rezultātu kopu.

Operators UNION ALL pievienojas pašlaik uzkrātajām rindām, kā arī papildu rindām, 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 norāda ārējo vaicājumu, ko OTB izmanto, lai izgūtu visus abu dalībnieku savienojuma zvanus.

Lai parādītu OTB rekursīvo formu, 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 ("Cabin", NULL, 1,13); INSERT INTO Airplane VALUES ("Cockpit", 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);

Tabulā Lidmašīna ir četras kolonnas. Kolonnā ContainingAssembly ir norādīts mezgls, un kolonnā ContainedAssembly ir norādītas detaļas (pa vienai), kas veido atbilstošo mezglu. Zemāk esošajā attēlā parādīts 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:

Nākamajā piemērā tiek izmantota klauzula WITH, lai definētu vaicājumu, kas aprēķina katras būves kopējās izmaksas:

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

WITH klauzula definē OTB sarakstu ar nosaukumu list_of_parts, kas sastāv no 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ā posma rezultātus. Priekšraksts SELECT piemēra pēdējā rindā parāda šādu rezultātu.

skatījumi