sql >> Database >  >> RDS >> Mysql

Wat is SQL? Wat is een databank? Relationele databasebeheersystemen (RDBMS) uitgelegd in gewoon Engels.

Databases kunnen lastig zijn om je hoofd rond te wikkelen. Ze zijn echter essentieel voor het programmeren van volledige stapels en het uitbouwen van back-endservices die gegevens opslaan.

In dit bericht zal ik SQL, databases en relationele databasebeheersystemen ontrafelen. Ik zal ook wat analogieën met de Tovenaarswereld gebruiken, waaronder Harry Potter zelf en enkele van de lessen die hij op Hogwarts volgt.

Voordat we ons verdiepen in de belangrijkste termen, laten we eerst definiëren wat een database zelf is:

Een database is een gestructureerde set gegevens die op een computer wordt bewaard, vooral een die op verschillende manieren toegankelijk is. Het is in wezen een georganiseerde verzameling gegevens op een computer, die elektronisch toegankelijk is vanaf een computersysteem.

Belangrijke voorwaarden

Hieronder staan ​​enkele belangrijke termen waarmee we beginnen:

  • RDMS: Relationele databasebeheersystemen. Dit raamwerk voor databases is de basis van MySQL.
  • SQL: Taal voor gestructureerde zoekopdrachten.
  • Tafels: Databaseobjecten die gegevens bevatten. Een voorbeeld van een tabelnaam is 'Leerlingen' of 'Leraren' of 'Cursussen'.
  • Velden: De waarden van een tabel worden velden genoemd. Voorbeeldvelden voor studenten zijn "Voornaam", "Achternaam" en "GPA".
  • Opname/rij: Een individuele vermelding in de tabel.

Na het toevoegen van docenten en cursussen aan de database, kunnen we tabellen hebben voor studenten, docenten en cursussen.

Naarmate we verder komen in de gids, zullen we alleen de Studenten . gebruiken voorbeeld hier als referentie. Als je het geluk had om te worden aangenomen als Software Engineer op Hogwarts, zou je database goed gebruik kunnen maken van enkele van deze commando's :D

SQL-statements

Syntaxis

De puntkomma is de standaardmanier om de ene SQL-instructie van de andere te scheiden. Hiermee kunnen meerdere SQL-instructies in dezelfde aanroep worden uitgevoerd. In deze handleiding hebben we een puntkomma aan het einde van elke verklaring.

De belangrijkste SQL-commando's

Maken :Maakt een nieuwe SQL-tabel.

Als we bijvoorbeeld de studentendatabase voor de Hogwarts School zouden maken, zouden we CREATE gebruiken om . te maken een tabel genaamd "Studenten".

  • Syntaxis
CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);
  • Voorbeeld
CREATE TABLE Students
                (first_name VARCHAR(255),
                last_name VARCHAR(255),
                login VARCHAR(255),
                age INTEGER,
                gpa REAL,
                house VARCHAR(255));

Laat vallen :verwijdert een tabel. Wees zeer voorzichtig bij het gebruik van deze opdracht, aangezien hierdoor alle gegevens in de tabel worden gewist!

Als we de hele studentendatabase willen verwijderen, gebruiken we DROP om die actie uit te voeren.

  • Syntaxis
DROP TABLE table_name;
  • Voorbeeld
DROP TABLE Students;

Invoegen :Voegt nieuwe rijen met gegevens toe aan een tabel.

We zouden INSERT . gebruiken om nieuwe studenten toe te voegen wanneer ze zich inschrijven voor Hogwarts.

  • Syntaxis
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
  • Voorbeeld
INSERT 
INTO Students(first_name, last_name, login, age, gpa, house)
VALUES 
('Harry',     'Potter', 'theboywholived', 15, 4.0, 'Gryffindor'),
('Hermionie', 'Granger','granger2',       15, 4.5, 'Gryffindor'),
('Ron',       'Weasley','weasley7',       15, 3.7, 'Gryffindor'),
('Draco',     'Malfoy', 'malfoy999',      15, 4.0, 'Slytherin'),
('Cedric',    'Diggory','diggory123',     15, 4.0, 'Hufflepuff');

Selecteer :Wordt gebruikt om gegevens in een database op te halen die in tabelindeling moeten worden geretourneerd.

Als we alle namen van studenten in Griffoendor House wilden ophalen, zouden we de SELECT gebruiken opdracht. Het onderstaande voorbeeld zoekt in de tabel Studenten naar de voornaam en achternaam van elke student in de database, wat voor ons slechts de vijf hierboven beschreven rijen zijn.

  • Syntaxis
SELECT column1, column2, ...
FROM table_name;
  • Voorbeeld
SELECT first_name, last_name FROM Students;
voornaam achternaam
Harry Potter
Hermelien Granger
Ron Wemel
Draco Malfidus
Cedric Diggery

Als alternatief, als we alle velden in de tabel willen selecteren, zou onze opdracht de "*"-syntaxis gebruiken, wat betekent dat alle velden moeten worden geselecteerd:

SELECT * FROM Students;
voornaam achternaam inloggen leeftijd gpa huis
Harry Potter theboywholived 15 4 Griffoendor
Hermelien Granger granger2 15 4.5 Griffoendor
Ron Wemel weasley7 15 3.7 Griffoendor
Draco Malfidus malfidus999 15 4 Zwadderich
Cedric Diggery diggory123 15 4 Huffelpuf

Clauses

Een clausule is een logisch deel van een SQL-instructie en het is (in theorie) een optioneel veld.

In de bovenstaande verklaring hebben we eenvoudig alle velden in de studentendatabase geretourneerd. We hebben geen voorwaarde opgegeven voor de waarden die worden geretourneerd.

Wat als we niet alle studenten wilden ondervragen, maar alleen degenen wiens huis Griffoendor is? Hoe zit het met het ondervragen van studenten wiens voornaam begint met "H", of studenten in Huffelpuf en Zwadderich? Deze meer complexe gevallen worden opgelost door SQL-clausules.

Hieronder vindt u een overzicht van de meest voorkomende clausules, maar er zijn nog meer clausules in de SQL-taal. Hier is een goed algemeen overzicht als je wat meer info wilt.

Voorbeelden van Clausules

Waar: Wordt gebruikt om een ​​voorwaarde aan te geven tijdens het ophalen van gegevens uit een database. Als we teruggaan naar het voorbeeld met Select, zouden we WHERE . moeten gebruiken om het huis te specificeren als Griffoendor.

  • Syntaxis
SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • Voorbeeld
SELECT * FROM Students
WHERE house='Gryffindor';
voornaam achternaam inloggen leeftijd gpa huis
Harry Potter theboywholived 15 4 Griffoendor
Hermelien Granger granger2 15 4.5 Griffoendor
Ron Wemel weasley7 15 3.7 Griffoendor

En Wordt gebruikt om meerdere clausules in een SQL-instructie te combineren, waarbij alle voorwaarden, gescheiden door de AND, waar zijn. We zouden AND gebruiken om Griffoendor-studenten te krijgen die een GPA van meer dan 3,8 hebben.

  • Syntaxis
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
  • Voorbeeld
SELECT * FROM Students
WHERE house='Gryffindor' AND gpa>3.8;
voornaam achternaam inloggen leeftijd gpa huis
Harry Potter theboywholived 15 4 Griffoendor
Hermelien Granger granger2 15 4.5 Griffoendor

Of :Gelijk aan AND, maar retourneert alleen gegevens waarin slechts EEN van de voorwaarden, gescheiden door de OR, waar is. Als we studenten in Huffelpuf en Zwadderich wilden ophalen, maar niet beide, zouden we het OR-commando gebruiken.

  • Syntaxis
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
  • Voorbeeld
SELECT * FROM Students
WHERE house='Slytherin' OR house='Hufflepuff';
voornaam achternaam inloggen leeftijd gpa huis
Draco Malfidus malfidus999 15 4 Zwadderich
Cedric Diggery diggory123 15 4 Huffelpuf

Vind ik leuk: Gebruikt met WHERE om naar een specifiek patroon te zoeken. Als we alleen de voor- en achternaam van tovenaars/heksen willen met namen die beginnen met "H", kunnen we het Like-commando gebruiken.

  • Syntaxis
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
  • Voorbeeld
SELECT first_name, last_name FROM Students
WHERE first_name LIKE 'H%';
voornaam achternaam
Harry Potter
Hermelien Granger

Aantal: Wordt gebruikt om het aantal van een kolom (of kolommen) in een tabel te vinden.

  • Syntaxis
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
  • Voorbeeld
SELECT COUNT(first_name) FROM Students;
COUNT(first_name)
5

Twee andere opdrachten die dezelfde syntaxis gebruiken, zijn AVG en SUM. AVG berekent het gemiddelde van alle waarden en som berekent de som van alle waarden.

Selecteer limiet: Wordt gebruikt om reacties af te snijden tot slechts een bepaald bedrag. De manier waarop de beste antwoorden worden gekozen, is in de volgorde waarin ze als eerste in de database zijn ingevoerd, chronologisch.

  • Syntaxis
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
  • Voorbeeld
SELECT * FROM Students LIMIT 3;
voornaam achternaam inloggen leeftijd gpa huis
Harry Potter theboywholived 15 4 Griffoendor
Hermelien Granger granger2 15 4.5 Griffoendor
Ron Wemel weasley7 15 3.7 Griffoendor

Andere nuttige commando's

Bestel op: Sorteert de resultaten in oplopende of aflopende volgorde.

  • Syntaxis
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
  • Voorbeeld
SELECT * FROM Students ORDER BY first_name;
voornaam achternaam inloggen leeftijd gpa huis
Cedric Diggery diggory123 15 4 Huffelpuf
Draco Malfidus malfidus999 15 4 Zwadderich
Harry Potter theboywholived 15 4 Griffoendor
Hermelien Granger granger2 15 4.5 Griffoendor
Ron Wemel weasley7 15 3.7 Griffoendor

Groeperen op: Groepeert categorieën met dezelfde waarden in rijen. Als je het aantal studenten in elk huis wilt weten (bijvoorbeeld in Griffoendor), kun je het commando Groeperen op gebruiken.

  • Syntaxis
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);
  • Voorbeeld
SELECT COUNT(first_name), house FROM Students GROUP BY house;
COUNT(first_name) huis
3 Griffoendor
1 Huffelpuf
1 Zwadderich

Eindelijk, hier is een DB Fiddle die alle bovenstaande commando's in actie laat zien!

Genormaliseerde versus gedenormaliseerde databases

Bij het ontwerpen van een database zijn er twee hoofdontwerppatronen die u kunt volgen, elk met hun eigen afwegingen.

Genormaliseerd: Optimaliseert voor het minimaliseren van redundantie, niet voor leestijd.

Laten we zeggen dat we een cursustabel hebben met een docenten-ID voor de docent die die cursus geeft. We hebben ook een lerarendatabase met de naam van de leraar.

Als we namen willen krijgen van docenten die een bepaalde cursus geven, moeten we zowel de Cursussen als de Docenten-tabellen doorzoeken omdat de cursustabel niet de naam van de docent heeft (efficiënt maar overbodig).

Gedenormaliseerd: Optimaliseert voor leestijd , niet om redundantie te minimaliseren.

Laten we zeggen dat we een cursustabel hebben met een leraar-ID EN een leraarnaam. We hebben een lerarendatabase die ook de naam van de leraar heeft. Als we namen van docenten in de cursus willen krijgen, kunnen we gewoon de cursustabel gebruiken (redundant maar efficiënt).

Gegevensintegriteit

Het is van vitaal belang voor gebruikers dat de gegevens waarmee ze communiceren veilig, correct en verstandig zijn. Voorbeelden zijn ervoor zorgen dat leeftijd geen negatief getal is, of dat geen twee studenten dezelfde informatie hebben. We noemen dit gegevensintegriteit.

Gegevensintegriteit kent verschillende vormen en kan worden onderverdeeld in vier categorieën:

  • Integriteit entiteit :Er zijn geen dubbele rijen in een tabel. We kunnen Ron Wemel bijvoorbeeld niet twee keer in de database invoegen.
  • Domeinintegriteit :Beperking van het type waarden dat men kan invoegen om correcte waarden af ​​te dwingen. Een huis kan bijvoorbeeld alleen Griffoendor, Ravenklauw, Zwadderich of Huffelpuf zijn.
  • Referentiële integriteit :Records die door andere records worden gebruikt, kunnen niet worden verwijderd. Een docent kan niet worden verwijderd als deze momenteel een cursus geeft.
  • Door de gebruiker gedefinieerde integriteit: Een "overige" categorie die bestaat uit bedrijfsgerelateerde logica en regels voor de database.

Algemene SQL-databases

  • Oracle :Zeer stabiel en volwassen, maar kan kostbaar zijn
  • MySQL :Lichtgewicht en snel op te zetten, maar niet zo volwassen als Oracle
  • PostgreSQL :Goed voor bepaalde gebruikssituaties, maar niet supersnel

Bronnen

  • SWEPrep - Sollicitatievragen rechtstreeks in je inbox
  • SQL en databases van freeCodeCamp
  • Code opschonen
  • Effectieve Java
  • Oracle-documentatie
  • MySql-documentatie
  • PostgreSQL-documentatie

Up-to-date blijven

  • Reddit-threads :Geweldige discussies over databases, SQL en nieuwe technologieën
  • Hackernieuws: Echt een geweldige bron om op de hoogte te blijven van de nieuwste ontwikkelingen in de technische industrie
  • CodePen: Een uitstekende bron voor het ontdekken van goede SQL-praktijken.


  1. Databasetabellen maken met SQL

  2. Alles wat u moet weten over SQL Server JOINS

  3. Hoe de totale omzet per maand berekenen in MySQL?

  4. Gegevens invoegen in de Oracle-database met behulp van php