PSQL - Ein paar Fragen

coder111

Mitglied
Hallo,
ich habe ein paar Schwierigkeiten ein paar Grundbefehle von PSQL zu verstehen.
Könnt ihr mir da weiterhelfen?

Die Infos nehme ich aus dieser Seite (https://www.w3schools.com/sql/) und lasse es mit dem Google Übersetzer übersetzen. Allerdings verstehe ich manche Erklärungen nicht.
Könnt ihr mir da weiterhelfen?

Using= In Kürze, verwenden Sie ON für die meisten Dinge, aber USING ist eine praktische Kurzschrift für die Situation, wo die Spaltennamen die gleichen sind.

in = Mit dem IN-Operator können Sie mehrere Werte in einer WHERE-Klausel angeben.Der IN-Operator ist eine Kurzschrift für mehrere OR-Bedingungen.

Union = Der UNION-Operator wird verwendet, um die Ergebnismenge von zwei oder mehr SELECT-Anweisungen zu kombinieren.Jede SELECT-Anweisung innerhalb der UNION muss die gleiche Anzahl von Spalten habenDie Spalten müssen auch ähnliche Datentypen haben. Die Spalten in jeder SELECT-Anweisung müssen auch in der gleichen Reihenfolge sein.

Any = Wenn mehr als eine Ergebniszeile in einem Subselect vorhanden sein können, muss statt dem Gleichheitszeichen eine andere Operation wie IN, ALL, ANY oder EXISTS verwendet werden.
Die ANY- und ALL-Operatoren werden mit einer WHERE- oder HAVING-Klausel verwendet.
 
Hi

Using ist eine Kurzschreibweise für eine bestimmte on-Bedingung
Code:
SELECT tab1.a,tab2.b,tab3.c FROM tab1 JOIN tab2 ON tab1.a=tab2.a

SELECT tab1.a,tab2.b,tab3.c FROM tab1 JOIN tab2 USING a
Die on-Bedingung ist einfach ein "Wert aus Tabelle 1 gleich Wert aus Tabelle 2", und noch dazu heißen die Spalten in beiden Tabellen gleich (a), und genau das kann mit einem kurzen "using a" auch ausgedrückt werden.

Zu "in" ... einfach wieder zwei gleichwertige Abfragen, damit sollte es klar sein:
Code:
SELECT * FROM tab WHERE spalte=1 OR spalte=7 OR spalte=11 OR spalte=45

SELECT * FROM tab WHERE spalte IN (1,7,11,45)

Any:
Ähnlich zu in, aber allgemeiner: Es wird mit einem Vergleichsoperator wie < > usw. verwendet. "...WHERE spalte > any (...)" ist dann erfüllt, wenn der Spaltenwert größer als irgendein Wert aus den Klammern ist. Mit = wäre es das Selbe wie in. Es gibt übrigens auch "all"; da ist es nur erfüllt wenn spalte größer/kleiner/... als "alle" Klammerwerte ist.

Union: Die Ergebnisse von zwei verschiedenen Abfragen zusammen anzeigen.
Code:
SELECT name FROM kunde UNION SELECT name FROM mitarbeiter
zeigt eine Namensliste von Kunden und Mitarbeiter an (alle Namen in der selben "Spalte" in der Ausgabe).
Natürlich müssen die abgefragten Spalten zusammenpassen. Wenn man bei einer Abfrage zB. zwei Spalten abfragt und bei der anderen nur eine, was soll dann für die Einspaltenergebnisse in die zweite Spalte geschrieben werden?

Und ein gut gemeinter Ratschlag: Englisch zu lernen hilft sehr... (und ich will zwar niemanden abhalten, hier etwas zu fragen, aber mit Google hättest du die Antwort schon früher gehabt)
 
Zwei kurze Fragen hätte ich noch.

- Zu dem are Befehl habe ich nichts gefunden. Was macht dieser?
- Würdest du bitte auch den set Befehl erklären?
 
Ein "are" kenn ich nicht.

Set ist meistens ein Teil von Update (Ändern von Einträgen), in der einfachsten Form sowas:
Code:
UPDATE xf_post SET message_count=message_count+1 WHERE user_id=195600
Also Update, Tabellenname, Set, welche Spalte man ändern will, auf welchen Wert (entweder ein fixer Wert wie 123 oder relativ wie hier gezeigt), und dann eine Bedingung bei welchen Zeilen das gemacht werden soll.
 
Genau. UND. Die reihnefolge spielt in deinem Beispiel (INNER JOIN) keine Rolle.
Wenn an das SQL formatiert, erkennt mans auch
SQL:
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM
    Orders
    INNER JOIN Customers
        ON Orders.CustomerID=Customers.CustomerID;

-- ist analog zu
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM
    Customers
    INNER JOIN Orders
        ON Orders.CustomerID=Customers.CustomerID;
 
Hallo,
ich hätte weitere Verständnisfragen, wo ich nicht weiterkomme. Es wäre nett, wenn ihr mir helfen könntet.

* Warum kann man nicht nach Erfahrung gruppieren, wenn im Select Erfahrung und Gehalt steht?
Siehe Video (Minute 6:45):

* Das Schlüsselwort IN wird in dem Video für etwas anderes benutzt, als in deinem Beispiel. Ich bin mir jetzt nicht mehr sicher, für was das IN verwendet wird.

Dein Beispiel:
SQL:
SELECT * FROM tab WHERE spalte=1 OR spalte=7 OR spalte=11 OR spalte=45
SELECT * FROM tab WHERE spalte IN (1,7,11,45)

Beispiel aus dem Video:
Siehe IN.PNG
Quelle:

* Wann und Wie baut man Unternfragen ein?

* Hat das Using noch eine andere Funktion als das hier?
ON tab1.a=tab2.a ist äquivalent zu USING a


* Benötige ich für jeden Join eine On Bedingung? Ohne ON Bedingung bekomme ich einen Syntaxfehler.
Also warum wäre das hier falsch?
select * from TableA inner join TableB


* Könntet ihr mir bitte den
Full Outer Join
,
Natural Join
,
Left Outer Join
Where Null
Full Outer Join Where Null

mit Beispiel erklären? Das sind die Joins, die ich noch nicht verstehe. Die anderen schon.
 

Anhänge

  • IN.PNG
    IN.PNG
    51,8 KB · Aufrufe: 3
Es wäre vielleicht hilfreich, weitere Frage in eigene Threads zu packen...

Wenn man nur nach Erfahrung gruppiert müssen die anderen zwei Ausgabespalten für gleiche Erfahrungswerte zusammengefasst werden. Wenn es zB. 3 Einträge mit Erfahrung 1 gibt ist die count-Spalte für Erfahrung 1 dann eben 3.
Aber wie soll gehalt zusammengefasst werden? Man hat dann 3 gehalt-Werte, die man irgendwie zusammen in die selbe Zeile quetschen will. Ohne anzugeben, wie das gemacht werden soll (Summe? Durchschnitt? Minimum? ...?) macht die Abfrage einfach keinen SInn.

...

Das in ist gleich wie vorher, nur dass die Werte nicht in einer Luste hingeschrieben, sondern durch eine Unterabfrage ermittelt werden.

...

Zum Innerjoin ohne On: Das ist einfach so vorgeschrieben... ohne wäre es ein Crossjoin und muss auch so geschrieben werden.

...

Google hat gesagt.:
FULL (OUTER) JOIN: Return all records when there is a match in either left or right table

http://www.w3resource.com/sql/joins/natural-join.php
Und den Rest gibts wieder mal nicht.
 
Mir sind noch folgende Fragen unklar:

- Wann und Wie baut man Unternfragen ein?
- Wan benötige ich Klammern in den Abfragen? Kann man das allgemein beantworten?
- Mir ist immer noch nicht klar, was ein Outer Join und ein Full Outer Join macht. Könnte man das an einem Beispiel erklären?
 

Neue Beiträge

Zurück