ďťż
 
Zadanie z SQL ďťż
 
Zadanie z SQL
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Zadanie z SQL



willy - 02-01-2007 01:26
Zadanie z SQL
  Witam

Mam tablę opisującą pracowników. W id_szefa podany jest ID_PRAC
osoby będącej szefem

PRAC
ID_PRAC Number(4) Klucz podstawowy
NAZWISKO Varchar2(15) Atrybut obowiązkowy
ETAT Varchar2(10) Referencja do atrybutu NAZWA relacji ETAT
ID_SZEFA Number(4) Referencja do atrybutu ID_PRAC relacji PRAC
ZATRUDNIONY date
PLACA_POD Number(6,2) wartość większa od 100
PLACA_DOD Number(6,2) domyślna wartość 0
ID_ZESP Number(2) Referencja do atrybutu ID_ZESP relacji ZESP

Może ktoś mi podpowie jak napisać selecta który wyświetlałby
id_prac, nazwisko pracownika, oraz nazwisko szefa. Nie umiem sobie
poradzić z wyświetleniem obu nazwisk za jednym razmem

I drugie pytanie. Jeśli wyświetlam pracowników posortowanych według
rosnącego id_szefa osoby które nie mają przypisanego szefa (id_szefa
is NULL) wyświetlane są na końcu, jak zrobić żeby wyświetliły
się na początku

Dopiero zaczynam zabawę z SQL więc proszę możliwie przystepnie

Pozdrawiam
-willy-





Marcin - 02-01-2007 01:26

  willy napisał(a):
> Witam
>
> Mam tablę opisującą pracowników. W id_szefa podany jest ID_PRAC
> osoby będącej szefem
>
> PRAC
> ID_PRAC Number(4) Klucz podstawowy
> NAZWISKO Varchar2(15) Atrybut obowiązkowy
> ETAT Varchar2(10) Referencja do atrybutu NAZWA relacji ETAT
> ID_SZEFA Number(4) Referencja do atrybutu ID_PRAC relacji PRAC
> ZATRUDNIONY date
> PLACA_POD Number(6,2) wartość większa od 100
> PLACA_DOD Number(6,2) domyślna wartość 0
> ID_ZESP Number(2) Referencja do atrybutu ID_ZESP relacji ZESP
>
>
> Może ktoś mi podpowie jak napisać selecta który wyświetlałby
> id_prac, nazwisko pracownika, oraz nazwisko szefa. Nie umiem sobie
> poradzić z wyświetleniem obu nazwisk za jednym razmem
>
> I drugie pytanie. Jeśli wyświetlam pracowników posortowanych według
> rosnącego id_szefa osoby które nie mają przypisanego szefa (id_szefa
> is NULL) wyświetlane są na końcu, jak zrobić żeby wyświetliły
> się na początku
>
> Dopiero zaczynam zabawę z SQL więc proszę możliwie przystepnie
>
> Pozdrawiam
> -willy-
>

Witam,

Zakładam, że baza to ORACLE (sądząc po typie VARCHAR2), więc od razu
napiszę pod tę bazę.

Jeśli chodzi o pierwsze pytanie

select p1.ID_PRAC Id_prac
, p1.NAZWISKO "Nazwisko pracownika"
, p2.NAZWISKO "Nazwisko szefa"
from PRAC p1
, PRAC p2
where p1.ID_SZEFA = p2.ID_PRAC (+)
/* złączenie typu left foin - żeby wyświetlić również pracowników bez
przypisanego szefa*/

Drugie pytanie:
....
order by NVL(ID_SZEFA, 0) ASC

NVL(ID_SZEFA, 0) - zwróci 0 jeśli ID_SZEFA będzie NULLem, czyli takie
rekordy powinny być zwrócone na początku

Pozdrawiam,
Marcin




willy - 02-01-2007 01:26

  Faktycznie chodzi o ORACLA. Bardzo dziękuję za pomoc. Mam jeszcze
kilka pytań dotyczacych tematu

1. Mam wyświetlić nazwisko osób zarabiających więcej niż Pan
"MABACKI" z użyciem podzapytania oraz bez urzycia podzapytania. Z
urzyciem podzapytania wygląda to tak :

select nazwisko, placa_pod from prac where placa_pod>(select placa_pod
from prac where nazwisko = 'MABACKI');

bez użycia podzapytania niestety nie wiem

2. Wyświetlić nazwiska i płace podstawowe pracowników. Jeżeli
płaca podstawowa jest mniejsza od 1480 wyświetlić tekst: 'poniżej
1480', jeśli jest równa, wyświetlić ,,1480" jeśli jest
większa, wyświetlić 'powyżej 1480'.

Wiem jak zrobić wszystko poza wyświetleniem tekstu 'poniżej 1480',
'1480', 'powyżej '1480'

-willy-




Marcin - 02-01-2007 01:26

  willy napisał(a):
> Faktycznie chodzi o ORACLA. Bardzo dziękuję za pomoc. Mam jeszcze
> kilka pytań dotyczacych tematu
>
> 1. Mam wyświetlić nazwisko osób zarabiających więcej niż Pan
> "MABACKI" z użyciem podzapytania oraz bez urzycia podzapytania. Z
> urzyciem podzapytania wygląda to tak :
>
> select nazwisko, placa_pod from prac where placa_pod>(select placa_pod
> from prac where nazwisko = 'MABACKI');
>
> bez użycia podzapytania niestety nie wiem
>
> 2. Wyświetlić nazwiska i płace podstawowe pracowników. Jeżeli
> płaca podstawowa jest mniejsza od 1480 wyświetlić tekst: 'poniżej
> 1480', jeśli jest równa, wyświetlić ,,1480" jeśli jest
> większa, wyświetlić 'powyżej 1480'.
>
> Wiem jak zrobić wszystko poza wyświetleniem tekstu 'poniżej 1480',
> '1480', 'powyżej '1480'
>
> -willy-
>

1. Może tak?

select p2.nazwisko
, p2.placa_pod
from prac p1
, prac p2
where p1.nazwisko = 'MABACKI'
and p2.placa_pod > p1.placa_pod

takie złączenie nazywa się chyba non equi join.

Uwaga! jeśli jest kilku pracowników o nazwisku MABACKI, to wiersze w
wyniku zapytania będą się powtarzać (ale wówczas twoje zapytanie wysypie
się z błędem ORA-01422)

2. Ja bym zrobił tak:

select p.nazwisko
, p.placa_pod
, case
when p.placa_pod < 1480 then 'poniżej 1480'
when p.placa_pod > 1480 then 'powyżej 1480'
else '1480'
end case tekst
from prac p





Marcin - 02-01-2007 01:26

 
> select p.nazwisko
> , p.placa_pod
> , case
> when p.placa_pod < 1480 then 'poniżej 1480'
> when p.placa_pod > 1480 then 'powyżej 1480'
> else '1480'
> end case tekst
> from prac p

Nie jestem pewny składni CASE. Nie mam teraz jak sprawdzić, ale jeśli w
powyższym zapytaniu będzie błąd, to powinno być chyba tak:

select p.nazwisko
, p.placa_pod
, case
when p.placa_pod < 1480 then 'poniżej 1480'
when p.placa_pod > 1480 then 'powyżej 1480'
else '1480'
end tekst
from prac p




willy - 02-01-2007 01:26

  Druga wersja działa poprawnie. Jeszcze raz dziękuje za pomoc

Pozdrawiam
-willy-
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?= Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?= =?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?= [MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?= =?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?= Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?= [MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?= =?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?= [Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?= =?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • radioaktywni.htw.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com