Tagi: is null

Zadanie 3.

Korzystamy z tabel stworzonych w Zadaniu 1 (i zmodyfikowanych w Zadaniu 2):

1. Święta idą – wszystkie płace podstawowe rosną o 10%. Uaktualnij dane.

2. Dokupiono nowy samochód (id 6, biała Toyota Yaris, DBC 1587). Wprowadź go do bazy i przypisz temu, kto zarabia najwięcej z osób nieposiadających jeszcze auta firmowego (podstawa plus premia).

3. Stwórz widok, w którym zostanie wyświetlone podsumowanie firmy: imię i nazwisko pracownika, dział oraz stanowisko, pensja (podstawa plus premia) oraz czy posiada firmowy samochód (tak/nie) – screen:

z3

 

 

 

 

Rozwiązanie

1. UPDATE dzialy
SET placa_podstawowa = placa_podstawowa * 1.1;

 

2. Wprowadzenie auta do bazy:

INSERT INTO Flota (id_auta, marka, model_auta, kolor, rejestracja, id_prac)
VALUES (6, 'Toyota', 'Yaris', 'bialy', 'DBC 1587', null);

 

Sprawdzenie, kto zarabia najwięcej:

SELECT pr.id_prac, pr.imie, pr.nazwisko, (dz.placa_podstawowa + pr.premia) AS zarobki
FROM pracownicy pr
INNER JOIN dzialy dz USING(id_dzialu)
WHERE pr.id_auta IS NULL
ORDER BY zarobki DESC
FETCH FIRST row only;

 

Przypisanie samochodu:

UPDATE Pracownicy
SET id_auta = 6 WHERE id_prac = 3;
UPDATE Flota
SET id_prac = 3 WHERE id_auta = 6;

W powyższym zapytaniu zamiast konkretnych wartości można podstawić podzapytania.

Zamiast id_prac (3) w pierwszym UPDATE można wstawić zmodyfikowaną wersję zapytania sprawdzającego kto najwięcej zarabia:

SELECT pr.id_prac
FROM pracownicy pr
INNER JOIN dzialy dz USING(id_dzialu)
WHERE pr.id_auta IS NULL
ORDER BY (dz.placa_podstawowa + pr.premia) DESC
FETCH FIRST row only;

A zamiast id_auta (6) w drugim można podstawić:

SELECT id_auta
FROM Flota
WHERE id_prac IS NULL;

 

3. CREATE VIEW Podsumowanie AS
SELECT pr.imie ||' '||pr.nazwisko as pracownik, dz.nazwa_dzialu, dz.stanowisko, (dz.placa_podstawowa + pr.premia) as zarobki,
CASE
WHEN pr.id_auta IS NULL THEN 'Nie'
ELSE 'Tak'
END AS Auto_firmowe
FROM Pracownicy pr inner join Dzialy dz
using (id_dzialu);

[collapse]

Zadanie 21.

Stwórz podsumowanie sprzedażowe – który ze sprzedawców jakich klientów obsłużył, na jaką kwotę ci klienci złożyli zamówienia, oraz jaką łączną wartość zamówień obsłużył sprzedawca.

Schemat: OE, Tabela: Orders, Kolumny: sales_rep_id, customer_id, order_total, Wynik: 76

s21

 

 

 

Rozwiązanie

SELECT NVL(TO_CHAR(sales_rep_id), 'total') AS "sales rep. id", NVL(TO_CHAR(customer_id), 'Sales Rep. total') AS "customer id", SUM(order_total) AS "Sum"
FROM orders
WHERE sales_rep_id IS NOT NULL
GROUP BY rollup(sales_rep_id, customer_id)
ORDER BY sales_rep_id;

[collapse]

Zadanie 21.

Dla klientów o ID 101, 111, 121, 141, 171 i 201 pokaż numer oraz datę ostatniego złożonego zamówienia. Jeśli klient nie ma na swoim koncie zamówień, powinna pojawić się stosowna informacja.

Schemat: OE, Tabele: Orders, Customers, Kolumny: customer-id, order_id, order_date, Wynik: 6 rows

p21

 

 

Rozwiązanie

SELECT customer_id as Customer, MAX(o.order_id) as "Last order",
to_char(MAX(o.order_date), 'DD.MM.YYYY') as "Last ord. date",
CASE
WHEN MAX(o.order_id) IS NULL THEN 'Ten klient nie ma zamówień'
ELSE ' '
END as Opis
FROM customers c LEFT OUTER JOIN orders o
USING(customer_id)
WHERE customer_id IN(101, 111, 121, 141, 171, 201)
GROUP BY customer_id
ORDER BY customer_id;

[collapse]

Zadanie 18.

Znajdź klientów, którzy nie złożyli żadnego zamówienia.

Schemat: OE, Tabele: Customers, Orders, Kolumny: customer_id, cust_first_name, cust_last_name, order_id, Wynik: 272 rows

p18

 

 

 

 

 

Rozwiązanie

SELECT customer_id, c.cust_first_name, c.cust_last_name
FROM customers c LEFT OUTER JOIN orders o USING(customer_id)
WHERE o.order_id IS NULL
ORDER BY customer_id;

[collapse]

Zadanie 11.

Stwórz listę pracowników – id, imię, nazwisko oraz podaj informację, czy dana osoba nadal pracuje (pracuje / nie pracuje).

Schemat: HR, Tabele: Employees, Job_History, Kolumny: employee_id, first_name, last_name, end_date, Wynik: 110 rows

p11

 

 

 

Rozwiązanie

SELECT employee_id, e.first_name, e.last_name,
CASE
WHEN jh.end_date IS NULL THEN 'pracuje'
ELSE 'nie pracuje'
END AS Pracownik
FROM employees e LEFT OUTER JOIN job_history jh USING(employee_id)
ORDER BY employee_id;

[collapse]

Zadanie 3.

Z tabeli Locations wybierz:

a) Wszystkie adresy w Londynie

b) Wszystkie lokalizacje które są w państwach o id IT, US i CH

c) Lokalizacje, w których nazwa miasta nie zaczyna się na literę S ale ma tą literę w nazwie

d) Lokacje, które nie mają regionu. Pole region powinno zawierać informację ‚<brak regionu>’.

Schemat: HR, Tabela: Locations, Kolumny: City, Country-ID, State_Province  Wynik: a) 1 row b) 8 rows c) 2 rows d) 6 rows

Rozwiązanie

a) SELECT *
FROM LOCATIONS
WHERE City = 'London';

b) SELECT *
FROM LOCATIONS
WHERE COUNTRY_ID IN('IT', 'US', 'CH');

c) SELECT *
FROM LOCATIONS
WHERE City NOT LIKE 'S%' AND City LIKE '_%s%';

d) SELECT STREET_ADDRESS, POSTAL_CODE, CITY, NVL(STATE_PROVINCE, '<brak regionu>'), COUNTRY_ID
FROM LOCATIONS
WHERE STATE_PROVINCE IS NULL;

[collapse]

Zadanie 24.

Wyświetl wszystkich klientów (nazwa firmy, osoba kontaktowa i numer telefonu), którzy nie podali swojego numeru Fax.

Baza: Northwind, Tabela: dbo.Customers, Kolumny: CompanyName, ContactName, Phone, Fax, Wynik: 22 rows

32

Rozwiązanie

SELECT CompanyName, ContactName, Phone
FROM dbo.Customers
WHERE Fax IS NULL
ORDER BY CompanyName;

[collapse]