|
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;
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;
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 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() – 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');
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' );
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.
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";
};
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 |
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
|
|