LOAD DATA – czyli jak załadować (wczytać) dane z pliku do bazy mysql – Kurs języka SQL (mySQL)

W niniejszym artykule dowiemy się jak w jaki sposób możemy załadować zawartość pliku do bazy mySQL. Dokonamy tego przy pomocy polecenia: LOAD DATA.

Jego składnia w podstawowej formie jest następująca:

LOAD DATA INFILE 'nazwa_pliku.txt' INTO TABLE nazwa_tabeli;

Powyższe zapytanie załaduje nam dane z pliku “nazwa_pliku.txt” do tabeli o nazwie “nazwa_tabeli”. W powyższym przypadku, jeżeli nie mamy dodatkowych parametrów pola w pliku muszą być rozdzielone znakiem tabulatora, nie powinny być ujęte w cudzysłów oraz znak entera musi być znakiem końca linii.

...
235 Adam Kowalski 210 15 pracownik produkcyjny
236 Piotr Testowy 112 25 pracownik ksiegowosci
...

Zatem dla tabeli pracownik zapytanie będzie miało następującą postać:

LOAD DATA INFILE 'pracownik_plik.txt' INTO TABLE pracownik;

Jeżeli chcielibyśmy określić parametry importu takiej jak separator (FIELDS TERMINATED BY), cudzysłów (ENCLOSED BY) czy znak końca linii (LINES TERMINATED) wtedy składnia polecenia będzie wyglądać następująco:

LOAD DATA INFILE 'nazwa_pliku.txt' INTO TABLE nazwa_tabeli FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n';

...
"235","Adam","Kowalski","210","15","pracownik produkcyjny"
"236","Piotr","Testowy","112","25","pracownik ksiegowosci"
...

Zatem dla pliku z separatorami (przecinek), gdzie wartości ujęte są w cudzysłowia polecenie przyjmuje postać:

LOAD DATA INFILE 'pracownik_plik_separator.txt' INTO TABLE pracownik FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

Czasami zdarza się, że plik który chcemy załadować posiada tzw. linię nagłówka, której nie chcemy ładować do bazy danych. Oczywiście możemy skorzystać z dodatkowego parametru podczas ładowania pliku do bazy danych, który spowoduje że określona liczba linii (licząc od góry) nie zostanie załadowana do bazy danych. Wystarczy wtedy do na końcu polecenia dodać: IGNORE 1 LINES. Jeżeli chcielibyśmy pominąć większą liczbę linii wystarczy zamienić 1 na interesującą nas wartość. Składnia polecenia ładującego dane z pliku z pominięciem pierwszej linii będzie zatem następująca:

LOAD DATA INFILE 'pracownik_plik.txt' INTO TABLE pracownik IGNORE 1 LINES;

LOAD DATA INFILE 'nazwa_pliku.txt' INTO TABLE nazwa_tabeli FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;

CASE WHEN, IF, IFNULL, NULLIF – funkcje warunkowe mySQL – Kurs języka SQL (mySQL)

W poniższym kursie omówię zastosowanie instrukcji warunkowych (CASE WHEN, IF, IFNULL, NULLIF) używanych w języku mySQL wraz z przykładami.

W przykładach będziemy opierać się o następującą tabelę pracownik:

id_pracownika imie nazwisko godzin stawka stanowisko
234 Jan Nowak 164.0 12.36 pracownik socjalny
235 Adam Kowalski 210.0 15.00 pracownik produkcyjny
236 Piotr Testowy 112.0 25.00 pracownik produkcyjny
237 Maciej Problemowy 10.0 13.00 null

Poniżej kod do tej utworzenie oraz uzupełnienia:

CASE … WHEN … END – jeżeli jakiś warunek jest spełniony to wykonaj/wyświetl wartość 1 w przeciwnym wypadku wykonaj/wyświetl wartość 2

Konstrukcja funkcji CASE WHEN jest następująca:

CASE [pole] WHEN wartosc1 THEN wynik1 [WHEN [wartosc2] THEN wynik2 …] [ELSE wynikN] END

CASE WHEN [warunek] THEN wynik1 [WHEN [nastepny warunek] THEN wynki2 …] [ELSE wynikN] END

Różnica jest między nimi jest taka, że dla pierwszego warunku porównanie odbywa się na zasadzie “równa się”, czy następuje sprawdzenie czy podana wartość dokładnie równa się założonej.
W drugim warunku można sprawdzać czy podana wartość jest mniejsza, więszka, równa, różna od założonej.

W funkcji CASE sprawdzane warunki można ze sobą łączyć przy pomocy znaków (warunków logicznych) “||” (OR) oraz “&&” (AND).

|| lub OR, czyli do spełnienia całości warunku wystarczy, że jeden z warunków będzie spełniony
&& lub AND, czyli każdy z warunków podanych musi być spełniony

1. Wyświetl następujące informację o pracownikach: imię, nazwisko oraz czy ich wynagrodzenie (stawka) jest “NIZSZA”, “WYZSZA” czy “ROWNA” 15 (zł).

SELECT imie, nazwisko, stawka, CASE WHEN stawka<15 THEN 'NIZSZA' WHEN stawka>15 THEN 'WYZSZA' WHEN stawka=15 THEN 'ROWNA' END as wynik FROM pracownik;

SELECT imie, nazwisko, stawka, CASE WHEN stawka<15 THEN 'NIZSZA' WHEN stawka>15 THEN 'WYZSZA' ELSE 'ROWNA' END as wynik FROM pracownik;

2. Wyświetl następujące informację o pracownikach: nazwisko, długość nazwiska oraz informacje czy ich nazwisko jest DLUZSZE niż 5 znaków. Jeżeli nazwisko jest krótsze bądź równie 5 znaków nie wyświetlaj żadnej informacji.

SELECT nazwisko, LENGTH(nazwisko), CASE WHEN LENGTH(nazwisko)>5 THEN 'DLUZSZE' END as wynik FROM pracownik;

SELECT nazwisko, LENGTH(nazwisko), CASE WHEN LENGTH(nazwisko)>5 THEN 'DLUZSZE' ELSE '' END as wynik FROM pracownik;

3. Wyświetl informację: stawka oraz czy reszta ze stawki podzielonej przez “5” jest równa “0” – “ZERO” czy “ROZNA OD ZERA”

SELECT stawka, CASE WHEN stawka MOD 5 = 0 THEN 'ZERO' ELSE 'ROZNA OD ZERA' END as wynik FROM pracownik;

SELECT stawka, CASE stawka MOD 5 WHEN 0 THEN 'ZERO' ELSE 'ROZNA OD ZERA' END as wynik FROM pracownik;

4. Wyświetl informację czy pierwsza litera nazwiska to ‘N’ lub ‘K’ czy też “INNA”

SELECT nazwisko, CASE WHEN left(nazwisko,1) IN ('N','K') THEN 'N lub K' ELSE 'INNA' END FROM pracownik

SELECT nazwisko, CASE WHEN left(nazwisko,1) = 'N' OR LEFT(nazwisko,1)= 'K' THEN 'N lub K' ELSE 'INNA' END FROM pracownik

SELECT nazwisko, CASE WHEN LEFT(nazwisko,1) = 'N' || LEFT(nazwisko,1)= 'K' THEN 'N lub K' ELSE 'INNA' END FROM pracownik

IF – jest kolejną funkcją warunkową. Jej składnia jest następująca:

IF(warunek;gdy_spelniony;gdy_niespelniony)

W skrócie, jeżeli podany warunek zostanie spełniony wtedy wyświetl/wykonaj to co jest umieszczone w “gdy_spelniony” w przeciwnym przykadku wyświetl/wykonaj to co jest umieszczone w “gdy_niespelniony”.
Różnica pomiędzy funkcją CASE WHEN, a IF jest taka, że w przypadku pierwszej możemy stosować wiele warunków (WHEN [wartosc] THEN [wynik]),
zaś przypadku drugiej albo coś spełnia warunek albo nie (IF(warunek;true;false)).

W funkcji IF sprawdzane warunki można ze sobą łączyć przy pomocy znaków (warunków logicznych) “||” oraz “&&”.

|| – oznacza OR, czyli do spełnienia całości warunku wystarczy, że jeden z warunków będzie spełniony
&& – oznacza AND, czyli każdy z warunków podanych musi być spełniony

Przejdźmy do przykładów. Będziemy się w nich opierać o wspomnianą wcześniej tabelę pracownik.

1. Przy wykorzystaniu funkcji IF wyświetl informację: stawka oraz czy reszta ze stawki podzielonej przez “5” jest równa “0” – “ZERO” czy “ROZNA OD ZERA”

SELECT stawka, IF(stawka MOD 5 = 0,'ZERO','ROZNA OD ZERA') FROM pracownik;

2. Wyświetl następujące informację o pracownikach: nazwisko, długość nazwiska oraz informacje czy ich nazwisko jest DLUZSZE niż 5 znaków. Jeżeli nazwisko jest krótsze bądź równie 5 znaków nie wyświetlaj żadnej informacji.

SELECT nazwisko, LENGTH(nazwisko), IF(LENGTH(nazwisko)>5,'DLUZSZE','') FROM pracownik;

SELECT nazwisko, LENGTH(nazwisko), IF(LENGTH(nazwisko)>5,'DLUZSZE',null) FROM pracownik;

3. Zakładając, że prawidłowa liczba godzin w miesiącu to 164 wyswietl informację który z pracowników (imie, nazwiko) “PRZEPRACOWAL”, a który “NIE PRZEPRACOWAL” tylu godzin.

SELECT imie, nazwisko, IF(godzin=164,'PRZEPRACOWAL','NIE PRZEPRACOWAL') FROM pracownik;

SELECT imie, nazwisko, IF(godzin!=164,'NIE PRZEPRACOWAL','PRZEPRACOWAL') FROM pracownik;

SELECT imie, nazwisko, IF(godzin<164 || godzin>164,'NIE PRZEPRACOWAL','PRZEPRACOWAL') FROM pracownik;

SELECT imie, nazwisko, IF(godzin<164 OR godzin>164,'NIE PRZEPRACOWAL','PRZEPRACOWAL') FROM pracownik;

4. Wyświetl informację czy dwie pierwsze litera nazwiska to ‘No’ czy też “INNE”

SELECT nazwisko, IF(LEFT(nazwisko,2) = 'No', 'NO', 'INNE') FROM pracownik;

SELECT nazwisko, IF(MID(nazwisko,1,2) = 'No', 'NO', 'INNE') FROM pracownik;

SELECT nazwisko, IF(SUBSTR(nazwisko,1,2)= 'No', 'NO', 'INNE') FROM pracownik;

SELECT nazwisko, IF(MID(nazwisko,1,1) = 'N' AND MID(nazwisko,2,1) = 'o', 'NO', 'INNE') FROM pracownik;

IFNULL – funkcja sprawdza czy dana wartość/kolumna przyjmuje wartość null. Jej składnia jest następująca:

IFNULL(kolumna,wynik)

Jeżeli kolumna przyjmuje wartość null wtedy zwracany jest “wynik” w przeciwnym przypadku wartosc z kolumny

Przykłady:

1. Wyświetl informacje imie, nazwisko pracownika oraz informacje o statnowisku (które z nich jest wartością null – gdzie BRAK informacji o statnowisku)

SELECT imie, nazwisko, IFNULL(stanowisko,'BRAK') FROM pracownik;

NULLIF – funkcja sprawdza czy dana podana wartość/kolumna przyjmuje określoną wartość. Jeżeli warunek jest spełniony funkcja zwraca null w przeciwnym przypadku.
Składnia funkcji NULL jest następująca:

NULLIF(kolumna,wartosc)

Przykład:

1. Wyświetl imie oraz wykorzystując funkcję NULLIF sprawdź czy imię z tabeli to “Jan”. Funkcja NULLIF zwróci dla rekordu gdzie imie=’Jan’ wartość null.

SELECT imie, nazwisko, NULLIF(imie,'Jan') FROM pracownik;

Funkcje matematyczne mySQL – Kurs języka SQL (mySQL)

ABS() – funcja zwracająca wartość bezwzględną podanej liczby

SELECT ABS(-56); -- 56

ACOS() – funkcja zwraca wartość arcus cosinus dla podanego argumentu

SELECT ACOS(0.32); -- 1.2450668395002664

ASIN() – funkcja zwraca wartość arcus sinus dla podanego argumentu

SELECT ASIN(0.32); -- 0.3257294872946302

ATAN() lub ATAN2() – funkcja zwraca wartość arcus tangens dla podanego argumentu bądź argumentów

SELECT ATAN(0.32); -- 0.3097029445424562

SELECT ATAN2(0.32, 0.32); -- 0.7853981633974483

CEIL() lub CEILING() – zaokrąglenie w górę do pełnej wartości całkowitej

SELECT CEIL(0.32); -- 1
SELECT CEILING(0.32); -- 1

CONV() – konwersja wartości pomiędzy podanymi systemami. W poniższym przykładzie konwertujemy liczbę “9” z systemu dziesiętnego na dwójowy otrzymując: “1001” oraz liczbę “ABC” zapisaną w systemie szesnastkowym do systemu dziesiętnego otrzymując “2748”.

SELECT conv(9,10,2); -- 1001
SELECT conv('ABC',16,10); -- 2748

SIN() – zwraca wartość funkcji sinus dla podanej wartości kąta w radianach

SELECT SIN(90); -- 0.8939966636005579

SELECT SIN(RADIANS(90)); -- 1

COS() – zwraca wartość funkcji cosinus dla podanej wartości kąta w radianach

SELECT COS(60); -- -0.9524129804151563

SELECT COS(RADIANS(60)); -- 0.5

TAN() – zwraca wartość funkcji tangens dla podanej wartości kąta w radianach

SELECT TAN(45); -- 1.6197751905438615

SELECT TAN(RADIANS(45)); -- 1

COT() – zwraca wartość funkcji cosinus dla podanej wartości kąta w radianach

SELECT COT(45); -- 0.6173696237835551

SELECT COT(RADIANS(45)); -- 1

CRC32() – funkcja do wyznaczenia sumy kontrolnej z podanego ciągu

SELECT CRC32('To jest tekst do wyznaczenia sumy kontrolnej'); -- 1504910483

DEGREES() – konwersja radianów na stopnie

SELECT DEGREES(1.5707963267948966); -- 90

RADIANS() – konwersja stopni na radiany

SELECT RADIANS(90) -- 1.5707963267948966

DIV() – operator dzielenia (wynikiem dzielenia jest wartość całkowita) – bez wartości dziesiętnej

SELECT 8 div 3 -- 2

EXP() – funkcja zwracająca wartość “e”, odwrotność funkcji LOG()/LN()

SELECT EXP(1); -- 2.718281828459045

SELECT EXP(2.0794415416798357) -- 7.999999999999998

FLOOR() – zaokrąglenie w dół do pełnej wartości całkowitej

SELECT FLOOR(4.32); -- 4

LN() – logarytm z podanej liczby

SELECT LN(8) -- 2.0794415416798357

LOG() – funkcja wyznaczająca logarytm dla podanych argumentów, czyli do jakiej liczby podnieść “2” aby otrzymać “8”

SELECT LOG(2,8) -- 3

LOG10() – funkcja wyznaczająca logarytm dzieśiętny dla podanego argumentu, czyli do jakiej liczby podnieść “10” aby otrzymać “100”

SELECT LOG10(100) -- 2

LOG2() – funkcja wyznaczająca logarytm dwójkowy dla podanego argumentu, czyli do jakiej liczby podnieść “2” aby otrzymać “8”

SELECT LOG2(8) -- 3

+ – operator dodawania

SELECT 1+1; -- 2

– operator odejmowania

SELECT 1-1; -- 0

* – operator mnożenia

SELECT 3*2; -- 6

/ – operator dzielenia

SELECT 3/124; -- 0.0242

MOD() lub % – reszta z dzielenia

SELECT 8 MOD 3 -- 2
SELECT 8 % 3 -- 2

PI() – funkcja zwraca wartość Pi

SELECT PI(); -- 3.141593

POW() lub POWER() – zwraca wartośc podanej liczby podniesionej do określonej potęgi. W poniższym przypadku “2” podniesione do potęgi “8” daje “256”.

SELECT POW(2,8); -- 256
SELECT POWER(2,8); -- 256

RAND() – funkcja generująca wartość losową

SELECT rand(); -- 0.9159928401149743

ROUND() – zaokrąglenie podanej wartości do określonej liczby miejsc po przecinku. Bez parametru wartość zaokrąglana jest do liczby całkowitej.

SELECT ROUND(123.6543); -- 124
SELECT ROUND(123.6543,2) -- 123.65
SELECT ROUND(323.6563834874,4) -- 323.6564

SIGN() – funkcja zwracająca znak dla podanej wartości. Gdy wartość jest mniejsza od zera zwraca “-1”, gdy zero zwraca “0”, gdy większa od zera zwraca “1”

SELECT SIGN(-1212); -- -1
SELECT SIGN(212); -- 1

SQRT() – zwraca pierwiastek kwadratowy z podanej liczby

SELECT SQRT(9); -- 3

TRUNCATE() – funkcja “obcinająca” części dziesiętne (bez zaokrąglania), gdy podany parametr jest większy od “0”, lub “zerująca” części całkowite gdy parametr mniejszy od “0”

SELECT TRUNCATE(1.263,2); -- 1.26
SELECT TRUNCATE(126331,-3); -- 126000

Funkcje tekstowe mySQL – Kurs języka SQL (mySQL)

Funkcje tekstowe SQL wraz z przykładami

Poniżej przykładowa tabelka pracownik, która posłuży nam do niektórych przykładowych zapytań SQL:

id imie nazwisko godzin stawka stranowisko
234 Jan Kowalski 164 12.36 pracownik socjalny

Funkcje tekstowe SQL zostały podzielone w zależności od ich zastosowania.

Wielkość liter

LOWER() lub LCASE() – zamienia wszystkie litery w podanym ciągu (bądź kolumnie) na małe litery

SELECT LOWER('DAMIAN'); -- damian

SELECT LOWER(nazwisko) FROM pracownik; -- nowak

UPPER() lub UCASE() – zamienia wszystkie litery w podanym ciągu (bądź kolumnie) na drukowane (wielkie litery)

SELECT UPPER('damian'); -- DAMIAN

SELECT UPPER(nazwisko) FROM pracownik; -- NOWAK

Długość ciągu

BIT_LENGTH() – funkcja zwraca długość ciągu podaną w bitach

SELECT BIT_LENGTH('abcd'); -- 32

LENGTH() lub CHAR_LENGTH() lub CHARACTER_LENGTH() lub OCTET_LENGTH() – funkcja zwraca długość ciągu podanego jako argument. Najczęściej używa się funkcji LENGTH pozostałe realizują taką samą funkcje.

SELECT LENGTH('Damian'); -- 6

Puste znaki

TRIM() – usuwa puste znaki (spacje) na początku i końcu podanego ciągu

SELECT TRIM(' Przykładowy tekst '); -- "Przykładowy tekst"

LTRIM() – usuwa puste znaki (spacje) na początku podanego ciągu

SELECT LTRIM(' Przykładowy tekst '); -- "Przykładowy tekst "

RTRIM() – usuwa puste znaki (spacje) na końcu podanego ciągu

SELECT RTRIM(' Przykładowy tekst '); -- " Przykładowy tekst"

Łączenie ciągów

CONCAT() – łączenie ciągów, ciąg może być zawartością danej kolumny jak i dowolnym tekstem. Tekst wprowadza się wtedy w cudzysłowiach.

SELECT CONCAT(imie, nazwisko) FROM pracownik; -- JanKowalski

CONCAT_WS() – łączenie ciągów z zastosowaniem określonego separatora, np: ‘ ‘. Separator należy podać w cudzysłowiu.

SELECT CONCAT_WS(' ', imie, nazwisko) FROM pracownik; -- Jan Kowalski

LPAD() – uzupełnienie ciągu z lewej strony o określony ciąg do określonej długości. W poniższym przypadku do ciągu nazwa będą dodawane “0” póki ciąg nie będzie miał długości 15 znaków.

SELECT LPAD('nazwa', '15', '0'); -- 0000000000nazwa

RPAD() – uzupełnienie ciągu z prawej strony o określony ciąg do określonej długości. W poniższym przypadku do ciągu nazwa będą dodawane “0” póki ciąg nie będzie miał długości 15 znaków.

SELECT RPAD('nazwa', '15', '0'); -- nazwa0000000000

SPACE() – funkcja wstawia określoną ilość spacji

SELECT SPACE(5); -- " "

SELECT concat('Piec', space(5), 'spacji'); -- "Piec spacji"

INSERT() – funkcja wstawia do określonego ciągu zdefiniowany w funkcji ciąg począwszy od podanej pozycji zamieniając określoną ilość znaków. W poniższym przykładzie wstawiamy do ciągu “Matematyczny” ciąg “POLSKI” zaczynając od “3” znaku zastępując (kasując) “4” znaki ciągu Matematyka.

SELECT INSERT('Matematyczny', 3, 4, 'POLSKI'); -- MaPOLSKItyczny

REPEAT() – funkcja powtarza podany w parametrze ciąg określoną ilość razy, w poniższym przypadku ciąg “Wyraz” zostanie powtórzony “3” razy.

SELECT REPEAT('Wyraz', '3'); -- WyrazWyrazWyraz

Wycinanie ciągów i zastępowanie znaków/ciągów

REPLACE() – funkcja zamienia w podanym ciągu (kolumnie) wskazany ciąg znaków na inny określony ciąg znaków. W poniższym przykładzie dla podanego ciągu “nazwa” każde wystąpienie ciągu “az” zostanie zamienione na “X”.

SELECT REPLACE('nazwa', 'az', 'X'); -- nXwa

SELECT REPLACE(stanowisko,'socjalny','administracyjny') FROM pracownik; -- pracownik administracyjny

LEFT() – funkcja zwraca określoną ilość znaków licząc od lewej strony dla podanego ciągu. W naszym przykładzie zwróci 5 znaków od lewej.

SELECT LEFT('To jest zdanie normalne', '5'); -- To je

SELECT LEFT(stanowisko, 6) FROM pracownik; -- pracow

RIGHT() – funkcja zwraca określoną ilość znaków licząc od prawej strony dla podanego ciągu. W naszym przykładzie zwróci 4 znaki od prawej.

SELECT RIGHT('To jest zdanie normalne', '4'); -- alne

SELECT RIGHT(stanowisko, 8) FROM pracownik; -- socjalny

MID() – funkcja wycina z podanego ciągu określoną liczbę znaków rozopczynając od konkretnej pozycji. W poniższym przykładzie funkcja obetnie z ciągu “ToJestPrzykladoweZdanie” osiem znaków rozpoczynając od znaku siódmego.

SELECT MID('ToJestPrzykladoweZdanie', '7', '8'); -- Przyklad

SELECT MID(stanowisko,'6','4') FROM pracownik; -- wnik

SUBSTR() lub SUBSTRING() – funkcja wycina z podanego ciągu określoną liczbę znaków zaczynając od znaku określonego parametrem. W poniższym przykładzie z podanego ciągu “Nowy wyraz” po wycięciu 4 znaków licząc od 6 znaku powstanie nowy ciąg “wyra”.

SELECT SUBSTR('Nowy wyraz','6','4'); -- wyra

SELECT SUBSTR(stanowisko,'6','4') FROM pracownik; -- wnik

Funkcje porównujące

LIKE() – funkcja porównująca dwa argumenty, w przypadku gdy są takie same zwraca “1”, gdy różne zwraca “0”

SELECT 'A' like 'A'; -- 1

SELECT 'A' like 'B'; -- 0

NOT LIKE() – funkcja porównująca dwa argumenty, w przypadku gdy są takie same zwraca “0”, gdy różne zwraca “1” (negacja funkcji LIKE)

SELECT 'A' NOT like 'A'; -- 0

SELECT 'A' NOT like 'B'; -- 1

STRCMP() – funkcja porównuje dwa ciągi i zwraca: “0” – jeżeli oba ciągi są takie same, “-1” – gdy pierwszy ciąg jest mniejszy niż drugi, “1” – w pozostałych przypadkach

SELECT STRCMP('Wyraz','Wyraz'); -- 0

SELECT STRCMP('Wyraz','Inny wyraz'); -- 1

REGEXP() lub RLIKE() – funkcja pozwalająca sprawdzić czy podany ciąg odpowiada zdefiniowanemu wzorcowi. W przypadku gdy porównanie da wynik pozytywny wtedy funkcja zwróci “1”, w przeciwnym przypadku “0”. W poniższym przykładzie sprawdzimy czy podany kod pocztowy pasuje do polskiego wzorca kodów pocztowych. Więcej informacji o funkcji REGEXP znajdziecie w osobnym artykule.

SELECT '60-300' REGEXP '[0-9][0-9]-[0-9][0-9][0-9]'; -- 1

SELECT '60-3XA' REGEXP '[0-9][0-9]-[0-9][0-9][0-9]'; -- 0

NOT REGEXP() lub NOT RLIKE() – funkcja pozwalająca sprawdzić czy podany ciąg nie pasuje do zdefiniowanego wzorca. W przypadku gdy porównanie da wynik negatywny wtedy funkcja zwróci “1”, w przeciwnym przypadku “0”.

SELECT '60-300' NOT REGEXP '[0-9][0-9]-[0-9][0-9][0-9]'; -- 1

SELECT '60-3XA' NOT REGEXP '[0-9][0-9]-[0-9][0-9][0-9]'; -- 0

SOUNDEX() – funkcja zwraca kod soundex dla podanego wyrazu. Funkcja używana do porównywania wyrazów, których wymowa jest identyczna mimo różnych zapisów. Wyrazy SEE oraz SEA mają różną pisownie mimo to brzmią tak samo, stąd oba otrzymują SOUNDEX równy S000.

SELECT soundex('home'); -- H500

SELECT SOUNDEX('see'), SOUNDEX('sea'); -- S000 S000

SOUNDS LIKE() – funkcja zwraca rekordy dla których “warunek” brzmi jak zdefiniowany wzorzec. Dla poniższego przykładu załóżmy, że mamy tabelę wyrazy w której znajdują się wyrazy: sea, see, home, seek.
Funkcja wyświetli wyrazy, które wypowiedziane brzmią jak wyraz sea

SELECT wyraz FROM wyrazy WHERE wyraz SOUNDS LIKE 'sea'; -- see, sea

Funkcje wyszukujące

ELT() – funkcja zwraca wskazany argument podanego ciągu. W tym przypadku zwróci 3 argument, czyli ciąg: “Trzeci”

SELECT ELT(3, 'Pierwszy', 'Drugi', 'Trzeci'); -- Trzeci

FIELD() – funkcja zwraca pozycję wystąpienia danego ciągu w podanych ciągach. Zatem podany ciąg ‘Drugi’ zostanie znaleziony w zbiorze wartości ‘Pierwszy’, ‘Drugi’, ‘Trzeci’ na drugim miejscu

SELECT FIELD('Drugi', 'Pierwszy', 'Drugi', 'Trzeci'); -- 2

FIND_IN_SET() – funkcja zwraca pozycję wystąpienia danego ciągu w podanym ciągu

SELECT FIND_IN_SET('Drugi', 'Pierwszy,Drugi,Trzeci'); -- 2

INSTR() – funkcja wyszukuje w podanym ciągy określonego ciągu podając pozycję na której on występuje. W poniższym przykładzie ciąg “rz” rozpoczyna się na “8” pozycji ciągu “ToJestPrzykladoweZdanie”

SELECT INSTR('ToJestPrzykladoweZdanie', 'rz'); -- 8

LOCATE() lub POSITION() – funkcja zwraca miejsce wystąpienia określonego ciągu w danym ciągu. W poniższym przypadku ciąg “je” rozpoczyna się na 4 pozycji

SELECT LOCATE('je', 'To jest zdanie normalne'); -- 4

MAKE_SET() – funkcja zwraca ciąg określony “bitowo” przez pierwszy parametr, wyjaśnienie poniższego przykładu:

0 – 000 – wynik:
1 – 100 – wynik: pierwszy
2 – 010 – wynik: drugi
3 – 110 – wynik: pierwszy, drugi
4 – 001 – wynik: trzeci
5 – 101 – wynik: pierwszy, trzeci
6 – 011 – wynik: drugi, trzeci
7 – 111 – wynik: pierwszy, drugi, trzeci

SELECT MAKE_SET(5,'pierwszy','drugi','trzeci'); -- pierwszy,trzeci

EXPORT_SET() – funkcja zwracająca ciąg tekstowy według podanego wzorca. Dla poniższego przykładu będzie to ciąg składający się z “10” znaków rozdzielonych między sobą znakiem “|” gdzie na
czwartej pozycji wystąpi “X” zaś pozostałe znaki będą “o”. Wartość “8” podana jako parametr oznacza 4 bit.

SELECT EXPORT_SET(8,'X','o','|',10); -- o|o|o|X|o|o|o|o|o|o

Zatem patrząc “od tyłu” 2^0 2^1 2^2 2^3 – 0001 oznacza binarnie “8”. Inny przykład:

SELECT EXPORT_SET(17,'X','o','|',10); -- X|o|o|o|X|o|o|o|o|o

Zatem patrząc “od tyłu” 2^0*1 2^1*0 2^2*0 2^3*0 2^4*1 – 10001 oznacza binarnie 17″

Kodowanie i dekodowanie ciągów, konwersja/formatowanie ciągów i liter

FORMAT() – funkcja zwraca podaną wartość w określonym formacje, w poniższym przykładzie zaokrągloną do 4 miejsc po “kropce”. Warto zwrócić uwagę na separator tysięczny, którym jest znak “przecinka”

SELECT FORMAT(1234.123456, 4); -- 1,234.1235

QUOTE() – funkcja wstawiająca podany ciąg w cudzysłów

SELECT QUOTE('Teskt w cudzyslowiu'); -- 'Teskt w cudzyslowiu'

REVERSE() – funkcja odwraca “odbija” podany ciąg (kolejność liter)

SELECT REVERSE('To jest zdanie normalne'); -- enlamron einadz tsej oT

TO_BASE64() – kodowanie podanego tekstu przy wykorzystaniu algorytmu BASE64

SELECT TO_BASE64('To jest przykladowy tekst'); -- VG8gamVzdCBwcnp5a2xhZG93eSB0ZWtzdA==

FROM_BASE64() – odkodowanie podanego ciągu przy wykorzystaniu algorytmu BASE64

SELECT FROM_BASE64('VG8gamVzdCBwcnp5a2xhZG93eSB0ZWtzdA=='); -- To jest przykladowy tekst

CHAR() – podaje znak dla określonego kodu ASCII

SELECT CHAR(68); -- D

ASCII() lub ORD() – podaje kod ASCII dla określonego znaku (funkcja odwrotna do powyższej)

SELECT ASCII('D'); -- 68

BIN() – funkcja zwraca binarną wartość dla podanej liczby

SELECT BIN(17); -- 10001

OCT() – funkcja zwraca ósemkową wartość dla podanej liczby

SELECT OCT(11); -- 13

HEX() – zamienia podany ciąg/liczbę na postać heksadecymalną (szesnastkową)

SELECT HEX('Tekst'); -- 54656B7374

SELECT HEX(46548); -- B5D4

UNHEX() – zamienia podaną wartość heksadecymalną (szesnastkową) na ciąg alfanumeryczny

SELECT UNHEX('54656B7374'); -- Tekst

DATE_FORMAT – opis funkcji SQL z przykładami – Kurs języka SQL

DATE_FORMAT() – funkcja formatująca podaną datę do określonego formatu. Poniżej znajduje się lista parametrów, które mogą zostać użyte do określenia formatu zwróconej daty/czasu. Parametry można ze sobą łączyć.

Wywołanie funkcji wygląda następująco:

SELECT DATE_FORMAT('data/czas', 'format');

%a – skrócona nazwa dnia tygodnia (Sun..Sat)

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%a'); -- Tue

%b – skrócona nazwa dnia tygodnia (Jan..Dec)

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%b'); -- Apr

%c – numer miesiąca (0..12)

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%c'); -- 4

%D – numer dnia (0..12) z sufiksem (0th, 1st, 2nd, 3rd, …)

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%D'); -- 5th

%d – numer dnia (01..31)

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%d'); -- 05

%e – funkcja zwraca dzień miesiąca (0..31)

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%e'); -- 5

%f – zwraca liczbę milisekund z podanego czasu (000000..999999)

SELECT DATE_FORMAT('2016-04-00 11:14:47.46543', '%f'); -- 465430

%H – zwraca godzinę dla podanego czasu (00..23)

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%H'); -- 11

%h – zwraca godzinę dla podanego czasu (01..12)

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%h'); -- 11

%I – zwraca godzinę dla podanego czasu (01..12)

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%I'); -- 11

%i – zwraca minuty dla podanego czasu (00..59)

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%i'); -- 14

%j – zwraca numer dnia w roku (001..366)

SELECT DATE_FORMAT('2016-04-00 11:14:47', '%j'); -- 091

%k – zwraca godzinę dla podanego czasu (0..23)

SELECT DATE_FORMAT('2016-04-00 11:14:47', '%k'); -- 11

%l – zwraca godzinę dla podanego czasu (1..12)

SELECT DATE_FORMAT('2016-04-00 11:14:47', '%l'); -- 11

%M – pełna nazwa miesiąca (January..December)

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%M'); -- April

%m – numer miesiąca (00..12)

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%m'); -- 04

%p – zwraca AM lub PM dla podanego czasu

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%p'); -- AM

%r – zwraca AM lub PM wraz z podanym czasem

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%r'); -- 11:14:47 AM

%S – liczba sekund dla podanego czasu (00..59)

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%S'); -- 47

%s – liczba sekund dla podanego czasu (00..59)

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%s'); -- 47

%T – zwraca czas z podanej wartości w formacie hh:mm:ss

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%T'); -- 11:14:47

%U – numer tygodnia w roku (00..53), gdzie niedziela jest pierwszym dniem tygodnia

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%U'); -- 14

%u – numer tygodnia w roku (00..53), gdzie poniedziałek jest pierwszym dniem tygodnia

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%u'); -- 14

%V – numer tygodnia w roku (01..53), gdzie niedziela jest pierwszym dniem tygodnia

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%V'); -- 14

%v – numer tygodnia w roku (01..53), gdzie poniedziałek jest pierwszym dniem tygodnia

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%v'); -- 14

%W – pełna nazwa dnia tygodnia (Sunday..Saturday)

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%W'); -- Tuesday

%w – dzień tygodnia – liczbowo (0-Sunday..6-Saturday)

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%w'); -- 2

%X – rok dla tygodnia, gdzie pierwszy dzień tygodnia to niedziela

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%X'); -- 2016

%x – rok dla tygodnia, gdzie pierwszy dzień tygodnia to poniedziałek

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%x'); -- 2016

%Y – funkcja zwraca rok w formacie YYYY

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%Y'); -- 2016

%y – funkcja zwraca rok w formacie YY

SELECT DATE_FORMAT('2016-04-05 11:14:47', '%y'); -- 16

Przykłady

1. Funkcja zwracająca aktualną datę oraz czas w formacie: 05.04.2016, 12:04:48

SELECT DATE_FORMAT(NOW(), '%d.%m.%Y, %h:%m:%s');

2. Funkcja zwracająca aktualną datę w formacie: 5th April 2016

SELECT DATE_FORMAT(NOW(), '%D %M %Y');

3. Funkcja zwracająca aktualną datę w formacie: 05-04-2016

SELECT DATE_FORMAT(CURDATE(), '%d-%m-%Y');

4. Jaki dzień tygodnia wypada w dniu 2022-02-05 (Saturday)

SELECT DATE_FORMAT('2022-02-05', '%W');

Funkcje daty i czasu mySQL – Kurs języka SQL (mySQL)

1. Aktualna data i czas

CURDATE() – funkcja zwracająca aktualną datę w formacie YYYY-MM-DD, np: 2016-04-05

SELECT CURDATE();

UTC_DATE() – funkcja zwracająca aktualną datę UTC w formacie YYYY-MM-DD, np: 2016-04-05

SELECT UTC_DATE();

CURTIME() – funkcja zwracająca aktualny czas w formacie HH:MM:SS, np: 09:06:34

SELECT CURTIME();

UTC_TIME() – funkcja zwracająca aktualny czas UTC (-2 godziny)w formacie HH:MM:SS, np: 07:06:34

SELECT UTC_TIME();

NOW() – funkcja zwraca bieżącą datę oraz godzinę, np: 2016-04-05 09:06:34

SELECT NOW();

SYSDATE() – funkcja zwraca bieżącą datę oraz godzinę systemową, np: 2016-04-05 09:06:34

SELECT SYSDATE();

UNIX_TIMESTAMP() – funkcja zwraca bieżącą datę oraz godzinę systemową, np: 2016-04-05 09:06:34

SELECT UNIX_TIMESTAMP();

UTC_TIMESTAMP() – funkcja zwraca bieżącą datę UTC oraz godzinę UTC (-2 godziny), np: 2016-04-05 07:06:34

SELECT UTC_TIMESTAMP();

2. Obcinanie daty

YEAR() – funkcja zwraca rok dla podanej daty, np: 2016

SELECT YEAR('2016-04-05');

MONTH() – funkcja zwraca miesiąc dla podanej daty, np: 4

SELECT MONTH('2016-04-05');

DAY() – funkcja zwraca miesiąc dla podanej daty, np: 5

SELECT DAY('2016-04-05');

3. Obcinanie godziny

HOUR() – funkcja zwraca godzinę od podanego czasu, np: 9

SELECT HOUR('09:06:34');

MINUTE() – funkcja zwraca minuty od podanego czasu, np: 6

SELECT MINUTE('09:06:34');

SECOND() – funkcja zwraca sekundy od podanego czasu, np: 34

SELECT SECOND('09:06:34');

4. Operacje na datach i czasie

DATE_FORMAT() – funkcja formatuje podaną datę do określonego formatu, np: 05.04.2016 (więcej na temat funkcji DATE_FORMAT() znajdziesz w osobnym wpisie)

SELECT DATE_FORMAT('2016-04-05', '%d.%m.%Y');

QUARTER() – funkcja zwraca numer kwartału dla podanej daty, np: 2

SELECT QUARTER('2016-04-05');

DAYOFYEAR() – funkcja zwraca dzień w roku, np. dzień 2016-04-05 to 96 dzień w roku 2016

SELECT DAYOFYEAR('2016-04-05');

DAYOFWEEK() – funkcja zwraca numer dnia tygodnia, np: 3

SELECT DAYOFWEEK('2016-04-05');

DAYOFMONTH() – funkcja zwraca numer dzień miesiąca, np: 5

SELECT DAYOFMONTH('2016-04-05');

MONTHNAME – funkcja zwraca nazwę miesiąca dla podanej daty, np: April

SELECT MONTHNAME('2016-04-05');

DAYNAME() – funkcja zwraca nazwę dnia tygodnia dla podanej daty, np: Tuesday

SELECT DAYNAME('2016-04-05');

WEEK() – funkcja zwraca numer dnia tygodnia dla podanej daty, np: 14

SELECT WEEK('2016-04-05');

WEEKOFYEAR() – funkcja zwraca numer dnia tygodnia dla podanej daty, np: 14

SELECT WEEKOFYEAR('2016-04-05');

WEEKDAY() – funkcja zwraca numer dnia tygodnia, np: 1 gdzie: 0 – poniedziałek, 1 – wtorek, 2 – środa, 3 – czwartek 4 – piątek, 5 – sobota, 6 – niedziela

SELECT WEEKDAY('2016-04-05');

LAST_DAY – funkcja zwraca ostatni dzień miesiąca dla podanej daty, np: 2016-04-30

SELECT LAST_DAY('2016-04-05');

TO_DAYS() – funkcja zwraca ilość dni od roku “0”, (0000-01-01), np: 736424

SELECT TO_DAYS('2016-04-05');

FROM_DAYS() – funkcja odwrotna do powyższej, zwraca datę na podstawie podanej ilości dni licząc od roku “0”, np: 2016-04-05

SELECT FROM_DAYS(736424);

DATEDIFF() – funkcja zwraca różnicę dni między dwoma datami, np: 5939 (liczba dni od 2001-01-01 do 2016-04-05)

SELECT DATEDIFF('2016-04-05','2000-01-01');

TIME_TO_SEC() – liczba sekund, która upłynęła od określonej godziny, np: 32794

SELECT TIME_TO_SEC('09:06:34');

ADDDATE(), DATE_ADD() – dodawanie określonej liczby, dni, miesięcy, lat do określonej daty, np: 2016-04-14

SELECT ADDDATE('2016-04-04', INTERVAL 10 DAY), DATE_ADD('2016-04-04', INTERVAL 10 DAY);

SUBDATE(), DATE_SUB() – odejmowanie określonej liczby, dni, miesięcy, lat do określonej daty, np: 2016-03-25

SELECT DATE_SUB('2016-04-04', INTERVAL 10 DAY);

ADDTIME() – dodawanie daty, czasu do podanego w parametrze czasu/daty, np: 2016-04-06 10:17:45

SELECT ADDTIME('2016-04-05 09:06:34','1 1:11:11');

Powyższe zapytanie zwróci nam zatem wynik: 10:17:45

SELECT ADDTIME('09:06:34','1:11:11');

GET_FORMAT() – funkcja zwracająca format daty/czasu, np: %d.%m.%Y (więcej na temat funkcji GET_FORMAT() znajdziesz w osobnym wpisie)

SELECT GET_FORMAT(DATE,'EUR');

6. Przykłady łączenia funkcji tekstowych

1. Formatowanie daty do określonego formatu

SELECT DATE_FORMAT('2016-04-05', GET_FORMAT(DATE,'EUR'));

2. Formatowanie bierzącej daty do określonego formatu

SELECT DATE_FORMAT(CURDATE(), '%D %M %Y' );

CREATE, UPDATE, ALTER, VIEW – tworzenie i modyfikacja widoków – Kurs języka SQL

Widok/perspektywa (VIEW) – jest pewnym rodzajem tabeli, którą tworzymy na podstawie już istniejących tabel, danych, warunków wykorzystując zapytanie typu “SELECT”. Widoki tworzone są po to, aby ograniczyć dostęp do innych danych z istniejących już tabel użytkownikom nieuprawnionym. Możemy także ich użyć w przypadku, kiedy korzystamy często z konkretnych zapytań SQL wraz z warunkami. Tworząc widoki często przyczyniamy się do zwiększenia wydajności naszych zapytań w skryptach czy też aplikacjach.

Poniżej przedstawię w jaki sposób możemy tworzyć, modyfikować, czy też usuwać widoki (perspektywy) w języku SQL.

Zanim jednak przejdziemy do widoków, przygotujmy sobie tabele na których będziemy “ćwiczyć”. W naszym przykładzie będziemy mieli dwie tabele: pracownik oraz wynagrodzenie.
Celem naszego ćwiczenia będzie utworzenie widoku opierającego się na obu tabelach i zwracającego dane imie, nazwisko, miesiac, rok, pensje wybranego pracownika.

CREATE TABLE pracownik
(
id_pracownika INT(5) NOT NULL,
imie CHAR(20) NOT NULL,
nazwisko CHAR(50) NOT NULL,
data_dodania DATETIME,
data_mod DATETIME,
PRIMARY KEY (id_pracownika)
);

CREATE TABLE wynagrodzenie
(
id_pracownika INT(5) NOT NULL,
miesiac INT(2) NOT NULL,
rok INT(4) NOT NULL,
pensja FLOAT(6,2) NOT NULL
);

INSERT INTO pracownik (id_pracownika, imie, nazwisko, data_dodania, data_mod) VALUES (1, 'Jan', 'Nowak', '2015-02-02 08:00:00', '2016-03-06 09:00:00');
INSERT INTO pracownik (id_pracownika, imie, nazwisko, data_dodania, data_mod) VALUES (2, 'Adam', 'Kowalski', '2015-05-02 08:00:00', '2016-02-02 08:00:00');
INSERT INTO wynagrodzenie (id_pracownika, miesiac, rok, pensja) VALUES (1, 1, 2016, 1000.0);
INSERT INTO wynagrodzenie (id_pracownika, miesiac, rok, pensja) VALUES (1, 2, 2016, 1100.0);
INSERT INTO wynagrodzenie (id_pracownika, miesiac, rok, pensja) VALUES (1, 3, 2016, 1100.0);
INSERT INTO wynagrodzenie (id_pracownika, miesiac, rok, pensja) VALUES (2, 1, 2016, 50.0);
INSERT INTO wynagrodzenie (id_pracownika, miesiac, rok, pensja) VALUES (2, 2, 2016, 75.0);
INSERT INTO wynagrodzenie (id_pracownika, miesiac, rok, pensja) VALUES (2, 3, 2016, 80.0);

Tworzenia widoku

Widok tworzymy poleceniem:

CREATE VIEW nazwa_widoku AS
SELECT kolumna1, kolumna2, kolumna2 FROM tabela WHERE kolumna1='wartość';

W naszym przykładzie utworzymy widok o nazwie v_pensja, który zwróci nam imię, nazwisko oraz wynagrodzenie pracownika w miesiącu 3 roku 2016. Polecenie zatem wyglądać będzie następująco:

CREATE VIEW v_pensja AS
SELECT p.imie, p.nazwisko, w.pensja FROM wynagrodzenie w
LEFT JOIN pracownik p on p.id_pracownika=w.id_pracownika
WHERE w.miesiac='3' and w.rok='2016';

Odczytanie zawartości widoku pensja odbywa się tak samo jak w przypadku tabeli. Zatem polecenie:

SELECT * FROM v_pensja;

zwróci nam poniższą zawartość:

imie nazwisko pensja
Jan Nowak 1100.0
Adam Kowalski 80.0

Modyfikacja widoku

Mamy utworzyony widok, czas go teraz zmodyfikować. Zmiany widoku (perspektywy) możemy wykonać na dwa sposoby.

Pierwszym z nich jest opcja REPLACE. Zmodyfikujmy zatem nasz widok, tak aby zwracał on jeszcze numer miesiąca dla którego pokazywana jest pensja oraz z warunku WHERE usuniemy ograniczenie miesiąca.
Składa SQL wygląda zatem następująco:

CREATE or replace VIEW v_pensja AS
SELECT p.imie, p.nazwisko, w.miesiac, w.pensja FROM wynagrodzenie w
LEFT JOIN pracownik p ON p.id_pracownika=w.id_pracownika
WHERE w.rok='2016';

a “odczytanie” widoku:

SELECT * FROM v_pensja;

zwróci nam wynik:

imie nazwisko miesiac pensja
Jan Nowak 1 1000.0
Jan Nowak 2 1100.0
Jan Nowak 3 1100.0
Adam Kowalski 1 50.0
Adam Kowalski 2 75.0
Adam Kowalski 3 80.0

Drugą opcją zmiany widoku jest opcja ALTER. Jej składnia wygląda następująco:

alter VIEW v_pensja AS
SELECT p.imie, p.nazwisko, w.miesiac, w.pensja FROM wynagrodzenie w
LEFT JOIN pracownik p on p.id_pracownika=w.id_pracownika
WHERE w.rok='2016'

Jej działanie i wynik jest analogiczny jak w przypadku opcji REPLACE.

Na widokach możemy dokonywać operacji modyfikacji danych.

Modyfikacja danych w widoku

Naszym zadaniem będzie teraz modyfikacja zawartości widoku pensja i pola pensja z widoku – zwiększenie o 25% w miesiącu marcu. Konstrukcja zapytania jest następująca:

UPDATE nazwa_widoku SET pole_widoku='wartosc' WHERE pole_widoku='wartosc';

Zatem dla naszego widoku pensja SQL wygląda następująco:

UPDATE v_pensja SET pensja=pensja*1.25 WHERE miesiac='3';

Nasz widok zawiera teraz zmodyfikowane dane:

imie nazwisko miesiac pensja
Jan Nowak 1 1000.0
Jan Nowak 2 1100.0
Jan Nowak 3 1375.0
Adam Kowalski 1 50.0
Adam Kowalski 2 75.0
Adam Kowalski 3 100.0

Należy pamiętać, modyfikując dane w widoku modyfikujemy dane w tabelach źródłowych.

Usunięcie widoku

Aby skasować widok należy użyć komendy:

DROP VIEW nazwa_widoku;

W naszym przypadku będzie to zatem:

DROP VIEW v_pensja;

Dobrą praktyką przy tworzeniu widoków jest odpowiednie nazewnictwo – dobrze jest poprzedzać nazwę widoku jakimś wyróżnikiem np: “v_”, “wiev_” itp. tak aby odróżnić widok od tabeli w bazie danych.

Perl – jak sprawdzić czy plik istnieje

W Perl’u możemy sprawdzić czy plik istnieje na kilka sposobów. Poniżej prezentuje dwa z nich:

1. IF

$filename = '/sciezka/twojplik.dat';
if (-e $filename)
{
print "Plik istnieje";
}
else
{
print "Plik nie istnieje";
};

2. UNLESS

$filename = '/sciezka/twojplik.dat';
unless (-e $filename) {
print "Plik nie istnieje";
};

Oracle SQL Lista tabel systemowych

System Table Description
ALL_ARGUMENTS Arguments in object accessible to the user
ALL_CATALOG All tables, views, synonyms, sequences accessible to the user
ALL_COL_COMMENTS Comments on columns of accessible tables and views
ALL_CONSTRAINTS Constraint definitions on accessible tables
ALL_CONS_COLUMNS Information about accessible columns in constraint definitions
ALL_DB_LINKS Database links accessible to the user
ALL_ERRORS Current errors on stored objects that user is allowed to create
ALL_INDEXES Descriptions of indexes on tables accessible to the user
ALL_IND_COLUMNS COLUMNs comprising INDEXes on accessible TABLES
ALL_LOBS Description of LOBs contained in tables accessible to the user
ALL_OBJECTS Objects accessible to the user
ALL_OBJECT_TABLES Description of all object tables accessible to the user
ALL_SEQUENCES Description of SEQUENCEs accessible to the user
ALL_SNAPSHOTS Snapshots the user can access
ALL_SOURCE Current source on stored objects that user is allowed to create
ALL_SYNONYMS All synonyms accessible to the user
ALL_TABLES Description of relational tables accessible to the user
ALL_TAB_COLUMNS Columns of user’s tables, views and clusters
ALL_TAB_COL_STATISTICS Columns of user’s tables, views and clusters
ALL_TAB_COMMENTS Comments on tables and views accessible to the user
ALL_TRIGGERS Triggers accessible to the current user
ALL_TRIGGER_COLS Column usage in user’s triggers or in triggers on user’s tables
ALL_TYPES Description of types accessible to the user
ALL_UPDATABLE_COLUMNS Description of all updatable columns
ALL_USERS Information about all users of the database
ALL_VIEWS Description of views accessible to the user
DATABASE_COMPATIBLE_LEVEL Database compatible parameter set via init.ora
DBA_DB_LINKS All database links in the database
DBA_ERRORS Current errors on all stored objects in the database
DBA_OBJECTS All objects in the database
DBA_ROLES All Roles which exist in the database
DBA_ROLE_PRIVS Roles granted to users and roles
DBA_SOURCE Source of all stored objects in the database
DBA_TABLESPACES Description of all tablespaces
DBA_TAB_PRIVS All grants on objects in the database
DBA_TRIGGERS All triggers in the database
DBA_TS_QUOTAS Tablespace quotas for all users
DBA_USERS Information about all users of the database
DBA_VIEWS Description of all views in the database
DICTIONARY Description of data dictionary tables and views
DICT_COLUMNS Description of columns in data dictionary tables and views
GLOBAL_NAME global database name
NLS_DATABASE_PARAMETERS Permanent NLS parameters of the database
NLS_INSTANCE_PARAMETERS NLS parameters of the instance
NLS_SESSION_PARAMETERS NLS parameters of the user session
PRODUCT_COMPONENT_VERSION version and status information for component products
ROLE_TAB_PRIVS Table privileges granted to roles
SESSION_PRIVS Privileges which the user currently has set
SESSION_ROLES Roles which the user currently has enabled.
SYSTEM_PRIVILEGE_MAP Description table for privilege type codes. Maps privilege type numbers to type names
TABLE_PRIVILEGES Grants on objects for which the user is the grantor, grantee, owner, or an enabled role or PUBLIC is the grantee
TABLE_PRIVILEGE_MAP Description table for privilege (auditing option) type codes. Maps privilege (auditing option) type numbers to type names

Error Code: 1175. You are using safe update mode… MySQL Workbench

Jeżeli poprzez MySQL Workbench próbujesz wykonać zapytanie UPDATE, bądź DELETE na swojej bazie danych i otrzymujesz komunikat:

Error Code: 1175. You are using safe update mode…

Oznacza to, że masz w programie włączony tryb “Safe Updates”.

Jeżeli chcesz szybko rozwiązać ten problem wystarczy, że przed zapytaniem UPDATE czy DELETE dodasz poniższy kod.  Tryb zostanie tylko wyłączony dla bieżącej sesji.

SET SQL_SAFE_UPDATES=0;

Jeżeli chcesz na stałe wyłączyć tryb: “Safe Updates” postępuj zgodnie z poniższą instrukcją:

1. Idź kolejno: Edit -> Preferences -> zakładka SQL Queries
2. Odznacz "Safe Updates". Forbid UPDATEs and DELETEs with no ket in WHERE clause or no LIMIT clause...
3. Zrestartuj swoje połączenie z bazą danych