[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    2.077

    SQL und Reihenfolge der angezeigten Sätze

    Hallo *all,
    ich habe da mal ne Verständnisfrage:

    Ich habe mir eine LF (dat004) angelegt die einen Schlüssel mit 3 Segmenten hat.
    Ich hätte jetzt erwartet das wenn ich mit sql ein select * from dat004 mache, ich die Daten in der Reihenfolge zu sehen bekomme wie ich den Key angelegt habe. Dem ist aber nicht so.

    Kann mir jemand sagen warum das so ist?

    GG

  2. #2
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    SQL kümmert sich nie um die Reihenfolge, die in einer logischen Datei angegeben ist. Du kannst dich bei SQL niemals auf eine bestimmte Ergebnissortierung verlassen, wenn du sie nicht explizit angibst. Selbst wenn du dieselbe Abfrage durchführst, kann es theoretisch zu einer anderen Sortierung kommen, da der Optimizer sich vielleicht für einen anderen Zugriffspfad entscheidet.
    Deshalb solltest du die Sortierung immer mit ORDER BY selbst bestimmen.

    Dieter

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    SQL nimmt immer die PF, egal welche LF du angibst.
    Die Sortierung hängt dann von der Where-Klausel b, mit der ein Index ermittelt wird.
    Wird "Eingangsfolge" gewählt entspricht die Sortierung der PF-Satznummer.
    Explizite Sortierung gibt es nur per "Order BY", dafür ist das da.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Schade, ist ja dann immder doppelt gemoppelt.
    Ich prüfe zwar in der Regel mit Query, aber auf die schnelle halt mit SQL und da wäre es halt schön gewesen wenn die Kiste nicht nur die Felder berücksichtigt sondern auch die Sortierung. Die selects und Omits übernimmt sie ja auch.
    Wer weiß was sich die Entwickler dabei gedacht haben nur 70% aus der LF zu berücksichtigen.

    GG

  5. #5
    Registriert seit
    Nov 2003
    Beiträge
    2.306
    Sei froh, daß sie überhaupt zugelassen haben, daß man eine logische Datei mit Satzauswahl angeben darf.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Die LF mit Select/Omit ist ein Spezialfall der AS/400 und nicht SQL-Standard.
    Mit SQL wäre das eine View und die hat keinen Schlüssel.
    Genau wie eine View wird diese LF nun verwendet.
    Schlüssel werden erst später ermittelt (für die Zugriffe) und ggf. verwendet, wobei Views (wie diese LF) dann außen vor sind.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Nur nochmals zum besseren Verständnis.
    Wird in einem SQL-Statement eine DDS beschriebene logische Datei angegeben, wird vor Release 7.1 TR5 die Abfrage von der alten CQE (Classic Query Engine) ausgeführt. Der Grund liegt darin, dass bei Verwendung von DDS beschriebenen logischen Dateien, die DDS-Definition analysiert werden muss, was vor Release 7.1 TR5 nur von dem alten Optimizer ausgeführt werden konnte. Aus der DDS-Definition werden Feld-Auswahl, Join-Informationen und Select-/Omit-Anweisungen herausgefiltert und das eigentliche SQL-Statement basierend auf diesen Informationen neu geschrieben.

    Erst nachdem die Abfrage neu geschrieben wurde, erfolgt die eigenltiche Optimierung.
    Zu diesem Zeitpunkt weiß der Optimizer nicht (mehr), dass ursprünglich eine DDS beschriebene logische Datei mit (oder gar mit welchem) Schlüssel angegeben wurde.

    Das oberste Ziel bei der Optimirung ist es den Weg zu finden über den am schnellsten an die Daten herangekommen werden kann. Manchmal entspricht der beste Zugriffsweg (SQL Index oder DDS beschriebene logische Datei) nicht der gewünschten Sortierung, da die selektierten Daten notfalls zwischengespeichert und erst am Schluss sortiert werden.

    Deshalb gilt die Regel, wenn eine bestimmte Sortierung erforderlich ist, muss eine Order By-Anweisung angegeben werden.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... das mit CQE und SQE ist doch alles Banane, dieses Verhalten, dass eine View keine Sortierung hat und dass man die Reihenfolge der Query engine überlässt, wenn man kein Order by angibt, ist durchgängiger Standard in SQL.
    Der Hintergrund dessen ist, dass Views keine maintenance benötigen. Best Practice in SQL ist ausschließlich über Views zuzugreifen, um die Anwendung von der Implementierung der Datenbank maximal zu entkoppeln. In der Anwendung arbeitet man dann fast ausschließlich mit simplen select * from (order ba nicht vergessen!!!) statements und (fast) die komplette Logik des Zusammenklapperns der Daten findet innerhalb der Datenbank statt und belastet den Entwickler nicht. Damit das dann brummt, müssen passende Indexe angelegt werden, was auch nachgelagert passieren kann.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  9. #9
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Hallo, freue mich jetzt schon auf das awk mit demThema embedde SQL welche im Februar stattfindet
    bin gespannt was ich wieder dazu lerne
    gg

Similar Threads

  1. Gelöschte Sätze in PF
    By Peet in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 29-10-14, 08:05
  2. Selektieren Sätze im LF-File
    By malzusrex in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 19-05-03, 13:48
  3. mit SQL nur 100 größte Sätze lesen
    By holly in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 31-01-03, 09:08
  4. doppelte Sätze finden = > SQL
    By heynem in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 05-12-02, 08:59
  5. gelöschte Sätze
    By Wirnitzer in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 07-08-01, 19:59

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •