Et eksempel på å lage en spørring (Query) i en MS SQL Server-database. Databasen ligger i en lokal *.mdf-fil. Hvordan skrive SQL-spørringer - Detaljerte eksempler Plassering av en DataGridView-kontroll og oppsett av databasekommunikasjon

Et eksempel på å lage en spørring (Query) i en MS SQL Server-database. Databasen ligger i en lokal *.mdf-fil. Hvordan skrive SQL-spørringer - Detaljerte eksempler Plassering av en DataGridView-kontroll og oppsett av databasekommunikasjon

Et eksempel på å lage en spørring (Query) i en MS SQL Server-database. Databasen ligger i en lokal *.mdf-fil

Oppgaven

Det er spesifisert en database som ligger i Education.mdf-filen. Databasen inneholder to sammenkoblede tabeller Student og Session.

Tabellene er knyttet til hverandre av ID_Book-feltet.

Bruk Microsoft Visual Studio-verktøy, lag en spørring kalt Query1, som vil ha følgende struktur:

Feltnavn Bord
Num_Book Student
Navn Student
Matematikk Økt
Informatikk Økt
Filosofi Økt
Gjennomsnitt Beregningsfelt

Utførelse (trinn for trinn instruksjoner)

1. Last ned Microsoft Visual Studio
2. Koble Education.mdf-databasen til listen over databaser i Server Explorer-verktøyet

For ikke å kaste bort tid på å utvikle og koble tabeller til Education.mdf-databasen, kan et arkiv med en tidligere utarbeidet database lastes ned. Etter nedlasting og lagring i en bestemt mappe, må databasen pakkes ut og kobles til listen over databaser i Server Explorer-verktøyet.

Koble til en database er implementert på en av flere standardmåter:

  • velge kommandoen "Koble til database..." fra Verktøy-menyen;
  • ved å velge knappen (kommando) "Koble til database..." fra Server Explorer-verktøyet.

Som et resultat åpnes et veiviservindu der du må konfigurere databasetilkoblingen ved å bruke flere trinn (vinduer).

Ris. 1. Metoder for å legge til/koble til en database

En detaljert beskrivelse av hvordan du kobler til en database som Microsoft SQL Server i Microsoft Visual Studio er gitt i emnet:

  • Eksempel på opprettelse/forbindelse Jeg lokal Microsoft SQL Server-database, som ligger i en *.mdf-fil

Etter tilkobling vil Server Explorer-verktøyvinduet se ut som vist i figur 2.

Ris. 2. Server Explorer-verktøy med tilkoblet Education.mdf-database

3. Legge til en ny forespørsel. Nytt spørreteam

Du kan opprette spørringer mot databasen. I vårt tilfelle må vi opprette en forespørsel i samsvar med oppgavebetingelsene.

Spørringen opprettes ved å bruke kommandoen "New Query", som kalles opp fra kontekstmenyen (figur 3). For å kalle kommandoen, høyreklikk bare i feltområdet som er uthevet for å vise Education.mdb-databaseelementene. Det skal bemerkes at forespørsler ikke lagres av systemet. Visninger brukes til å vise lagrede (komplekse) søk.

Figur 3 viser kontekstmenyen som hentes frem når du klikker på fanen Visninger. I denne menyen må du velge kommandoen "Ny spørring". Denne kommandoen er i listen over kontekstmenyer for andre databasekomponenter (tabeller, diagrammer, etc.).

Ris. 3. Ny spørringskommando

Som et resultat vil vinduet "Legg til tabell" åpnes, der du må velge tabellene hvis data skal brukes i spørringen (Figur 4).

Ris. 4. Velge tabellene som skal brukes i spørringen

For vårt tilfelle må vi velge begge tabellene.

Som et resultat vil Microsoft Visual Studio-vinduet se ut som vist i figur 5.

Ris. 5. MS Visual Studio-vinduet etter å ha opprettet en forespørsel

I tabellene må du velge feltene som skal brukes i spørringen. Rekkefølgen felt velges i må samsvare med hvordan de vises i forespørselen i henhold til oppgavebetingelsene. Dette betyr at først feltene i Elev-tabellen velges (NumBook, Navn), og deretter velges feltene i Sesjonstabellen (Matematikk, Informatikk, Filosofi).

For vårt tilfelle er valg av felt vist i figur 6.

Ris. 6. Velge felt for forespørselen

Som det fremgår av figur 6, vises en spørring i SQL-språk generert av systemet nederst i vinduet

PLUKKE UT Student.Num_Book, Student.Name, Sesjon.Matematikk, Sesjon.Informatikk, Sesjon.filosofi FRA
4. Legg til et beregnet felt Gjennomsnitt

For å lage et beregnet felt Gjennomsnitt , må du endre teksten til denne spørringen i vinduet der SQL-spørringen vises. For eksempel:

PLUKKE UT Student.Num_Book, Student.Name, Session.Mathematics, Session.Informatics, Session.philosophy, (Session.Mathematics + Session.Informatics + Session.Philosophy) / 3.0 AS Average FRA Session INNER JOIN Student ON Session.ID_Book = Student.ID_Book

Beregningsfeltet Average legges til, som er det aritmetiske gjennomsnittet (Figur 7).

SQL - Strukturert spørrespråk.
I denne anmeldelsen skal vi se på de vanligste typene SQL-spørringer.
SQL-standarden er definert ANSI(American National Standards Institute).
SQL er et språk rettet spesielt mot relasjonsdatabaser.

SQL-partisjonering:


DDL
(Datadefinisjonsspråk) - det såkalte Schema Description Language i ANSI, består av kommandoer som lager objekter (tabeller, indekser, visninger og så videre) i databasen.
DML(Datamanipulasjonsspråk) er et sett med kommandoer som bestemmer hvilke verdier som er representert i tabeller til enhver tid.
DCD(Databehandlingsspråk) består av fasiliteter som bestemmer om en bruker skal tillate å utføre bestemte handlinger eller ikke. De er en del av ANSI DDL. Ikke glem disse navnene. Dette er ikke forskjellige språk, men deler av SQL-kommandoer gruppert etter funksjonene deres.

Datatyper:

SQL Server - Datatyper

Beskrivelse

bigint (int 8)

bigint (int 8)

binær(n)

binær(eller bilde

karakter
(synonym røye)

nasjonal karakter eller ntekst

karakter varierende(synonym røye varierende varchar)

nasjonal karakter varierende eller ntekst

Dato tid

dato tid

desimal

aka numerisk

dobbel presisjon

dobbel presisjon

heltall (int 4) (synonym: int)

heltall (int 4)

nasjonal karakter(synonym: nasjonal karakter, nchar)

nasjonal karakter

Numerisk(synonymer: desimal, des)

nasjonal karakter varierende(synonymer: nasjonal røye varierende, nvarchar)

Nasjonal karakter varierende

Liten datotid

dato tid

smallint (int 2)

smallint (int 2)

Småpenger

sql_variant

Støttes ikke lenger

Ntekst
Fra og med SQL Server 2005 anbefales det ikke å bruke det.

Tidsstempel

Ikke støttet

bitteliten (int 1)

bitteliten (int 1)

Uniqueidentifier

unik identifikator

varbinær(n)

varbinær(eller bilde

smalldatetime

dato tid

smallint (int 2)

smallint (int 2)

småpenger

sql_variant

Ikke støttet

tidsstempel

Ikke støttet

bitteliten (int 1)

bitteliten (int 1)

unik identifikator

unik identifikator

varbinær(n)

varbinær(eller bilde

Datatypetabell i SQL Server 2000

HVA ER EN FORESPØRSEL?

Be om er en kommando du gir til databaseprogrammet. Spørringer er en del av DML-språket. Alle SQL-spørringer består av en enkelt kommando. Strukturen til denne kommandoen er villedende enkel fordi du må utvide den til å utføre svært komplekse evalueringer og datamanipulasjoner.

SELECT kommando:

PLUKKE UT"Select" er den mest brukte kommandoen den brukes til å velge data fra tabellen.
Type spørring med SELECT:

SELECT id, user_name, city, birth_day FROM users_base;

En slik spørring vil vise fra user_base-tabellen alle verdiene til kolonnene spesifisert atskilt med kommaer etter SELECT-kommandoen. Du kan også vise alle kolonner med ett tegn, * dvs. SELECT * FROM users_base ; - En slik spørring vil vise alle data fra tabellen.

VELG kommandostruktur:

SELECT (Kolonnenavn atskilt med kommaer som må vises i spørringen) FROM (tabellnavn i databasen)
– Dette er den enkleste typen forespørsel. Det er flere kommandoer for praktisk datainnhenting (se under "Funksjoner")

DML-kommandoer:

Verdier kan plasseres og fjernes fra felt ved hjelp av tre DML (Data Manipulation Language) kommandoer:
SETT INN(Sett inn)
OPPDATER(Oppdatering, endring),
SLETT(Slett)

INSERT kommando:

INSERT INTO users_base (brukernavn, by, fødselsdag) VERDIER ('Alexander', 'Rostov', '06/20/1991');

INSERT-kommandoen kommer med prefikset INTO (i til), så i parentes står navnene på kolonnene vi må sette inn data i, så kommer VALUES-kommandoen (verdier) og i parentes kommer verdiene etter tur (det er nødvendig for å observere rekkefølgen på verdiene med kolonnene, verdiene må være i samme rekkefølge som kolonnene du spesifiserte).

UPDATE kommando:

OPPDATER users_base SET user_name = 'Alexey';

UPDATE-kommandoen oppdaterer verdier i en tabell. Først kommer selve UPDATE-kommandoen, deretter tabellnavnet, etter SET-kommandoen (sett), deretter kolonnenavnet og verdien i anførselstegn (anførselstegn plasseres hvis verdien er i strengformat, hvis det er en numerisk verdi og kolonnen ikke er knyttet til datatypen vchar eller noen andre strengtyper, har anførselstegnene ingen betydning.)

DELETE kommando:

SLETT FRA users_base WHERE user_name = 'Vasily';

DELETE-kommandoen sletter hele raden og identifiserer raden ved å bruke WHERE-kriteriet. I dette tilfellet ville denne spørringen slette alle rader der kolonneverdien for brukernavn var Vasily. Vi snakker om WHERE-kriteriet og andre litt senere.

Kriterier, funksjoner, betingelser mv. hva hjelper oss i SQL:

WHERE-leddet er et ledd i SELECT-kommandoen og andre DML-kommandoer som lar deg sette predikater hvis tilstand kan være enten sann eller usann for en hvilken som helst rad i tabellen. Kommandoen henter bare de radene fra tabellen som denne setningen er sann for.
Eksempel:
SELECT id, city, birth_day FROM users_base WHERE user_name = 'Alexey';- en slik spørring vil kun vise de radene som samsvarer med WHERE-betingelsen, nemlig alle rader der brukernavn-kolonnen har verdien Alexey.

BESTILL ETTER - betingelse for sortering av de valgte radene. Har 2 kriterier ASC og DESC. ASC (sortering fra A til Å eller fra 0 til 9)

DESC (motsatt av ASC).
Eksempel:
SELECT id, city, birth_day FROM users_base ORDER BY user_name ASC; - en slik spørring vil vise verdier sortert etter brukernavn-kolonnen fra A til Å (A-Z; 0-9)

Denne betingelsen kan også brukes sammen med WHERE-klausulen.
Eksempel:
SELECT id, city, birth_day FROM users_base WHERE user_name = 'Alexey' ORDER BY id ASC;

DISTINCT er et argument som gir deg en måte å eliminere doble verdier fra SELECT-klausulen din. De. hvis du har dupliserte verdier i en kolonne, la oss si brukernavn, så vil DISTINCT vise deg bare én verdi, for eksempel har du 2 personer som heter Alexey i databasen din, så vil en spørring som bruker DISTINCT-funksjonen vise deg bare 1 verdi som oppstår først...
Eksempel:
SELECT DISTINCT user_name FROM users_base;- En slik spørring vil vise oss verdiene til alle postene i kolonnen user_name, men de vil ikke bli gjentatt, dvs. hvis du hadde et uendelig antall gjentatte verdier, vil de ikke bli vist...

OG - tar to boolske (i formen A OG B) som argumenter og vurderer dem mot sannheten om de begge er sanne.
Eksempel:
SELECT * FROM users_base WHERE city = 'Rostov' OG user_name = 'Alexander';- vil vise alle verdiene fra tabellen der navnet på byen vises på én linje (i dette tilfellet Rostov og brukernavnet Alexander.

ELLER - tar to boolske (i formen A ELLER B) som argumenter og vurderer om en av dem er riktig.

SELECT * FROM users_base WHERE city = 'Rostov' ELLER user_name = 'Alexander';- vil vise alle verdier fra tabellen der navnet på byen Rostov eller brukernavnet Alexander vises på linjen.

NOT - tar en enkelt boolsk (i formen NOT A) som argumenter og endrer verdien fra usant til sant eller sant til usant.
SELECT * FROM users_base WHERE city = 'Rostov' OR NOT user_name = 'Alexander';- vil vise alle verdier fra tabellen der navnet på byen Rostov vises på én linje eller brukernavnet ikke akkurat er Alexander.

IN - definerer et sett med verdier der en gitt verdi kan inkluderes eller ikke.
VELG * FRA users_base WHERE city IN ('Vladivostok', 'Rostov');- en slik spørring vil vise alle verdier fra tabellen som inneholder navnene på de spesifiserte byene i bykolonnen

Between ligner på IN-operatøren. I motsetning til å definere med tall fra et sett, som IN gjør, definerer BETWEEN et område hvis verdier må reduseres for å gjøre predikatet sant.
SELECT * FROM users_base WHERE id MELLOM 1 OG 10;- viser alle verdier fra tabellen som vil være i området fra 1 til 10 i id-kolonnen

COUNT - Produserer radnumrene eller ikke-NULL-verdier for feltene som søket valgte.
VELG ANTALL (*) FRA users_base ;- vil vise antall rader i denne tabellen.
SELECT COUNT (DISTINCT user_name) FROM users_base ;- vil vise antall linjer med brukernavn (ikke gjentatt)

SUM - produserer den aritmetiske summen av alle valgte verdier for et gitt felt.
SELECT SUM (id) FROM users_base ;- vil vise summen av verdiene til alle rader i id-kolonnen.

AVG - gjennomsnitt av alle valgte verdier i dette feltet.
VELG AVG (id) FRA users_base ;- vil vise gjennomsnittet av alle valgte verdier i id-kolonnen

MAX - produserer den største av alle valgte verdier for dette feltet.

MIN - produserer den minste av alle valgte verdier for dette feltet.

Opprette tabeller:

CREATE TABLE users_base (id-heltall, brukernavntekst, bytekst, fødselsdagsdato);- å utføre en slik kommando vil føre til opprettelsen av tabellen som jeg ga eksempler på... Alt er enkelt her, vi skriver CREATE TABLE-kommandoen, etterfulgt av navnet på tabellen vi ønsker å lage, deretter i parentes, atskilt med komma, navnene på kolonnene og deres datatype. Dette er standardmåten for å lage en tabell i SQL. Nå vil jeg gi et eksempel på å lage tabeller i SQL Server 2005:

SET ANSI_NULLS PÅ

SETT QUOTED_IDENTIFIER PÅ

HVIS IKKE FINNES (VELG * FRA sys.objects WHERE object_id = OBJECT_ID(N."") OG skriv inn (N"U"))
BEGYNNE
LAG TABELL .(

IKKE NULL,
IKKE NULL,
IKKE NULL,
PRIMÆR NØKKEL KLYNGET
A.S.C.


SLUTT

SET ANSI_NULLS PÅ

SETT QUOTED_IDENTIFIER PÅ

HVIS IKKE FINNES (VELG * FRA sys.objects WHERE object_id = OBJECT_ID(N."") OG skriv inn (N"U"))
BEGYNNE
LAG TABELL .(
IDENTITET(1,1) IKKE NULL,
NULL,
NULL,
PRIMÆR NØKKEL KLYNGET
A.S.C.
) MED (IGNORE_DUP_KEY = AV) PÅ
) PÅ TEXTIMAGE_ON
SLUTT

SET ANSI_NULLS PÅ

SETT QUOTED_IDENTIFIER PÅ

HVIS IKKE FINNES (VELG * FRA sys.objects WHERE object_id = OBJECT_ID(N."") OG skriv inn (N"U"))
BEGYNNE
LAG TABELL .(
IDENTITET(1,1) IKKE NULL,
NULL,
NULL,
PRIMÆR NØKKEL KLYNGET
A.S.C.
) MED (IGNORE_DUP_KEY = AV) PÅ
) PÅ
SLUTT

Syntaks i SQL Server 2005 er et annet emne, jeg ville bare vise at jeg beskrev det grunnleggende om SQL-programmering, du kan nå toppen ved å kjenne det grunnleggende.

Hvis du har spørsmål om dette emnet, vennligst skriv til meg

SQL eller Structured Query Language er et språk som brukes til å administrere data i et relasjonsdatabasesystem (RDBMS). Denne artikkelen vil dekke vanlige SQL-kommandoer som enhver programmerer bør være kjent med. Dette materialet er ideelt for de som ønsker å friske opp kunnskapen om SQL før et jobbintervju. For å gjøre dette, se på eksemplene gitt i artikkelen og husk at du studerte databaser i par.

Merk at noen databasesystemer krever semikolon på slutten av hver setning. Semikolonet er standardpekeren til slutten av hver setning i SQL. Eksemplene bruker MySQL, så et semikolon kreves.

Sette opp en database for eksempler

Lag en database for å demonstrere hvordan team fungerer. For å fungere, må du laste ned to filer: DLL.sql og InsertStatements.sql. Deretter åpner du en terminal og logger på MySQL-konsollen ved å bruke følgende kommando (artikkelen antar at MySQL allerede er installert på systemet):

Mysql -u root -s

Skriv deretter inn passordet ditt.

Kjør følgende kommando. La oss kalle databasen "universitet":

LAG DATABASE universitet; BRUK universitetet; KILDE ; KILDE

Kommandoer for arbeid med databaser

1. Se tilgjengelige databaser

VIS DATABASER;

2. Opprett en ny database

LAG DATABASE;

3. Velge en database som skal brukes

BRUK ;

4. Importer SQL-kommandoer fra en .sql-fil

KILDE ;

5. Slett databasen

DROPPE DATABASE ;

Arbeid med tabeller

6. Se tabellene som er tilgjengelige i databasen

VIS TABELLER;

7. Opprett en ny tabell

LAG BORD ( , , PRIMÆRNØKKEL ( ), UTENLANDSKE NØKKEL ( ) REFERANSER ());

Integritetsbegrensninger ved bruk av CREATE TABLE

Det kan hende du må opprette begrensninger for enkelte kolonner i en tabell. Når du oppretter en tabell, kan du angi følgende begrensninger:

  • en tabellcelle kan ikke ha en NULL-verdi;
  • primærnøkkel - PRIMARY KEY (col_name1, col_name2, ...) ;
  • fremmednøkkel - UTENLANDSKE NØKKEL (col_namex1, …, col_namexn) REFERANSER tabellnavn(col_namex1, …, col_namexn) .

Du kan spesifisere mer enn én primærnøkkel. I dette tilfellet vil du få en sammensatt primærnøkkel.

Eksempel

Lag en tabell "instruktør":

CREATE TABLE instruktør (ID CHAR(5), navn VARCHAR(20) NOT NULL, dept_name VARCHAR(20), lønn NUMERIC(8,2), PRIMARY KEY (ID), UTENLANDSKE KEY (dept_name) REFERANSER avdeling(dept_name));

8. Tabellinformasjon

Du kan se forskjellig informasjon (verditype, enten det er en nøkkel eller ikke) om kolonnene i en tabell med følgende kommando:

BESKRIVE ;

9. Legge til data i tabellen

SETT INN I (, , , ...) VERDIER ( , , , …);

Når du legger til data til hver kolonne i en tabell, trenger du ikke å angi kolonnenavn.

SETT INN I VERDIER ( , , , …);

10. Oppdatering av tabelldata

OPPDATER SETT = , = , ... HVOR ;

11. Fjerne alle data fra tabellen

SLETT FRA ;

12. Slett en tabell

DROPPE BORD ;

Kommandoer for å lage spørringer

13. VELG

SELECT brukes til å hente data fra en bestemt tabell:

PLUKKE UT , , … FRA ;

Følgende kommando kan vise alle dataene fra tabellen:

VELG * FRA ;

14. VELG DISTINKT

Tabellkolonner kan inneholde dupliserte data. Bruk SELECT DISTINCT for å hente kun ikke-dupliserte data.

VELG DISTINKT , , … FRA ;

15. HVOR

Du kan bruke nøkkelordet WHERE i SELECT for å spesifisere betingelser i en spørring:

PLUKKE UT , , … FRA HVOR ;

Følgende betingelser kan spesifiseres i forespørselen:

  • tekst sammenligning;
  • sammenligning av numeriske verdier;
  • logiske operatorer AND (og), OR (eller) og NOT (negasjon).

Eksempel

Prøv følgende kommandoer. Vær oppmerksom på betingelsene spesifisert i HVOR:

SELECT * FROM course WHERE dept_name=’Comp. Sci.'; VELG * FRA kurs HVOR studiepoeng>3; VELG * FRA kurs WHERE dept_name="Comp. Sci." OG studiepoeng>3;

16. GRUPPE ETTER

GROUP BY-operatoren brukes ofte med aggregerte funksjoner som COUNT, MAX, MIN, SUM og AVG for å gruppere utdataverdier.

PLUKKE UT , , … FRA GRUPPE AV ;

Eksempel

La oss vise antall emner for hvert fakultet:

VELG ANTALL(kurs_id), avd_navn FRA kurs GROUP BY avd_navn;

17. Å HA

Nøkkelordet HAVING ble lagt til SQL fordi WHERE ikke kan brukes til å arbeide med aggregerte funksjoner.

PLUKKE UT , , ... FRA GRUPPE AV HA

Eksempel

La oss vise en liste over fakulteter som har mer enn ett kurs:

VELG ANTALL(kurs_id), avd_navn FRA kurs GRUPPE ETTER avd_navn HAR ANTALL(kurs_id)>1;

18. BESTILL INNEN

ORDER BY brukes til å sortere søkeresultater i synkende eller stigende rekkefølge. ORDER BY vil sortere i stigende rekkefølge med mindre ASC eller DESC er spesifisert.

PLUKKE UT , , … FRA REKKEFØLGE ETTER , , …ASC|DESC;

Eksempel

La oss vise en liste over emner i stigende og synkende rekkefølge av studiepoeng:

VELG * FRA kurs BESTILL ETTER studiepoeng; VELG * FRA kurs BESTILL ETTER studiepoeng DESC;

19. MELLOM

BETWEEN brukes til å velge dataverdier fra et spesifikt område. Numeriske verdier og tekstverdier, samt datoer, kan brukes.

PLUKKE UT , , … FRA HVOR MELLOM OG ;

Eksempel

La oss vise en liste over instruktører hvis lønn er over 50 000, men mindre enn 100 000:

VELG * FRA instruktør HVOR lønn MELLOM 50000 OG 100000;

20. LIKER

LIKE-operatoren brukes i WHERE for å spesifisere et søkemønster for en lignende verdi.

Det er to gratis operatører som brukes i LIKE:

  • % (ingen, ett eller flere tegn);
  • _ (ett tegn).
PLUKKE UT , , … FRA HVOR SOM ;

Eksempel

La oss vise en liste over kurs hvis navn inneholder "til" og en liste over kurs hvis navn begynner med "CS-":

VELG * FRA kurs HVOR tittel LIKE '%to%'; VELG * FRA kurs WHERE kurs_id LIKE "CS-___";

21. INN

Ved å bruke IN kan du spesifisere flere verdier for WHERE-leddet:

PLUKKE UT , , … FRA HVOR IN ( , , …);

Eksempel

La oss vise en liste over studenter fra Comp majors. Sci., fysikk og elektr. Eng.:

VELG * FRA student WHERE avd.navn IN ('Comp. Sci.', 'Fysikk', 'Elec. Eng.');

22. BLI MED

JOIN brukes til å koble sammen to eller flere tabeller ved å bruke vanlige attributter i dem. Bildet nedenfor viser de forskjellige måtene å bli med i SQL. Legg merke til forskjellen mellom en venstre ytre skjøt og en høyre ytre skjøt:

PLUKKE UT , , … FRA BLI MED = ;

Eksempel 1

Vi vil vise en liste over alle emner og relevant informasjon om fakultetene:

VELG * FRA kurs BLI MED avdeling PÅ course.dept_name=department.dept_name;

Eksempel 2

Vi vil vise en liste over alle obligatoriske kurs og detaljer om dem:

VELG prereq.course_id, title, dept_name, credits, prereq_id FROM prereq VENSTRE YTRE JOIN kurs PÅ prereq.course_id=course.course_id;

Eksempel 3

Vi vil vise en liste over alle kurs, uavhengig av om de er obligatoriske eller ikke:

SELECT course.course_id, title, dept_name, credits, prereq_id FROM prereq HØYRE YTRE JOIN-kurs PÅ prereq.course_id=course.course_id;

23. Utsikt

View er en virtuell SQL-tabell opprettet som et resultat av å utføre et uttrykk. Den inneholder rader og kolonner og ligner veldig på en vanlig SQL-tabell. Vis viser alltid den nyeste informasjonen fra databasen.

Opprettelse

LAG UTSIKT SOM VALG , , … FRA HVOR ;

Fjerning

DROP VISNING ;

Eksempel

La oss lage en visning bestående av kurs med 3 studiepoeng:

24. Aggregerte funksjoner

Disse funksjonene brukes for å få et samlet resultat relatert til de aktuelle dataene. Følgende er ofte brukte aggregerte funksjoner:

  • COUNT (col_name) - returnerer antall rader;
  • SUM (col_name) - returnerer summen av verdiene i denne kolonnen;
  • AVG (col_name) - returnerer gjennomsnittsverdien for en gitt kolonne;
  • MIN (col_name) - returnerer den minste verdien av en gitt kolonne;
  • MAX (col_name) – Returnerer den største verdien av en gitt kolonne.

25. Nestede underspørringer

Nestede underspørringer er SQL-spørringer som inkluderer SELECT-, FROM- og WHERE-klausuler nestet i en annen spørring.

Eksempel

La oss finne kurs som ble undervist høsten 2009 og våren 2010:

SELECT DISTINCT course_id FROM section WHERE semester = 'Høst' OG år= 2009 OG course_id IN (SELECT course_id FROM section WHERE semester = 'Vår' OG år= 2010);

Hver av oss møter og bruker regelmessig ulike databaser. Når vi velger en e-postadresse, jobber vi med en database. Databaser brukes av søketjenester, banker til å lagre kundedata mv.

Men til tross for konstant bruk av databaser, selv for mange programvaresystemutviklere er det mange "blanke flekker" på grunn av forskjellige tolkninger av de samme begrepene. Vi vil gi en kort definisjon av grunnleggende databasetermer før vi dekker SQL-språket. Så.

Database - en fil eller samling av filer for lagring av ordnede datastrukturer og deres relasjoner. Svært ofte kalles et styringssystem en database - det er bare et oppbevaringssted for informasjon i et bestemt format og kan fungere med ulike DBMS-er.

Bord - La oss forestille oss en mappe der dokumenter er lagret, gruppert i henhold til en bestemt egenskap, for eksempel en liste over bestillinger for den siste måneden. Dette er en tabell i en datamaskin En separat tabell har sitt eget unike navn.

Data-type - typen informasjon som er tillatt å lagre i en egen kolonne eller rad. Dette kan være tall eller tekst av et bestemt format.

Kolonne og rad– Vi har alle jobbet med regneark, som også har rader og kolonner. Enhver relasjonsdatabase fungerer med tabeller på en lignende måte. Rader kalles noen ganger poster.

Primærnøkkel- Hver rad i en tabell kan ha én eller flere kolonner for å identifisere den unikt. Uten en primærnøkkel er det svært vanskelig å oppdatere, endre og slette de ønskede radene.

Hva er SQL?

SQL(Engelsk - strukturert spørringsspråk) ble utviklet kun for arbeid med databaser og er for tiden standarden for alle populære DBMS-er. Språksyntaksen består av et lite antall operatorer og er lett å lære. Men til tross for sin tilsynelatende enkelhet, tillater den opprettelsen av sql-spørringer for komplekse operasjoner med en database av alle størrelser.

Siden 1992 har det vært en generelt akseptert standard kalt ANSI SQL. Den definerer den grunnleggende syntaksen og funksjonene til operatører og støttes av alle DBMS-markedsledere, for eksempel ORACLE. Det er umulig å vurdere alle funksjonene til språket i en kort artikkel, så vi vil kort vurdere bare grunnleggende SQL-spørringer. Eksempler viser tydelig språkets enkelhet og muligheter:

  • lage databaser og tabeller;
  • datasampling;
  • legge til poster;
  • endring og sletting av informasjon.

SQL-datatyper

Alle kolonner i en databasetabell lagrer samme datatype. Datatyper i SQL er de samme som i andre programmeringsspråk.

Vi lager tabeller og databaser

Det er to måter å lage nye databaser, tabeller og andre spørringer på i SQL:

  • via DBMS-konsollen
  • Bruke de interaktive administrasjonsverktøyene som følger med databaseserveren.

En ny database opprettes av operatøren LAG DATABASE<наименование базы данных>; . Som du kan se, er syntaksen enkel og konsis.

Vi lager tabeller inne i databasen ved å bruke CREATE TABLE-setningen med følgende parametere:

  • tabellnavn
  • kolonnenavn og datatyper

Som et eksempel, la oss lage en varetabell med følgende kolonner:

Lag en tabell:

LAG TABELL Vare

(vare_id CHAR(15) IKKE NULL,

vendor_id CHAR(15) NOT NULL,

varenavn CHAR(254) NULL,

varepris DESIMAL(8,2) NULL,

commodity_desc VARCHAR(1000) NULL);

Tabellen består av fem kolonner. Etter navnet kommer datatypen, kolonnene er atskilt med komma. Kolonneverdien kan godta tomme verdier (NULL) eller må fylles ut (IKKE NULL), og dette bestemmes når tabellen opprettes.

Henter data fra en tabell

Datahentingsoperatoren er den mest brukte SQL-spørringen. For å få informasjon må vi angi hva vi ønsker å velge fra en slik tabell. Først et enkelt eksempel:

VELG varenavn FRA vare

Etter SELECT-setningen spesifiserer vi navnet på kolonnen for å få informasjon, og FROM definerer tabellen.

Resultatet av spørringen vil være alle rader i tabellen med Commodity_name-verdier i den rekkefølgen de ble lagt inn i databasen, dvs. uten noen sortering. En ekstra ORDER BY-klausul brukes til å bestille resultatet.

For å spørre etter flere felt, liste dem atskilt med komma, som i følgende eksempel:

SELECT commodity_id, commodity_name, commodity_price FROM Commodity

Det er mulig å få verdien av alle kolonnene i en rad som et spørringsresultat. For å gjøre dette, bruk "*"-tegnet:

VELG * FRA Råvare

  • I tillegg støtter SELECT:
  • Sortering av data (ORDER BY operator)
  • Utvalg i henhold til forhold (HVOR)
  • Grupperingsterm (GROUP BY)

Legg til en linje

For å legge til en rad i en tabell, brukes SQL-spørringer med INSERT-operatoren. Tilsetning kan gjøres på tre måter:

  • legg til en ny hel linje;
  • streng del;
  • søkeresultater.

For å legge til en hel rad, må du spesifisere tabellnavnet og verdiene til kolonnene (feltene) i den nye raden. Her er et eksempel:

SETT INN I RÅVAREVERDIER("106", "50", "Coca-Cola", "1,68", "Ingen alkohol ,)

Eksemplet legger til et nytt produkt i tabellen. Verdier er oppført etter VERDIER for hver kolonne. Hvis det ikke er noen tilsvarende verdi for kolonnen, må NULL angis. Kolonnene er fylt ut med verdier i den rekkefølgen som ble spesifisert da tabellen ble opprettet.

Hvis du bare legger til deler av en rad, må du spesifisere navnene på kolonnene eksplisitt, som i eksemplet:

INSERT INTO Commodity (vare-id, leverandør-id, varenavn)

VERDIER("106", "50", "Coca-Cola",)

Vi skrev bare inn identifikatorene til produktet, leverandøren og navnet, og la de resterende feltene tomme.

Legger til søkeresultater

INSERT brukes først og fremst til å legge til rader, men kan også brukes til å legge til resultatene av en SELECT-setning.

Endre data

For å endre informasjon i feltene i en databasetabell, må du bruke UPDATE-setningen. Operatøren kan brukes på to måter:

  • Alle rader i tabellen er oppdatert.
  • Bare for en bestemt linje.

OPPDATERING består av tre hovedelementer:

  • tabell der endringer må gjøres;
  • feltnavn og deres nye verdier;
  • betingelsene for å velge rader som skal endres.

La oss se på et eksempel. La oss si at prisen på et produkt med ID=106 har endret seg, så denne linjen må oppdateres. Vi skriver følgende operatør:

OPPDATERING Råvare SET commodity_price = "3.2" WHERE commodity_id = "106"

Vi spesifiserte navnet på tabellen, i vårt tilfelle Commodity, der oppdateringen skal utføres, deretter etter SET - den nye verdien av kolonnen og fant ønsket post ved å spesifisere den nødvendige ID-verdien i WHERE.

For å endre flere kolonner, etterfølges SET-setningen av flere kolonne-verdi-par atskilt med komma. La oss se på et eksempel der navnet og prisen på et produkt er oppdatert:

OPPDATERING RåvareSETT commodity_name=’Fanta’, commodity_price = "3.2" WHERE commodity_id = "106"

For å fjerne informasjon i en kolonne kan du tildele den verdien NULL hvis tabellstrukturen tillater det. Det må huskes at NULL er nøyaktig "ingen" verdi, og ikke null i form av tekst eller tall. La oss fjerne produktbeskrivelsen:

OPPDATERING Råvare SET commodity_desc = NULL WHERE commodity_id = "106"

Fjerner rader

SQL-spørringer for å slette rader i en tabell utføres ved hjelp av DELETE-setningen. Det er to brukstilfeller:

  • Enkelte rader i tabellen slettes;
  • Alle rader i tabellen slettes.

Et eksempel på sletting av én rad fra en tabell:

DELETE FROM Commodity WHERE commodity_id = "106"

Etter DELETE FROM angir vi navnet på tabellen der radene vil bli slettet. WHERE-leddet inneholder betingelsen for at rader skal velges for sletting. I eksemplet sletter vi produktlinjen med ID=106. Å spesifisere HVOR er veldig viktig fordi utelate denne setningen vil alle rader i tabellen slettes. Dette gjelder også endring av verdi på felt.

DELETE-setningen spesifiserer ikke kolonnenavn eller metategn. Den sletter rader fullstendig, men den kan ikke slette en enkelt kolonne.

Bruker SQL i Microsoft Access

Brukes vanligvis interaktivt for å lage tabeller, databaser, for å administrere, endre, analysere data i en database og implementere SQL Access-spørringer gjennom en praktisk interaktiv spørringsdesigner (Query Designer), som du kan bruke til å bygge og umiddelbart utføre SQL-setninger av enhver kompleksitet.

Servertilgangsmodusen støttes også, der Access DBMS kan brukes som en generator av SQL-spørringer til enhver ODBC-datakilde. Denne funksjonen lar Access-applikasjoner samhandle med alle formater.

SQL-utvidelser

Siden SQL-spørringer ikke har alle egenskapene til prosedyreprogrammeringsspråk, som looper, forgrening osv., utvikler DBMS-produsenter sin egen versjon av SQL med avanserte funksjoner. Først av alt er dette støtte for lagrede prosedyrer og standardoperatører av prosedyrespråk.

De vanligste dialektene på språket:

  • Oracle Database - PL/SQL
  • Interbase, Firebird - PSQL
  • Microsoft SQL Server - Transact-SQL
  • PostgreSQL - PL/pgSQL.

SQL på Internett

MySQL DBMS distribueres under den gratis GNU General Public License. Det er en kommersiell lisens med mulighet til å utvikle tilpassede moduler. Som en komponent er den inkludert i de mest populære samlingene av Internett-servere, som XAMPP, WAMP og LAMP, og er den mest populære DBMS for utvikling av applikasjoner på Internett.

Den ble utviklet av Sun Microsystems og støttes for tiden av Oracle Corporation. Databaser på opptil 64 terabyte i størrelse, SQL:2003 syntaksstandard, replikering av databaser og skytjenester støttes.

Tabelluttrykk kalles underspørringer som brukes der tilstedeværelsen av en tabell er forventet. Det finnes to typer tabelluttrykk:

    avledede tabeller;

    generaliserte tabelluttrykk.

Disse to formene for tabelluttrykk diskuteres i de følgende underavsnittene.

Avledede tabeller

Avledet tabell er et tabelluttrykk inkludert i FROM-leddet til en spørring. Avledede tabeller kan brukes i tilfeller der bruk av kolonnealiaser ikke er mulig fordi SQL-oversetteren behandler en annen setning før aliaset er kjent. Eksemplet nedenfor viser et forsøk på å bruke et kolonnealias i en situasjon der en annen klausul blir behandlet før aliaset er kjent:

BRUK SampleDb; SELECT MONTH(EnterDate) som enter_month FROM Works_on GROUP BY enter_month;

Hvis du prøver å kjøre denne spørringen, vises følgende feilmelding:

Melding 207, nivå 16, tilstand 1, linje 5 Ugyldig kolonnenavn "enter_month". (Melding 207: Nivå 16, tilstand 1, linje 5 Ugyldig kolonnenavn enter_month)

Årsaken til feilen er at GROUP BY-leddet behandles før den tilsvarende listen med SELECT-setningen behandles, og aliaset for enter_month-kolonnen er ukjent når gruppen behandles.

Dette problemet kan løses ved å bruke en avledet tabell som inneholder den foregående spørringen (uten GROUP BY-leddet) fordi FROM-leddet kjøres før GROUP BY-leddet:

BRUK SampleDb; VELG enter_month FROM (VELG MONTH(EnterDate) som enter_month FROM Works_on) AS m GROUP BY enter_month;

Resultatet av denne spørringen vil være slik:

Vanligvis kan et tabelluttrykk plasseres hvor som helst i en SELECT-setning der et tabellnavn kan vises. (Resultatet av et tabelluttrykk er alltid en tabell eller, i spesielle tilfeller, et uttrykk.) Eksemplet nedenfor viser bruken av et tabelluttrykk i select-listen til en SELECT-setning:

Resultatet av denne spørringen:

Generiske tabelluttrykk

Vanlige tabelluttrykk (OTB) er et navngitt tabelluttrykk som støttes av Transact-SQL-språket. Vanlige tabelluttrykk brukes i følgende to typer spørringer:

    ikke-rekursiv;

    tilbakevendende.

Disse to typene forespørsler diskuteres i de følgende avsnittene.

OTB og ikke-rekursive spørringer

Den ikke-rekursive formen for OTB kan brukes som et alternativ til avledede tabeller og visninger. Vanligvis bestemmes OTB av MED klausuler og en ekstra spørring som refererer til navnet brukt i WITH-leddet. I Transact-SQL er betydningen av nøkkelordet WITH tvetydig. For å unngå tvetydighet bør setningen foran WITH-setningen avsluttes med semikolon.

BRUK AdventureWorks2012; SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (VELG AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") OG Frakt > (VELG AVG(TotalDue) FROM Sales.SalesOrderHeader "Order2Dato YEAR5) ")/2.5;

Spørringen i dette eksemplet velger bestillinger hvis totale avgifter (TotalDue) er høyere enn gjennomsnittet av alle avgifter og hvis fraktkostnader (frakt) er større enn 40 % av gjennomsnittlig avgifter. Hovedegenskapen til denne spørringen er lengden, siden undersøkingen må skrives to ganger. En mulig måte å redusere mengden spørringskonstruksjon på er å lage en visning som inneholder en underspørring. Men denne løsningen er litt komplisert fordi den krever å opprette en visning og deretter slette den etter at spørringen er ferdig utført. En bedre tilnærming ville være å lage en OTB. Eksemplet nedenfor viser bruken av ikke-rekursiv OTB, som forkorter spørringsdefinisjonen ovenfor:

BRUK AdventureWorks2012; WITH price_calc(year_2005) AS (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (SELECT year_2005 FROMAND price_0cal) (SELECT year_2005 FROMAND price_0cal) ) /2,5;

WITH-leddets syntaks i ikke-rekursive søk er som følger:

Parameteren cte_name representerer OTB-navnet som definerer den resulterende tabellen, og column_list-parameteren representerer listen over kolonner i tabelluttrykket. (I eksemplet ovenfor kalles OTB price_calc og har én kolonne, year_2005.) Inner_query-parameteren representerer en SELECT-setning som spesifiserer resultatsettet til det tilsvarende tabelluttrykket. Det definerte tabelluttrykket kan deretter brukes i den ytre_query. (Den ytre spørringen i eksempelet ovenfor bruker OTB price_calc og dens år_2005-kolonne for å forenkle det dobbelt nestede søket.)

OTB og rekursive søk

Denne delen presenterer materiale med økt kompleksitet. Derfor, når du leser den for første gang, anbefales det å hoppe over den og gå tilbake til den senere. OTB-er kan brukes til å implementere rekursjoner fordi OTB-er kan inneholde referanser til seg selv. Den grunnleggende OTB-syntaksen for et rekursivt søk ser slik ut:

Parameterne cte_name og column_list har samme betydning som i OTB for ikke-rekursive spørringer. Brødteksten i en WITH-klausul består av to spørringer kombinert av operatøren UNION ALLE. Den første spørringen kalles bare én gang, og den begynner å akkumulere resultatet av rekursjonen. Den første operanden til UNION ALL-operatøren refererer ikke til OTB. Denne spørringen kalles en referansespørring eller kilde.

Den andre spørringen inneholder en referanse til OTB og representerer dens rekursive del. På grunn av dette kalles det et rekursivt medlem. I det første kallet til den rekursive delen representerer OTB-referansen resultatet av referansespørringen. Det rekursive medlemmet bruker resultatet av det første spørringsanropet. Etter dette kaller systemet opp den rekursive delen igjen. Et anrop til et rekursivt medlem stopper når et tidligere anrop til det returnerer et tomt resultatsett.

UNION ALL-operatøren kobler seg til de nåværende akkumulerte radene, så vel som ytterligere rader lagt til av det gjeldende anropet til det rekursive medlemmet. (Tilstedeværelsen av UNION ALL-operatøren betyr at dupliserte rader ikke vil bli fjernet fra resultatet.)

Til slutt spesifiserer parameteren outer_query den ytre spørringen som OTB bruker for å hente alle anrop til sammenføyningen til begge medlemmene.

For å demonstrere den rekursive formen av OTB, bruker vi flytabellen definert og fylt ut med koden vist i eksemplet nedenfor:

BRUK SampleDb; CREATE TABLE Fly(ContainingAssembly VARCHAR(10), ContainedAssembly VARCHAR(10), QuantityContained INT, UnitCost DESIMAL(6,2)); INSERT INTO Airplane VALUES ("Fly", "Fuselage", 1, 10); INSERT INTO Airplane VALUES ("Fly", "Vinger", 1, 11); INSERT INTO Airplane VALUES ("Fly", "hale", 1, 12); SETTE INN I FLYVERDIER ("Fuselage", "Salon", 1, 13); SETTE INN I FLYVERDIER ("Fuselage", "Cockpit", 1, 14); INSERT INTO Airplane VALUES ("Fuselage", "Nose",1, 15); INSERT INTO Airplane VALUES ("Cabin", NULL, 1,13); INSERT INTO Airplane VALUES ("Cockpit", NULL, 1, 14); INSERT INTO Airplane VALUES ("Nese", NULL, 1, 15); INSERT INTO Airplane VALUES ("Vinger", NULL,2, 11); INSERT INTO Airplane VALUES ("hale", NULL, 1, 12);

Flytabellen har fire kolonner. Kolonnen ContainingAssembly identifiserer sammenstillingen, og ContainedAssembly-kolonnen identifiserer delene (en etter en) som utgjør den tilsvarende sammenstillingen. Figuren nedenfor viser en grafisk illustrasjon av en mulig type fly og dets komponenter:

Flytabellen består av følgende 11 rader:

Følgende eksempel bruker WITH-leddet til å definere en spørring som beregner den totale kostnaden for hvert bygg:

BRUK SampleDb; WITH list_of_parts(assembly1, quantity, cost) AS (SELECT ContainingAssembly, QuantityContained, UnitCost FROM Airplane WHERE ContainedAssembly IS NULL UNION ALL SELECT a.ContainingAssembly, a.QuantityContained, CAST(l.quantity * DEC IMALcost AS) ) FROM list_of_parts l, Fly a WHERE l.assembly1 = a.ContainedAssembly) SELECT assembly1 "Part", quantity "Quantity", cost "Price" FROM list_of_parts;

WITH-leddet definerer en OTB-liste kalt list_of_parts, bestående av tre kolonner: assembly1, quantity og cost. Den første SELECT-setningen i eksemplet kalles bare én gang for å lagre resultatene fra det første trinnet i rekursjonsprosessen. SELECT-setningen på den siste linjen i eksemplet viser følgende resultat.

visninger