Autor Beitrag
Kossy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: Di 01.05.12 17:57 
Hallo !

Ich hab nochmal eine Frage zum Thema SQL.

Innerhalb der FROM Klausel kann ich sämtliche Tabellen meiner Datenbank miteinander "Joinen" und somit eine neue Tabellenstruktur aufbauen, die quasi meine Datenbasis unter eben den "JOIN Bedingungen" darstellt.

Ich bin mir jetzt nicht sicher, ob ich alles richtig verstanden habe, aber kann ich in der SELECT Klausel dann frei bestimmen, welche Felder ich aus den jetzt neu geformten Inhalten der FROM Klausel ausgeben möchte? Und können selbst die Felder, die ich nicht in der SELECT Klausel ausgeben möchte, dann innerhlab der WHERE- oder einer möglichen HAVING Klausel ohne Probleme weitergenutzt werden?

Viele Grüße
--Kossy--
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Mi 02.05.12 10:18 
Hallo,
du kannst die projezierten Felder aus dem Verbund frei wählen.
ausblenden SQL-Anweisung
1:
2:
3:
SELECT A.Artikelnummer A.Beschreibung B.Preis
FROM A INNER JOIN B ON A.Artikelnummer = B.Artikelnummer 
WHERE B.Farbe = 'rot'


In der WHERE-Bedingung können dabei auch Felder genutzt werden, die nicht in der Projektion landen.

Für eine HAVING Klasuel müssen jedoch die betroffenen Felder per Aggregatsfunktion in der Auswahl landen, sonst gibt es ja nichts, auf das sich das HAVING beziehen könnte.

ausblenden SQL-Anweisung
1:
2:
3:
SELECT Artikel.Artikelnummer SUM( Lager.Bestand ) 
FROM Artikel LEFT OUTER JOIN Lager ON Artikel.Artikelnummer = Lager.Artikelnummer
HAVING Lager.Bestand > 100


Moderiert von user profile iconTh69: Code- durch SQL-Tags ersetzt

_________________
Delphi: XE - OS: Windows 7 Professional x64
Kossy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: Mi 02.05.12 10:34 
Vielen Dank für die Erläuterung !!

Moderiert von user profile iconTh69: Full-Quote entfernt.
Kossy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: Do 03.05.12 12:49 
Hallo nochmal !

Ich habe nochmal eine Frage zu diesem Thema, genauergesagt geht es um die GroupBy Klausel. Wenn ich in der GroupBy Klausel Felder aus der datenbasis der FROM Klausel angebe, nach denen ich gruppieren möchte und vielleicht 2 Aggregatfunktionen einbaue, die auf diese Gruppierungen angewendet werden sollen, MUSS ich immer zwingend alle Felder, auf die die diese Gruppierungen die Aggregatfunktionen angewandt werden, immer vollständig innerhlab der SELECT Klausel ausgeben, oder kann ich da auch nach Bedarf welche auslassen?

Aber wenn ich es jetzt richtig verstanden habe, dann muss ich diejenigen Felder, die dann in der SELECT Klausel auftauchen, auch innerhalb einer möglichen HAVING Klausel verwenden, richtig?

Viele Grüße
--Kossy--
Kossy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: Fr 04.05.12 06:54 
Hallo nochmal !

Mag wirklich niemand auf meine letzte Frage antworten?
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Fr 04.05.12 09:06 
Hallo,
zu deinen Fragen:

Zitat:
(muss man alle Felder) immer vollständig innerhlab der SELECT Klausel ausgeben, oder kann ich da auch nach Bedarf welche auslassen?


ausblenden SQL-Anweisung
1:
2:
3:
4:
SELECT COUNT(Vorlesung.PersNr) AS Anzahl, Professor.Name
FROM Professor LEFT OUTER JOIN Vorlesung
ON Professor.PersNr = Vorlesung.PersNr
GROUP BY Professor.PersNr;
->geht

Zitat:
Aber wenn ich es jetzt richtig verstanden habe, dann muss ich diejenigen Felder, die dann in der SELECT Klausel auftauchen, auch innerhalb einer möglichen HAVING Klausel verwenden, richtig?
HAVING ist eine weitere optionale Einschränkung, die sich auf die verdichteten Werte aus der GROUP BY Klausel bezieht.

Moderiert von user profile iconTh69: Code- durch SQL-Tags ersetzt

_________________
Delphi: XE - OS: Windows 7 Professional x64
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 04.05.12 11:09 
Zitat:
->geht


In welcher DB? Nach meinem dafür halten ist das unzulässig und sollte knallen auch wenn Professor.Name eindeutig einer PersNr zuzuordnen ist.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 04.05.12 11:27 
Hallo Ralf,

ich stimme dir hier zu - sollte so direkt nicht funktionieren (zumindestens bei den üblichen Datenbanksystemen).
Als Trick nutze ich dann immer
ausblenden SQL-Anweisung
1:
2:
3:
SELECT ..., Professor.Name
...
GROUP BY Professor.PersNr, Professor.Name;