Inhoudsopgave:
- Verifieer de databasestructuur
- Probeer query's uit op een testdatabase
- Zoekopdrachten die joins bevatten, worden dubbel gecontroleerd. Joins zijn notoir contra-intuïtief. Als uw vraag er één bevat, zorg er dan voor dat het doet wat u verwacht voordat u WHERE-clausules of andere complicerende factoren toevoegt.
- Query's met subselects nemen gegevens uit één tabel en nemen op basis van wat is opgehaald enkele gegevens uit een andere tabel. Daarom kunnen dergelijke zoekopdrachten per definitie moeilijk zijn om goed te krijgen. Zorg ervoor dat de gegevens die door de interne SELECT worden opgehaald de gegevens zijn die de outer SELECT nodig heeft om het gewenste resultaat te produceren. Als je twee of meer niveaus van subselecties hebt, moet je nog voorzichtiger zijn.
- Stel dat u een tabel (NATIONAL) hebt met de naam (Player), het team (Team) en het aantal treffers (Homers) door elke honkbalspeler in de National League . Je kunt het teamhomer-totaal voor alle teams ophalen met een zoekopdracht als deze:
- Stel dat u een lijst wilt van National League-machtshatters. Beschouw de volgende vraag:
- Soms als u AND en OR mengt, verwerkt SQL de uitdrukking niet in de volgorde die u verwacht. Gebruik haakjes in complexe expressies om ervoor te zorgen dat u de gewenste resultaten krijgt. Het typen van een paar extra toetsaanslagen is een kleine prijs om te betalen voor betere resultaten.
- Veel mensen maken geen gebruik van de beveiligingsfuncties die beschikbaar zijn in hun DBMS. Ze willen zich niet met hen bemoeien omdat ze denken dat misbruik en verduistering van gegevens dingen zijn die alleen met andere mensen gebeuren. Wacht niet om te worden verbrand. Breng beveiliging tot stand voor alle databases die enige waarde hebben.
- Waarschuwing voor de waarschuwing: gegevens kunnen moeilijk worden opgehaald nadat een stroomstoot, een brand, een aardbeving of een andere ramp uw harde schijf hebben vernietigd. (Denk eraan, soms sterven computers gewoon zonder goede reden.) Maak regelmatig back-ups en zet de back-upmedia op een veilige plaats.
- Of u nu ad hoc-query's uitvoert vanaf een werkstation of query's insluit in een toepassing, zo nu en dan retourneert SQL een foutbericht in plaats van de gewenste resultaten. Op een werkstation kunt u beslissen wat u vervolgens moet doen, op basis van het geretourneerde bericht.
Video: SQL Tutorial 12 Advanced Subqueries returning multiple columns 2024
De SQL SELECT-instructie is uw hulpmiddel voor het opgraven van verborgen informatie in een database. Zelfs als u een duidelijk idee hebt van wat u wilt terughalen, kan het vertalen van dat idee in SQL een uitdaging zijn. Als je formulering maar een klein beetje afwijkt, kun je de verkeerde resultaten behalen. Gebruik de volgende tien principes om uw kansen op misleiding te verkleinen.
Verifieer de databasestructuur
Als u gegevens uit een database ophaalt en uw resultaten lijken niet redelijk, controleer dan het databaseontwerp. Er zijn veel slecht ontworpen databases in gebruik en als u er mee werkt, kunt u het ontwerp repareren voordat u een andere oplossing probeert. Let op: een goed ontwerp is een voorwaarde voor gegevensintegriteit.
Probeer query's uit op een testdatabase
Maak een testdatabase met dezelfde structuur als uw productiedatabase, maar met slechts enkele representatieve rijen in de tabellen. Kies de gegevens zodat u van tevoren weet wat de resultaten van uw zoekopdrachten moeten zijn.
Voer elke testvraag uit op de testgegevens en kijk of de resultaten overeenkomen met uw verwachtingen. Als dat niet het geval is, moet u mogelijk uw vragen opnieuw formuleren. Als een query goed is geformuleerd, maar toch slechte resultaten oplevert, moet u mogelijk uw database herstructureren.
Bouw verschillende sets testgegevens en zorg ervoor dat u oneven zaken opneemt, zoals lege tabellen en extreme waarden bij de uiterste limiet van toegestane bereiken. Probeer onwaarschijnlijke scenario's te bedenken en controleer op correct gedrag wanneer ze zich voordoen. Tijdens het controleren op onwaarschijnlijke gevallen, kunt u inzicht krijgen in problemen die vaker voorkomen.
Zoekopdrachten die joins bevatten, worden dubbel gecontroleerd. Joins zijn notoir contra-intuïtief. Als uw vraag er één bevat, zorg er dan voor dat het doet wat u verwacht voordat u WHERE-clausules of andere complicerende factoren toevoegt.
Query's met subselects nemen gegevens uit één tabel en nemen op basis van wat is opgehaald enkele gegevens uit een andere tabel. Daarom kunnen dergelijke zoekopdrachten per definitie moeilijk zijn om goed te krijgen. Zorg ervoor dat de gegevens die door de interne SELECT worden opgehaald de gegevens zijn die de outer SELECT nodig heeft om het gewenste resultaat te produceren. Als je twee of meer niveaus van subselecties hebt, moet je nog voorzichtiger zijn.
Gegevens samenvatten met GROUP BY
Stel dat u een tabel (NATIONAL) hebt met de naam (Player), het team (Team) en het aantal treffers (Homers) door elke honkbalspeler in de National League. Je kunt het teamhomer-totaal voor alle teams ophalen met een zoekopdracht als deze:
SELECT Team, SUM (Homers) FROM NATIONAL GROUP BY Team;
Deze query geeft een overzicht van elk team, gevolgd door het totale aantal thuisruns dat door alle spelers van dat team is geraakt.
Kijk naar GROUP BY-clausulebeperkingen
Stel dat u een lijst wilt van National League-machtshatters. Beschouw de volgende vraag:
SELECT Speler, Team, Homers VAN NATIONAAL WAAR Homers> = 20 GROEP PER Team;
In de meeste implementaties retourneert deze query een fout. Over het algemeen kunnen alleen kolommen die worden gebruikt voor groepering of kolommen die in een setfunctie worden gebruikt, in de selectielijst worden weergegeven. Als u deze gegevens echter wilt bekijken, werkt de volgende formule:
SELECT Speler, Team, Homers VAN NATIONAAL WAAR Homers> = 20 GROEP PER Team, Speler, Homers;
Omdat alle kolommen die u wilt weergeven, worden weergegeven in de clausule GROUP BY, slaagt de query en worden de gewenste resultaten weergegeven. Deze formulering sorteert de resulterende lijst eerst per team, vervolgens per speler en ten slotte door homers.
Gebruik haakjes met AND, OR en NIET
Soms als u AND en OR mengt, verwerkt SQL de uitdrukking niet in de volgorde die u verwacht. Gebruik haakjes in complexe expressies om ervoor te zorgen dat u de gewenste resultaten krijgt. Het typen van een paar extra toetsaanslagen is een kleine prijs om te betalen voor betere resultaten.
Haakjes helpen ook om ervoor te zorgen dat het NOT-sleutelwoord wordt toegepast op de term of expressie waarop u wilt dat het sleutelwoord wordt toegepast.
Toegangsrechten voor beheer
Veel mensen maken geen gebruik van de beveiligingsfuncties die beschikbaar zijn in hun DBMS. Ze willen zich niet met hen bemoeien omdat ze denken dat misbruik en verduistering van gegevens dingen zijn die alleen met andere mensen gebeuren. Wacht niet om te worden verbrand. Breng beveiliging tot stand voor alle databases die enige waarde hebben.
Maak regelmatig een back-up van uw databases
Waarschuwing voor de waarschuwing: gegevens kunnen moeilijk worden opgehaald nadat een stroomstoot, een brand, een aardbeving of een andere ramp uw harde schijf hebben vernietigd. (Denk eraan, soms sterven computers gewoon zonder goede reden.) Maak regelmatig back-ups en zet de back-upmedia op een veilige plaats.
Wat een veilige plaats vormt, hangt af van hoe kritisch uw gegevens zijn. Het kan een brandvrije kluis zijn in dezelfde ruimte als uw computer. Het kan in een ander gebouw zijn. Het kan in de cloud zijn. Het kan zijn in een betonnen bunker onder een berg die verhard is om een nucleaire aanval te weerstaan. Bepaal welk beveiligingsniveau geschikt is voor uw gegevens.
Foutcondities foutvol verwerken
Of u nu ad hoc-query's uitvoert vanaf een werkstation of query's insluit in een toepassing, zo nu en dan retourneert SQL een foutbericht in plaats van de gewenste resultaten. Op een werkstation kunt u beslissen wat u vervolgens moet doen, op basis van het geretourneerde bericht.
In een toepassing is de situatie anders. De applicatiegebruiker weet waarschijnlijk niet welke actie geschikt is. Plaats uitgebreide foutafhandeling in uw applicaties om elke denkbare fout te dekken. Het maken van foutafhandelingscode kost veel moeite, maar het is beter dan dat de gebruiker vragend naar een bevroren scherm kijkt.