Do czego służy instrukcja INSERT?
Dzięki niej możemy wstawiać dane do tabeli. Należy jednak pamiętać, że dane wprowadzane są wierszami.
Jeżeli mamy tabelę, która składa się z pięciu kolumn: 1.Id, 2. Imię, 3. Drugie imię, 4. Nazwisko, 5. Wiek i chcemy wprowadzić dane trzech osób, to będziemy musieli zastosować trzy razy instrukcję insert. Pierwszy raz aby wprowadzić id, imię, drugie imię, nazwisko i wiek pierwszej osoby, drugi raz aby wprowadzić to samo dla drugiej osoby itd.
Dodatkowo należy pamiętać, że liczba wstawianych wartości musi być równa liczbie kolumn w tabeli.
Jak wygląda instrukcja INSERT?
„INSERT INTO nazwa_tabeli VALUES(wartość1,wartość2,…);” – wersja ogólna
„INSERT INTO nazwa_tabeli(kolumna1,kolumna3) VALUES(wartość1,wartość3) ;”– jeżeli chcemy wypełnić tylko wybrane pola. W tym przypadku wpiszemy wartości tylko w pierwszej i trzeciej kolumnie.
Z ang. „Wprowadź do <nazwa_tabeli> Wartości(wartość1,wartość2,…);”
Czy wartości można wstawiać tak jak się nam podoba?
Oczywiście, że nie. Jeżeli tak jak wcześniej mamy tabelę z danymi, to będzie różnica między:
INSERT INTO dane VALUES(18, 1, ’Jan’, ‘Adrian’, ‘Kowalski’);
a danymi wprowadzonymi w ten sposób:
INSERT INTO dane VALUES(18, ‘Adrian’, ‘Kowalski’, ‘Jan’,1)
Kolejność wpisywania danych w instrukcji INSERT zależy od kolejności kolumn od lewej strony. Zatem poprawnie napisany insert dla naszej tabeli miałby wartości
INSERT INTO dane VALUES(1, ‘Jan’, ’Adrian’, ’Kowalski’, 18);
Co należy zrobić, jeżeli osoba nie ma drugiego imienia?
W przypadku, gdy chcemy zostawić wybrane pole puste, bo osoba nie posiada podanej w tabeli właściwości lub będziemy chcieli edytować to pole później, musimy uwzględnić to wpisując NULL:
INSERT INTO dane VALUES(1,‘Jan’, NULL, ’Kowalski’,18);
Czy zawsze można wpisać NULL?
Istnieją dwa przypadki, gdy nie można podać wartości NULL w instrukcji insert:
Aby sprawdzić czy pole jest wymagane (NOT NULL), używamy polecenia
desc <nazwa_tabeli>; np.
desc dane;
Jeżeli okaże się, że pole jest typu NOT NULL wtedy nie będziemy mogli wpisać dla niego NULL.
Dlaczego imię jest w apostrofach, a wiek nie?
O tym w jaki sposób wprowadzamy dane, decyduje typ kolumn. Sposób wpisywania wartości:
DATE – dana jest w postaci ‘RRRR-MM-DD’ , gdzie RRRR to rok, MM to miesiąc, a DD dzień np.
INSERT INTO dane(data_urodzenia) VALUES(‘2014-02-28’);
Jeżeli chcemy wprowadzić datę w innym formacie, np. DD-MM-RRRR musimy skorzystać z funkcji TO_DATE.
VARCHAR/VARCHAR2/CHAR – dana jest w apostrofie np.
INSERT INTO Pojazdy VALUES(‘Samochód’);
NUMBER – dana jest w zwykłej postaci np.
INSERT INTO Liczby VALUES(5);
Aby sprawdzić typ kolumny, korzystamy z wcześniej poznanego polecenia desc.
W pole nazwisko chcę wpisać sto znaków – dlaczego nie mogę?
Każda kolumna ma swoje ograniczenia. Dla typów tekstowych są one określane przy tworzeniu tabeli np. VARCHAR2(50) oznacza typ danych do przechowywania znaków o maksymalnej długości 50. Gdy chcemy w instrukcji insert podać 51 znaków, to otrzymamy błąd.
Jeżeli nie pamiętamy jakie daliśmy ograniczenia, korzystamy z polecenia desc.
Z czego można skorzystać wpisując dane za pomocą instrukcji INSERT?
Przykładowo mamy sytuację, w której pierwsze nasze pole jest numerem identyfikacyjnym. Dodając to pole w kolejnych insertach, jesteśmy zmuszeni do pamiętania numeru poprzedniego. Z pomocą przychodzi nam sekwencja (którą wcześniej musimy zadeklarować), mająca na celu wygenerowanie kolejnych liczb:
INSERT INTO dane VALUES(sekwencja.nextval, ‘Jan’, ‘Mateusz’, ‘Kowalski’, 34);
Inna sytuacja – Mamy tabelę z danymi jednej firmy, a chcemy dołączyć do niej dane z innej firmy. Robimy to używając zapytania:
INSERT INTO firma1
SELECT id,imię,drugie_imię,nazwisko,wiek
FROM firma2;
Musimy jednak pamiętać, aby tabele miały taką samą strukturę (były identyczne pod względem nazw kolumn, ilości i typów), ponieważ w innym przypadku zostanie wygenerowany błąd.
Zadanie sprawdzające:
Użytkownik stworzył tabelę z kolumnami:
1. pesel (number – primary key)
2. imię (varchar2(10)-NOT NULL)
3. nazwisko (varchar2(15)-NOT NULL)
4. data_urodzenia (date – NOT NULL)
5. płeć (varchar2(9) – NOT NULL)
6. telefon (varchar2(20) – NOT NULL)
7. email (varchar2(20))
8. numer_konta (number)
9. hobby (varchar2(20) – NOT NULL)
Wprowadź do tabeli dane Marka i Anny
Marek:
1. 90050402894
2. Marek
3. Krawczyk
4. 04.05.1990
5. Mężczyzna
6. 42-611-15-13
8. brak
9. Sport,Muzyka,Film
Anna:
1. 90030204893
2. Anna
3. Krawczyk
4. 1990-02-03
5. Kobieta
6. 503-124-488
7. brak
8. 1281 4478 3333 2222 1234 5612
9. Uwielbiam gotować, uczyć się obcych języków i imprezować
Z czego należy skorzystać wpisując datę urodzenia Marka?
Dlaczego w przypadku Anny wyskakuje błąd? Jak można go naprawić?
Wojciech Besler