• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SQL - Podzapytania skorelowane

Object Storage Arubacloud
0 głosów
1,224 wizyt
pytanie zadane 11 listopada 2017 w SQL, bazy danych przez Apocalipto Nowicjusz (120 p.)
edycja 11 listopada 2017 przez Apocalipto

Tabele jakich dotyczą zadania:
Pracownicy(id, imie, nazwisko, id_dzialu, pensja, projekt)
Projekty(p_id, szef_projektu, nazwa, termin_oddania)

Działy(id_dzialu, nazwa, adres)

Nie wiem jak zrobić 2 i jak mają się odnosić zapytania skorelowane do 4 (EXISTS, NOT EXISTS?)

Poniższe zadania rozwiąż używając podzapytań skorelowanych

  1. Wyświetl nazwiska i imiona pracowników zarabiających więcej niż 50% maksymalnej pensji w działach, do których należą.
  2. Stosując podzapytanie skorelowane wyświetl informacje o dziale nie zatrudniającym żadnych pracowników z projektu "p1".
    Hint: wyświetl te działy, w których 0 pracowników pracuje przy projekcie "p1".
  3. Wyświetl nazwiska i pensje pięciu najlepiej zarabiających pracowników. Nie można używać konstrukcji typu TOP, LIMIT itp.
    Hint: przepisz zadanie na: znajdź tych ludzi, dla których ilość osób o wyższej pensji jest mniejsza od 5
  4. Wyświetl informacje o pracownikach, dla których termin ich projektu jest mniejszy od daty systemowej. Pamiętaj, aby pominąć pracowników bez przydziałów do zespołów!
    Hint: może przydać się operacja IS NOT NULL

Rozwiązanie:

1.

SELECT imie, nazwisko
FROM Pracownicy P
WHERE pensja > (    SELECT (1/2 * MAX(pensja))
                                  FROM Pracownicy 
                                  WHERE id_dzialu = P.id_dzialu);

3.


SELECT imie, pensja
FROM Pracownicy P
WHERE 5 > ( SELECT COUNT(*)
                       FROM Pracownicy 
                       WHERE pensja > P.pensja);

4.
            
SELECT *
FROM Pracownicy P 
WHERE projekt IS NOT NULL AND projekt = ANY (   SELECT p_id
                                                                                      FROM Projekty 
                                                                                      WHERE termin_oddania < SYSDATE);

1 odpowiedź

0 głosów
odpowiedź 12 listopada 2017 przez jeremus Maniak (59,720 p.)

może coś takiego  ? :

select d.* from działy d where d.id_dzialu not in ( select  p.id_dzialu from pracownicy p,projekty k where p.projekt=k.p_id and k.nazwa='p1' group by p.id_dzialu)

 

komentarz 12 listopada 2017 przez Apocalipto Nowicjusz (120 p.)
Niestety to nie działa. Próbowałem czegoś podobnego sam, ale to nie jest chyba podzapytanie skorelowane bo nie odnosimy sie bezpośrednio do zapytania zewnętrznego
komentarz 12 listopada 2017 przez jeremus Maniak (59,720 p.)
przyjąłem że p1 to nazwa projektu -  może z tym jest problem bo zapytanie wydaje mi się ok

zobacz co zwraca podzapytanie..

jeśłi dalej nic to być może zgodnie ze wskazówką  trzeba wykorzystać klauzule  having

Podobne pytania

0 głosów
1 odpowiedź 288 wizyt
pytanie zadane 8 maja 2022 w SQL, bazy danych przez Blds Użytkownik (830 p.)
+1 głos
1 odpowiedź 467 wizyt
pytanie zadane 20 listopada 2016 w SQL, bazy danych przez MlodyJavaS Użytkownik (500 p.)
+1 głos
0 odpowiedzi 173 wizyt
pytanie zadane 3 sierpnia 2017 w SQL, bazy danych przez raf123 Nowicjusz (130 p.)

92,551 zapytań

141,400 odpowiedzi

319,531 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...