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 NO4. 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_BookTiek 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 |
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 |
|
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 Iespējams, jums būs jāizveido ierobežojumi noteiktām tabulas kolonnām. Veidojot tabulu, varat iestatīt šādus ierobežojumus: Varat norādīt vairāk nekā vienu primāro atslēgu. Šajā gadījumā jūs iegūsit saliktu primāro atslēgu. 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)); Varat skatīt dažādu informāciju (vērtības veidu, atslēgu vai ne) par tabulas kolonnām, izmantojot šādu komandu: APRAKSTS Pievienojot datus katrai tabulas kolonnai, nav jānorāda kolonnu nosaukumi. INSERT INTO SELECT izmanto, lai izgūtu datus no noteiktas tabulas: ATLASĪT Šī komanda var parādīt visus datus no tabulas: ATLASĪT * NO 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 Varat izmantot atslēgvārdu WHERE sadaļā SELECT, lai vaicājumā norādītu nosacījumus: ATLASĪT Pieprasījumā var norādīt šādus nosacījumus: 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; 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 Parādīsim katras fakultātes kursu skaitu: SELECT COUNT(kursa_id), nodaļas_nosaukums FROM kursa GROUP BY nodaļas_nosaukums; Atslēgvārds HAVING tika pievienots SQL, jo WHERE nevar izmantot, lai strādātu ar apkopotām funkcijām. ATLASĪT 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; 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 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; 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 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; 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: 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-___"; Izmantojot IN, WHERE klauzulai varat norādīt vairākas vērtības: ATLASĪT 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.'); 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 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; 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; 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; 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. Izveidosim skatu, kas sastāv no kursiem ar 3 kredītpunktiem: Šī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. Ligzdotie apakšvaicājumi ir SQL vaicājumi, kas ietver klauzulas SELECT , FROM un WHERE, kas ligzdotas citā vaicājumā. 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. 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: 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. Ir divi veidi, kā izveidot jaunas datu bāzes, tabulas un citus vaicājumus SQL: 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: 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 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 Lai tabulai pievienotu rindu, tiek izmantoti SQL vaicājumi ar INSERT operatoru. Papildināšanu var veikt trīs veidos: 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. INSERT galvenokārt izmanto rindu pievienošanai, taču to var izmantot arī SELECT priekšraksta rezultātu pievienošanai. Lai mainītu informāciju datu bāzes tabulas laukos, jāizmanto priekšraksts UPDATE. Operatoru var izmantot divos veidos: UPDATE sastāv no trim galvenajiem elementiem: 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" SQL vaicājumi rindu dzēšanai tabulā tiek izpildīti, izmantojot DELETE priekšrakstu. Ir divi lietošanas gadījumi: 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. 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. 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: 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ā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: 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. 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.) Š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.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 Integritātes ierobežojumi, izmantojot CREATE TABLE
Piemērs
8. Tabulas informācija
9. Datu pievienošana tabulai
INSERT INTO 10. Tabulas datu atjaunināšana
ATJAUNINĀT 11. Visu datu noņemšana no tabulas
DZĒST NO 12. Dzēst tabulu
NOLIETOT TABULU Komandas vaicājumu izveidei
13. ATLASĪT
14. SELECT DISTINCT
15. KUR
Piemērs
16. GROUP BY
Piemērs
17. ŅEMOT
Piemērs
18. PASŪTĪJUMS PĒC
Piemērs
19. STARP
Piemērs
20. LIKE
ATLASĪT Piemērs
21. IN
Piemērs
22. PIEVIENOJIES
1. piemērs
2. piemērs
3. piemērs
23.Skatīt
Radīšana
IZVEIDOT SKATU Noņemšana
NOMET SKATU Piemērs
24.Apkopotās funkcijas
25. Ligzdoti apakšvaicājumi
Piemērs
Kas ir SQL?
SQL datu tipi
Veidojam tabulas un datu bāzes
Datu izgūšana no tabulas
Pievienojiet rindiņu
Vaicājuma rezultātu pievienošana
Datu maiņa
Notiek rindu noņemšana
SQL izmantošana programmā Microsoft Access
SQL paplašinājumi
SQL internetā
Atvasinātās tabulas
Vispārējas tabulas izteiksmes
OTB un nerekursīvie vaicājumi
OTB un rekursīvie vaicājumi