[SQL] instrukcja INSERT

opublikował: _Wojtek, 2014-02-27

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:

  1. Jeżeli pole jest kluczem głównym tabeli.
  2. Jeżeli pole jest typu NOT NULL.

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

7. marek@stronamarka.pl

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