Inhoudsopgave:
Video: monday.com: Full Review (2019) 2024
Soms wilt u specifieke informatie uit de tabel KLANT opzoeken in SQL. U wilt niet alles bekijken - alleen specifieke kolommen en rijen. Wat je nodig hebt, is een weergave.
A weergave is een virtuele tabel. In de meeste implementaties heeft een weergave geen onafhankelijk fysiek bestaan. De definitie van de weergave bestaat alleen in de metagegevens van de database, maar de gegevens komen uit de tabel of tabellen waaruit u de weergave afleidt. De gegevens van de weergave worden niet fysiek gedupliceerd.
Weergave met één tabel
Als de gewenste informatie in één tabel bestaat, kunt u een enkele tabelweergave van de gegevens maken. Stel dat u de namen en telefoonnummers wilt bekijken van alle klanten die in de staat New Hampshire wonen. U kunt een weergave maken vanuit de tabel KLANT die alleen de gewenste gegevens bevat. De volgende SQL-instructie maakt deze weergave:
ZICHT MAKEN NH_CUST AS SELECT CUSTOMER. Voornaam, KLANT. LastName, KLANT. Telefoon van KLANT WAAR KLANT. Staat = 'NH';
U kunt dezelfde taak uitvoeren met minder typen als uw SQL-implementatie ervan uitgaat dat alle tabelverwijzingen dezelfde zijn als die in de FROM-component. Als uw systeem die redelijke standaardaanname maakt, kunt u de instructie reduceren tot de volgende regels:
CREATE VIEW NH_CUST AS SELECT FirstName, LastName, Phone FROM CUSTOMER WHERE STATE = 'NH';
Hoewel de tweede versie gemakkelijker te schrijven en te lezen is, is deze kwetsbaarder voor verstoring door ALTER TABLE-opdrachten. Een dergelijke verstoring is geen probleem voor deze eenvoudige zaak, die geen JOIN heeft, maar views met JOIN's zijn robuuster wanneer ze volledig gekwalificeerde namen gebruiken.
Multitable view
Vaker wel dan niet, moet u gegevens uit twee of meer tabellen verzamelen om uw vraag te beantwoorden. Stel dat u bijvoorbeeld voor een winkel met sportartikelen werkt en u een promotionele mailing wilt sturen naar alle klanten die ski-uitrusting hebben gekocht sinds de winkel vorig jaar werd geopend.
U hebt informatie nodig uit de tabel KLANT, de tabel PRODUCT, de tabel INVOICE en de tabel INVOICE_LINE. U kunt een multitable-weergave maken met de gegevens die u nodig hebt. Telkens wanneer u de weergave gebruikt, geeft deze alle wijzigingen weer die zich in de onderliggende tabellen hebben voorgedaan sinds u de weergave voor het laatst hebt gebruikt.
De database voor deze sportwinkel bevat vier tabellen: KLANT, PRODUCT, FACTUUR en FACTUURLIJN.
Tabel | Kolom | Gegevenstype | Constraint |
---|---|---|---|
CUSTOMER | CustomerID | INTEGER | NOT NULL |
Voornaam | CHAR (15) | ||
Achternaam < CHAR (20) | NIET NULL | Straat | |
CHAR (25) | Plaats | ||
CHAR (20) | Staat | ||
CHAR (2) | Postcode > CHAR (10) | ||
Telefoon | CHAR (13) | ||
PRODUCT | ProductID | ||
INTEGER | NIET NULL | Naam | CHAR (25) |
Beschrijving > CHAR (30) | Categorie | ||
CHAR (15) | VendorID | ||
INTEGER | VendorName | ||
CHAR (30) | FACTUUR | ||
Factuurnummer | INTEGER | ||
NOT NULL | CustomerID | INTEGER | Factuurdatum |
DATUM | TotalSale | ||
NUMERIC (9, 2) | TotalRemitted | ||
NUMERIC (9, 2) | FormOfPayment > CHAR (10) | ||
INVOICE_LINE | LineNumber | ||
INTEGER | NOT NULL | ||
InvoiceNumber | INTEGER | NOT NULL | ProductID |
INTEGER | NIET NULL > Aantal | INTEGER | |
SalePrice | NUMERIC (9, 2) | Merk op dat sommige kolommen de beperking NOT NULL bevatten.Deze kolommen zijn ofwel de primaire sleutels van hun respectievelijke tabellen of kolommen waarvan u beslist dat | |
moet | een waarde bevatten. De primaire sleutel van een tabel moet elke rij uniek identificeren. Hiertoe moet de primaire sleutel in elke rij een niet-nulwaarde bevatten. | ||
De tabellen hebben betrekking op elkaar via de kolommen die ze gemeen hebben. De volgende lijst beschrijft deze relaties: | De tabel KLANT draagt een |
een-op-veel-relatie met de tabel INVOICE. Eén klant kan meerdere aankopen doen en meerdere facturen genereren. Elke factuur heeft echter betrekking op één en slechts één klant. De tabel INVOICE heeft een een-op-veel-relatie met de tabel INVOICE_LINE. Een factuur kan meerdere regels bevatten, maar elke regel wordt weergegeven op één factuur en slechts één factuur.
De PRODUCT-tabel heeft ook een een-op-veel-relatie met de INVOICE_LINE-tabel. Een product kan op meer dan één regel op een of meer facturen verschijnen. Elke regel heeft echter betrekking op één en slechts één product.
-
De tabel KLANT linkt naar de tabel INVOICE aan de hand van de kolom Common CustomerID. De INVOICE-tabel linkt naar de INVOICE_LINE-tabel met de gemeenschappelijke kolom Factuurnummer. De PRODUCT-tabel verwijst naar de INVOICE_LINE-tabel met de algemene kolom ProductID. Deze koppelingen maken deze database tot een relationele -database.
-
Om toegang te krijgen tot de informatie over klanten die ski-uitrusting hebben gekocht, hebt u FirstName, LastName, Street, City, State en Zipcode nodig in de tabel KLANT; Categorie uit de PRODUCT-tabel; Factuurnummer uit de tabel INVOICE; en LineNumber uit de INVOICE_LINE-tabel. U kunt de gewenste weergave in fasen maken door de volgende instructies te gebruiken:
-
CREATE VIEW SKI_CUST1 AS SELECT FirstName, LastName, Street, City, State, Zipcode, InvoiceNUMMER FROM CUSTOMER JOIN INVOICE USING (CustomerID); CREATE VIEW SKI_CUST2 AS SELECT FirstName, LastName, Street, City, State, Zipcode, ProductID FROM SKI_CUST1 JOIN INVOICE_LINE USING (InvoiceNumber); CREATE VIEW SKI_CUST3 AS SELECT Voornaam, Achternaam, Straat, Stad, Provincie, Postcode, Categorie VANAF SKI_CUST2 JOIN PRODUCT USING (ProductID); CREATE VIEW SKI_CUST ALS GESELECTEERD DISTINCT Voornaam, Achternaam, Straat, Stad, Staat, Postcode VANAF SKI_CUST3 WAAR CATEGORIE = 'Ski';
Deze CREATE VIEW-instructies combineren gegevens uit meerdere tabellen met behulp van de operator JOIN. Hier volgt een overzicht van de vier CREATE VIEW-instructies: De eerste instructie combineert kolommen uit de tabel KLANT met een kolom van de tabel INVOICE om de weergave SKI_CUST1 te maken.
De tweede instructie combineert SKI_CUST1 met een kolom uit de INVOICE_LINE-tabel om de SKI_CUST2-weergave te maken.
De derde instructie combineert SKI_CUST2 met een kolom uit de PRODUCT-tabel om de SKI_CUST3-weergave te creëren.
De vierde verklaring filtert alle rijen uit die geen categorie Ski hebben. Het resultaat is een weergave (SKI_CUST) met de namen en adressen van alle klanten die ten minste één product in de categorie Ski hebben gekocht.
Het DISTINCT-sleutelwoord in de SELECT-clausule van de vierde CREATE VIEW zorgt ervoor dat u slechts één item voor elke klant hebt, zelfs als sommige klanten meerdere aankopen van skipakketten hebben gedaan.