SQL-Handout

Werbung
150.422
1
Datenbanken – SQL Handout 1
SS 2017
Einfache Abfragen
• Allgemeine Form • einfacher SQL-Abfragen:
SELECT spalte1, spalte2,... FROM tabelle
WHERE bedingung
Diese Abfrage gibt alle Werte von tabelle in den Spalten spalte1, spalte2,... zurück, die bedingung erfüllen (d.h.,
sodass bedingung wahr ist). Das heißt, der SELECT-Teil gibt an, welche Spalten zurückgegeben werden sollen,
der WHERE-Teil spezifiziert, welche Zeilen angezeigt werden. Sollen alle Spalten von tabelle zurückgegeben
werden, so kann statt der Spaltennamen * verwendet werden.
B Beispiele. Zeige alle steirischen Firmen der Tabelle Supplier mit ihrer PLZ und Evaluierung.
1
SELECT S_Company , S_Areacode , S_Evaluation FROM Supplier
WHERE S_State = ’ Steiermark ’
Zeige alle Spalten von Angeboten aus Order Options mit einem Preis kleiner als 5,– pro Einheit.
SELECT * FROM Order_Options
WHERE Price_per_Unit < 5
Zeige alle Bestellungen aus Orders, bei denen die Anzahl der bestellten Einheiten kleiner ist als die Anzahl
der Einheiten pro Bestellung.
SELECT * FROM Orders
WHERE No_of_Units_ordered < Unit_No_per_Order
• Vergleiche • Zum Vergleich von Ausdrücken können =, <, >, <=, >=, and <> (alternativ !=) verwendet
werden. Dies funktioniert auch für Strings, die lexikografisch, oder Datumswerte, die chronologisch miteinander
verglichen werden. String-Literale müssen unter Anführungszeichen gesetzt werden, numerische Literale sollten
nicht mit Anführungszeichen verwendet werden. MySQL wandelt oft automatisch Datentypen um. Daher ist
Vorsicht geboten, wenn verschiedene Datentypen miteinander verglichen werden. Weil in der Tabelle Supplier
die Spalte S Areacode als String (varchar) definiert ist, wird in der Abfrage
SELECT * FROM Supplier
WHERE S_Areacode < ’8 ’
lexikografisch verglichen. Ersetzt man ’8’ durch 8 wird die PLZ in eine Zahl umgewandelt und numerisch
verglichen.
Einfache Muster in Strings können mit LIKE abgefragt werden. Im Vergleichsstring steht dabei das Sonderzeichen für ein beliebiges einzelnes Zeichen sowie % für eine beliebige Anzahl (inkl. 0) von beliebigen Zeichen.
B Beispiele. Zeige alle Firmen aus Supplier, deren PLZ mit 8 beginnt.
SELECT * FROM Supplier
WHERE S_Areacode LIKE ’ 8% ’
Zeige alle Firmen aus Supplier, deren PLZ aus vier Stellen besteht und mit 8 beginnt.
SELECT * FROM Supplier
WHERE S_Areacode LIKE ’8 ___ ’
Zeige alle Firmen aus Supplier mit 7 an der zweiten Stelle der PLZ.
SELECT * FROM Supplier
WHERE S_Areacode LIKE ’ _7 % ’
• Mathematische Ausdrücke • In mathematischen Ausdrücken können sowohl Konstanten (in der Form von
Literalen) als auch Spalten(namen) verwendet werden. Neben den Grundrechnungsarten +, -, * and / stehen
auch einige mathematische Funktionen zur Verfügung, u.a. SQRT(x), POWER(x,y ), SIN(x), COS(x), TAN(x),
ROUND(x), ROUND(x,digits), FLOOR(x), CEILING(x), EXP(x), LOG(x), LOG10(x), ABS(x), SIGN(x),
RAND(x), LEAST(x,y ,. . . ), GREATEST(x,y ,. . . ), sowie die Konstante PI.
• Verknüpfen von Bedingungen • Bedingungen (Boolesche Ausdrücke) können mit AND, OR miteinander
verknüpft und mit NOT negiert werden. Um die Auswertungsreihenfolge festzulegen, sollten runde Klammern
verwendet werden.
B Beispiele. Zeige alle Bestellungen mit einem Bestellwert zwischen 1 und 100.
3
SELECT O_No , S_No , P_No , No_of_Units_ordered * Price_per_Unit AS Price
FROM Orders
WHERE No_of_Units_ordered * Price_per_Unit > 1
AND No_of_Units_ordered * Price_per_Unit < 100
Mit AS können Spalten in der angezeigten Ergebnistabelle umbenannt werden.
Zeige alle Bestellmöglichkeiten aus Order Options für alle KT-Teile und all jene DL-Teile, deren P No nicht
mit 7 endet. Gib den Preis pro Einheit gerundet nach der ersten Dezimalstelle an.
1
SELECT S_No , P_No , ROUND ( Price_per_Unit ,1) AS Price FROM Order_Options
WHERE P_No LIKE ’ KT % ’
OR ( P_No LIKE ’ DL % ’ AND NOT ( P_No LIKE ’ %7 ’) )
Anstelle von NOT (P No LIKE ’%7’) kann auch P No NOT LIKE ’%7’ verwendet werden.
∆ Achtung! ∆ Beachten Sie, dass hier ein umgangsprachliches und ein logisches oder ist!
Zeige alle steirischen und deutschen Firmen aus Supplier, die die Evaluierung A haben.
2
SELECT * FROM Supplier
WHERE ( S_State = ’ Steiermark ’ OR S_Country = ’ Deutschland ’)
AND S_Evaluation = ’A ’
∆ Achtung! ∆ Ohne Klammern würde die letzte Abfrage ein anderes Ergebnis liefern!
Faustregel: Verwende immer Klammern, wenn Bedingungen mit AND und OR miteinander verknüpft werden!
• Sortieren • Die Ergebnistabelle kann durch nachgestelltes
ORDER BY spalte1, spalte2,...
nach den angegebenen Spalten sortiert werden. Anstelle des Spaltennamens kann auch die Spaltennummer
im SELECT-Teil der Abfrage verwendet werden (d.h., 1=erste Spalte,. . . ). Die Sortierung erfolgt in der Regel
aufsteigend. Fügt man der entsprechenden Spalte bzw. Spaltennummer DESC hinzu, wird absteigend sortiert.
B Beispiele. Zeige alle Firmen aus Supplier. Sortiere nach Land (aufsteigend) sowie nach der Spalte S No
(absteigend).
2
SELECT * FROM Supplier
ORDER BY S_Country , S_No DESC
Zeige alle Bestellungen zusammen mit ihrem Bestellwert. Sortiere absteigend nach Bestellwert.
3
SELECT O_No , S_No , P_No , No_of_Units_ordered * Price_per_Unit AS Price
FROM Orders
ORDER BY 4 DESC
Regel: ORDER BY muss immer am Ende einer Abfrage stehen.
Herunterladen