Die besten SQL-Datenbank-Tutorials

SQL steht für Structured Query Language. Es ist das am häufigsten verwendete Tool zum Bearbeiten und Verwalten von Daten in einer relationalen Datenbank (häufig als „SQL-Datenbank“ bezeichnet).

SQL wird allgemein als "Fortsetzung" ausgesprochen. Die beliebtesten Varianten sind MySQL, PostgreSQL und SQLite - eine Version von SQL, die üblicherweise für das Prototyping verwendet wird. Es wurde das Konzept eingeführt, mit SQL-Abfragen mit einem einzigen Befehl auf viele Datensätze zuzugreifen.

Wir empfehlen, mit dem 4-stündigen SQL-Datenbank-Tutorial von freeCodeCamp zu beginnen.

Wir empfehlen auch den Harvard CS50-Kurs zu Datenbanken und SQL.

Und wenn Sie Lust dazu haben, finden Sie hier ein 9-stündiges Tutorial zum relationalen Datenbankdesign, damit Sie Ihr eigenes RDBMS-System mit SQL erstellen können.

Einige häufig verwendete SQL-Anweisungen und Abfragen

Die SQL Select-Anweisung

Select- und From-Klauseln

Der SELECT-Teil einer Abfrage dient normalerweise dazu, zu bestimmen, welche Spalten der Daten in den Ergebnissen angezeigt werden sollen. Es gibt auch Optionen, die Sie anwenden können, um Daten anzuzeigen, die keine Tabellenspalte sind.

Dieses Beispiel zeigt drei Spalten, die aus der Tabelle "Schüler" ausgewählt wurden, und eine berechnete Spalte. In der Datenbank werden die studentID, der Vorname und der Nachname des Schülers gespeichert. Wir können die Spalten Vorname und Nachname kombinieren, um die berechnete Spalte FullName zu erstellen.

select studentID, FirstName, LastName, FirstName + ' ' + LastName as FullName from student;
+-----------+-------------------+------------+------------------------+ | studentID | FirstName | LastName | FullName | +-----------+-------------------+------------+------------------------+ | 1 | Monique | Davis | Monique Davis | | 2 | Teri | Gutierrez | Teri Gutierrez | | 3 | Spencer | Pautier | Spencer Pautier | | 4 | Louis | Ramsey | Louis Ramsey | | 5 | Alvin | Greene | Alvin Greene | | 6 | Sophie | Freeman | Sophie Freeman | | 7 | Edgar Frank "Ted" | Codd | Edgar Frank "Ted" Codd | | 8 | Donald D. | Chamberlin | Donald D. Chamberlin | | 9 | Raymond F. | Boyce | Raymond F. Boyce | +-----------+-------------------+------------+------------------------+ 9 rows in set (0.00 sec)

Die CHECK-Einschränkung wird verwendet, um den Wertebereich zu begrenzen, der in einer Spalte platziert werden kann.

Wenn Sie eine CHECK-Einschränkung für eine einzelne Spalte definieren, werden nur bestimmte Werte für diese Spalte zugelassen.

Wenn Sie eine CHECK-Einschränkung für eine Tabelle definieren, können die Werte in bestimmten Spalten basierend auf den Werten in anderen Spalten in der Zeile begrenzt werden.

SQL CHECK on CREATE TABLE

Die folgende SQL erstellt eine CHECK-Einschränkung für die Spalte "Alter", wenn die Tabelle "Personen" erstellt wird. Die CHECK-Einschränkung stellt sicher, dass Sie keine Person unter 18 Jahren haben können:

MySQL:

CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, CHECK (Age>=18) );

SQL Server / Oracle / MS Access:

CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int CHECK (Age>=18) );

Verwenden Sie die folgende SQL-Syntax, um die Benennung einer CHECK-Einschränkung zu ermöglichen und eine CHECK-Einschränkung für mehrere Spalten zu definieren:

MySQL / SQL Server / Oracle / MS-Zugriff:

CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, City varchar(255), CONSTRAINT CHK_Person CHECK (Age>=18 AND City="Sandnes") );

SQL CHECK auf ALTER TABLE

Verwenden Sie die folgende SQL, um eine CHECK-Einschränkung für die Spalte "Alter" zu erstellen, wenn die Tabelle bereits erstellt wurde:

MySQL / SQL Server / Oracle / MS-Zugriff:

ALTER TABLE Persons ADD CHECK (Age>=18);

Verwenden Sie die folgende SQL-Syntax, um die Benennung einer CHECK-Einschränkung zu ermöglichen und eine CHECK-Einschränkung für mehrere Spalten zu definieren:

MySQL / SQL Server / Oracle / MS-Zugriff:

ALTER TABLE Persons ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City="Sandnes");

DROP a CHECK Constraint

Verwenden Sie die folgende SQL, um eine CHECK-Einschränkung zu löschen:

SQL Server / Oracle / MS Access:

ALTER TABLE Persons DROP CONSTRAINT CHK_PersonAge;

MySQL:

ALTER TABLE Persons DROP CHECK CHK_PersonAge; 

SQL Where-Klausel

WHEREKlausel (und / oder, IN, BETWEEN, und LIKE)

Die WHEREKlausel wird verwendet, um die Anzahl der zurückgegebenen Zeilen zu begrenzen.

In diesem Fall werden alle fünf verwendet, was eine etwas lächerliche WHEREKlausel ist.

Hier ist die aktuelle vollständige Schülerliste zum Vergleich mit der WHEREKlausel-Ergebnismenge:

select studentID, FullName, sat_score, rcd_updated from student;
+-----------+------------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+------------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 3 | Spencer Pautier | 1000 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 6 | Sophie Freeman | 1200 | 2017-08-16 15:34:50 | | 7 | Edgar Frank "Ted" Codd | 2400 | 2017-08-16 15:35:33 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | | 9 | Raymond F. Boyce | 2400 | 2017-08-16 15:35:33 | +-----------+------------------------+-----------+---------------------+ 9 rows in set (0.00 sec)

Es werden Zeilen präsentiert, die…

  • WHERE Studentenausweise liegen zwischen 1 und 5 (einschließlich)
  • OR studentID = 8

Hier ist eine aktualisierte Abfrage, bei der Datensätze mit einem SAT-Wert in dieser Liste (1000, 1400) nicht angezeigt werden:

select studentID, FullName, sat_score, recordUpdated from student where (studentID between 1 and 5 or studentID = 8) and sat_score NOT in (1000, 1400);
+-----------+----------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+----------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | +-----------+----------------------+-----------+---------------------+ 5 rows in set (0.00 sec)

* Wie bei all diesen SQL-Dingen steckt VIEL MEHR dahinter als in diesem Einführungshandbuch.

Ich hoffe, das gibt Ihnen zumindest genug, um loszulegen.

Bitte lesen Sie das Handbuch für Ihren Datenbankmanager und haben Sie Spaß daran, verschiedene Optionen selbst auszuprobieren.

SQL Update-Anweisung

Um einen Datensatz in einer Tabelle zu aktualisieren, verwenden Sie die UPDATEAnweisung.

Achtung. Sie können alle Datensätze der Tabelle oder nur einige wenige aktualisieren. Verwenden Sie die WHEREBedingung, um anzugeben, welche Datensätze Sie aktualisieren möchten. Es ist möglich, eine oder mehrere Spalten gleichzeitig zu aktualisieren. Die Syntax lautet:

UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;

Hier ist ein Beispiel für die Aktualisierung des Namens des Datensatzes mit der ID 4:

UPDATE Person SET Name = “Elton John” WHERE Id = 4;

Sie können Spalten in einer Tabelle auch aktualisieren, indem Sie Werte aus anderen Tabellen verwenden. Verwenden Sie die JOINKlausel, um Daten aus mehreren Tabellen abzurufen. Die Syntax lautet:

UPDATE table_name1 SET table_name1.column1 = table_name2.columnA table_name1.column2 = table_name2.columnB FROM table_name1 JOIN table_name2 ON table_name1.ForeignKey = table_name2.Key

Hier ist ein Beispiel für die Aktualisierung des Managers aller Datensätze:

UPDATE Person SET Person.Manager = Department.Manager FROM Person JOIN Department ON Person.DepartmentID = Department.ID

Was eine Update-Abfrage kann

Eine Aktualisierungsabfrage gibt dem DBA- oder SQL-verwendenden Programmierer die Möglichkeit, viele Datensätze mit einem Befehl zu aktualisieren.

Wichtiger Sicherheitstipp! Haben Sie immer eine Sicherungskopie von dem, was Sie ändern möchten, bevor Sie es ändern!

Dieser Abschnitt wird:

  • Fügen Sie der Schülertabelle ein neues Feld hinzu
  • Testen Sie die Logik, um dieses Feld mit einer von der Schule zugewiesenen E-Mail-Adresse zu aktualisieren
  • update the new field.

Here is the student table as we start this process:

SELECT * FROM student;
+-----------+------------------------+-----------+------------------+---------------------+---------------------+ | studentID | FullName | sat_score | programOfStudy | rcd_Created | rcd_Updated | +-----------+------------------------+-----------+------------------+---------------------+---------------------+ | 1 | Monique Davis | 400 | Literature | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | Programming | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 | | 3 | Spencer Pautier | 1000 | Programming | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | Programming | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | Programming | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 | | 6 | Sophie Freeman | 1200 | Programming | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 | | 7 | Edgar Frank "Ted" Codd | 2400 | Computer Science | 2017-08-16 15:35:33 | 2017-08-16 15:35:33 | | 8 | Donald D. Chamberlin | 2400 | Computer Science | 2017-08-16 15:35:33 | 2017-08-16 15:35:33 | | 9 | Raymond F. Boyce | 2400 | Computer Science | 2017-08-16 15:35:33 | 2017-08-16 15:35:33 | +-----------+------------------------+-----------+------------------+---------------------+---------------------+ 9 rows in set (0.00 sec)

Alter the table and add a new field

 ALTER TABLE `fcc_sql_guides_database`.`student` ADD COLUMN `schoolEmailAdr` VARCHAR(125) NULL AFTER `programOfStudy`;

The student table after the alter is executed.

mysql> SELECT FullName, sat_score, programOfStudy, schoolEmailAdr FROM student; +------------------------+-----------+------------------+----------------+ | FullName | sat_score | programOfStudy | schoolEmailAdr | +------------------------+-----------+------------------+----------------+ | Monique Davis | 400 | Literature | NULL | | Teri Gutierrez | 800 | Programming | NULL | | Spencer Pautier | 1000 | Programming | NULL | | Louis Ramsey | 1200 | Programming | NULL | | Alvin Greene | 1200 | Programming | NULL | | Sophie Freeman | 1200 | Programming | NULL | | Edgar Frank "Ted" Codd | 2400 | Computer Science | NULL | | Donald D. Chamberlin | 2400 | Computer Science | NULL | | Raymond F. Boyce | 2400 | Computer Science | NULL | +------------------------+-----------+------------------+----------------+ 9 rows in set (0.00 sec)

TESTING the logic (VERY important step!)

SELECT FullName, instr(FullName," ") AS firstSpacePosition, concat(substring(FullName,1,instr(FullName," ")-1),"@someSchool.edu") AS schoolEmail FROM student;
+------------------------+--------------------+------------------------+ | FullName | firstSpacePosition | schoolEmail | +------------------------+--------------------+------------------------+ | Monique Davis | 8 | [email protected] | | Teri Gutierrez | 5 | [email protected] | | Spencer Pautier | 8 | [email protected] | | Louis Ramsey | 6 | [email protected] | | Alvin Greene | 6 | [email protected] | | Sophie Freeman | 7 | [email protected] | | Edgar Frank "Ted" Codd | 6 | [email protected] | | Donald D. Chamberlin | 7 | [email protected] | | Raymond F. Boyce | 8 | [email protected] | +------------------------+--------------------+------------------------+ 9 rows in set (0.00 sec)

A note about concat(): in MySQL this command is used to combined strings, not so in other SQL versions (check your manual). In this usage it works like this: The substring of the FullName field up to but not including the first space is combined with “@someSchool.edu”. In the real world this would HAVE TO be much more complex and you would need to ensure that the email address is unique.

Doing the update

We’ll pretend that this is what we want and update the table with this information:

UPDATE student SET schoolEmailAdr = concat(substring(FullName,1,instr(FullName," ")-1),"@someSchool.edu") WHERE schoolEmailAdr is NULL;

Success!

mysql> SELECT FullName, sat_score, programOfStudy, schoolEmailAdr FROM student; +------------------------+-----------+------------------+------------------------+ | FullName | sat_score | programOfStudy | schoolEmailAdr | +------------------------+-----------+------------------+------------------------+ | Monique Davis | 400 | Literature | [email protected] | | Teri Gutierrez | 800 | Programming | [email protected] | | Spencer Pautier | 1000 | Programming | [email protected] | | Louis Ramsey | 1200 | Programming | [email protected] | | Alvin Greene | 1200 | Programming | [email protected] | | Sophie Freeman | 1200 | Programming | [email protected] | | Edgar Frank "Ted" Codd | 2400 | Computer Science | [email protected] | | Donald D. Chamberlin | 2400 | Computer Science | [email protected] | | Raymond F. Boyce | 2400 | Computer Science | [email protected] | +------------------------+-----------+------------------+------------------------+ 9 rows in set (0.00 sec)