Zajęcia 2 podstawy języka SQL



Podobne dokumenty
Wprowadzenie do języka SQL

Język SQL. Rozdział 2. Proste zapytania

Podstawy SQL. 1. Wyświetl całość informacji z relacji ZESPOLY. 2. Wyświetl całość informacji z relacji PRACOWNICY

Autor: Joanna Karwowska

Autor: Joanna Karwowska

SQL, LIKE, IN, CASE, EXISTS. Marcin Orchel

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy)

Przestrzenne bazy danych Podstawy języka SQL

Podstawowe zapytania SELECT (na jednej tabeli)

Struktura bazy danych

SQL do zaawansowanych analiz danych część 1.

Bazy danych. Plan wykładu. Zależności funkcyjne. Wykład 2: Relacyjny model danych - zależności funkcyjne. Podstawy SQL.

Wykład 5. SQL praca z tabelami 2

Język SQL. Rozdział 4. Funkcje grupowe Funkcje grupowe, podział relacji na grupy, klauzule GROUP BY i HAVING.

Laboratorium Bazy danych SQL 3 1

Laboratorium nr 8. Temat: Podstawy języka zapytań SQL (część 2)

Zadania z SQLa (MS SQL Server)

Laboratorium Bazy danych SQL 2

Język SQL. Rozdział 3. Funkcje wierszowe

Ćwiczenie 1 podstawy

Widok Connections po utworzeniu połączenia. Obszar roboczy

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL

Klasyczna Analiza Danych

Funkcje. Rozdział 3a Funkcje wierszowe. Funkcje znakowe (1) Funkcje wierszowe

Technologie baz danych

Wprowadzenie do baz danych

Systemy GIS Tworzenie zapytań w bazach danych

Bazy Danych i Usługi Sieciowe

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

1. Język T SQL wprowadzenie do tworzenia zapytań i modyfikowania bazy danych

Zadania SELECT do schematu EDS (EMP, DEPT, SALGRADE)

Język SQL. Rozdział 3. Zaawansowana selekcja danych

Ćwiczenie zapytań języka bazy danych PostgreSQL

Język SQL. Rozdział 5. Połączenia i operatory zbiorowe

SQL (ang. Structured Query Language)

ACESS- zadania z wykorzystaniem poleceń SQL

Przydatne sztuczki - sql. Na przykładzie postgres a.

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Wstęp do SQL. copyright: KGiIS WGGiOŚ AGH

Język SQL, zajęcia nr 1

Kiedy i czy konieczne?

Język SQL. Rozdział 6. Podzapytania Podzapytania proste i skorelowane, podzapytania w klauzuli SELECT i FROM, operatory ANY, ALL i EXISTS.

Podstawy języka SQL Co to jest SQL? Możliwości SQL SQL*Plus

Funkcje. Rozdział 3. Funkcje. Funkcje znakowe (1) Funkcje wierszowe

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Ćwiczenie 3 funkcje agregujące

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

1.06 Wyświetl dane pracowników, którzy pracują w departamencie o nr (Id) różnym od 3.

Właściwości i metody obiektu Comment Właściwości

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Bazy Danych i Usługi Sieciowe

Zarządzanie bazą danych za pomocą poleceń języka SQL*Plus

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

a) Polecenie: Wyświetl wszystkie rekordy z tabeli Pracownicy (wszystkie atrybuty)

Marek Rakowski Podstawy zdania SELECT Strona 1 z 12

Relacyjne bazy danych. Podstawy SQL

1. Przykładowe pytania z SQL

Wybór wszystkich danych: SELECT * FROM employee Wybór określonych kolumn lub wyrażeń: SELECT first_name, last_name, salary FROM employee

Bazy danych i usługi sieciowe

- język zapytań służący do zapisywania wyrażeń relacji, modyfikacji relacji, tworzenia relacji

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Laboratorium nr 5. Temat: Funkcje agregujące, klauzule GROUP BY, HAVING

Grupowanie i funkcje agregujące

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Bazy danych SQL Server 2005

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

Relacyjne bazy danych. Podstawy SQL

Algorytmika i Programowanie VBA 1 - podstawy

1. Tworzenie tabeli. 2. Umieszczanie danych w tabeli

Bloki anonimowe w PL/SQL

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Kursor. Rozdział 10a Kursory. Otwieranie kursora. Deklarowanie kursora

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

BAZA DANYCH SIECI HOTELI

PL/SQL. Funkcje wbudowane

Język PL/SQL. Rozdział 2. Kursory

Język SQL. Rozdział 9. Język definiowania danych DDL, cześć 1. Tworzenie relacji, typy danych, wartości domyślne atrybutów, słownik bazy danych.

OBLICZENIA NA DANYCH

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2)

Wykład 05 Bazy danych

Informatyka sem. III studia inżynierskie Transport 2018/19 LAB 2. Lab Backup bazy danych. Tworzenie kopii (backup) bazy danych

PL/SQL. Część 1 Bloki PL/SQL. Piotr Medoń

Lista zadań nr Wyświetlić imię i nazwisko dla każdego pracownika z departamentu DEP T NO o numerze 000.

Ćwiczenie 4 - połączenia

Programowanie w Logice

Język SQL. Rozdział 8. Język manipulowania danymi DML zadania

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

SQL - Structured Query Language. strukturalny język zapytań

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 2. Programowanie komputerowe

Lista zadań nr 1. Bazy danych laboratorium. dr inż. Grzegorz Bazydło, dr inż. Jacek Tkacz

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

CREATE TABLE logika (p BOOLEAN); INSERT INTO logika VALUES(true); INSERT INTO logika VALUES(false); INSERT INTO logika VALUES(NULL);

ZMIENNE. Podstawy PHP

Wykład 7 Implementacja języka SQL w systemach baz danych Oracle sortowanie, funkcje agregujące i podzapytania.

Marek Rakowski Zdanie SELECT wybieranie danych z wielu tabel Strona 1 z 6

Bazy danych i usługi sieciowe

Komputerowe systemy zarządzania. Część I: relacyjna baza danych

Transkrypt:

Zajęcia 2 podstawy języka SQL W klauzuli SELECT mogą być użyte wyrażenia arytmetyczne, aliasy (nazwy zastępcze) kolumn, konkatenacja. W wyrażeniu arytmetycznym mogą występować nazwy kolumn, stałe wartości liczbowe oraz operatory arytmetyczne: (+ dodawanie, - odejmowanie, * mnożenie, / dzielenie). W wyrażeniach tych zachowywany jest następujący priorytet działań: mnożenie, dzielenie, dodawanie, odejmowanie. Wyróżniamy 4 operatory SQL, działające na wszystkich typach danych: BETWEEN... AND, IN (lista), LIKE, IS NULL. Operator BETWEEN...AND służy do sprawdzenia, czy wartość znajduje się w podanym przedziale (wliczając w to krańce przedziału). Górna granica musi następować po dolnej. Operator LIKE służy do wybierania wartości odpowiadających podanemu wzorcowi. Wzorzec tworzą dwa specjalne symbole: % (znak procent) odpowiada dowolnemu ciągowi znaków, _ (znak podkreślenia) odpowiada dokładnie jednemu dowolnemu znakowi. Operator IS NULL służy do wyszukiwania wartości NULL. a b a AND b a OR b TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE NULL NULL TRUE FALSE FALSE FALSE FALSE FALSE NULL FALSE NULL NULL NULL NULL NULL a NOT a TRUE FALSE FALSE TRUE NULL NULL Operatory arytmetyczne Operator Opis Przykład Wynik + dodawanie 2 + 3 5 - odejmowanie 2-3 -1 * mnożenie 2 * 3 6 / dzielenie 4 / 2 2 % reszta z dzielenia 5 % 4 1 ^ potęga 2.0 ^ 3.0 8 / pierwiastek kwadratowy / 25.0 5 / pierwiastek sześcienny / 27.0 3! silnia 5! 120 @ wartość bezwzględna @ -5.0 5 1

Operator Opis < mniejsze niż > większe niż <= mniejsze lub równe >= większy lub równe = równe <> or!= różne Składnia a BETWEEN x AND y jest równoważna zapisowi a >= x AND a <= y Zaprzeczenie a NOT BETWEEN x AND y jest równoważne a < x OR a > y SQL Funkcje operujące na łańcuchach znaków Funkcja Typ zwracany Przykład Wynik string string text 'Post' 'gresql' PostgreSQL string non-string or text 'Value: ' 42 Value: 42 non-string string char_length(string) or int char_length('jose') 4 character_length(string) lower(string) text lower('tom') tom position(substring in int position('om' in 'Thomas') 3 string) substring(string [from text substring('thomas' from 2 hom int] [for int]) for 3) substring(string from text substring('thomas' from mas pattern) '...$') substring(string from text substring('thomas' from oma pattern for escape) '%#"o_a#"_' for '#') trim([leading trailing text trim(both 'x' from 'xtomxx') Tom both] [characters] from string) upper(string) text upper('tom') TOM btrim(string text [, text btrim('xyxtrimyyx', 'xy') trim characters text]) chr(int) text chr(65) A initcap(string) text initcap('hi THOMAS') Hi Thomas left(str text, n int) text left('abcde', 2) ab length(string) int length('jose') 4 length(string bytea, int length('jose', 'UTF8') 4 encoding name ) repeat(string text, number text repeat('pg', 4) PgPgPgPg int) replace(string text, from text replace('abcdefabcdef', abxxefabxxef text, to text) 'cd', 'XX') reverse(str) text reverse('abcde') edcba right(str text, n int) text right('abcde', 2) de strpos(string, substring) int strpos('high', 'ig') 2 substr(string, from [, text substr('alphabet', 3, 2) ph count]) 2

Operatory negacji służą do zaprzeczania warunkom w klauzuli WHERE. <> nie jest równy (wszystkie systemy operacyjne) NOT kolumna= nie jest równy NOT kolumna> nie jest większy NOT BETWEEN nie jest w podanym przedziale NOT IN nie jest w zbiorze NOT LIKE nie jest zgodny z maską IS NOT NULL nie jest NULL 1. Wyświetlić numer, imię, nazwisko oraz płacę podstawową dla każdego pracownika o ile jego numer jest większy od 1250. select numer, imie, nazwisko, placa_pod where numer > 1250; numer imie nazwisko -------+------------+------------ 1260 Robert MISIECKI 1290 Piotr GŁOWACKI 1300 Dariusz WARDECKI 1390 Tadeusz KAMOCKI 1270 Jan MOLANY 1310 Aleksandra RAJCZYK 1320 Michał ARTIOMOW 1280 Anna WIŚNIEWSKA 1330 Marek KOTOROWSKI 1350 Paulina BOROSA (10 rows) 2. Wybrać numer, imię, nazwisko i datę zatrudnienia osoby lub osób o nazwisku 'DROZD' lub ARTIOMOW select numer, imie, nazwisko, data_zatrudnienia where nazwisko='drozd' OR nazwisko ='ARTIOMOW'; numer imie nazwisko data_zatrudnienia -------+--------+----------+------------------- 1080 Karol DROZD 1993-10-01 1081 Michał DROZD 1993-10-01 1320 Michał ARTIOMOW 2001-10-01 (3 rows) 3. Wyświetlić numer, imię, nazwisko i datę zatrudnienia dla każdego pracownika, który został zatrudniony po '01-01-2000'; select numer, imie, nazwisko, data_zatrudnienia where data_zatrudnienia > '2000-01-01'; numer imie nazwisko data_zatrudnienia -------+------------+------------+------------------- 1060 Cezary MISIECKI 2004-10-01 1090 Monika WOLAŃSKA 2000-10-01 1190 Michał DROBOSZ 2000-10-01 1260 Robert MISIECKI 2004-10-01 1290 Piotr GŁOWACKI 2000-10-01 3

1390 Tadeusz KAMOCKI 2000-10-01 1110 Piotr TESTA 2007-10-01 1310 Aleksandra RAJCZYK 2007-10-01 1320 Michał ARTIOMOW 2001-10-01 1120 Anna ORKA 2001-10-01 1130 Tadeusz DROBOSZ 2007-10-01 1330 Marek KOTOROWSKI 2007-10-01 (12 rows) 4. Wybrać wszystkie dane osób (oprócz id zespołu i płacy dodatkowej) o imieniu zawierającym wewnątrz literę 'j' lub 'J'. select numer, imie, nazwisko, etat, szef, data_zatrudnienia, placa_pod where imie like'%j%' or imie like '%J%'; numer imie nazwisko etat szef data_zatrudnienia placa_pod -------+---------+------------+----------+------+-------------------+----------- 1000 Józef MOCNY dyrektor 1996-10-01 3160.00 1010 Józef PODGAJNY profesor 1000 1976-10-01 4180.00 1230 Janusz MALANOWSKI adiunkt 1010 1999-10-01 2750.00 1020 Andrzej DELECKI profesor 1000 1986-10-01 4050.00 1211 Jacek WIŚNIEWSKI profesor 1020 1976-10-01 4180.00 1270 Jan MOLANY asystent 1020 1989-10-01 1400.00 1050 Jerzy LAKOCKI adiunkt 1050 1990-10-01 2790.00 (7 rows) 5. Wybrać imię, nazwisko, etat i płacę podstawową osób, których pensja podstawowa wynosi 1400 lub 2750. select imie, nazwisko, etat, placa_pod where placa_pod=1400 or placa_pod=2750; imie nazwisko etat placa_pod -----------+------------+----------+----------- Stanisław KOWALEWSKI adiunkt 2750.00 Marcin MOCNY asystent 1400.00 Marek KOWALEWSKI adiunkt 2750.00 Cezary MISIECKI asystent 1400.00 Janusz MALANOWSKI adiunkt 2750.00 Marian MALESA adiunkt 2750.00 Monika ROZUMEK adiunkt 2750.00 Jan MOLANY asystent 1400.00 Tadeusz RUSEK adiunkt 2750.00 (9 rows) 6. Wybrać imię, nazwisko, etat, płacę podstawową i płacę dodatkową osób, których pensja podstawowa wynosi 4180 a dodatkowa 420. select imie, nazwisko, etat, placa_pod, placa_dod where placa_pod=4180 and placa_dod=420; imie nazwisko etat placa_pod placa_dod -----------+------------+----------+-----------+----------- Józef PODGAJNY profesor 4180.00 420.00 Stanisław PODGAJNY profesor 4180.00 420.00 Jacek WIŚNIEWSKI profesor 4180.00 420.00 Kazimierz PODGÓRA profesor 4180.00 420.00 (4 rows) 4

7. Wybrać dane osobowe osób, których pensja podstawowa mieści się w przedziale (1400,2700). where placa_pod between 1400 and 2700; -------+--------+----------+----------+------+-------------------+-----------+-----------+--------- 1001 Marcin MOCNY asystent 1010 1996-10-01 1400.00 570.00 20 1070 Piotr MOLANY adiunkt 1010 1989-10-01 2600.00 20 1060 Cezary MISIECKI asystent 1010 2004-10-01 1400.00 20 1260 Robert MISIECKI adiunkt 1010 2004-10-01 2600.00 20 1270 Jan MOLANY asystent 1020 1989-10-01 1400.00 30 (5 rows) 8. Wyświetlić dane adiunktów, których zarobki mieszczą się pomiędzy 2500 i 2600. Zadanie wykonać dwiema metodami: stosując BETWEEN oraz stosując operatory relacji i AND. where etat='adiunkt' and placa_pod between 2500 and 2600; where etat='adiunkt' and (placa_pod>=2500 and placa_pod<=2600); -------+--------+----------+---------+------+-------------------+-----------+-----------+--------- 1070 Piotr MOLANY adiunkt 1010 1989-10-01 2600.00 20 1260 Robert MISIECKI adiunkt 1010 2004-10-01 2600.00 20 (2 rows) 9. Wyświetlić listę pracowników przyjętych do pracy pomiędzy '01-01-1996' a '31-12-1999'. where data_zatrudnienia between '1996-01-01' and '1999-12-31'; -------+-----------+------------+----------+------+-------------------+-----------+-----------+--------- 1000 Józef MOCNY dyrektor 1996-10-01 3160.00 570.00 10 1001 Marcin MOCNY asystent 1010 1996-10-01 1400.00 570.00 20 1230 Janusz MALANOWSKI adiunkt 1010 1999-10-01 2750.00 20 1300 Dariusz WARDECKI asystent 1010 1999-10-01 1360.00 20 1030 Marian MALESA adiunkt 1020 1999-10-01 2750.00 30 1100 Kamil WARSKI asystent 1020 1999-10-01 1360.00 30 1201 Michał LECHITA adiunkt 1020 1996-10-01 2755.00 570.00 30 1200 Kazimierz CZECH profesor 1050 1996-10-01 4160.00 570.00 40 (8 rows) 10. Wybrać dane osobowe osób, których pensja podstawowa mieści poza przedziałem (1000,4000). where placa_pod not between 1000 and 4000; -------+------------+------------+----------+------+-------------------+-----------+-----------+--------- 1010 Józef PODGAJNY profesor 1000 1976-10-01 4180.00 420.00 20 1011 Stanisław PODGAJNY profesor 1010 1976-10-01 4180.00 420.00 20 1220 Stanisław DOŁEK profesor 1010 1986-10-01 4050.00 270.00 20 1020 Andrzej DELECKI profesor 1000 1986-10-01 4050.00 270.00 30 1110 Piotr TESTA stażysta 1020 2007-10-01 900.00 30 1211 Jacek WIŚNIEWSKI profesor 1020 1976-10-01 4180.00 420.00 30 1310 Aleksandra RAJCZYK profesor 1020 2007-10-01 4180.00 30 1130 Tadeusz DROBOSZ stażysta 1050 2007-10-01 900.00 40 1200 Kazimierz CZECH profesor 1050 1996-10-01 4160.00 570.00 40 1280 Anna WIŚNIEWSKA stażysta 1050 1993-10-01 900.00 40 1210 Kazimierz PODGÓRA profesor 1050 1976-10-01 4180.00 420.00 40 1330 Marek KOTOROWSKI stażysta 1050 2007-10-01 900.00 40 (12 rows) 5

11. Wyświetlić listę pracowników zespołów o identyfikatorach 10, 20, 30, dla których zarobki wynoszą co najmniej 4000. Zadanie wykonać dwoma metodami: stosując IN oraz operatory relacji i OR. where id_zesp IN (10,20,30) and placa_pod >= 4000; where (id_zesp=10 or id_zesp=20 or id_zesp=30) and placa_pod >= 4000; -------+------------+------------+----------+------+-------------------+-----------+-----------+--------- 1010 Józef PODGAJNY profesor 1000 1976-10-01 4180.00 420.00 20 1011 Stanisław PODGAJNY profesor 1010 1976-10-01 4180.00 420.00 20 1220 Stanisław DOŁEK profesor 1010 1986-10-01 4050.00 270.00 20 1020 Andrzej DELECKI profesor 1000 1986-10-01 4050.00 270.00 30 1211 Jacek WIŚNIEWSKI profesor 1020 1976-10-01 4180.00 420.00 30 1310 Aleksandra RAJCZYK profesor 1020 2007-10-01 4180.00 30 (6 rows) 12. Odwrócić warunek w poprzednim zadaniu stosując operator NOT oraz stosując prawa rachunku zdań. where id_zesp not in (10,20,30) and placa_pod < 4000; where (id_zesp<>10 and id_zesp<>20 and id_zesp<>30) and placa_pod < 4000; -------+---------+------------+----------+------+-------------------+-----------+-----------+--------- 1050 Jerzy LAKOCKI adiunkt 1050 1990-10-01 2790.00 40 1120 Anna ORKA asystent 1050 2001-10-01 1260.00 40 1130 Tadeusz DROBOSZ stażysta 1050 2007-10-01 900.00 40 1280 Anna WIŚNIEWSKA stażysta 1050 1993-10-01 900.00 40 1240 Tadeusz RUSEK adiunkt 1050 1993-10-01 2750.00 40 1330 Marek KOTOROWSKI stażysta 1050 2007-10-01 900.00 40 (6 rows) 13. Wyświetlić zarobki dla pracowników zatrudnionych na etacie profesora po '01-01-1994'. Nie uwzględniać pracowników z zespołu o identyfikatorze 40. where id_zesp<>40 and etat='profesor' and data_zatrudnienia >'1994-01-01'; -------+------------+----------+----------+------+-------------------+-----------+-----------+--------- 1310 Aleksandra RAJCZYK profesor 1020 2007-10-01 4180.00 30 (1 row) 14. Wyświetl informacje o tych pracownikach, którzy zarabiają powyżej 1000 złotych, posiadają szefa. Pomiń osoby z zespołów 20 i 30. where id_zesp not in (20,30) and szef is not null and placa_pod>1000; -------+-----------+----------+------------+------+-------------------+-----------+-----------+--------- 1080 Karol DROZD sekretarka 1000 1993-10-01 1150.00 10 1050 Jerzy LAKOCKI adiunkt 1050 1990-10-01 2790.00 40 1120 Anna ORKA asystent 1050 2001-10-01 1260.00 40 6

1200 Kazimierz CZECH profesor 1050 1996-10-01 4160.00 570.00 40 1210 Kazimierz PODGÓRA profesor 1050 1976-10-01 4180.00 420.00 40 1240 Tadeusz RUSEK adiunkt 1050 1993-10-01 2750.00 40 (6 rows) 15. Wyświetl informacje o tych pracownikach, którzy są zatrudnieni w zespole nr 20 i których nazwisko zaczyna się na M lub kończy na SKI. where id_zesp=20 and (nazwisko like '%SKI' or nazwisko like 'M%'); -------+-----------+------------+----------+------+-------------------+-----------+-----------+--------- 1040 Stanisław KOWALEWSKI adiunkt 1010 1993-10-01 2750.00 20 1001 Marcin MOCNY asystent 1010 1996-10-01 1400.00 570.00 20 1041 Marek KOWALEWSKI adiunkt 1010 1993-10-01 2750.00 20 1070 Piotr MOLANY adiunkt 1010 1989-10-01 2600.00 20 1060 Cezary MISIECKI asystent 1010 2004-10-01 1400.00 20 1260 Robert MISIECKI adiunkt 1010 2004-10-01 2600.00 20 1230 Janusz MALANOWSKI adiunkt 1010 1999-10-01 2750.00 20 (7 rows) 16. Wyświetl informacje o tych pracownikach, którzy nie są ani profesorami ani asystentami ani stażystami i którzy nie zarabiają w przedziale od 1150 do 2800 złotych. where etat not in ('asystent','stażysta','profesor') and (placa_pod not between 1150 and 2800); -------+-------+----------+----------+------+-------------------+-----------+-----------+--------- 1000 Józef MOCNY dyrektor 1996-10-01 3160.00 570.00 10 (1 row) 17. Wyświetl imię, nazwisko, etat, datę zatrudnienia, płacę miesięczną asystentów zatrudnionych po roku 1999, dla których suma płacy podstawowej i dodatkowej jest wyższa niż 1200 złotych. Wyniki uporządkuj według płacy podstawowej. Jeżeli dwóch pracowników ma tę samą płacę podstawową, to posortuj ich według nazwisk. select imie, nazwisko, etat, data_zatrudnienia, placa_pod+coalesce(placa_dod,0) miesiac where etat='asystent' and (placa_pod+coalesce(placa_dod,0) > 1200) and data_zatrudnienia >='2000-01-01' order by placa_pod,nazwisko; imie nazwisko etat data_zatrudnienia miesiac --------+----------+----------+-------------------+--------- Michał ARTIOMOW asystent 2001-10-01 1260.00 Anna ORKA asystent 2001-10-01 1260.00 Cezary MISIECKI asystent 2004-10-01 1400.00 (3 rows) 18. Wybrać dane osobowe osób, których nazwiska wpisane są małymi literami. where nazwisko = lower(nazwisko); -------+------+----------+------+------+-------------------+-----------+-----------+--------- (0 rows) 7

19. Wybrać dane osobowe osób, których nazwiska wpisane są wielkimi literami i zaczynają się na literę M. Nazwiska te wypisać wersalikami (pierwsza wielka litera). select initcap(nazwisko) where nazwisko = upper(nazwisko) and nazwisko like 'M%'; initcap ------------ Mocny Mocny Molany Misiecki Misiecki Malanowski Malesa Molany (8 rows) 20. Z tabeli pracownicy wybrać długości nazwisk i etatów dla każdego pracownika z zespołu 40. select length(nazwisko) dl_nazwisko, length(etat) dl_etat where id_zesp=40; dl_nazwisko dl_etat -------------+--------- 7 7 4 8 7 8 5 8 10 8 7 8 5 7 10 8 (8 rows) 21. Z tabeli pracownicy dla profesorów lub sekretarek wybrać nazwiska i ich początkowe 5 liter. select substr(nazwisko,1,5) where etat in ('sekretarka','profesor'); substr -------- DROZD PODGA PODGA DOŁEK DELEC WIŚNI RAJCZ CZECH PODGÓ (9 rows) 22. Wypisać nazwy zespołów usuwając z nich z lewej i prawej strony literkę a. select nazwa, trim(nazwa,'a') from zespoly; 8

nazwa btrim --------------------+-------------------- administracja dministracj bazy danych bazy danych sieci komputerowe sieci komputerowe systemy operacyjne systemy operacyjne grafika grafik (5 rows) 23. Wypisać różne drugie litery z nazwiska w tabeli Osoby. select distinct substr(nazwisko,2,1) litera_nazwisko ; litera_nazwisko ----------------- I Z R E Ł U O A (8 rows) 24. Wybrać imię, nazwisko i etat profesorów i asystentów, ale w ten sposób, że zamiast 'profesor' będzie wyświetlało się 'prof.', a zamiast 'asystent' 'mgr'. select imie, nazwisko, CASE WHEN etat='profesor' THEN 'Prof.' WHEN etat='asystent' THEN 'mgr' ELSE 'brak' END where etat in ('asystent','profesor'); imie nazwisko case ------------+------------+------- Józef PODGAJNY Prof. Marcin MOCNY mgr Michał DROZD mgr Stanisław PODGAJNY Prof. Cezary MISIECKI mgr Monika WOLAŃSKA mgr Michał DROBOSZ mgr Piotr GŁOWACKI mgr Stanisław DOŁEK Prof. Dariusz WARDECKI mgr Tadeusz KAMOCKI mgr Andrzej DELECKI Prof. Kamil WARSKI mgr Jacek WIŚNIEWSKI Prof. Jan MOLANY mgr Aleksandra RAJCZYK Prof. Michał ARTIOMOW mgr Anna ORKA mgr Kazimierz CZECH Prof. Kazimierz PODGÓRA Prof. (20 rows) 9

25. Wyświetlić rozdzielone kropkami inicjały (nazwiska plus etatu) każdego wpisanego do bazy adiunkta pisane dużymi literami, niezależnie od sposobu wpisania nazwiska i etatu tej osoby do bazy. select upper(substr(nazwisko,1,1)) '.' upper(substr(etat,1,1)) '.' as inicjaly where etat='adiunkt'; inicjaly ---------- K.A. K.A. M.A. M.A. M.A. M.A. L.A. R.A. L.A. R.A. B.A. (11 rows) 10