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

Podobne dokumenty
Język SQL. Rozdział 3. Funkcje wierszowe

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

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

PL/SQL. Funkcje wbudowane

Ćwiczenie 2 funkcje wierszowe

Język SQL. Rozdział 2. Proste zapytania

Bazy danych. Andrzej Łachwa, UJ, /14

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

Bazy danych 7/15. Andrzej Łachwa, UJ,

2. Język SQL SQL jest językiem deklaratywnym (Charakterystyczną cechą języków

osiągnął długość podaną jako drugi parametr. Jeśli wynik jest dłuższy niż zadeklarowana długość, zostaje ucięty z prawej strony.

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

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.

SQL do zaawansowanych analiz danych część 1.

Administracja i programowanie pod Microsoft SQL Server 2000

Wykład 8 Implementacja języka SQL w systemach baz danych Oracle specyficzne konstrukcje i funkcje Oracle SQL, funkcje numeryczne, znakowe, daty i

Bazy danych 6. SQL funkcje daty i czasu, zmienne tymczasowe, aliasy

1 Wprowadzenie do języka SQL 1. 2 Podstawowe elementy języka 3. 3 DML - zapytania, część I 6. 4 Źródła 12

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

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

Ściągawka z funkcji i właściwości systemowych VBA. Opis działania i parametrów. Nazwa funkcji. Składnia zwracanej wartości

Wprowadzania liczb. Aby uniknąć wprowadzania ułamka jako daty, należy poprzedzać ułamki cyfrą 0 (zero); np.: wpisać 0 1/2

Wprowadzenie do języka SQL

Klasyczna Analiza Danych

1 Wprowadzenie do funkcji

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Zajęcia 2 podstawy języka SQL

Wymagania: Konstrukcja prostych zapytań w języku SQL, umiejętność wykorzystania funkcji wierszowych i agregujących.

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

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

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

Widok Connections po utworzeniu połączenia. Obszar roboczy

Autor: dr inż. Katarzyna Rudnik

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

Zagadnienia podstawowe

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

Wprowadzenie do baz danych

Temporalne bazy danych

2 Przygotował: mgr inż. Maciej Lasota

Bazy danych SQL Server 2005

Optymalizacja poleceń SQL Metody dostępu do danych

Spis treści. 1 Kraj/region i język Ustawienia regionalne Liczby Waluta Czas i data Inne...

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

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

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

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

Plan wykładu PL/SQL. PL/SQL - historia TWORZENIE APLIKACJI BAZODANOWYCH

Programowanie w SQL. definicja bloku instrukcji BEGIN...END, warunkowe wykonanie instrukcji IF...ELSE, wyrażenie CASE,

Typy Oracle atrybutów relacji Typ NUMBER (1)

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

Typy Oracle atrybutów relacji Typ NUMBER (1)

Przestrzenne bazy danych Podstawy języka SQL

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

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

Bazy danych 2. Anna Fiedorowicz Wydział Matematyki, Informatyki i Ekonometrii

Język SQL. Rozdział 7. Zaawansowane mechanizmy w zapytaniach

Język SQL, zajęcia nr 1

Zaawansowany SQL. Robert A. Kłopotek Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW

Bazy danych. Plan wykładu. Dekompozycja relacji. Anomalie. Wykład 5: Projektowanie relacyjnych schematów baz danych. SQL - funkcje grupujce

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

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

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

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

1. ELEMENTY JĘZYKA PL/SQL

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

Systemy GIS Tworzenie zapytań w bazach danych

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

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

S Instrukcje rozszerzone oraz umożliwiające operacje na znakach i łańcuchach. Automatyka i mechatronika

Wykład 5. SQL praca z tabelami 2

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

Bloki anonimowe w PL/SQL

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

Przegląd podstawowych funkcji Excel.

Plan wykładu BAZY DANYCH II WYKŁAD 2. Bloki. Struktura bloku

Autor: Joanna Karwowska

Optymalizacja poleceń SQL Wprowadzenie

Paweł Rajba

Autor: Joanna Karwowska

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

Oracle11g: Wprowadzenie do SQL

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

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

Podstawowe zapytania SELECT (na jednej tabeli)

Kurs. Podstawy MySQL

XQuery. sobota, 17 grudnia 11

Zadania z SQLa (MS SQL Server)

Ref. 7 - Język SQL - polecenia DDL i DML

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

Pakiety podprogramów Dynamiczny SQL

Bazy danych 7. SQL podstawy

Ćwiczenie zapytań języka bazy danych PostgreSQL

Podstawy Informatyki Wykład X

PL/SQL. Lidia Małkiewicz i Cezary Skubała

Język PL/SQL. Rozdział 6. Procedury wyzwalane

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

Technologie baz danych

Autor: Joanna Karwowska

LibreOffice Calc VBA

Transkrypt:

Język SQL. Rozdział 3. Zaawansowana selekcja danych Selekcja wg wartości elementów czasowych, ciągów znaków i liczb. Konstrukcja warunkowa. 1

Funkcje Przekształcają dane, pobrane przez polecenie SQL, lub wyliczają nowe dane. Funkcje wierszowe operują na wartościach atrybutów jednego rekordu, funkcja zwraca tyle wyników ile rekordów przetwarza polecenie SQL, Podział ze względu na pochodzenie: funkcje predefiniowane, funkcje użytkownika. Miejsce użycia: SELECT atrybut_1, funkcja_a(wyrażenie_1, wyrażenie_2) AS wynik FROM nazwa_relacji WHERE funkcja_b(wyrażenie_3) operator wyrażenie_4 ORDER BY funkcja_c; 2

Typy dla elementów czasowych ANSI SQL Typy: DATE punkt w czasie z dokładnością do dnia, TIME punkt w czasie z dokładnością do części ułamkowych sekundy bez daty, TIMESTAMP połączenie DATE i TIME, INTERVAL okres czasu. Implementacje w różnych SZBD: MS SQL Server MySQL OracleDB PostgreSQL DATE + + + (1) + TIME + + - + TIMESTAMP - + + + INTERVAL - - + + (1) zawiera dodatkowo czas z dokładnością do sekundy 3

Selekcja wg daty DATE 'literał' specyfikuje literał określający datę: format: RRRR-MM-DD, brak elementów określających czas. Przykłady: 1 lipca 2010 r. DATE '2010-07-01' 29 lutego 2016 r. DATE '2016-02-29' Użycie: SELECT nazwisko, zatrudniony FROM pracownicy WHERE zatrudniony < DATE '1970-01-01'; SELECT nazwisko, zatrudniony FROM pracownicy WHERE zatrudniony BETWEEN DATE '1990-01-01' AND DATE '1999-12-31'; 4

Selekcja wg czasu TIME 'literał' specyfikuje literał określający czas: format HH:MI:SS.MMMM, brak wsparcia w OracleDB. Przykłady: 13:46:50 TIME '13:46:50' 23:59:4.43 TIME '23:59:4.43' Użycie: SELECT czas_poczatku, czas_konca FROM harmonogram WHERE czas_poczatku BETWEEN TIME '08:00:00' AND TIME '16:00:00'; 5

Selekcja wg znacznika czasowego TIMESTAMP 'literał' literał określający znacznik czasowy: format: RRRR-MM-DD HH:MI:SS.MMMM. Przykłady: 1 lipca 2010 r. 13:46:50 TIMESTAMP '2010-07-01 13:46:50' 16 lutego 2018 8:00 TIMESTAMP '2018-02-16 08:00:00' Użycie: SELECT ip, nazwa_strony FROM log WHERE data_wyswietlania > TIMESTAMP '2017-01-01 00:00:00'; 6

Interwał czasowy Różnica dwóch elementów określających moment czasie: SELECT nazwisko, DATE '2000-01-01' - zatrudniony AS staz_w_2000_r FROM pracownicy ORDER BY nazwisko; Podtypy w zależności od użytych jednostek: YEAR TO MONTH jednostki: lata i miesiące, domyślna precyzja: YEAR(2), sposób prezentacji: +lata-miesiące, np.: +10-6, +5-11, DAY TO SECOND jednostki: od dni do części ułamkowych sekundy, domyślna precyzja: DAY(2),SECOND(6), sposób prezentacji: +dni godziny:minuty:sekundy.częściułamkowesekund, np. +15 23:33:04.45, +7 00:00:03.00. 7

Selekcja wg interwału czasowego INTERVAL 'literał' podtyp_interwału specyfikuje literał określający interwał, podtypy interwału: YEAR TO MONTH domyślna precyzja: YEAR(2), DAY TO SECOND domyślna precyzja: DAY(2), SECOND(6). Przykłady: INTERVAL 4 5:12 DAY TO MINUTE 4 dni, 5 godzin i 12 minut, INTERVAL 400 5 DAY(3) TO HOUR 400 dni i 5 godzin, INTERVAL 10 HOUR 10 godzin, INTERVAL 10:22 MINUTE TO SECOND 10 minut 22 sekundy, INTERVAL 10 MINUTE 10 minut, INTERVAL 30.12345 SECOND(2,5) 30,12345 s, INTERVAL 1-6 YEAR TO MONTH półtora roku, INTERVAL 100-2' YEAR(3) TO MONTH 100 lat i 2 miesiące. SELECT nazwisko, DATE '2000-01-01' - zatrudniony AS staz_w_2000_r FROM pracownicy WHERE DATE '2000-01-01' - zatrudniony > INTERVAL '10-6' YEAR TO MONTH; 8

Selekcja wg interwału czasowego Uwaga! W OracleDB różnica dwóch dat daje w wyniku liczbę dni. Konieczna jawna konwersja do interwału: SELECT nazwisko, (DATE '2000-01-01' - zatrudniony) YEAR TO MONTH AS staz_w_2000_r FROM pracownicy WHERE (DATE '2000-01-01' zatrudniony) YEAR TO MONTH > INTERVAL '10-6' YEAR TO MONTH; 9

Użycie funkcji dla elementów czasowych Funkcja EXTRACT wydobywa z el. czasowego jeden ze składników: Składnia: EXTRACT(YEAR/MONTH/DAY/HOUR/MINUTE/SECOND/ TIMEZONE_HOUR/TIMEZONE_MINUTE/TIMEZONE_REGION/ TIMEZONE_ABBR FROM data/czas/interwał) UWAGA! Z wartości typu DATE możesz wydobyć jedynie elementy YEAR, MONTH i DAY. Przykład: SELECT nazwisko, zatrudniony FROM pracownicy WHERE EXTRACT(YEAR FROM zatrudniony) BETWEEN 1990 AND 1999; 10

Użycie funkcji dla elementów czasowych Funkcja TO_DATE przekształca ciąg znaków do daty: Składnia: TO_DATE(ciąg_znaków,format_konwersji) Elementy ciągu formatującego: Przykład: SCC Stulecie D DD DDD Dzień YYYY Rok DAY Nazwa dnia BC AD Wskaźnik ery AM PM Wskaźnik pory dnia MM Miesiąc HH HH24 Godziny MON Skrót nazwy m-ca MI Minuty MONTH Nazwa miesiąca SS Sekundy SELECT nazwisko, zatrudniony FROM pracownicy WHERE zatrudniony < TO_DATE('01/01/1970', 'DD/MM/YYYY'); 11

Prezentacja daty w różnych formatach Funkcja TO_CHAR przekształca datę do ciągu znaków wg zadanego formatu konwersji: Składnia: TO_CHAR(data,format_konwersji) Elementy ciągu formatującego identyczne jak dla funkcji TO_DATE. Wielkość liter w ciągu formatującym ma znaczenie, np. MON vs mon ("STY" vs "sty"). Elementy MONTH i DAY zwracają, odpowiednio, nazwę miesiąca i dnia, dopełnione spacjami do długości najdłuższej nazwy, odpowiednio, miesiąca i dnia. Elementy bez dopełnienia: fmmonth i fmday. Przykład: SELECT nazwisko, TO_CHAR(zatrudniony, 'dd month yyyy') AS zatrudniony FROM pracownicy ORDER BY nazwisko; -- Użycie do selekcji SELECT nazwisko FROM pracownicy WHERE TO_CHAR(zatrudniony, 'DD fmday') = '13 PIĄTEK'; 12

Pozostałe funkcje operujące na datach CURRENT_DATE bieżąca data systemowa. CURRENT_TIME bieżący czas systemowy. CURRENT_TIMESTAMP bieżący znacznik czasowy. MONTHS_BETWEEN(data1,data2) liczba miesięcy jakie upłynęły między datami. ADD_MONTHS(data,n) data plus n miesięcy kalendarzowych. NEXT_DAY(data,dzień) następna data po podanej, przypadająca na podany dzień. LAST_DAY(data) data ostatniego dnia w miesiącu podanej daty. Przykład: SELECT nazwisko, CURRENT_DATE - zatrudniony AS staz FROM pracownicy ORDER BY staz DESC; SELECT LAST_DAY(DATE '2018-02-01') FROM dual; SELECT nazwisko FROM pracownicy WHERE MONTHS_BETWEEN(CURRENT_DATE, zatrudniony) <= 12; 13

Selekcja wg ciągów znaków Warunek niezależny od wielkości liter funkcje UPPER(ciąg_znaków) i LOWER(ciąg_znaków) SELECT nazwisko, zatrudniony FROM pracownicy WHERE UPPER(nazwisko) = 'KONOPKA'; SELECT nazwisko, zatrudniony FROM pracownicy WHERE LOWER(nazwisko) = 'konopka'; Selekcja wg podciągu funkcja SUBSTR(ciąg,od_pozycji, [długość]) SELECT nazwa, adres FROM zespoly WHERE SUBSTR(nazwa, 1, 7) = 'SYSTEMY'; SELECT nazwisko FROM pracownicy WHERE SUBSTR(nazwisko, -3) = 'ICZ'; 14

Selekcja wg ciągów znaków Wyszukanie podciągu funkcja INSTR(ciąg,ciąg_szukany,od_pozycji,wystąpienie) SELECT nazwa FROM zespoly WHERE INSTR(nazwa, ' ', 1, 1) > 0; SELECT SUBSTR(nazwa, 1, INSTR(nazwa, ' ', 1, 1)-1) FROM zespoly WHERE INSTR(nazwa, ' ', 1, 1) > 0; Selekcja wg długości ciągu funkcja LENGTH(ciąg) SELECT nazwisko FROM pracownicy WHERE LENGTH(nazwisko) > 10; 15

Pozostałe funkcje operujące na ciągach TRIM([LEADING TRAILING BOTH] znak FROM ciąg) usuwa podany znak z początku (LEADING), końca (TRAILING) bądź obu końców (BOTH) ciągu znaków. SELECT TRIM(LEADING 'A' FROM nazwa), TRIM(TRAILING 'E' FROM nazwa) FROM zespoly; LPAD(ciąg,długość,znaki) dopełnia ciąg z lewej strony znakami do danej długości. RPAD(ciąg,długość,znaki) dopełnia ciąg z prawej strony znakami do danej długości. SELECT LPAD(nazwisko, 15, '*') FROM pracownicy; 16

Pozostałe funkcje operujące na ciągach REPLACE(ciąg,ciąg_szukany,ciąg_nowy) zamiana podciągów w ciągu. SELECT REPLACE(nazwisko, 'ICZ', 'SKI') FROM pracownicy WHERE nazwisko LIKE '%ICZ'; TRANSLATE(ciąg,szukane_znaki,znaki_zastępujące) zamienia w ciągu wszystkie szukane znaki na znaki zastępujące. SELECT TRANSLATE(nazwisko, 'ĄĆĘŁŃÓŚŹŻ', 'ACELNOSZZ') FROM pracownicy; SELECT TRANSLATE(nazwa, 'AEO', 'EA') FROM zespoly; 17

Funkcje operujące na liczbach ROUND(liczba,[n]) zaokrągla liczbę do n miejsc ułamkowych. SELECT nazwisko, ROUND(placa_pod/30,2) AS dniówka FROM pracownicy; SELECT nazwisko, placa_pod, ROUND(placa_pod,-3) AS najbliższy_1000 FROM pracownicy; TRUNC(liczba,[n]) obcina liczbę do n miejsc ułamkowych. CEIL(liczba) najmniejsza liczba całkowita większa lub równa od podanej liczby FLOOR(liczba) największa liczba całkowita mniejsza lub równa od podanej liczby. 18

Funkcje operujące na liczbach POWER(wartość,n) wartość do n-tej potęgi. SQRT(wartość) pierwiastek kwadratowy z wartości. ABS(wartość) wartość bezwzględna wyrażenia. MOD(wartość1, wartość2) reszta z dzielenia. SIGN(wartość) zwraca -1 jeśli wartość<0, 0 dla wartości=0 i 1 jeśli wartość>0. GREATEST(w1,w2, ) zwraca największą wartość z listy wartości. LEAST(w1,w2, ) zwraca najmniejszą wartość z listy wartości. SELECT nazwisko, LEAST(placa_pod, NVL(placa_dod, 0)) AS większe FROM pracownicy; 19

Konwersja wartości CAST(wartość AS typ) konwertuje wartość do zadanego typu. SELECT 'Pracownik ' nazwisko ' zarabia ' CAST(placa_pod AS VARCHAR(10)) AS zarobki FROM pracownicy; TO_CHAR(data,format) konwertuje datę do ciągu znaków wg zadanego formatu. TO_DATE(ciąg,format) konwertuje ciąg znaków do daty wg zadanego formatu. 20

Konwersja wartości TO_CHAR(liczba,format) konwertuje liczbę do ciągu znaków wg zadanego formatu. TO_NUMBER(ciąg,format) konwertuje ciąg znaków do liczby wg zadanego formatu. D G separator części całkowitej od ułamkowej separator elementów liczby, np. tysięcy od milionów 9 określa pozycję w liczbie, zera z lewej strony są pomijane Przykład: 0 określa drukowanie zera z lewej lub prawej strony liczby SELECT nazwisko, TO_CHAR(placa_pod, '9G999D00') AS zarobki FROM pracownicy; 21

Instrukcja warunkowa CASE-WHEN Wersja z selektorem i wersja z warunkami logicznymi: CASE wyrażenie WHEN wartość 1 THEN wartość 1 WHEN wartość 2 THEN wartość 2 [ELSE wartość n ] END Przykład: SELECT nazwisko, CASE etat WHEN 'DYREKTOR' THEN '***' WHEN 'PROFESOR' THEN '***' ELSE CAST(placa_pod AS VARCHAR(10)) END AS placa_pod FROM pracownicy; CASE WHEN warunek 1 THEN wartość 1 WHEN warunek 2 THEN wartość 2 [ELSE wartość n ] END SELECT nazwisko, CASE WHEN etat IN ('DYREKTOR','PROFESOR') THEN '***' ELSE CAST(placa_pod AS VARCHAR(10)) END AS placa_pod FROM pracownicy; 22

Wiadomości uzupełniające 23

Funkcja DECODE DECODE(wyrażenie,S1,W1,[S2,W2,...] domyślne) Pokrywa część funkcjonalności wyrażenia CASE-WHEN. Funkcja specyficzna dla OracleDB. Przykład: SELECT nazwisko, DECODE(etat, 'PROFESOR', '***', 'DYREKTOR', '***', CAST(placa_pod AS VARCHAR(10))) AS placa_pod FROM pracownicy; 24