Infoga, ta bort, uppdatera poster i databasen. Bekanta dig med SQL-instruktioner; skapa enkla SQL-frågor i Access med kommandot SELECT med IN, BETWEEN, LIKE-operatorerna GROUP BY-satsen

06.04.2023

Regler: hakparenteser indikerar [valfri del] av konstruktionen. En vertikal stapel indikerar ett val mellan alternativ (var1|var2). Ellipsen innebär möjlig upprepning flera gånger - 1 gång, 2 gånger [, …]

SELECT-sats

Instruerar databasmotorn Microsoft Access returnera information från databasen som en uppsättning poster.

Syntax

VÄLJ [ predikat] { * | tabell.* | [tabell.]fält1

[, [tabell.]fält2 [, ...]]}
FRÅN tabelluttryck [, ...]




SELECT-satsen innehåller följande element.

Element

Beskrivning

Predikat

Ett av följande predikat: ALL, DISTINCT, DISTINCTROW eller TOP. Predikat används för att begränsa antalet poster som returneras. Om inget predikat anges är standardvärdet ALLA.

Indikerar att alla fält är valda från den eller de angivna tabellerna

Tabell

Namnet på tabellen från vars fält posterna är valda

fält1, fält2

Namnen på fälten som innehåller data som ska hämtas. Om flera fält är specificerade kommer data att hämtas i den ordning deras namn är listade

smeknamn1, smeknamn2

Namn som används som kolumnrubriker istället för ursprungliga kolumnnamn tabeller

tabelluttryck

Ett eller flera tabellnamn som innehåller data som ska hämtas.

extern_databas

Namnet på databasen som innehåller de tabeller som anges i komponenten tabelluttryck om de inte finns i den aktuella databasen

Anteckningar

För att utföra den här åtgärden söker Microsoft Access-databasmotorn i de angivna tabellerna, hämtar de önskade kolumnerna, väljer de rader som uppfyller de angivna villkoren och sorterar eller grupperar de resulterande raderna i angiven ordning.

SELECT-satser ändrar inte databasdata.

En SELECT-sats är vanligtvis det första ordet i en SQL-sats (SQL-sats (sträng). Ett uttryck som definierar ett SQL-kommando, såsom SELECT, UPDATE eller DELETE, och inkluderar satser, såsom WHERE eller ORDER BY. SQL-satser/ strängar används ofta i frågor och i statistiska funktioner.). De flesta SQL-satser är antingen SELECT-satser eller SELECT...INTO-satser.

Minsta syntax för en SELECT-sats är följande:

VÄLJ fält FRÅN tabell

Du kan använda en asterisk (*) för att markera alla fält i en tabell. Följande exempel markerar alla fält i tabellen Anställda.

VÄLJ * FRÅN Anställda;

Om fältnamnet ingår i flera tabeller i FROM-satsen, föregå det med tabellnamnet och satsen «.» (punkt). I följande exempel finns fältet "Avdelning" i tabellerna "Anställda" och "Ledare". SQL-satsen väljer avdelningar från tabellen Anställda och chefsnamn från tabellen Arbetsledare.

VÄLJ medarbetare. Avdelningschefer. Verkställande namn FRÅN Anställda INNER JOIN Befattningshavare VAR Anställda. Avdelning = Chefer. Avdelning;

När du skapar ett RecordSet-objekt används tabellfältsnamnet av Microsoft Access-databasmotorn som namnet på "Field"-objektet i objektet Rekorduppsättning. Om fältnamnet behöver ändras eller inte tillhandahålls av uttrycket som genererar fältet, använd ett reserverat ord (Reserverat ord. Ett ord som är en del av ett språk, som t.ex. Visual Basic. Reserverade ord inkluderar namn på instruktioner, inbyggda funktioner och datatyper, metoder, operatorer och objekt.) AS. Följande exempel visar hur rubriken "Dag" används för att namnge det returnerade objektet Fält i det mottagna objektet Rekorduppsättning.

VÄLJ födelsedag SOM dag FRÅN anställda;

När du arbetar med aggregerade funktioner eller frågor som returnerar tvetydiga eller identiska objektnamn Fält, bör du använda AS-satsen för att skapa ett annat objektnamn Fält. I följande exempel, det returnerade objektet Fält i det mottagna objektet Rekorduppsättning får namnet "Census".

VÄLJ ANTAL(EmployeeCode) SOM Census FROM Anställda;

När du arbetar med en SELECT-sats kan du använda ytterligare satser för att ytterligare begränsa och organisera den data som hämtas. ytterligare information se hjälpämnet för den klausul du använder.

FRÅN klausul

Anger tabeller och frågor som innehåller fälten i SELECT-satsen.

Syntax

VÄLJ field_list
FRÅN tabelluttryck

En SELECT-sats som innehåller en FROM-sats innehåller följande element:

Element

Beskrivning

field_list

tabelluttryck

Ett uttryck som definierar en eller flera tabeller - datakällor. Uttrycket kan vara ett tabellnamn, ett lagrat frågenamn eller ett resultatuttryck konstruerat med operatorerna INNER JOIN, LEFT JOIN eller RIGHT JOIN

extern_databas

Den fullständiga sökvägen till den externa databasen som innehåller alla tabeller som anges i tabelluttryck

Anteckningar


Närvaron av en FROM-sats efter en SELECT-sats krävs.

I vilken ordning tabellerna är listade tabelluttryck spelar ingen roll.

Använda länkade tabeller (Länkad tabell. En tabell som sparas i en fil som inte är en del av den öppna databasen men är tillgänglig från Microsoft Access. Användaren kan lägga till, ta bort och ändra poster i den länkade tabellen, men kan inte ändra dess struktur .) istället för klausulen IN kan du göra processen att extrahera data från yttre bas data enklare och mer effektivt.

Exemplet nedan visar hur man hämtar data från tabellen Anställda.

VÄLJ Efternamn, Förnamn

FRÅN Anställda;

Indikerar de poster som valts för SQL-frågor ( SQL-språk(Structured Query Language). Ett strukturerat fråge- och databasprogrammeringsspråk som används ofta för att komma åt, fråga, uppdatera och hantera data i relationella DBMS.

Syntax

VÄLJ ]]
FRÅN tabell

SELECT-satsen som innehåller dessa predikat innehåller följande komponenter:

Komponent

Beskrivning

Underförstått om inga predikat ingår. Microsoft Access-databasmotorn väljer alla poster som matchar villkoren för en SQL-sats (SQL-sats (sträng). Ett uttryck som definierar ett SQL-kommando, som SELECT, UPDATE eller DELETE, och inkluderar satser, som WHERE eller ORDER BY . SQL-satser/strängar används vanligtvis i frågor och statistiska funktioner). Följande två identiska exempel visar hur man returnerar alla poster från tabellen Anställda.

FRÅN Anställda

BESTÄLLNING EFTER Anställdskod;

FRÅN Anställda

BESTÄLLNING EFTER Anställdskod;

Utesluter poster som innehåller dubbletter av data i de valda fälten. Frågeresultat inkluderar endast unika värden vart och ett av fälten i SELECT-satsen. Till exempel kan vissa anställda som anges i tabellen Anställda ha samma efternamn. Om två poster innehåller efternamnet "Ivanov" i fältet Efternamn, returnerar följande SQL-sats endast en post som innehåller efternamnet "Ivanov".

VÄLJ DISTINCT Efternamn

Om DISTINCT-komponenten utelämnas returnerar frågan båda posterna med efternamnet "Ivanov".

Om SELECT-satsen innehåller flera fält, inkluderas kombinationen av alla fältvärden i frågeresultaten endast om den är unik för den posten.

Resultaten av en fråga som använder DISTINCT-komponenten uppdateras inte för att återspegla efterföljande ändringar som gjorts av andra användare.

Utesluter data från poster som upprepas i sin helhet istället för att innehålla enskilda fält med samma data. Låt oss anta att en fråga har skapats som kopplar samman tabellerna "Kunder" och "Beställningar" med hjälp av fältet "Kundkod". Tabellen Kunder innehåller inte dubbletter av kund-ID-fält, men de finns i tabellen Order eftersom varje kund kan ha flera order. Följande SQL-sats visar hur du använder DISTINCTROW-komponenten för att lista organisationer som har gjort minst en beställning, utan att nämna detaljerna för dessa beställningar.

VÄLJ DISTINCTROW Titel FRÅN Kunder INNER JOIN Beställningar

ON-klienter. CustomerId = Orders. Kundkod

BESTÄLL EFTER Titel;

Om DISTINCTROW-komponenten utelämnas resulterar frågan i flera rader för varje organisation som beställt flera gånger.

DISTINCTROW-komponenten träder bara i kraft när man väljer fält från några av tabellerna som används i frågan. DISTINCTROW-komponenten ignoreras om frågan endast innehåller en tabell eller om fält hämtas från alla tabeller.

TOPP n

Returnerar det angivna antalet poster som är bland de första eller senaste inläggen intervall som anges av ORDER BY-satsen. Låt oss säga att du vill visa namnen på de 25 bästa eleverna från klassen 1994.

Förnamn Efternamn

WHERE Graduation Year = 2003

ORDER BY GradePointAverage DESC;

Om du inte inkluderar ORDER BY-satsen, returnerar frågan en slumpmässig uppsättning av 25 poster från tabellen Studenter som uppfyller WHERE-satsen.

Predikatet TOP innebär inte ett val mellan lika värden. Om de 25:e och 26:e posterna i föregående exempel hade samma GPA, skulle frågan returnera 26 poster.

Du kan också använda det reserverade ordet PERCENT för att hämta en viss procentandel av de första eller sista posterna i intervallet som anges av ORDER BY-satsen. Anta att du istället för de 25 bästa vill visa de lägsta 10 % av eleverna i avgångsklassen.

VÄLJ TOP 10 PROCENT

Förnamn Efternamn

WHERE Graduation Year = 2003

ORDER BY GradePointAverage ASC;

ASC-predikatet specificerar utmatningen av värden från den nedre delen av intervallet. Värdet som följer TOP-predikatet måste vara ett värde av typen Integer (Integer data type. Den grundläggande datatypen som används för att lagra heltalsvärden. Typ variabel Heltal lagras som ett 64-bitars (8-byte) nummer i intervallet -32768 till 32767.) utan tecken.

TOP-predikatet påverkar inte om frågan kan uppdateras.

tabell

Namnet på tabellen från vilken poster hämtas.

se även

SELECT-sats

FRÅN klausul

WHERE klausul

Bestämmer vilka poster från tabellerna som listas i FROM-satsen som bearbetas av SELECT-, UPDATE- eller DELETE-satser.

Syntax

VÄLJ field_list
FRÅN tabelluttryck
VAR urvalsvillkor

En SELECT-sats som innehåller en WHERE-sats innehåller följande delar.

Del

Beskrivning

field_list

Namnet på fältet eller fälten som hämtas tillsammans med eventuella alias (Alias ​​(SQL). Ett alternativt namn för en tabell eller ett fält i ett uttryck. Alias ​​används vanligtvis som kortare tabell- eller fältnamn för att underlätta efterföljande referens i program, för att förhindra tvetydiga referenser och för att erhålla mer beskrivande namn vid visning av frågeresultat.), predikat (ALL, DISTINCT, DISTINCTROW eller TOP), eller med någon annan parameter i SELECT-satsen.

tabelluttryck

Namnet på den eller de tabeller som data hämtas från.

urvalsvillkor

Uttryck (Uttryck. En kombination av matematiska och logiska operatorer, konstanter, funktioner, fältnamn, kontroller och egenskaper som resulterar i ett enda värde. Uttrycket kan utföra beräkningar, bearbeta text eller validera data.) som måste matcha de poster som ingår i frågeresultat.

Anteckningar

Microsoft Access-databasmotorn väljer poster som uppfyller villkoren i WHERE-satsen. Om WHERE-satsen inte anges returnerar frågan alla rader i tabellen. Om en fråga anger flera tabeller men inte anger en WHERE- eller JOIN-sats, producerar frågan en kartesisk produkt (kartesisk produkt. Är resultatet av exekvering av en SQL SELECT-sats som har en FROM-sats som refererar till två eller flera tabeller och ingen WHERE eller JOIN-sats som anger metod för sammanfogning.) tabeller.

WHERE-satsen krävs inte, men om den används måste den följa FROM-satsen. Du kan till exempel välja alla anställda från försäljningsavdelningen (WHERE Department = "Försäljning") eller alla kunder mellan 18 och 30 år (WHERE Age Between 18 And 30).

Om en JOIN-sats inte används för en SQL join-operation på flera tabeller, kommer det resulterande objektet Rekord satt det kommer att vara omöjligt att uppdatera.

WHERE-satsen liknar HAVING-satsen och specificerar de valda posterna. Efter att posterna har grupperats av GROUP BY-satsen bestämmer HAVING-satsen också posten som ska visas.

WHERE-satsen används för att utesluta poster som inte behöver grupperas med GROUP BY-satsen.

Använd olika uttryck för att avgöra vilka poster som returneras av SQL-satsen. Till exempel väljer följande SQL-sats alla anställda vars lön överstiger RUR.

VÄLJ Efternamn, Lön FRÅN Anställda VAR Lön > 21000;

WHERE-satsen kan innehålla upp till 40 uttryck kopplade av logiska operatorer (t.ex. OCH Och ELLER).

Om du anger ett fältnamn som innehåller mellanslag eller skiljetecken måste du ha det inom hakparenteser (). Till exempel kan en kundinformationstabell innehålla information om specifika kunder.

VÄLJ [Kundens favoritrestaurang]

Ange ett argument urvalsvillkor, date literals (Date literal. Vilken sekvens av tecken som helst i ett giltigt format, inneslutna i siffertecken (#). Giltiga format är datumformatet som anges i inställningarna för språk och standarder, och universellt format dates.) bör presenteras i USA-format, även om du använder en icke-amerikansk version av Microsoft Access-databasmotorn. Till exempel är datumet "10 maj 1996" skrivet som 10/5/96 i Storbritannien och som 05/10/1996 i Ryssland. Kom ihåg att bifoga bokstaver av datum i siffertecken (#), som visas i exemplen nedan.

För att hitta poster för den 10 maj 1996 i den brittiska databasen, använd följande instruktioner SQL:

VÄLJ * FRÅN beställningar VAR Leveransdatum = #10.05.1996#;

Du kan också använda funktionen DatumValue, som känner igen de internationella parametrarna Microsoft Windows®. Använd till exempel denna kod för Ryssland:

SELECT * FROM Orders WHERE Leveransdatum = DateValue("05/10/1996");

Och följande kod är för Storbritannien:

SELECT * FROM Orders WHERE Leveransdatum = DateValue("10/5/96");

Notera. Om kolumnen som anges i urvalskriterieraden är av typen GUID (Replica ID (GUID). Ett 16-byte fält i en Microsoft Access-databas som används för att unikt identifiera replikering. GUID:n används för att identifiera repliker, replikuppsättningar, tabeller, poster och andra objekt I Microsoft Access-databaser kallas GUID-koder replikakoder.), använder urvalsvillkoren en något annorlunda syntax.

WHERE ReplicaID = (GUID (AB-CDEF0ABCDEF))

Se till att kapslade parenteser och bindestreck är korrekt placerade.

Källsida: http://office. /ru-ru/access/HA.aspx? pid=CH

GROUP BY-klausul

Kombinerar poster med samma värden som finns i den angivna listan med fält till en post. Ett sammanfattande värde skapas för varje post om en SQL-aggregationsfunktion ingår i SELECT-satsen, som t.ex Belopp eller Räkna.

Syntax

VÄLJ field_list
FRÅN tabell
VAR selection_condition

En SELECT-sats som innehåller en GROUP BY-sats innehåller följande element:

Element

Beskrivning

field_list

Namnen på fälten som hämtas tillsammans med eventuella alias (Alias ​​(SQL). Ett alternativt namn för en tabell eller ett fält i ett uttryck. Alias ​​används vanligtvis som kortare tabell- eller fältnamn för att underlätta efterföljande referens i program, för att förhindra tvetydiga referenser och för att få mer informativa namn vid visning av frågeresultat.) och SQL-statistiska funktioner, predikat (ALL, DISTINCT, DISTINCTROW eller TOP) eller andra SELECT-satsparametrar

tabell

urvalsvillkor

Urvalsvillkor. Om uttalandet innehåller en WHERE-sats, kommer värdena att grupperas av Microsoft Access-databasmotorn efter att den har tillämpats på posterna.

group_field_list

group_field_list

Anteckningar

GROUP BY-satsen är valfri.

Om SQL-statistiska funktioner inte ingår i SELECT-satsen, beräknas inte summavärden.

GROUP BY-fältvärden som är Null (Null. Ett värde som kan anges i ett fält eller användas i uttryck och frågor för att indikera saknade eller okända data. I Visual Basic nyckelord Null anger ett Null-värde. Vissa fält, till exempel primärnyckelfält, kan inte innehålla nollvärden.) är grupperade och utelämnas inte. Däremot värdena Null utvärderas inte av någon av SQL-statistikfunktionerna.

WHERE-satsen används för att utesluta rader som inte behöver grupperas. HAVING-satsen används för att filtrera poster efter gruppering.

Fält från fältlistan GROUP BY som inte innehåller Memo-datatyp (MEMO-fältdatatyp. En fältdatatyp i en Microsoft Access-databas. Ett MEMO-fält kan innehålla upp till 65535 tecken.) eller OLE-objekt (OLE-objektfältdatatyp. ). En fältdatatyp som används för att spara objekt från andra applikationer som är länkade till eller inbäddade i en Microsoft Access-databas.) kan referera till vilket fält som helst i vilken tabell som helst som anges i FROM-satsen, även om fältet inte ingår i SELECT-satsen. För att göra detta räcker det att ha minst en SQL-statistisk funktion i SELECT-satsen. Microsoft Access-databasmotorn tillåter inte gruppering efter fält som innehåller MEMO-fält- eller OLE-objektdata.

Alla fält i SELECT-fältlistan måste antingen ingå i en GROUP BY-sats eller vara argument till en SQL-aggregationsfunktion.

se även

SELECT-sats

SELECT...INTO-satsen

Predikater ALL, DISTINCT, DISTINCTROW, TOP

FRÅN klausul

HA erbjudande

ORDER BY klausul

WHERE klausul

SQL statistiska funktioner

Källsida: http://office. /ru-ru/access/HA.aspx? pid=CH

HA erbjudande

Definierar grupperade poster som ska visas i en SELECT-sats med en GROUP BY-sats. Efter att posterna har grupperats av GROUP BY-satsen kommer HAVING-satsen att visa de som uppfyller dess villkor.

Syntax

VÄLJ field_list
FRÅN tabell
VAR urvalsvillkor
GRUPP AV group_field_list

En SELECT-sats som innehåller en HAVING-sats innehåller följande element:

Element

Beskrivning

field_list

Namnen på fälten som laddas tillsammans med eventuella alias (Alias ​​(SQL). Ett alternativt namn för en tabell eller ett fält i ett uttryck. Alias ​​används vanligtvis som kortare tabell- eller fältnamn för att underlätta efterföljande referens i program, för att förhindra tvetydiga referenser och för att få mer informativa namn vid visning av frågeresultat.) och SQL-statistiska funktioner, predikat (ALL, DISTINCT, DISTINCTROW eller TOP) eller med andra parametrar i SELECT-satsen.

tabell

Namn på tabellen från vilken poster laddas

selection_condition

Urvalsvillkor. Om uttalandet innehåller en WHERE-sats, kommer Microsoft Access-databasmotorn att gruppera värdena efter att den har applicerats på posterna.

group_field_list

Namn på fält (upp till 10) som används för att gruppera poster. Namnordningen i group_field_list bestämmer nivån på grupperingen - från högsta till lägsta

group_condition

Ett uttryck som anger vilka poster som ska visas

Anteckningar

HAVING-satsen är valfri.

HAVING-satsen liknar WHERE-satsen som bestämmer urvalet av poster. Efter att ha grupperat poster med GROUP BY-satsen bestämmer HAVING-satsen vilka poster som ska visas.

VÄLJ typkod,

Summa (I lager)

FRÅN produkter

GRUPPER EFTER Typkod

HA Summa(InStock) > 100 Och som "TEL*";

HAVING-satsen kan innehålla upp till 40 uttryck länkade av logiska operatorer som t.ex Och Och Eller.

Källsida: http://office. /ru-ru/access/HA.aspx? pid=CH

ORDER BY klausul

Sorterar posterna som returneras av frågan i stigande eller fallande ordning av värdena i det eller de angivna fälten.

Syntax

VÄLJ field_list
FRÅN tabell
VAR selection_condition
[, fält2 ][, ...]]]

En SELECT-sats som innehåller en ORDER BY-sats innehåller följande element.

Element

Beskrivning

field_list

Namnen på fälten som hämtas tillsammans med eventuella alias (Alias ​​(SQL). Ett alternativt namn för en tabell eller ett fält i ett uttryck. Alias ​​används vanligtvis som kortare tabell- eller fältnamn för att underlätta efterföljande referens i program, för att förhindra tvetydiga referenser och för att få mer informativa namn vid visning av frågeresultat.) och SQL-statistiska funktioner, predikat (ALL, DISTINCT, DISTINCTROW eller TOP) eller med andra parametrar i SELECT-satsen.

tabell

Namn på tabellen från vilken poster hämtas

urvalsvillkor

Urvalsvillkor. Om uttalandet innehåller en WHERE-sats, kommer Microsoft Access-databasmotorn efter att ha tillämpats på posterna att beställa posternas värden

fält1, fält2

Namn på de fält som poster sorteras efter.

Anteckningar

ORDER BY-satsen är valfri. Den ska användas när du behöver visa data i sorterad form.

Standardsorteringsordningen är sorteringsordning Ett sätt att ordna data baserat på dess värden och typ Data kan sorteras alfabetiskt efter numeriska värden eller efter datum. Sorteringsordningen kan vara stigande (0 till 100, A till Ö) eller fallande (100 till 0, Ö till A (A till Ö, 0 till 9). Exemplen nedan visar sortering av anställdas namn efter efternamn.

VÄLJ Efternamn, Förnamn

FRÅN Anställda

BESTÄLL EFTER Efternamn;

VÄLJ Efternamn, Förnamn

FRÅN Anställda

BESTÄLL EFTER Efternamn ASC;

För att sortera fält i fallande ordning (Z till A, 9 till 0), lägg till det reserverade ordet DESC till namnet på varje fält. Följande exempel visar sortering i fallande ordning baserat på anställdas löner.

VÄLJ Efternamn, Lön

FRÅN Anställda

BESTÄLLNING EFTER Lön DESC, Efternamn;

Om du anger fält i ORDER BY-satsen som innehåller data av typen MEMO Field (Memo Field-datatyp. En fältdatatyp i en Microsoft Access-databas. Ett MEMO-fält kan innehålla upp till 65 535 tecken.) eller OLE Object Field (OLE Object Field) Fältdatatyp " fältdatatyp som används för att spara objekt från andra applikationer som är länkade eller inbäddade i en Microsoft Access-databas.), kommer detta att generera ett fel. Microsoft Access-databasmotorn kan inte sortera dessa fälttyper.

ORDER BY-satsen är vanligtvis den sista satsen i en SQL-sats (SQL-sats (sträng). Ett uttryck som definierar ett SQL-kommando, såsom SELECT, UPDATE eller DELETE, och inkluderar satser, såsom WHERE eller ORDER BY. SQL-satser /strängar används ofta i frågor och statistiska funktioner.).

Du kan inkludera ytterligare fält i ORDER BY-satsen. Posterna sorteras först efter det fält som anges först i ORDER BY-satsen. Poster med samma värden i det första fältet sorteras sedan efter det fält som anges av det andra, och så vidare.
se även

SELECT-sats

SELECT...INTO-satsen

Predikater ALL, DISTINCT, DISTINCTROW, TOP

FRÅN klausul

GROUP BY-klausul

HA erbjudande

WHERE klausul

SQL statistiska funktioner

Källsida: http://office. /ru-ru/access/HA.aspx? pid=CH

INNER JOIN operation

Sammanfogar poster från två tabeller om de anslutande fälten i dessa tabeller innehåller samma värden.

Syntax

FRÅN bord 1 INRE KOPPLING Tabell 2bord 1.fält1 jämförelseoperator tabell2.fält2

Operationen INNER JOIN består av följande delar:

Element

Beskrivning

bord 1, Tabell 2

Namn på tabellerna som innehåller de poster som ska sammanfogas

fält1, fält2

Namn på fälten som ska länkas. Icke-numeriska fält måste vara av samma datatyp (Data Type. En fältkarakteristik som definierar vilken typ av data som fältet kan innehålla. Datatyper inkluderar: Boolean, Heltal, Long, Currency, Single, Double, Date, String, och Variant (standard) och innehåller data av samma typ. Namnen på dessa fält kan dock vara annorlunda

comparison_operator

Vilken jämförelseoperator som helst: (=,<, >, <=, >= eller<>)

SELECT-satsen instruerar Microsoft Access-databasmotorn att returnera information från databasen som en uppsättning poster.

Syntax

VÄLJ [ predikat] { * | tabell.* | [tabell.]fält1 [, [tabell.]fält2 [, ...]]}
FRÅN tabelluttryck [, ...]




SELECT-satsen innehåller följande element.

Element

Beskrivning

predikat

Ett av följande predikat: ALL, DISTINCT, DISTINCTROW eller TOP. Predikat används för att begränsa antalet poster som returneras. Om inget predikat anges är standardvärdet ALLA.

Indikerar att alla fält är valda från den eller de angivna tabellerna.

tabell

Namnet på tabellen som innehåller fälten med de valda posterna.

fält1, fält2

Namnen på fälten som innehåller data som ska hämtas. Om flera fält är specificerade kommer data att hämtas i den ordning deras namn är listade.

smeknamn1, smeknamn2

Namn som används som kolumnrubriker istället för de ursprungliga kolumnnamnen i tabell.

tabelluttryck

Ett eller flera tabellnamn som innehåller data som ska hämtas.

extern_databas

Namnet på databasen som innehåller de tabeller som anges i komponenten tabelluttryck, om de inte finns i den aktuella databasen.

Anteckningar.

För att utföra den här åtgärden söker Microsoft Access-databasmotorn efter den eller de angivna tabellerna, hämtar de angivna kolumnerna, väljer de rader som uppfyller villkoret och sorterar de resulterande raderna i angiven ordning.

SELECT-satser ändrar inte data i databasen.

SELECT är vanligtvis det första ordet i en SQL-sats. SELECT och SELECT...INTO är de vanligaste SQL-satserna.

Minsta syntax för en SELECT-sats är följande:

VÄLJ fält FRÅN tabell

Du kan använda en asterisk (*) för att markera alla fält i en tabell. Exemplet nedan visar att tabellen Anställda har alla fält markerade.

VÄLJ * FRÅN Anställda;

Om fältnamnet ingår i flera tabeller i FROM-satsen, föregå det med tabellnamnet och satsen . (punkt). I följande exempel visas fältet "Avdelning" i två tabeller samtidigt: "Anställda" och "Lederare". Du kan använda en SQL-sats för att välja avdelningar från tabellen Anställda och chefsnamn från tabellen Chefer.

SELECT Employees.Department, Supervisors.SupvName FROM Anställda INNER JOIN Supervisors WHERE Employees.Department = Supervisors.Department;

När ett RecordSet-objekt skapas används tabellfältsnamnet av Microsoft Access Database Engine som namn på "Field"-objektet i objektet Rekorduppsättning. Om fältnamnet behöver ändras eller inte tillhandahålls av uttrycket som genererar fältet, använd det reserverade ordet AS. Följande exempel visar hur rubriken BirthDate används för att namnge det returnerade objektet Fält i det mottagna objektet Rekorduppsättning.

SELECT BirthDate AS Birth FROM Anställda;

När du använder aggregerade funktioner eller frågor som returnerar tvetydiga eller dubbla objektnamn Fält måste du använda AS-satsen för att tilldela objektet Fält ett annat namn. I exemplet nedan, det returnerade objektet Fält i det mottagna objektet Rekorduppsättning namnet "Antal_anställda" tilldelas.

VÄLJ ANTAL (Anställd-ID) SOM Antal anställda FRÅN anställda;

När du arbetar med en SELECT-sats kan du använda ytterligare satser för att ytterligare begränsa och organisera den data som hämtas. Mer information finns i hjälpämnet för erbjudandet du använder.

Laboratoriearbete nr 1

SQL: DATAEXTRAKT - kommandoVÄLJ

Målet med arbetet:

  • bli bekant med SQL-satser;
  • lär dig hur du skapar enkla SQL-frågor i Access med kommandot SELECT;

· användning av operatorer IN, MELLAN, GILLA, ÄR NULL.

Träning№1. Skapa en fråga för att välja i SQL-läge alla värden i fälten FÖRNAMN och EFTERNAMN från tabellen STUDENTER.

VÄLJ FÖRNAMN, EFTERNAMN

FRÅN ELEVER;

Träning№2 . Skapa en fråga för att välja i SQL-läge alla kolumner i tabellen STUDENTS.

VÄLJ *

FRÅN ELEVER;


Uppgift nr 3. Skapa en fråga för att välja i SQL-läge namnen på städer där eleverna bor, information om vilka finns i tabellen PERSONUPPGIFTER.

VÄLJ DISTINKT STAD

FRÅN [PERSONUPPGIFTER];

Uppgift nr 4. Skapa en urvalsfråga i SQL-läge som hämtar namnen på alla elever med efternamnet Ivanov, information om vilken finns i STUDENTS-tabellen.

VÄLJ EFTERNAMN, FÖRNAMN

FRÅN ELEVER

WHERE LAST NAME="Ivanov";

Uppgift nr 5. Skapa en urvalsfråga i SQL-läge för att få för- och efternamn på studenter som studerar i UIT-22-gruppen på en budgetform av utbildning.

VÄLJ EFTERNAMN, FÖRNAMN

FRÅN ELEVER

WHERE GROUP="UIT-22" OCH BUDGET=true;

Uppgift nr 6. Skapa en fråga i SQL-läge. för ett urval från EXAMINATIONStabellen, information om elever som endast har betyg 4 och 5.

VÄLJ *

FRÅN [FÖRÄNDRAEXAMEN]

VARKVALITETIN(4,5);

Uppgift nr 7. Skapa ett zanpoc- och SQL-läge för att välja information om elever som har provbetyget 3 i ämnet IOSU.

VÄLJ *

FRÅN [FÖRÄNDRAEXAMEN]

VARARTIKEL=" IOSU"OchKVALITETInte i (4,5);

Uppgift nr 8. Skapa en fråga i SQL-läge för att välja poster för objekt vars timmar är mellan 100 och 130.

VÄLJ *

FRÅNFÖREMÅL

VARKOLLA PÅMELLAN 100 OCH 130;


Uppgift nr 9. Skapa en fråga i SQL-läge för att välja information från STUDENTS-tabellen om elever vars efternamn börjar, till exempel med bokstaven "C".

VÄLJ *

FRÅNSTUDENTER

VAREFTERNAMNTYCKA OM"MED*";

Slutsats: Under laboratoriearbete bekantade sig med SQL-instruktioner, lärde sig att skapa enkla SQL-frågor i Access med hjälp av kommandot SELECT med IN, BETWEEN, LIKE-operatorerna.

Exempel på SQL-frågor kan användas för att lära sig och öva på att skriva SQL-frågor i MS Access.

En SQL-fråga kan kapslas i en annan. En underfråga är inget annat än en fråga i en fråga. Vanligtvis används en underfråga i WHERE-satsen. Men det finns andra sätt att använda underfrågor.

Fråga Q011. Information om produkter från tabellen m_product visas, vars koder också finns i tabellen m_inkomst:

VÄLJ *
FRÅN m_product
WHERE id IN (VÄLJ product_id FROM m_income);

Begär Q012. En lista över produkter från tabellen m_product visas, vars koder inte finns i tabellen m_outcome:

VÄLJ *
FRÅN m_product
WHERE id NOT IN (SELECT product_id FROM m_outcome);

Begär Q013. Den här SQL-frågan visar en unik lista över produktkoder och namn som finns i tabellen m_inkomst men inte i tabellen m_utfall:

SELECT DISTINCT product_id, title
FRÅN m_inkomst INNER JOIN m_product
PÅ m_income.product_id=m_product.id
WHERE product_id NOT IN (SELECT product_id FROM m_outcome);

Fråga Q014. En unik lista över kategorier vars namn börjar med bokstaven M visas från tabellen m_category:

VÄLJ DISTINKT titel
FRÅN m_product
WHERE titel SOM "M*";

Fråga Q015. Ett exempel på att utföra aritmetiska operationer på fält i en fråga och byta namn på fält i en fråga (alias). Det här exemplet beräknar kostnad = kvantitet*pris och vinst för varje post utgiftspost, förutsatt att vinsten är 7 procent av försäljningen:


belopp*pris/100*7 AS-vinst
FROM m_outcome;

Fråga Q016. Efter att ha analyserat och förenklat aritmetiska operationer, kan du öka hastigheten för exekvering av frågor:

SELECT dt, product_id, amount, price, amount*price AS outcome_sum,
utfallssumma*0,07 AS vinst
FROM m_outcome;

Begär Q017. Du kan använda INNER JOIN-satsen för att sammanfoga data från flera tabeller. I följande exempel, beroende på värdet av ctgry_id, matchas varje post i tabellen m_inkomst med namnet på kategorin från tabellen m_category som produkten tillhör:

VÄLJ c.titel, b.titel, dt, summa, pris, summa*pris AS inkomst_summa
FROM (m_income AS a INNER JOIN m_product AS b ON a.product_id=b.id)
INNER JOIN m_category AS c ON b.ctgry_id=c.id
BESTÄLLNING AV c.title, b.title;

Begär Q018. Funktioner som SUMMA - summa, COUNT - kvantitet, AVG - aritmetiskt medelvärde, MAX - maxvärde, MIN - minimivärde kallas aggregerade funktioner. De accepterar många värden och efter bearbetning returnerar de ett enda värde. Ett exempel på att beräkna summan av produkten av belopps- och prisfälten med hjälp av aggregerad funktion BELOPP.

Denna lektion är tillägnad SQL-frågor till databasen på VBA-åtkomst. Vi kommer att titta på hur man gör detta i VBA INFOGA frågor, UPPDATERA, DELETE till databasen, och lär dig också hur du får ett specifikt värde från en SELECT-fråga.

De som programmerar in VBA-åtkomst och när du arbetar med basen SQL-data servrar ställs ofta inför en så enkel och nödvändig uppgift som att skicka en SQL-fråga till en databas, vare sig det är INSERT, UPDATE eller en enkel SQL SELECT-fråga. Och eftersom vi är novisa programmerare borde vi också kunna göra detta, så idag kommer vi att göra just det.

Vi har redan berört ämnet att hämta data från en SQL-server, där vi skrev kod i VBA för att erhålla denna data, till exempel i artikeln om att ladda upp data till en textfil från MSSql 2008, eller så berörde vi det också en lite i materialet Laddar upp data från Access till en Word- och Excel-mall, men på ett eller annat sätt, tittade vi på detta ytligt, och idag föreslår jag att prata om detta lite mer detaljerat.

Notera! Alla exemplen nedan anses använda Access 2003 ADP-projektet och MSSql 2008-databasen Om du inte vet vad ett ADP-projekt är, så tittade vi på detta i materialet Hur man skapar och konfigurerar ett Access ADP-projekt.

Källdata för exempel

Låt oss säga att vi har en tabell test_table, som kommer att innehålla numren och namnen på årets månader (förfrågningar exekveras med Management Studio)

SKAPA TABELL .( INTE NULL, (50) NULL) PÅ GÅR

Som jag redan har sagt kommer vi att använda ett ADP-projekt konfigurerat för att fungera med MS SQL 2008, där jag skapade ett testformulär och lade till en startknapp med en signatur "Springa", som vi kommer att behöva för att testa vår kod, dvs. Vi kommer att skriva all kod i händelsehanteraren " Knapptryckning».

Databasfrågor INSERT, UPDATE, DELETE i VBA

För att inte försena för länge, låt oss börja direkt, låt oss säga att vi måste lägga till en rad i vår testtabell ( kod kommenterade)/

Private Sub start_Click() "Deklarera en variabel för att lagra frågesträngen Dim sql_query As String "Skriv in frågan vi behöver i den sql_query = "INSERT INTO test_table (id, name_mon) VALUES ("6", "juni")" "Execute it DoCmd RunSQL sql_query End Sub

I det här fallet exekveras begäran med de aktuella databasanslutningsparametrarna. Vi kan kontrollera om uppgifterna har lagts till eller inte.

Som du kan se har uppgifterna infogats.

För att radera en rad skriver vi följande kod.

Private Sub start_Click() "Deklarera en variabel för att lagra frågesträngen Dim sql_query As String "Skriv en raderingsfråga i den sql_query = "DELETE test_table WHERE id = 6" "Kör den DoCmd.RunSQL sql_query End Sub

Om vi ​​kontrollerar kommer vi att se att den önskade raden har raderats.

För att uppdatera data, skriv till variabeln sql_query uppdateringsbegäran, jag hoppas att innebörden är klar.

SELECT-fråga till en databas i VBA

Här är saker lite mer intressanta än med andra SQL-konstruktioner.

Först, låt oss säga att vi behöver få all data från tabellen, och till exempel kommer vi att bearbeta den och visa den i ett meddelande, och du kan naturligtvis använda den för andra ändamål, för detta skriver vi följande koda

Private Sub start_Click() "Deklarera variabler "För en uppsättning poster från databasen Dim RS As ADODB.Recordset "Frågesträng Dim sql_query As String "Sträng för att visa sammanfattande data i ett meddelande Dim str As String "Skapa ett nytt objekt för poster set RS = New ADODB .Recordset "Query line sql_query = "SELECT id, name_mon FROM test_table" "Kör frågan med de aktuella projektanslutningsinställningarna RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Loop through the records While Not ( RS.EOF) "Fyll variabeln för att visa meddelandet str = str & RS.Fields("id") & "-" & RS.Fields("name_mon") & vbnewline "gå till nästa post RS.MoveNext Wend " Skriv ut meddelandet msgbox str End Sub

Här använder vi redan VBA Access-loopar för att iterera genom alla värden i vårt rekorduppsättning.

Men ganska ofta är det nödvändigt att inte få alla värden från en uppsättning poster, utan bara en, till exempel månadens namn genom dess kod. Och för att göra detta är det ganska dyrt att använda en loop, så vi kan helt enkelt skriva en fråga som bara returnerar ett värde och komma åt det, till exempel får vi månadens namn med kod 5

Private Sub start_Click() "Deklarera variabler" För en uppsättning poster från databasen Dim RS As ADODB.Recordset "Frågesträng Dim sql_query As String "String för att visa slutvärdet Dim str As String "Skapa ett nytt objekt för postuppsättningen RS = Ny ADODB.Recordset "Query line sql_query = "SELECT name_mon FROM test_table WHERE id = 5" "Kör frågan med de aktuella projektanslutningsinställningarna RS.open sql_query, CurrentProject.Connection, adOpenDynamic, adLockOptimistic "Hämta vårt värde str = RS. Fields(0) msgbox str End Sub

För universalitet, här har vi redan adresserat inte med cellnamnet, utan med dess index, d.v.s. 0, och detta är det allra första värdet i Rekorduppsättning, till slut fick vi värdet "Maj".

Som du kan se är allt ganska enkelt. Om du ofta behöver få ett specifikt värde från databasen ( som i det sista exemplet), så rekommenderar jag att mata ut all kod till en separat funktion (Hur man skriver en funktion i VBA Access 2003) med en ingångsparameter, till exempel månadskoden ( om vi betraktar vårt exempel) och helt enkelt, där det är nödvändigt att visa detta värde, ring funktionen vi behöver med den önskade parametern och det är det, genom att göra detta kommer vi att avsevärt minska VBA-koden och förbättra uppfattningen av vårt program.

Det är allt för idag. Lycka till!