Spil Guider > videospil > alle video game > Hvordan man skriver Microsoft Access SQL Forespørgsler Fra Scratch

Hvordan man skriver Microsoft Access SQL Forespørgsler Fra Scratch

Microsoft Access er velsagtens den mest kraftfulde værktøj i hele Microsoft Office-pakken, men det mystifies (og til tider skræmmer) Office-superbrugere. Med en stejlere indlæringskurve end Word eller Excel, hvordan man formodes at vikle hovedet omkring brugen af ​​dette værktøj? . I denne uge, vil Bruce Epper se på nogle af de spørgsmål, ansporet af dette spørgsmål fra en af ​​vores læsere

En læser spørger:

Jeg har problemer med at skrive en forespørgsel i Microsoft Access.

jeg har en database med to produktgrupper tabeller indeholder en fælles kolonne med en numerisk produkt kode og en tilhørende produktnavn.

jeg vil gerne finde ud af, hvilke produkter fra tabel a kan findes i tabel B. jeg vil tilføje en kolonne med navnet Resultater, som indeholder produktet navn fra tabel a, hvis den findes, og produktet navn fra tabel B, når det ikke eksisterer i tabel A.

har du nogen råd

Bruces Svar:?

Microsoft Access er en Database Management System (DBMS) designet til brug på både Windows og Mac-maskiner. Det udnytter Microsofts Jet database motor til forarbejdning og lagring af data. Det giver også en grafisk grænseflade til brugere, der næsten eliminerer behovet for at forstå Structured Query Language (SQL).

SQL er kommandoen der bruges til at tilføje, slette, opdatere og returnere oplysninger gemt i databasen samt som modificere centrale database komponenter såsom tilføje, slette eller ændre tabeller eller indekser.

Udgangspunkt

Hvis du ikke allerede har et vist kendskab til Access eller anden RDBMS, vil jeg foreslå du starter med disse ressourcer, før du fortsætter:

Så hvad er en database? hvor Ryan Dube bruger Excel til at vise det grundlæggende i relationsdatabaser.

En hurtig guide i gang med Microsoft Access 2007, som er et højt niveau overblik over Access og de komponenter, der udgør en Access-database.

en hurtig Tutorial til tabeller i Microsoft Access 2007 tager et kig på at skabe din første database og tabeller til at gemme dine strukturerede data.

en hurtig Tutorial On forespørgsler i Microsoft Access 2007 ser på midlerne til at vende tilbage specifik dele af de lagrede data i databasetabeller.

at have en grundlæggende forståelse af de begreber, der er fastsat i disse artikler vil gøre følgende lidt lettere at fordøje.

Database Relations og normalisering

Forestil dig at du kører en virksomhed, der sælger 50 forskellige typer af widgets over hele verden. Du har en kundebase på 1250 og i en gennemsnitlig måned sælge 10.000 widgets til disse klienter. Du bruger i øjeblikket et enkelt regneark til at spore alle disse salg - effektivt en enkelt database tabel. Og hvert år tilføjer tusindvis af rækker til dit regneark.


Ovenstående billeder er en del af ordren sporing regneark, du bruger. Nu siger begge disse kunder køber widgets fra dig flere gange om året, så du har langt flere rækker for dem begge.

Hvis Joan Smith gifter Ted Baines og tager hans efternavn, hver enkelt række, der indeholder hendes navn nu skal ændres. Problemet forværres, hvis du tilfældigvis har to forskellige klienter med navnet "Joan Smith '. Det er lige blevet meget sværere at holde dine salgsdata konsekvent på grund af en ret almindelig begivenhed.

Ved hjælp af en database og normalisering af data, kan vi udskille elementer i flere tabeller såsom opgørelse, kunder og ordrer .


Bare se på klienten del af vores eksempel, vil vi fjerne kolonnerne for Client Navn og Client Adresse og sætte dem ind i en ny tabel. I ovenstående billede, har jeg også brudt ting ud bedre for mere kornet adgang til data. Den nye tabel indeholder også en kolonne til en primær nøgle (klient-) -. Et nummer, der skal bruges til at få adgang til hver række i denne tabel

I den oprindelige tabel, hvor vi fjernede disse data, vil vi tilføje en kolonne til en udenlandsk Key (klient-), som er det, der linker til den rigtige række, der indeholder oplysningerne for dette bestemt klient.

nu, når Joan Smith ændrer hendes navn til Joan Baines, ændringen skal kun gøres en gang i Client tabellen. Hver anden reference fra tiltrådte tabeller vil trække den rigtige klient navn og en rapport, der ser på, hvad Jeanne har købt for de sidste 5 år vil få alle de ordrer under både hendes jomfru og gifte navne uden at skulle ændre, hvordan rapporten er genereret .

Som en ekstra fordel, dette reducerer også den samlede mængde lagerplads forbruges

Deltag typer

SQL definerer fem forskellige typer af joins:. INNER, LEFT OUTER, HØJRE YDRE, FULL YDRE, og CROSS. Den YDRE søgeord er valgfri i SQL-sætningen.

Microsoft Access tillader brugen af ​​INNER (standard), LEFT OUTER, HØJRE YDRE, og CROSS. FULL YDRE understøttes ikke som sådan, men ved at bruge LEFT OUTER, UNION ALL, og RIGHT YDRE, det kan være forfalsket på bekostning af flere CPU cykler og I /O-operationer.

Udgangen af ​​en CROSS slutte indeholder hver række i den venstre tabel parret med hver række i den højre tabel. Den eneste gang, jeg nogensinde har set en CROSS deltag anvendes, er under belastning test af databaseservere.

Lad os tage et kig på, hvordan det grundlæggende slutter arbejdet, så vil vi ændre dem der passer til vores behov.
< p> Lad os starte med at oprette to tabeller, PRODA og ProdB, med følgende design egenskaber.


Autonummerering er en automatisk forøgelse lange heltal tildelt poster som de føjes til tabellen. Tekst mulighed blev ikke ændret, så den accepterer en tekststreng på op til 255 tegn.

Nu befolke dem med nogle data.


For at vise forskellene i, hvordan de 3 slutte typer arbejde, har jeg slettet poster 1, 5 og 8 fra PRODA

Derefter opretter en ny forespørgsel ved at gå til skabe & gt.; Query Design. Vælg begge tabeller fra dialogen Vis Bord og klik på Tilføj, derefter Luk.


Klik på ProductID i tabel PRODA, trække det til ProductID i tabel ProdB og slip museknappen for at skabe relationen mellem bordene.


Højreklik på linjen mellem bordene, der repræsenterer forholdet mellem elementerne, og vælg Tilslut Egenskaber.


Som standard , deltage type 1 (indre) er valgt. Mulighed 2 er en LEFT OUTER deltage og 3 er en RIGHT OUTER JOIN.

Vi vil se på den indre sammenkædning først, så klik på OK for at afvise dialogen.

I forespørgslen designer, skal du vælge markerne, vi ønsker at se fra rullelisterne.


Når vi køre forespørgslen (den røde udråbstegn i båndet), vil det vise ProductName feltet fra begge tabeller med værdien fra tabellen PRODA i den første kolonne og ProdB i den anden.


Bemærk resultaterne kun viser værdier, hvor ProductID er lig i begge tabeller. Selv om der er en post for ProductID = 1 i tabel ProdB, betyder det ikke vise sig i resultaterne siden ProductID = 1 ikke findes i tabellen PRODA. Det samme gælder for ProductID = 11. Det findes i tabel PRODA men ikke i tabel ProdB.


Ved at bruge knappen Vis på båndet og skifte til SQL View, kan du se SQL forespørgsel genereres af designeren bruges til at få disse resultater

 SELECT ProdA.ProductName, ProdB.ProductName fRA PRODA INNER JOIN ProdB pÅ ProdA.ProductID = ProdB.ProductID;. 

Går tilbage til designvisning, ændre slutte type 2 (LEFT OUTER). Kør forespørgslen for at se resultaterne.


Som du kan se, er hver post i tabellen PRODA repræsenteret i resultaterne, mens kun dem i ProdB der har en matchende ProductID post i tabellen ProdB dukke op i resultaterne.

tomme plads i ProdB.ProductName kolonne er en særlig værdi (NULL), da der ikke er en matchende værdi i tabellen ProdB. Dette vil vise sig vigtigt senere

 SELECT ProdA.ProductName, ProdB.ProductName FRA PRODA LEFT JOIN ProdB PÅ ProdA.ProductID = ProdB.ProductID;. 

Prøv det samme med den tredje type slutte (HØJRE YDRE ).


resultaterne viser alt fra tabel ProdB mens det viser blank (kendt som NULL) værdier hvor PRODA tabellen ikke har en matchende værdi. Hidtil dette bringer os tættest på ønskede resultater i vores læserens spørgsmål

 Vælg ProdA.ProductName, ProdB.ProductName FROM PRODA RIGHT JOIN ProdB PÅ ProdA.ProductID = ProdB.ProductID;. 

Brug funktioner i en Query

resultaterne af en funktion kan også returneres som en del af en forespørgsel. Vi ønsker en ny kolonne med navnet 'Resultater' skal vises i vores resultat sæt. Dens værdi vil være indholdet af ProductName kolonne i tabel PRODA hvis PRODA har en værdi (det er ikke NULL), ellers skal det tages fra tabel ProdB.

Funktionen Umiddelbar IF (IIF) kan anvendes at generere dette resultat. Funktionen tager tre parametre. Den første er en betingelse, der skal evalueres til et Sandt eller falsk værdi. Den anden parameter er den værdi, der skal returneres, hvis betingelsen er True, og den tredje parameter er den værdi, der skal returneres, hvis betingelsen er falsk

Den fulde funktion konstruere for vores situation ser sådan ud:.

 IIF (ProdA.ProductID Er Null, ProdB.ProductName, ProdA.ProductName) 

Bemærk, at betingelsen parameter ikke kontrollerer for ligestilling. Et Null værdi i en database ikke har en værdi, der kan sammenlignes med en anden værdi, herunder en anden Null. Med andre ord, Null ikke er lig Null. Nogensinde. For at komme forbi dette, vi i stedet kontrollere værdien ved hjælp af 'er' søgeord.

Vi kunne have også brugt 'er ikke Null «og ændret rækkefølgen af ​​de sande og falske parametre for at få det samme resultat.

Når at sætte dette ind i Query Designer, skal du indtaste hele funktionen i Field: post. For at få det til at skabe kolonnen »resultater ', skal du bruge et alias. For at gøre dette, forord funktionen med 'Resultater: "som ses i nedenstående screenshot


Den tilsvarende SQL kode til at gøre dette ville være:.

 SELECT PRODA. ProductName, ProdB.ProductName, IIF (ProdA.ProductID Er Null, ProdB.ProductName, ProdA.ProductName) AS Resultater fra PRODA RIGHT JOIN ProdB PÅ ProdA.ProductID = ProdB.ProductID 

nu, når vi køre denne forespørgsel, det vil producere disse resultater.


Her ser vi for hver post, hvor tabel PRODA har en værdi, der er denne værdi afspejles i resultater kolonnen. Hvis der ikke er en indgang i PRODA tabellen, vises posten fra ProdB i Resultater, der er præcis, hvad vores læser spurgt.

For flere ressourcer til at lære Microsoft Access, tjek Joel Lees Sådan Lær Microsoft Access :.! 5 gratis online ressourcer

Vi kan hjælpe dig Too
Stil dit spørgsmål
Vi hjalp denne læser!. Vi kan hjælpe dig, også. Fik en brændende spørgsmål, eller en tech problem, du behøver løst? Bare klik på knappen ovenfor! Og, selvfølgelig, kan du efterlade feedback eller kommentarer i kommentarerne nedenfor!

Relaterede artikler