Wykład 5 SQL praca z tabelami 2
Wypełnianie tabel danymi Tabele można wypełniać poprzez standardową instrukcję INSERT INTO: INSERT [INTO] nazwa_tabeli [(kolumna1, kolumna2,, kolumnan)] VALUES (wartosc1, wartosc2,, wartoscn) W jej wyniku dodawany jest wiersz, w którym w kolumnie1 jest wartość 1, w kolumnie 2 jest wartość 2 itd. Słowo INTO można często pominąć. Przykłady dla tabeli: CREATE TABLE osoby ( id INTEGER PRIMARY KEY NOT NULL, imie VARCHAR(20) NOT NULL, nazwisko VARCHAR(30) NOT NULL, pesel CHAR(11) )
Wypełnianie tabel danymi Przykłady: INSERT INTO osoby (id, imie, nazwisko, pesel) VALUES (1, Jan, Kowalski, 01234567890 ); lub przejrzyściej INSERT INTO osoby (id, imie, nazwisko, pesel) VALUES (1, Jan, Kowalski, 01234567890 ); gdzie ciągi znaków zostały ujęte w apostrofy (można też użyć cudzysłowów). Gdy wprowadzamy wartości dla wszystkich kolumn to ich nazwy można pominąć: INSERT INTO osoby VALUES (1, Jan, Kowalski, 01234567890 ); Można pominąć wartości w niektórych kolumnach o ile nie mają one atrybutu NOT NULL INSERT INTO osoby VALUES (3, Janusz, Nowak, NULL); lub INSERT INTO osoby (id, imie, nazwisko) VALUES (3, Janusz, Nowak ); Natomiast pominięcie kolumny o atrybucie NOT NULL kończy się błędem INSERT INTO osoby (id, nazwisko, pesel) VALUES (3, Nowak, 89012345678); ERROR
Wypełnianie tabel danymi Przykłady: Kolejność wprowadzania wartości do kolumn jest dowolna, niekoniecznie taka jak w definicji tabeli. INSERT INTO osoby (pesel, id, nazwisko, imie) VALUES ( 23456789012,5, Arkuszewski, Janusz ); Próba wprowadzenia duplikatu wiersza prowadzi do błędu. Aby uniknąć duplikowania wartości klucza głównego należy przy tworzeniu tabeli użyć np.: CREATE TABLE test ( id INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT. ) i wówczas:
Wypełnianie tabel danymi Przykłady: INSERT INTO osoby (imie, nazwisko, pesel ) VALUES ( Janusz, Arkuszewski, 23456789012 ); lub INSERT INTO osoby (id, imie, nazwisko, pesel ) VALUES (DEFAULT, Janusz, Arkuszewski, 23456789012 ); W MySQL zamiast DEFAULT można również uzyć NULL lub 0.
Wypełnianie tabel danymi Język SQL pozwala również na wstawianie wielu wierszy dzięki instrukcji: INSERT [INTO] nazwa_tabeli [(kolumna1, kolumna2,, kolumnan)] VALUES (wartosc1a, wartosc2a,, wartoscna), (wartosc1b, wartosc2b,, wartoscnb),.. (wartosc1z, wartosc2z,, wartoscnz) Przykład: INSERT INTO osoby (id, imie, nazwisko, pesel) VALUES (15, Anna, Kowalska, 01234567891 ) (16, Janina, Nowak, 12345678912 ) (17, Jan, Malinowski, 23456789123 )
Wypełnianie tabel danymi Tabele można również wypełniać drugą wersją instrukcji INSERT INTO: INSERT [INTO] nazwa_tabeli SET kolumna1=wartosc1, kolumna2=wartosc2,, kolumnan=wartoscn na przykład: INSERT INTO osoby SET id=1,imie= Jan, nazwisko= Kowalski, pesel= 01234567890 ; lub bardziej przejrzyście INSERT INTO osoby SET id=1, imie= Jan nazwisko= Kowalski pesel= 01234567890
Pobieranie danych z tabel Dane zapisane w tabelach bazy danych pobiera się instrukcją SELECT: SELECT kolumna1, kolumna2,, kolumnan FROM tabela [WHERE warunek] [ORDER BY kolumna1, kolumna2,, kolumnan [ASC DESC] oznaczającą Pobierz wartości wymienionych kolumn z tabeli tabela, spełniających warunek warunek, a wyniki posortuj względem kolumn wymienionych w klauzuli ORDER BY, rosnąco [ASC] lub malejąco [DESC] Dla tabeli utworzonej za pomocą instrukcji i wcześniej wypełnionej : CREATE TABLE pracownicy ( id INTEGER PRIMARY KEY, imie VARCHAR(20) NOT NULL, nazwisko VARCHAR(30) NOT NULL, placa DECIMAL(7,2) NOT NULL, stanowisko VARCHAR(20), pesel CHAR(11) ) można przykładowo użyć instrukcji
Pobieranie danych z tabel Przykłady: SELECT * FROM pracownicy; czyli wyświetlanie zawartości wszystkich kolumn SELECT imie, nazwisko, stanowisko FROM pracownicy; czyli tylko zawartość kolumn imie, nazwisko i stanowisko SELECT * FROM pracownicy ORDER BY nazwisko ASC; czyli wyświetlanie w porządku rosnącym dla kolumny nazwisko SELECT * FROM pracownicy ORDER BY nazwisko ASC, placa DESC czyli wyświetlanie w porządku rosnącym dla kolumny nazwisko i malejącym dla placa Można również zmienić nazwy kolumn w wynikach wyświetlania (zapytania): SELECT imie, nazwisko, placa AS wynagrodzenie FROM pracownicy czyli w wyświetlaniu zamiast kolumny placa będzie nazwa wynagrodzenie
Pobieranie danych z tabel Dane wyświetlane instrukcją SELECT można wybierać za pomocą różnych warunków (operatorów relacji) umieszczonych za klauzulą WHERE np.: = (równy, id=10; nazwisko= Kowalski ) <> ( różny, id<>10; nazwisko<> Kowalski ) <, > (mniejszy; id<10; wiekszy; id>10) <=, >= (mniejszy równy; id<=10; wiekszy równy; id>=10) IS NULL (równy NULL; adres IS NULL) IS NOT NULL (różny od NULL); adres IS NOT NULL) BETWEEN N AND M (znajduje się w przedziale od N do M; id BETWEEN 2 AND 5) NOT BETWEEN N AND M (nie znajduje się w przedziale od N do M; id NOT BETWEEN 2 AND 5) IN(,,,) (argument równy jednej z wartości w nawiasie; id IN(1,3,5) ) NOT IN(,,,) (argument nierówny żadnej z wartości w nawiasie; id IN(1,3,5) ) i operatory logiczne AND, OR, XOR, NOT (imie= Jan AND nazwisko= Kowalski)
Pobieranie danych z tabel Dodatkowo można wykorzystywać wyrażenia operujące na ciągach znaków: wyrażenie LIKE wzorzec (wyrażenie pasuje do wzorca; imie LIKE Jan ) wyrażenie NOT LIKE wzorzec (wyrażenie nie pasuje do wzorca; imie NOT LIKE Jan ) w opisie wzorca moża wykorzystywać symbol _ zastępujący dowolny znak oraz symbol % zastępujący dowolna grupę znaków. Przykłady: SELECT * FROM pracownicy WHERE imie LIKE Ka% ; SELECT * FROM pracownicy WHERE id=3 OR id=5 OR id=7; SELECT * FROM pracownicy WHERE id IN(3,5,7); SELECT * FROM pracownicy WHERE placa > 1500 AND stanowisko <> kierownik AND pesel IS NOT NULL
Pobieranie danych z tabel W ramach instrukcji SELECT można również używać klauzuli DISTINCT, która gwarantuje niepowtarzalność wierszy wynikowych: SELECT nazwisko FROM pracownicy ORDER BY nazwisko (daje podwójne nazwiska np. Kowalski w wynikach zapytania) ale SELECT DISTINCT nazwisko FROM pracownicy ORDER BY nazwisko (nie pokaże duplikatów nazwisk np. Kowalski w wynikach zapytania)
Modyfikacja danych w tabelach Do modyfikacji danych w tabelach służy instrukcja UPDATE w postaci: UPDATE nazwa_tabeli SET kolumna1=wartość1, kolumna2=wartość2,, kolumna2=wartość2 [WHERE warunek] oznaczającą Zmień w tabeli nazwa_tabeli, w kolumnach spełniających warunek warunek, wartość kolumny kolumna1 na wartość wartość1, kolumny kolumna2 na wartość wartość2 itd.. Pominięcie warunku oznacza, że zmiany będą wykonane we wszystkich wierszach. Przykłady: UPDATE pracownicy SET pesel= 01234567890 ; UPDATE pracownicy SET pesel= 12345678901 WHERE id=7; UPDATE pracownicy SET pesel= 12345678993 WHERE pesel=92341678903; (w tym przykładzie należy być pewnym, że pesel 92341678903 nie występuje w bazie) UPDATE pracownicy SET nazwisko= Andrzejewski, placa= 2500.00 WHERE id=8; UPDATE pracownicy SET stanowisko= doradca WHERE stanowisko= sprzedawca ; (zmienia wszystkie wiersze ze stanowisk sprzedawca na doradca) UPDATE pracownicy SET stanowisko= doradca,placa= 1500 WHERE stanowisko= sprzedawca ; (zmienia wszystkie wiersze ze stanowisk sprzedawca na doradca i ich płace na 1500)
Usuwanie danych z tabeli Do usuwania danych z tabeli służy instrukcja DELETE w postaci: DELETE FROM nazwa_tabeli [WHERE warunek] Przykłady: DELETE FROM pracownicy; (usuwa wszystkie dane z tabeli pracownicy należy używać bardzo uważnie) DELETE FROM pracownicy WHERE id=5; (usuwa wiersz z id=5) DELETE FROM pracownicy WHERE id IN (1,3,5); DELETE FROM pracownicy WHERE id BETWEEN 1 AND 5;