Datenbanken können schwierig zu verstehen sein. Sie sind jedoch für die Full-Stack-Programmierung und den Aufbau von Back-End-Diensten, die Daten speichern, unerlässlich.
In diesem Beitrag entmystifiziere ich SQL, Datenbanken und relationale Datenbankverwaltungssysteme. Ich werde auch einige Analogien zur Zaubererwelt verwenden, darunter Harry Potter selbst und einige der Kurse, die er in Hogwarts belegt.
Bevor wir in Schlüsselbegriffe eintauchen, wollen wir definieren, was eine Datenbank selbst ist:
EineDatenbank ist ein strukturierter Datensatz, der in einem Computer gespeichert ist, insbesondere einer, der auf verschiedene Weise zugänglich ist. Es handelt sich im Wesentlichen um einen organisierten Datensatz auf einem Computer, auf den von einem Computersystem aus elektronisch zugegriffen werden kann.
Schlüsselbegriffe
Im Folgenden finden Sie einige Schlüsselbegriffe, mit denen wir beginnen:
- RDMS: Relationale Datenbankverwaltungssysteme. Dieses Framework für Datenbanken ist die Basis von MySQL.
- SQL: Strukturierte Abfragesprache.
- Tabellen: Datenbankobjekte, die Daten transportieren. Ein Beispiel für einen Tabellennamen ist "Students" oder "Teachers" oder "Courses".
- Felder: Die Werte einer Tabelle werden als Felder bezeichnet. Beispielfelder für Studenten wären "Vorname", "Nachname" und "GPA".
- Eintrag/Zeile: Ein einzelner Eintrag in der Tabelle.
Nach dem Hinzufügen von Lehrern und Kursen zur Datenbank können wir Tabellen für Schüler, Lehrer und Kurse haben.
Im weiteren Verlauf des Leitfadens werden wir nur noch die Studenten verwenden Beispiel hier als Referenz. Wenn Sie das Glück hatten, als Software Engineer in Hogwarts eingestellt zu werden, könnte Ihre Datenbank einige dieser Befehle gut gebrauchen :D
SQL-Anweisungen
Syntax
Das Semikolon ist die Standardmethode, um eine SQL-Anweisung von einer anderen zu trennen. Es ermöglicht die Ausführung mehrerer SQL-Anweisungen im selben Aufruf. In dieser Anleitung haben wir am Ende jeder Anweisung ein Semikolon.
Die wichtigsten SQL-Befehle
Erstellen :Erstellt eine neue SQL-Tabelle.
Wenn wir beispielsweise die Schülerdatenbank für die Hogwarts-Schule erstellen würden, würden wir CREATE verwenden zu machen eine Tabelle namens "Studenten".
- Syntax
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
....
);
- Beispiel
CREATE TABLE Students
(first_name VARCHAR(255),
last_name VARCHAR(255),
login VARCHAR(255),
age INTEGER,
gpa REAL,
house VARCHAR(255));
Ablegen :Löscht eine Tabelle. Seien Sie sehr vorsichtig, wenn Sie diesen Befehl verwenden, da dies alle Daten in der Tabelle löscht!
Wenn wir die gesamte Schülerdatenbank löschen möchten, verwenden wir DROP um diese Aktion auszuführen.
- Syntax
DROP TABLE table_name;
- Beispiel
DROP TABLE Students;
Einfügen :Fügt einer Tabelle neue Datenzeilen hinzu.
Wir würden INSERT verwenden um neue Schüler hinzuzufügen, wenn sie sich in Hogwarts einschreiben.
- Syntax
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
- Beispiel
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');
Auswählen :Wird verwendet, um Daten in einer Datenbank abzurufen, die im Tabellenformat zurückgegeben werden sollen.
Wenn wir alle Namen von Schülern im Gryffindor-Haus abrufen möchten, würden wir SELECT verwenden Befehl. Das folgende Beispiel fragt die Tabelle Students nach dem Vornamen und Nachnamen jedes Studenten in der Datenbank ab, was für uns nur die fünf oben beschriebenen Zeilen sind.
- Syntax
SELECT column1, column2, ...
FROM table_name;
- Beispiel
SELECT first_name, last_name FROM Students;
Vorname | Nachname |
---|---|
Harry | Potter |
Hermine | Granger |
Ron | Weasley |
Draco | Malfoy |
Cedrik | Diggory |
Wenn wir alternativ alle Felder in der Tabelle auswählen möchten, würde unser Befehl die "*"-Syntax verwenden, was bedeutet, dass alle Felder ausgewählt werden:
SELECT * FROM Students;
Vorname | Nachname | anmelden | Alter | gpa | Haus |
---|---|---|---|---|---|
Harry | Potter | der Junge, der lebte | 15 | 4 | Gryffindor |
Hermine | Granger | granger2 | 15 | 4.5 | Gryffindor |
Ron | Weasley | weasley7 | 15 | 3.7 | Gryffindor |
Draco | Malfoy | malfoy999 | 15 | 4 | Slytherins |
Cedrik | Diggory | diggory123 | 15 | 4 | Hufflepuff |
Klauseln
Eine Klausel ist ein logischer Teil einer SQL-Anweisung und (theoretisch) ein optionales Feld.
In der obigen Anweisung haben wir einfach alle Felder in der Student-Datenbank zurückgegeben. Wir haben keine Bedingung für die zurückgegebenen Werte angegeben.
Was wäre, wenn wir nicht alle Schüler abfragen wollten, sondern nur diejenigen, deren Haus Gryffindor ist? Was ist mit der Abfrage von Schülern, deren Vorname mit "H" beginnt, oder von Schülern in Hufflepuff und Slytherin? Diese komplexeren Fälle werden durch SQL-Klauseln gelöst.
Unten finden Sie eine Übersicht über die gebräuchlichsten Klauseln, aber es gibt mehrere weitere Klauseln in der SQL-Sprache. Hier ist eine gute allgemeine Übersicht, wenn Sie weitere Informationen wünschen.
Beispiele für Klauseln
Wo: Wird verwendet, um eine Bedingung beim Abrufen von Daten aus einer Datenbank anzugeben. Um auf das Beispiel mit Select zurückzukommen, müssten wir WHERE verwenden um das Haus als Gryffindor zu spezifizieren.
- Syntax
SELECT column1, column2, ...
FROM table_name
WHERE condition;
- Beispiel
SELECT * FROM Students
WHERE house='Gryffindor';
Vorname | Nachname | anmelden | Alter | gpa | Haus |
---|---|---|---|---|---|
Harry | Potter | der Junge, der lebte | 15 | 4 | Gryffindor |
Hermine | Granger | granger2 | 15 | 4.5 | Gryffindor |
Ron | Weasley | weasley7 | 15 | 3.7 | Gryffindor |
Und Wird verwendet, um mehrere Klauseln in einer SQL-Anweisung zu kombinieren, wobei alle durch AND getrennten Bedingungen wahr sind. Wir würden AND verwenden, um Gryffindor-Schüler mit einem Notendurchschnitt von über 3,8 zu erhalten.
- Syntax
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
- Beispiel
SELECT * FROM Students
WHERE house='Gryffindor' AND gpa>3.8;
Vorname | Nachname | anmelden | Alter | gpa | Haus |
---|---|---|---|---|---|
Harry | Potter | der Junge, der lebte | 15 | 4 | Gryffindor |
Hermine | Granger | granger2 | 15 | 4.5 | Gryffindor |
Oder :Ähnlich wie AND, gibt aber nur Daten zurück, bei denen nur EINE der durch OR getrennten Bedingungen wahr ist. Wenn wir Schüler in Hufflepuff und Slytherin abrufen wollten, aber nicht in beiden, würden wir den OR-Befehl verwenden.
- Syntax
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
- Beispiel
SELECT * FROM Students
WHERE house='Slytherin' OR house='Hufflepuff';
Vorname | Nachname | anmelden | Alter | gpa | Haus |
---|---|---|---|---|---|
Draco | Malfoy | malfoy999 | 15 | 4 | Slytherins |
Cedrik | Diggory | diggory123 | 15 | 4 | Hufflepuff |
Gefällt mir: Wird zusammen mit WHERE verwendet, um nach einem bestimmten Muster zu suchen. Wenn wir nur den Vor- und Nachnamen von Zauberern/Hexen wollen, deren Namen mit "H" beginnen, könnten wir den Like-Befehl verwenden.
- Syntax
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
- Beispiel
SELECT first_name, last_name FROM Students
WHERE first_name LIKE 'H%';
Vorname | Nachname |
---|---|
Harry | Potter |
Hermine | Granger |
Anzahl: Wird verwendet, um die Anzahl einer Spalte (oder Spalten) in einer Tabelle zu ermitteln.
- Syntax
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
- Beispiel
SELECT COUNT(first_name) FROM Students;
COUNT(Vorname) |
---|
5 |
Zwei weitere Befehle, die dieselbe Syntax verwenden, sind AVG und SUM. AVG berechnet den Durchschnitt aller Werte und sum berechnet die Summe aller Werte.
Limit auswählen: Wird verwendet, um Antworten auf einen bestimmten Betrag zu kürzen. Die Top-Antworten werden in der Reihenfolge ausgewählt, in der sie zuerst chronologisch in die Datenbank eingefügt werden.
- Syntax
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
- Beispiel
SELECT * FROM Students LIMIT 3;
Vorname | Nachname | anmelden | Alter | gpa | Haus |
---|---|---|---|---|---|
Harry | Potter | der Junge, der lebte | 15 | 4 | Gryffindor |
Hermine | Granger | granger2 | 15 | 4.5 | Gryffindor |
Ron | Weasley | weasley7 | 15 | 3.7 | Gryffindor |
Weitere nützliche Befehle
Ordnen nach: Sortiert die Ergebnisse in aufsteigender oder absteigender Reihenfolge.
- Syntax
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
- Beispiel
SELECT * FROM Students ORDER BY first_name;
Vorname | Nachname | anmelden | Alter | gpa | Haus |
---|---|---|---|---|---|
Cedrik | Diggory | diggory123 | 15 | 4 | Hufflepuff |
Draco | Malfoy | malfoy999 | 15 | 4 | Slytherins |
Harry | Potter | der Junge, der lebte | 15 | 4 | Gryffindor |
Hermine | Granger | granger2 | 15 | 4.5 | Gryffindor |
Ron | Weasley | weasley7 | 15 | 3.7 | Gryffindor |
Gruppieren nach: Gruppiert Kategorien mit denselben Werten in Zeilen. Wenn Sie die Anzahl der Schüler in jedem Haus wissen möchten (z. B. 3 in Gryffindor), können Sie den Befehl „Gruppieren nach“ verwenden.
- Syntax
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);
- Beispiel
SELECT COUNT(first_name), house FROM Students GROUP BY house;
COUNT(Vorname) | Haus |
---|---|
3 | Gryffindor |
1 | Hufflepuff |
1 | Slytherins |
Schließlich ist hier eine DB-Fiddle, die alle oben genannten Befehle in Aktion zeigt!
Normalisierte vs. denormalisierte Datenbanken
Beim Entwerfen einer Datenbank gibt es zwei Hauptentwurfsmuster, denen Sie folgen können, jedes mit seinen eigenen Kompromissen.
Normalisiert: Optimiert für Redundanzminimierung nicht für Lesezeit.
Angenommen, wir haben eine Kurstabelle mit einer Lehrer-ID für den Lehrer, der diesen Kurs unterrichtet. Wir haben auch eine Lehrerdatenbank, die den Namen des Lehrers enthält.
Wenn wir Namen von Lehrern erhalten möchten, die einen bestimmten Kurs unterrichten, müssen wir sowohl die Courses- als auch die Teachers-Tabelle abfragen, da die Kurstabelle nicht den Lehrernamen enthält (effizient, aber redundant).
Denormalisiert: Optimiert für Lesezeit , nicht zur Redundanzminimierung.
Angenommen, wir haben eine Kurstabelle mit einer Lehrer-ID UND einem Lehrernamen. Wir haben eine Lehrerdatenbank, die auch den Namen des Lehrers enthält. Wenn wir die Namen der Lehrer im Kurs erhalten möchten, können wir einfach die Kurstabelle verwenden (redundant, aber effizient).
Datenintegrität
Für Benutzer ist es wichtig, dass die Daten, mit denen sie interagieren, sicher, korrekt und vernünftig sind. Stellen Sie beispielsweise sicher, dass das Alter keine negative Zahl ist oder dass keine zwei Schüler die gleichen Informationen haben. Wir bezeichnen dies als Datenintegrität.
Die Datenintegrität nimmt mehrere Formen an und kann in vier Kategorien unterteilt werden:
- Einheitsintegrität :In einer Tabelle sind keine doppelten Zeilen vorhanden. Beispielsweise können wir Ron Weasley nicht zweimal in die Datenbank einfügen.
- Domänenintegrität :Einschränken der Art von Werten, die man einfügen kann, um korrekte Werte zu erzwingen. Ein Haus kann beispielsweise nur Gryffindor, Ravenclaw, Slytherin oder Hufflepuff sein.
- Referentielle Integrität :Datensätze, die von anderen Datensätzen verwendet werden, können nicht gelöscht werden. Ein Lehrer kann nicht gelöscht werden, wenn er gerade einen Kurs unterrichtet.
- Benutzerdefinierte Integrität: Eine "andere" Kategorie, die aus geschäftsbezogener Logik und Regeln für die Datenbank besteht.
Gemeinsame SQL-Datenbanken
- Oracle :Sehr stabil und ausgereift, kann aber teuer werden
- MySQL :Leicht und schnell einzurichten, aber nicht so ausgereift wie Oracle
- PostgreSQL :Gut für bestimmte Anwendungsfälle, aber nicht superschnell
Ressourcen
- SWEPrep - Interviewfragen direkt in Ihren Posteingang
- SQL und Datenbanken von freeCodeCamp
- Clean-Code
- Effizientes Java
- Oracle-Dokumentation
- MySql-Dokumentation
- PostgreSQL-Dokumentation
Auf dem Laufenden bleiben
- Reddit-Threads :Tolle Threads zu Datenbanken, SQL und neuen Technologien
- Hacker-News: Wirklich großartige Ressource, um über die neuesten Entwicklungen in der Technologiebranche auf dem Laufenden zu bleiben
- CodePen: Eine ausgezeichnete Ressource, um bewährte SQL-Praktiken zu entdecken.