TOP

Lekcja SQL 13. Dodawanie danych (INSERT INTO)

W poprzednich rozdziałach rozważaliśmy pracę polegającą na pobieraniu danych z wcześniej utworzonych tabel. Teraz nadszedł czas, aby dowiedzieć się, jak możemy tworzyć/usuwać tabele, dodawać nowe rekordy i usuwać stare.

Do tych celów w SQL istnieją takie operatory jak:

  • CREATE - tworzy tabelę;
  • ALTER - zmienia strukturę tabeli;
  • DROP - usuwa tabelę lub pole;
  • INSERT - dodaje dane do tabeli.
  • Zaznajomienie się z tą grupą operatorów zacznijmy od operatora INSERT.


    1. Dodawanie całych linii

    Jak sama nazwa wskazuje, operator INSERT INTO służy do wstawiania (dodawania) wierszy do tabeli bazy danych.

    Dodawanie można wykonać na kilka sposobów:

  • dodaj jedną pełną linię;
  • dodaj część nowej linii;
  • dodaj wyniki zapytania.
  • Aby więc dodać nowy wiersz do tabeli, musimy podać nazwę tabeli, wyświetlić nazwy kolumn i określić wartości dla każdej kolumny za pomocą INSERT INTO nazwa_tabeli(pole1, pole2 ...) VALUES (wartość1, wartość2 ...) konstrukcja. Rozważmy przykład.

    INSERT INTO Sellers (ID, Address, City, Seller_name, Country) 
    VALUES ('6', '1st Street', 'Los Angeles', 'Harry Monroe', 'USA')
    

    Możesz także zmienić kolejność nazw kolumn, ale jednocześnie musisz zmienić kolejność wartości w parametrze VALUES.

    2. Dodanie części linii

    W poprzednim przykładzie, używając operatora INSERT, jawnie określiliśmy nazwy kolumn tabeli. Stosując tę składnię, możemy pominąć niektóre kolumny. Oznacza to, że dla niektórych kolumn wpisujesz wartości, a dla innych nie podajesz ich. Przykład:

    INSERT INTO Sellers (ID, City, Seller_name) 
    VALUES ('6', 'Los Angeles', 'Harry Monroe')
    

    W tym przykładzie nie określiliśmy wartości dla dwóch kolumn Address i Country. Możesz wykluczyć niektóre kolumny z instrukcji aaa, jeśli pozwala ona na zdefiniowanie tabeli. W takim przypadku musi być spełniony jeden z poniższych warunków: kolumna ta jest zdefiniowana jako dopuszczająca wartość null (brak jakiejkolwiek wartości) lub w definicji tabeli podana jest wartość domyślna. Oznacza to, że jeśli nie zostanie określona żadna wartość, zostanie użyta wartość domyślna. Jeśli pominiesz kolumnę w tabeli, która nie pozwala na pojawienie się wartości NULL w swoich wierszach i nie ma wartości zdefiniowanej do użycia domyślnego, DBMS wyświetli komunikat o błędzie i wiersz nie zostanie dodany.

    3. Dodanie wybranych danych

    W poprzednich przykładach wstawiliśmy dane do tabeli wpisując je ręcznie w zapytaniu. Jednak operator INSERT INTO pozwala nam zautomatyzować ten proces, jeśli chcemy wstawić dane z innej tabeli. W tym celu w SQL istnieje taka konstrukcja jak INSERT INTO ... SELECT ... . Taka konstrukcja umożliwia jednoczesne wybieranie danych z jednej tabeli i wstawianie ich do drugiej. Załóżmy, że mamy inną tabelę Sellers_EU z listą sprzedawców naszego produktu w Europie i musimy dodać ich do ogólnej tabeli Sellers. Struktura tych tabel jest taka sama (ta sama liczba kolumn i te same nazwy), ale dane są inne. W tym celu możemy napisać następujące zapytanie:

    INSERT INTO Sellers (ID, Address, City, Seller_name, Country) 
                 SELECT ID, Address, City, Seller_name, Country 
                 FROM Sellers_EU
    

    Należy zwrócić uwagę, aby wartości kluczy wewnętrznych nie powtarzały się (pole ID), w przeciwnym razie wystąpi błąd. Instrukcja SELECT może także zawierać klauzulę WHERE służącą do filtrowania danych. Warto też zaznaczyć, że DBMS nie zwraca uwagi na nazwy kolumn zawarte w operatorze SELECT, dba jedynie o kolejność ich ułożenia. Dlatego dane w pierwszej określonej kolumnie wybranej za pomocą SELECT zostaną w każdym przypadku wypełnione w pierwszej kolumnie tabeli Sellers określonej po operatorze INSERT INTO, niezależnie od nazwy pola.

    4. Kopiowanie danych z jednej tabeli do drugiej

    Często podczas pracy z bazami danych istnieje potrzeba tworzenia kopii dowolnych tabel w celu wykonania kopii zapasowej lub modyfikacji. Aby wykonać pełną kopię tabeli w SQL, dostępny jest osobny operator SELECT INTO. Na przykład musimy utworzyć kopię tabeli Sellers, będziemy musieli napisać zapytanie w następujący sposób:

    SELECT * INTO Sellers_new 
    FROM Sellers
    

    W przeciwieństwie do poprzedniej konstrukcji INSERT INTO ... SELECT ... gdy dane są dodawane do istniejącej tabeli, konstrukcja SELECT ... INTO ... FROM ... kopiuje dane do nowej tabeli. Można też powiedzieć, że pierwsza konstrukcja importuje dane, a druga je eksportuje.

    Stosując konstrukcję SELECT ... INTO ... FROM ... należy wziąć pod uwagę:

  • możesz użyć dowolnych klauzul w instrukcji SELECT, takich jak GROUP BY i HAVING;
  • możesz użyć unii, aby dodać dane z kilku tabel;
  • dane można dodać tylko do jednej tabeli, niezależnie od tego, z ilu tabel zostały pobrane.