13 Belangrijkste SQL-opdrachten Willekeurig programmeur

13 Belangrijkste SQL-opdrachten Willekeurig programmeur / Programming

Databases drijven het moderne web. Elke grote of dynamische website maakt op de een of andere manier gebruik van een database en in combinatie daarmee Structured Query Language (SQL), de mogelijkheden voor het manipuleren van data zijn echt eindeloos. Als je al SQL kent, zorg dan dat je deze programmeervaardigheden nakijkt 7 Programmeervaardigheden Alle ontwikkelaars van websites moeten 7 programmeervaardigheden weten Alle ontwikkelaars van websites moeten weten Ontwerp en ontwikkeling van websites biedt goede beloningen en voordelen, fatsoenlijke werktijden en het vooruitzicht op vooruitgang. We laten je zien welke essentiële vaardigheden je nu kunt leren om in dit spannende vakgebied te komen. Lees Meer alle website-ontwikkelaars zouden moeten weten.

Vandaag laat ik je enkele van de kerncommando's zien die je als programmeur moet kennen.

Er zijn veel namen voor gegevens die worden geretourneerd uit een databasetabel. Gegevens worden gewoonlijk aangeduid als rijen, archief, of tuples. Ik gebruik deze voorwaarden in dit artikel door elkaar.

Voorwoord

Alle voorbeelden van vandaag zullen gebaseerd zijn op vier fictietabellen. De klant tabel bevat de naam en leeftijd van klanten:

De hoogten tabel bevat de naam en hoogte van elke persoon:

De personeel tabel bevat de naam en leeftijd van personeelsleden - exact hetzelfde als de klantentabel:

De finaletafel belde mensen bevat de naam en leeftijd van mensen, net als de tabellen voor klanten en personeel:

1. Selecteer

De kiezen verklaring is de eenvoudigste, en het is essentieel dat je het begrijpt omdat het bijna alle andere commando's ondersteunt. Het wordt als een goede gewoonte beschouwd om uw gereserveerde SQL-woorden in hoofdletters te schrijven, omdat het commando daardoor gemakkelijker te lezen en te begrijpen is.

Zoals de naam al aangeeft, wordt select gebruikt om kiezen gegevens uit een database. Dit is het eenvoudigste gebruik:

SELECT * FROM-tabel;

Hier zijn twee delen van. Het eerste deel (SELECT *) geeft aan welke kolommen u wilt selecteren. De asterisk geeft aan dat u alle kolommen in de tabel wilt selecteren. Het tweede gedeelte (VANAF de tafel) vertelt uw database-engine waar u deze gegevens wilt ophalen. Vervangen “tafel” met de naam van uw databasetabel.

Deze selectie staat bekend als “selecteer ster.” Het gebruik van de asterisk is een goede manier om erachter te komen welke gegevens in een tabel voorkomen, maar ik raad u af om deze voor elke productiecode te gebruiken. Wanneer u een select ster gebruikt, is het aan de database-engine om u de gewenste gegevens te tonen. U hebt geen controle over de volgorde waarin de gegevens worden geretourneerd, dus als iemand een nieuwe kolom toevoegt aan de tabel, ziet u mogelijk dat uw variabelen in uw programmeertaal niet langer de juiste gegevens vertegenwoordigen. Gelukkig is er een oplossing.

U kunt expliciet aangeven welke kolommen u wilt ophalen, zoals dit:

SELECTEER leeftijd, naam VAN mensen;

Met deze query wordt het “leeftijd” en “naam” kolommen uit de “mensen” tafel. Dit expliciet zijn kan enigszins vervelend zijn als je veel gegevens hebt, maar als je dat doet, zullen problemen in de toekomst minder worden, en zal je SQL gemakkelijker te begrijpen zijn voor toekomstige programmeurs..

Als u een extra stuk gegevens wilt selecteren, maar het niet in een van uw tabellen wordt opgeslagen, kunt u dit als volgt doen:

SELECTEER leeftijd, '1234' VAN mensen;

Elke string binnen enkele aanhalingstekens wordt geretourneerd in plaats van overeen te komen met een kolomnaam.

2. Waar

De opdracht selecteren is uitstekend voor het ophalen van gegevens, maar wat als u de resultaten iets meer wilt filteren? Hoe zit het met het ophalen van alleen mensen met blauwe ogen? Hoe zit het met mensen die in januari zijn geboren en die als monteur werken? Dit is waar de waar commando komt binnen. Hiermee kunt u voorwaarden toepassen op de selectie, en u voegt deze toe aan het einde van de instructie:

SELECTEER leeftijd, naam UIT mensen WAAR de leeftijd> 10;

Deze vraag is nu beperkt tot mensen die ouder zijn dan 10 jaar oud. U kunt meerdere voorwaarden combineren met behulp van de EN operator:

SELECTEER de leeftijd, de naam UIT mensen WAAR de leeftijd> 10 EN leeftijd is < 20;

De EN opdracht werkt precies zoals in de Engelse taal: het past een andere voorwaarde toe op de instructie. In dit voorbeeld zijn de geretourneerde gegevens records met een leeftijd tussen 10 en 20. Omdat er geen overeenkomende resultaten zijn, worden er geen gegevens geretourneerd.

Een ander commando dat in combinatie hiermee kan worden gebruikt, is OF. Hier is een voorbeeld:

SELECTEER leeftijd, naam VAN mensen WAAR leeftijd> 10 OF naam = 'Joe';

Deze query retourneert records waarvan de leeftijd meer dan 10 is, of de naam is gelijk aan “Joe”. Merk op hoe er slechts één gelijkteken is? De meeste programmeertalen gebruiken dubbele waarden (==) om te controleren op gelijkwaardigheid. Dit is niet nodig voor de overgrote meerderheid van database-engines (maar het kan erg per omgeving zijn, dus controleer eerst eerst).

3. Bestelling

De bestellen commando wordt gebruikt om de geretourneerde resultaten te sorteren. Het is nog een gemakkelijk te gebruiken. Voeg het eenvoudig toe aan het einde van uw verklaring:

SELECTEER naam, leeftijd UIT mensen BESTELLING OP leeftijd DESC;

U moet de kolom en de volgorde opgeven die dat kan zijn ASC voor oplopend of DESC voor afdalen. U kunt op meerdere kolommen zoals deze bestellen:

SELECTEER naam, leeftijd UIT mensen BESTELLING BY naam ASC, leeftijd DESC

BESTELLING DOOR is misschien het nuttigst in combinatie met andere opdrachten. Niet alle query's retourneren gegevens op een logische of gerangschikte manier - met deze opdracht kunt u dat wijzigen.

4. Doe mee

De toetreden commando wordt gebruikt om toetreden gerelateerde gegevens opgeslagen in een of meer tabellen. U toetreden de tweede tabel naar de eerste tabel en geef aan hoe de gegevens zijn verbonden. Hier is een eenvoudig voorbeeld:

SELECTEER leeftijd, naam, lengte VAN mensen LINKS WORD LID JOINS GEBRUIK (naam);

Er zijn hier een paar dingen aan de hand. Je moet beginnen met de “LINKS DOE MEE” syntaxis, waarmee wordt aangegeven dat u wilt deelnemen aan een tabel met een join van het type left. Geef vervolgens de tabel op waaraan u wilt deelnemen (hoogtes). De GEBRUIKEN (naam) syntaxis geeft aan dat de kolom “naam” is te vinden in beide tabellen, en dat dit moet worden gebruikt als een sleutel om samen aan de tafels deel te nemen.

Maakt u zich geen zorgen als uw kolommen in elke tabel andere namen hebben. Je kunt gebruiken “OP” in plaats van “GEBRUIK MAKEND VAN”:

SELECTEER de leeftijd, de naam, de hoogte VAN de mensen LINKS KAPITAAL in de hoogte AAN (namea = nameb);

De instructie on geeft expliciet aan welke kolommen moeten worden ingetoetst. Er zijn veel typen join, en het zou lang duren om in details te gaan voor elke join, dus hier is een korte samenvatting van hun gebruik:

  • (INNERLIJK) DOE MEE - Retourneert rijen met een overeenkomst in beide tabellen.
  • LEFT (OUTER) JOIN - Retourneert alle rijen uit de linkertabel, met eventuele overeenkomsten uit de rechtse tabel. Als er geen overeenkomsten zijn, worden de linker tabelrecords nog steeds geretourneerd.
  • RIGHT (OUTER) JOIN - Dit is het tegenovergestelde van een linkse join: alle rijen van de rechtse tabel worden geretourneerd, samen met eventuele overeenkomsten in de linker tabel.
  • FULL (OUTER) JOIN - Retourneert records met een overeenkomst in beide tabellen.

De “INNER” of “BUITENSTE” syntaxis is optioneel. Het kan dingen gemakkelijker te begrijpen maken, maar je hoeft het niet voor de overgrote meerderheid van de tijd te specificeren.

5. Alias

Nu je de basis kent, laten we eens kijken naar de alias commando. Dit wordt gebruikt om een ​​tabel tijdelijk een andere naam te geven - meer een bijnaam dan iets anders, omdat deze nieuwe naam alleen voorkomt in de afzonderlijke transactie die u uitvoert. Hier is hoe je het gebruikt:

SELECT A.age VAN mensen A;

U kunt elke geldige naam gebruiken die u wilt, maar ik gebruik graag letters van het alfabet. Vóór elke kolomnaam wordt de alias voorafgegaan. Dit alias wordt aan de tabel toegewezen onmiddellijk nadat het is gedeclareerd. Dit is precies hetzelfde als dit doen:

SELECTEER people.age VAN mensen;

In plaats van een lange tabelnaam in te voeren, kunt u een eenvoudige en gemakkelijk te onthouden brief typen, maar wat heeft het voor zin? Welnu, als u uit meer dan één tabel selecteert, kunt u gemakkelijk in verwarring raken over welke kolommen bij welke tabel horen. Als beide tabellen toevallig kolommen met dezelfde naam bevatten, kan uw databasequery zelfs niet worden uitgevoerd zonder expliciet naar de tabelnaam of alias te verwijzen. Hier is een voorbeeld met twee tabellen:

SELECTEER staff.age, staff.name, customers.age, customers.name FROM personeel, klanten;

En hier is dezelfde vraag met aliassen:

SELECT A.age, A.name, B.age, B.name FROM personeel A, klanten B;

De personeelstafel krijgt de alias van “EEN”, en de klanten tabel krijgt de alias van “B”. Aliasing-tabellen helpen echt om uw code begrijpelijker te maken en verminderen de hoeveelheid tekst die u moet doen.

U kunt ook een kolom hernoemen met een alias met behulp van de “ZOALS” commando:

SELECTEER de leeftijd ALS person_age VANAF mensen;

Wanneer deze query wordt uitgevoerd, wordt de kolom nu gebeld “personage” in plaats van “leeftijd”.

6. Unie

Unie is een geweldig commando. Hiermee kunt u rijen aan elkaar toevoegen. In tegenstelling tot joins die overeenkomende kolommen toevoegen, kan union niet-gerelateerde rijen toevoegen, op voorwaarde dat ze hetzelfde nummer en dezelfde kolomnaam hebben. Hier is hoe je het gebruikt:

SELECTEER leeftijd, naam VAN klanten UNION SELECTEER leeftijd, naam VAN personeel;

U kunt union zien als een manier om de resultaten van twee vragen te combineren. Een vakbond retourneert alleen resultaten als er een unieke rij tussen de twee query's staat. U kunt de “UNION ALL” syntaxis om alle gegevens te retourneren, ongeacht duplicaten:

SELECTEER leeftijd, naam VAN klanten UNION ALL SELECT leeftijd, naam VAN personeel;

Merk op hoe de volgorde van de rijen verandert? Union werkt op de meest efficiënte manier, dus de geretourneerde gegevens kunnen in volgorde verschillen.

Een mogelijke use case voor union is een subtotaal: u kunt unie een query van de som op een query van de individuele totalen voor een bepaald scenario.

7. Invoegen

U weet nu alles over het ophalen van gegevens uit een database, maar hoe zit het met het invoegen van gegevens? Dit is waar de invoegen commando komt binnen. Hier is een voorbeeld:

INVOEGEN IN mensen (naam, leeftijd) WAARDEN ('Joe', 102);

U moet de tabelnaam (personen) en de kolommen die u wilt gebruiken (naam en leeftijd) opgeven. De “WAARDEN” syntaxis wordt dan gebruikt om de waarden op te geven die moeten worden ingevoegd. Deze moeten in dezelfde volgorde staan ​​als de kolommen die eerder zijn opgegeven.

U kunt geen where-component voor invoegtoepassingen opgeven en u moet ervoor zorgen dat u de nodige tabelbeperkingen volgt die aanwezig zijn.

8. Update

Nadat u enkele gegevens hebt ingevoegd, is het logisch dat u specifieke rijen moet wijzigen. Hier is de bijwerken opdracht syntaxis:

UPDATE mensen SET naam = 'Joe', leeftijd = 101;

U moet de tabel opgeven die u wilt wijzigen en vervolgens de “SET” syntaxis om de kolommen en hun nieuwe waarden op te geven. Dit voorbeeld is goed, maar het werkt elke afzonderlijke record bij - iets dat niet altijd wenselijk is!

Om specifieker te zijn, kunt u gebruiken “WAAR” clausules net als bij het doen van een select:

UPDATE people SET name = 'Joe', age = 101 WHERE name = 'James';

U kunt zelfs meerdere voorwaarden opgeven met “EN” en “OF”:

UPDATE mensen SET naam = 'Joe', leeftijd = 101 WHERE (naam = 'James' EN leeftijd = 100) OF naam = 'Ryan';

Merk op hoe de haakjes worden gebruikt om de voorwaarden te beperken.

9. Opstarten

upsert is een vreemd klinkend woord, maar het is een ongelooflijk nuttig commando. Stel dat u een beperking hebt voor uw tabel en dat u hebt opgegeven dat u alleen records met unieke namen wilt. U wilt bijvoorbeeld niet twee rijen met dezelfde naam opslaan. Als u meerdere waarden van 'Joe' probeerde in te voegen, zou uw database-engine een foutmelding geven en weigeren (tamelijk terecht). Met een UPSERT kunt u een record bijwerken als deze al bestaat. Dit is ongelooflijk handig! Zonder deze opdracht zou u veel logica moeten schrijven om eerst te controleren of er een record bestaat, invoegen als dit niet het geval is, anders de juiste primaire sleutel ophalen en vervolgens bijwerken.

Helaas worden upserts anders geïmplementeerd in verschillende databasemotoren. PostgreSQL heeft dit vermogen pas onlangs verworven, terwijl MySQL het al een tijdje heeft gehad. Hier is de MySQL-syntaxis ter referentie:

INVOEGEN IN mensen (naam, leeftijd) WAARDEN ('Joe', 101) OP DUPLICATE SLEUTEL UPDATE leeftijd = 101;

Merk op hoe dit in wezen een update en een invoeginstructie is, die kan worden samengevat als “update als insert mislukt.”

10. Verwijderen

Verwijder wordt gebruikt om records volledig te verwijderen - het kan behoorlijk schadelijk zijn als het wordt misbruikt! De basissyntaxis is heel gemakkelijk te gebruiken:

VERWIJDEREN VAN mensen;

Zoals de meeste andere commando's zal dit worden verwijderd alles! Je moet een waar gebruiken om het te beperken tot een iets meer gezond aantal rijen - idealiter één:

DELETE FROM people WHERE name = 'Joe';

Als u een een systeem aan het ontwikkelen bent, is het vaak verstandig om een “zachte verwijdering.” U voert nooit de opdracht delete uit, maar u maakt een verwijderde kolom en vinkt die kolom vervolgens aan in uw selecties - dit kan veel potentiële schaamte voorkomen als u snel en gemakkelijk zogenaamd verwijderde records kunt ophalen. Dit is echter geen vervanging voor goede back-ups.

11. Maak een tabel

De maak een tafel commando wordt gebruikt om tabellen te maken. Het is nog een heel eenvoudige:

CREËER TAFEL mensen (naam TEKST, leeftijd, INTEGER, PRIMAIRE SLEUTEL (naam));

Merk op hoe de kolomnamen en beperkingen tussen haakjes staan ​​en de kolommen een geschikt datatype krijgen. Er is een primaire sleutel opgegeven, zoals vereist bij elk goed databaseontwerp.

12. Verander tafel

De verander de tafel commando wordt gebruikt om de structuur van een tabel aan te passen. Dit is enigszins beperkt, omdat uw database u niet de mogelijkheid biedt om een ​​tabel te wijzigen als de bestaande gegevens een conflict veroorzaken, bijvoorbeeld het wijzigen van een tekenreeks in een geheel getal. Maak in die gevallen eerst de gegevens vast en pas vervolgens de tabel aan. Hier is een voorbeeld:

ALTER TABLE people ADD height integer;

In dit voorbeeld wordt een kolom toegevoegd met de naam “hoogte” van integer type voor de volkentabel. Er is niet echt een limiet aan wat je kunt veranderen.

13. Drop Table

Het laatste commando is drop-tafel. Zie dit als verwijderen, maar in plaats van het verwijderen van een enkele record, verwijdert het elk afzonderlijk record samen met de tabel! Hier is hoe je het gebruikt:

DALEN TAFEL mensen;

Het is een behoorlijk drastische opdracht en er is geen reden waarom het in je systeem moet worden geprogrammeerd. Het mag alleen in de overgrote meerderheid van de gevallen handmatig worden uitgevoerd en dat kan ook zo zijn heel vernietigend.

Dat is alles voor vandaag. Ik hoop dat je een paar handige trucs hebt geleerd! U kunt leren hoe u een website kunt maken. Hoe u een website kunt maken: voor beginners Hoe u een website kunt maken: voor beginners Vandaag zal ik u begeleiden bij het maken van een complete website vanaf nul. Maak je geen zorgen als dit moeilijk klinkt. Ik zal je er bij elke stap doorheen leiden. Lees Meer en gebruik vervolgens uw nieuwe vaardigheden om het dynamisch te maken - zorg ervoor dat u deze fouten niet maakt 9 Fouten die u niet zou moeten maken bij het opbouwen van een webpagina Page 9 Fouten die u niet zou moeten maken bij het bouwen van een webpagina Deze volgende HTML-codeerfouten zijn eenvoudig te maken, maar als u ze eerder in plaats van later afstuurt, zal uw pagina er beter uitzien, gemakkelijker te onderhouden zijn en functioneren zoals u dat wilt. Meer lezen of kwetsbaar voor SQL-injectie Wat is een SQL-injectie? [MakeUseOf Explains] Wat is een SQL-injectie? [MakeUseOf Explains] De wereld van internetbeveiliging wordt geplaagd door open poorten, achterdeurtjes, gaten in de beveiliging, Trojaanse paarden, wormen, kwetsbaarheden voor firewalls en een hele reeks andere problemen die ons dagelijks scherp houden. Voor privé-gebruikers, ... Lees meer. Als u niet zeker weet of u SQL moet leren, hebt u een statische-sitegenerator overwogen 7 Redenen om uw CMS te sloten en een statische sitegenerator te beschouwen 7 Redenen om uw CMS te sloten en een statische sitegenerator te overwegen Jarenlang, het publiceren van een website was moeilijk voor veel gebruikers. CMS's zoals WordPress veranderden dat, maar ze kunnen nog steeds verwarrend zijn. Een ander alternatief is een Static Site Generator. Lees verder ?

Waarom laat u geen commentaar achter met uw favoriete SQL-tips en -trucs?

Afbeeldingscredits: HYS_NP / Shutterstock

Meer informatie over: Programmeren, SQL.