13 belangrijkste SQL-commando's die elke programmeur moet weten

13 belangrijkste SQL-commando's die elke programmeur moet weten

Databases sturen het moderne web aan. Elke grote of dynamische website maakt op de een of andere manier gebruik van een database, en in combinatie met Gestructureerde Query Taal (SQL) , zijn de mogelijkheden om data te manipuleren echt eindeloos. Als u SQL al kent, zorg er dan voor dat u deze programmeervaardigheden uitcheckt die alle website-ontwikkelaars zouden moeten kennen.





Vandaag laat ik jullie een aantal van de kern SQL-opdrachten moet je als programmeur weten.





Er zijn veel namen voor gegevens die worden geretourneerd uit een databasetabel. Gegevens worden gewoonlijk aangeduid als: rijen , Records , of tupels . Ik zal deze termen in dit artikel door elkaar gebruiken.





Voorwoord

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

De hoogtes tabel bevat de naam en lengte van een persoon:



De personeel tabel bevat de naam en leeftijd van medewerkers -- precies hetzelfde als de klantentabel:

De finaletafel heet mensen bevat de naam en leeftijd van mensen, net als de klanten- en personeelstafels:





1. Selecteer

De selecteer instructie is de eenvoudigste, en het is essentieel dat u deze begrijpt, aangezien deze aan bijna alle andere opdrachten ten grondslag ligt. Het wordt als een best practice beschouwd om uw gereserveerde SQL-woorden in hoofdletters te schrijven, omdat het de opdracht gemakkelijker te lezen en te begrijpen maakt.

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





SELECT * FROM table;

Hier zijn twee delen aan verbonden. Het eerste deel ( KIES * ) geeft aan welke kolommen u wilt selecteren. Het sterretje geeft aan dat u alle kolommen in de tabel wilt selecteren. Het tweede gedeelte ( VAN tafel ) vertelt uw database-engine waar u deze gegevens vandaan wilt halen. Vervang 'tabel' door de naam van uw databasetabel.

Deze select staat bekend als 'select star'. Het gebruik van de asterisk is een goede manier om erachter te komen welke gegevens in een tabel staan, maar ik raad u niet aan om deze voor productiecode te gebruiken. Wanneer u een select star gebruikt, is het aan de database-engine om u de gewenste gegevens te presenteren. Je hebt geen controle over de volgorde waarin de gegevens worden geretourneerd, dus als iemand een nieuwe kolom aan de tabel toevoegt, kan het zijn dat je variabelen in je programmeertaal niet langer de juiste gegevens vertegenwoordigen. Gelukkig is er een oplossing.

U kunt zo expliciet aangeven welke kolommen u wilt ophalen:

SELECT age, name FROM people;

Deze query haalt de kolommen 'leeftijd' en 'naam' op uit de tabel 'personen'. Dit expliciet zijn kan een beetje vervelend zijn als je veel gegevens hebt, maar dit zal problemen in de toekomst verminderen en je SQL gemakkelijker te begrijpen maken voor toekomstige programmeurs.

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

SELECT age, '1234' FROM people;

Elke tekenreeks tussen enkele aanhalingstekens wordt geretourneerd in plaats van dat deze overeenkomt met een kolomnaam.

2. Waar?

Het select-commando is uitstekend voor het ophalen van gegevens, maar wat als u de resultaten wat 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 als monteur werken? Dit is waar de waar commando komt binnen. Hiermee kunt u voorwaarden toepassen op de select, en u voegt deze eenvoudig toe aan het einde van de instructie:

SELECT age, name FROM people WHERE age > 10;

Deze zoekopdracht is nu beperkt tot mensen die ouder zijn dan 10 jaar. U kunt meerdere voorwaarden combineren met de EN exploitant:

SELECT age, name FROM people WHERE age > 10 AND age <20;

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

computer start niet op zwart scherm

Een ander commando dat hierbij kan worden gebruikt is: OF . Hier is een voorbeeld:

SELECT age, name FROM people WHERE age > 10 OR name = 'Joe';

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

3. Bestellen

De volgorde opdracht wordt gebruikt om de geretourneerde resultaten te sorteren. Het is nog een makkelijke om te gebruiken. Voeg het gewoon toe aan het einde van uw verklaring:

SELECT name, age FROM people ORDER BY age DESC;

U moet de kolom en de volgorde opgeven, wat kan zijn: ASC voor oplopend of DESC voor afdalen. U kunt op meerdere kolommen als volgt bestellen:

SELECT name, age FROM people ORDER BY name ASC, age DESC

BESTEL DOOR is misschien wel het handigst in combinatie met andere commando's. Niet alle query's zullen gegevens op een logische of geordende manier retourneren - met deze opdracht kunt u dat veranderen.

4. Doe mee

De meedoen commando wordt gebruikt om meedoen gerelateerde gegevens opgeslagen in een of meer tabellen. Jij meedoen de tweede tabel naar de eerste tabel, en specificeer hoe de gegevens zijn verbonden. Hier is een eenvoudig voorbeeld:

hoe Windows 10 usb te laten installeren
SELECT age, name, height FROM people LEFT JOIN heights USING (name);

Er zijn hier een paar dingen aan de hand. U moet beginnen met de syntaxis 'LEFT JOIN', die aangeeft dat u een tabel wilt joinen met een join van het type left. Geef vervolgens de tafel op waaraan u wilt deelnemen (hoogtes). De GEBRUIK (naam) syntaxis stelt dat de kolom 'naam' in beide tabellen kan worden gevonden, en dat deze moet worden gebruikt als een sleutel om de tabellen samen te voegen.

Maakt u zich geen zorgen als uw kolommen in elke tabel verschillende namen hebben. U kunt 'AAN' gebruiken in plaats van 'GEBRUIK':

SELECT age, name, height FROM people LEFT JOIN heights ON (namea = nameb);

Het on-statement geeft expliciet aan op welke kolommen moet worden ingetoetst. Er zijn veel soorten joins, en het zou veel tijd kosten om voor elke join in detail te treden, dus hier is een korte samenvatting van het gebruik ervan:

  • (INNERLIJKE) DOE MEE -- Retourneert rijen met een overeenkomst in beide tabellen.
  • LINKS (BUITEN) AANSLUITEN -- Retourneert alle rijen uit de linkertabel, met eventuele overeenkomsten uit de rechtertabel. Als er geen overeenkomsten zijn, worden de records van de linkertabel nog steeds geretourneerd.
  • RECHTS (BUITEN) AANMELDEN -- Dit is het tegenovergestelde van een left join: alle rijen uit de rechtertabel worden geretourneerd, samen met eventuele overeenkomsten in de linkertabel.
  • VOLLEDIGE (BUITEN) DEELNEMING -- Retourneert alle records met een overeenkomst in beide tabellen.

De syntaxis 'INNER' of 'OUTER' is optioneel. Het kan dingen gemakkelijker te begrijpen maken, maar u hoeft het meestal niet te specificeren.

5. Aliassen

Nu je de basis kent, laten we eens kijken naar de alias opdracht. Dit wordt gebruikt om een ​​tabel tijdelijk te hernoemen -- meer een bijnaam dan wat dan ook, aangezien deze nieuwe naam alleen bestaat binnen de individuele transactie die u uitvoert. Zo gebruik je het:

SELECT A.age FROM people A;

Je kunt elke geldige naam gebruiken die je wilt, maar ik gebruik graag letters van het alfabet. Voor elke kolomnaam wordt de alias voorafgegaan. Deze alias wordt onmiddellijk nadat deze is gedeclareerd aan de tabel toegewezen. Dit is precies hetzelfde als dit doen:

SELECT people.age FROM people;

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

SELECT staff.age, staff.name, customers.age, customers.name FROM staff, customers;

En hier is dezelfde query met aliassen:

SELECT A.age, A.name, B.age, B.name FROM staff A, customers B;

De personeelstabel krijgt de alias 'A' en de klantentabel krijgt de alias 'B'. Aliasing-tabellen helpen echt om uw code gemakkelijker te begrijpen te maken en verminderen de hoeveelheid typen die u hoeft te doen.

Je kunt een kolom ook hernoemen met een alias met het 'AS'-commando:

SELECT age AS person_age FROM people;

Wanneer deze query wordt uitgevoerd, wordt de kolom nu 'person_age' genoemd in plaats van 'age'.

6. Unie

Unie is een geweldige opdracht. 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 aantal kolommen en dezelfde naam hebben. Zo gebruik je het:

SELECT age, name FROM customers
UNION
SELECT age, name FROM staff;

U kunt unie beschouwen als een manier om de resultaten van twee query's te combineren. Een unie geeft alleen resultaten als er een unieke rij tussen de twee query's staat. U kunt de syntaxis 'UNION ALL' gebruiken om alle gegevens te retourneren, ongeacht dubbele gegevens:

SELECT age, name FROM customers
UNION ALL
SELECT age, name FROM staff;

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

Een mogelijke use-case voor unie is een subtotaal: je zou een query van het somtotaal kunnen combineren met 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 ervan? Dit is waar de invoegen commando komt binnen. Hier is een voorbeeld:

INSERT INTO people(name, age) VALUES('Joe', 102);

U moet de tabelnaam (personen) en de kolommen die u wilt gebruiken (naam en leeftijd) opgeven. De syntaxis 'VALUES' wordt vervolgens gebruikt om de in te voegen waarden op te geven. Deze moeten in dezelfde volgorde staan ​​als de kolommen die eerder zijn opgegeven.

U kunt geen waar-clausule voor invoegingen opgeven en u moet ervoor zorgen dat u zich houdt aan alle noodzakelijke tabelbeperkingen die aanwezig zijn.

8. Bijwerken

Na het invoegen van enkele gegevens, is het niet meer dan normaal dat u specifieke rijen moet wijzigen. Hier is de update opdracht syntaxis:

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

U moet de tabel specificeren die u wilt wijzigen en vervolgens de 'SET'-syntaxis gebruiken om de kolommen en hun nieuwe waarden op te geven. Dit voorbeeld is goed, maar het zal elk record bijwerken -- iets dat niet altijd wenselijk is!

Om specifieker te zijn, kunt u 'WHERE'-clausules gebruiken, net als bij het selecteren:

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

U kunt zelfs meerdere voorwaarden opgeven met 'AND' en 'OF':

UPDATE people SET name = 'Joe', age = 101 WHERE (name = 'James' AND age = 100) OR name = 'Ryan';

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

moet programma's hebben voor Windows 10

9. Upsert

Oeps is een vreemd klinkend woord, maar het is een ongelooflijk nuttig commando. Stel dat u een beperking heeft op 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 je meerdere waarden van 'Joe' probeerde in te voegen, zou je database-engine een foutmelding geven en dit weigeren (terecht). Met een UPSERT kunt u een record bijwerken als het al bestaat. Dit is ongelooflijk handig! Zonder deze opdracht zou u veel logica moeten schrijven om eerst te controleren of een record bestaat, in te voegen als dat niet het geval is, anders de juiste primaire sleutel op te halen en vervolgens bij te werken.

Helaas worden upserts anders geïmplementeerd in verschillende database-engines. PostgreSQL heeft deze mogelijkheid pas onlangs gekregen, terwijl MySQL deze al een tijdje heeft. Hier is de MySQL-syntaxis ter referentie:

INSERT INTO people(name, age)
VALUES('Joe', 101)
ON DUPLICATE KEY UPDATE age = 101;

Merk op dat dit in wezen een update en een insert-instructie is, die kan worden samengevat als 'update if insert failed'.

10. Verwijderen

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

DELETE FROM people;

Net als de meeste andere opdrachten, wordt dit verwijderd alles ! U moet een plaats gebruiken om het te beperken tot een iets gezonder aantal rijen - idealiter één:

DELETE FROM people WHERE name = 'Joe';

Als je een systeem aan het ontwikkelen bent, is het vaak verstandig om een ​​'soft delete' te implementeren. U voert nooit het delete-commando uit, maar maakt eerder een verwijderde kolom en controleert die kolom vervolgens in uw selecties -- het kan veel potentiële schaamte voorkomen als u zogenaamd verwijderde records snel en gemakkelijk kunt ophalen. Dit is echter geen vervanging voor goede back-ups.

11. Tabel maken

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

CREATE TABLE people (
name TEXT,
age, INTEGER,
PRIMARY KEY(name)
);

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

12. Tabel wijzigen

De tabel wijzigen commando wordt gebruikt om de structuur van een tabel te wijzigen. Dit is enigszins beperkt, omdat uw database u niet toestaat een tabel te wijzigen als de bestaande gegevens een conflict zouden veroorzaken - bijvoorbeeld het veranderen van een tekenreeks in een geheel getal. In die gevallen corrigeert u eerst de gegevens en wijzigt u vervolgens de tabel. Hier is een voorbeeld:

ALTER TABLE people ADD height integer;

Dit voorbeeld voegt een kolom met de naam 'height' van het type integer toe aan de tabel People. Er is niet echt een limiet aan wat je kunt veranderen.

13. Tafel laten vallen

Het laatste commando is tafel laten vallen . Zie dit als verwijderen, maar in plaats van een enkele record te verwijderen, verwijdert het elke afzonderlijke record samen met de tabel! Zo gebruik je het:

DROP TABLE people;

Het is nogal een drastische opdracht en er is geen reden waarom het in uw systeem moet worden geprogrammeerd. Het zou in de overgrote meerderheid van de gevallen alleen handmatig moeten worden uitgevoerd, en het kan: heel destructief.

Dat is alles voor vandaag. Ik hoop dat je wat handige trucjes hebt geleerd! Je zou kunnen leren hoe je een website maken , en gebruik dan je nieuwe vaardigheden om het dynamisch te maken -- zorg er alleen voor dat je deze fouten niet maakt of het kwetsbaar maakt voor SQL - injectie . Als u niet zeker weet of u SQL moet leren, heeft u dan een statische sitegenerator overwogen?

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

Afbeeldingscredits: HYS_NP/Shutterstock

Deel Deel Tweeten E-mail Is het de moeite waard om te upgraden naar Windows 11?

Windows is opnieuw ontworpen. Maar is dat genoeg om u te overtuigen om over te stappen van Windows 10 naar Windows 11?

Lees volgende
Gerelateerde onderwerpen
  • Programmeren
  • Programmeren
  • SQL
Over de auteur Joe Coburn(136 gepubliceerde artikelen)

Joe is afgestudeerd in computerwetenschappen aan de Universiteit van Lincoln, VK. Hij is een professionele softwareontwikkelaar en als hij niet met drones vliegt of muziek schrijft, is hij vaak te vinden om foto's te maken of video's te maken.

Meer van Joe Coburn

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren