[FRAGE] - SQL Beispiele 5,6,9,10
Results 1 to 8 of 8
  1. #1
    Zentor's Avatar
    Title
    CO-Administrator
    Join Date
    Dec 2001
    Location
    Wien???
    Posts
    1,156
    Thanks
    2
    Thanked 9 Times in 6 Posts

    SQL Beispiele 5,6,9,10

    Stimmen meine Lösungen?
    Code:
    5.)	select Buch.Titel, Kunde.Knr, Kunde.Nachname, Ausleihe.von
    	from Buch, Kunde, Ausleihe
    	where Ausleihe.von not null and Ausleihe.bis = null
    
    6.)	select Buch.Titel, Kunde.Knr, Kunde.Nachname, Ausleihe.von
    	from Buch, Kunde, Ausleihe
    	where Ausleihe.von not null and Ausleihe.bis = null and Ausleihe.von < 2002
    9.)	select Nachname, Jahr 
    	from Kunde
    	where Knr in ( 	select Knr
    			from Ausleihe
    			where InvNR in ( select InvNR 
    					 from Exemplar
    					 where ISBN in ( select ISBN
    							 from Klassifikation
    							 where Gebiet = 'Mathematik'
    						       )
    					)
    		     )
    10.)	select Nachname, Vorname, KNr
    	from Kunde
    	where KNR not in (select Knr
    			  from Ausleihe
    			  where InvNR in ( select InvNR 
    					   from Exemplar
    					   where ISBN in ( select ISBN
    							   from Klassifikation
    							   where Gebiet = 'Beletristik'
    						         )
    					 )
    		         )
    ich weis nicht ob man bei 5. soviel vermixen darf und ob da eine gültige Tabelle rauskommt. Muss man bei SQL zuerst nachprüfen ob ein wert nicht null ist und dann vergleichen weil sonst reicht in Bsp 6.
    where Ausleihe.von <2002 and Ausleihe.bis = null

    Zu Bsp 9 und 10 gibts doch sicher eine gescheitere Vorgehensweise als den ganzen Relationen folgend 3 Verschachtelungen zu begehen oder?

    mfg Zentor

  2. #2
    Zentor's Avatar
    Title
    CO-Administrator
    Join Date
    Dec 2001
    Location
    Wien???
    Posts
    1,156
    Thanks
    2
    Thanked 9 Times in 6 Posts
    bei 9,10 wäre eine Alternative vielleicht

    Code:
    9.)	select k.Nachname, k.Jahr
    	from Kunde k,Ausleihe a, Exemplar e,Klassifikation k
    	where k.Knr = a.Knr and
    	      a.InvNR = e.InvNR and
    	      e.ISBN = k.ISBN and
    	      k.Gebiet = 'Mathematik'
    
    10.)	select k.Nachname, k.Vorname, k.KNr
    	from Kunde k,Ausleihe a, Exemplar e,Klassifikation k
    	where k.Knr = a.Knr and
    	      a.InvNR = e.InvNR and
    	      e.ISBN = k.ISBN and
    	      k.Gebiet not 'Beletristik'
    aber da ist wieder so ein großes karthesisches Produkt, is die Variante richtig/günstig?
    mfg Zentor

  3. #3

    Title
    Principal
    Join Date
    Feb 2002
    Posts
    78
    Thanks
    0
    Thanked 0 Times in 0 Posts
    hi!

    also wenn ich das verstanden habe,
    muss man einen natural join immer extra anschreiben,
    sonst wird das kartesische produkt gebildet.

    Muss man bei SQL zuerst nachprüfen ob ein wert nicht null ist und dann vergleichen weil sonst reicht in Bsp 6.
    where Ausleihe.von <2002 and Ausleihe.bis = null
    das auf null überprüfen is nicht notwendig
    (buch s 88: "... ein vergleich mit einem nullwert hätte immer false ergeben")

    bei bsp 6 wäre meine lösung
    Code:
    select Buch.Titel, Kunde.Knr, Kunde.Nachname, Ausleihe.von
    from Buch, Exemplar, Kunde, Ausleihe
    where Ausleihe.InvNr = Exemplar.InvNr and
               Exemplar.ISBN = Buch.ISBN and
               Kunde.KNr = Ausleihe.KNr and 
               Ausleihe.bis not null and 
               Ausleihe.von < 2002
    bin mir auch nicht sicher ob das stimmt.
    aber ich denke dass man die relation exemplar
    dazunehmen müsste, oder?
    Last edited by tocvolxa; 10-05-2002 at 19:40.

  4. #4
    Zentor's Avatar
    Title
    CO-Administrator
    Join Date
    Dec 2001
    Location
    Wien???
    Posts
    1,156
    Thanks
    2
    Thanked 9 Times in 6 Posts
    Heisst das nun die erste Variante oder die 2. is besser? Also deine Lösung zu 6. sieht schon wesentlich einleuchtender aus als mein Durcheinander.
    mfg Zentor

  5. #5
    LordOfTheBite's Avatar
    Title
    Hero
    Join Date
    Feb 2002
    Location
    Vienna
    Posts
    191
    Thanks
    2
    Thanked 0 Times in 0 Posts
    ein vergleich mit null ergibt immer false, aber man muss in diesem fall feststellen ob ein wert = null ist

    das geht so:

    Ausleihe.bis is null

  6. #6

    Title
    Principal
    Join Date
    Feb 2002
    Posts
    78
    Thanks
    0
    Thanked 0 Times in 0 Posts
    Original geschrieben von Zentor
    Heisst das nun die erste Variante oder die 2. is besser?
    welche version professioneller oder gschickter is, weiß ich auch nicht.
    aber imho fehlt bei der zweiten version von 9
    ein abschließendes "group by"
    sonst werden leute die sich mehrmals mathebücer geliehen
    haben ja oft aufgelistet.

    mfg, tocvolxa

    ach ja, und das "Mathematik" muss ma für die dmlu-datenbank klein schreiben, sonst funzt nix
    Last edited by tocvolxa; 12-05-2002 at 12:45.

  7. #7
    LordOfTheBite's Avatar
    Title
    Hero
    Join Date
    Feb 2002
    Location
    Vienna
    Posts
    191
    Thanks
    2
    Thanked 0 Times in 0 Posts
    @zentor bsp 10:

    ich glaube du versäumst durch deine query die leute, die noch nie ein buch ausgeliehen haben (und folglich auch noch nie ein belletristisches buch ausgeliehen haben)

    außerdem fehlen die group by's, sonst kommen ja die kunden pro buch das sie ausgeliehen haben ins ergebnis

    meine lösung sieht so aus:
    Code:
    bsp 10:
    
    select
       k.Nachname, k.Jahr
    from
       Kunde k
    where
       k.KNr not in ( 
          select
             distinct a.KNr
          from 
             Ausleihe a, Exemplar e
          where
             a.InvNr = e.InvNr and e.ISBN in ( 
                select k.ISBN
                from Klassifikation k
                where k.Gebiet = 'Belletristik'
             )    
       );

  8. #8
    Zentor's Avatar
    Title
    CO-Administrator
    Join Date
    Dec 2001
    Location
    Wien???
    Posts
    1,156
    Thanks
    2
    Thanked 9 Times in 6 Posts
    Ok, ich hab schon beim Absetzten der Querys im Webinterface dauernd die Mitteilung bekommen das "group by" fehlt aber was bewirkt das genau? Zu 10 is deine Lösung sicher besser.
    mfg Zentor

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •