INSERT INTO VALUES() instrukcja

Wymyśliliśmy, jak tworzyć tabele, przyjrzyjmy się teraz szczegółowo, jak dodawać dane do tabeli za pomocą zapytania SQL.

W rzeczywistości jest to bardzo proste, ale istnieje kilka niuansów. Najprostsza opcja wstawiania danych do tabeli wymaga określenia dwóch rzeczy:

  • nazwy kolumn
  • wartości kolumn (dane)

Nazwy kolumn muszą być określone, ponieważ bardzo często kolumny mają wartości domyślne, które nie są określone podczas wstawiania danych. I zwykle każda tabela ma przynajmniej jedną taką kolumnę, na przykład id wiersza.

Ogólna postać zapytania o wstawienie danych do tabeli wygląda następująco:

INSERT INTO table (column1, column2, column3) VALUES
    (value1, value2, value3),
    (value1, value2, value3),
    (value1, value2, value3);

Na przykład, jeśli chcesz wstawić nowy rekord do tabeli użytkownika, zapytanie wyglądałoby tak:

INSERT INTO user (name, level, created_time) VALUES
	('Rabinovich', 5, ‘2022-06-06’);

INSERT INTO SELECT instrukcja

Innym częstym scenariuszem wstawiania danych do tabeli jest pobranie ich z innej tabeli, schematu, a nawet systemu DBMS.

Aby to zrobić, istnieje inny format zapytania INSERT INTO, w którym zamiast części VALUES można określić zapytanie w celu wybrania danych.

Ogólna forma takiego żądania jest następująca:

INSERT INTO table (column1, column2, column3)
SELECT-request;

Napiszmy zapytanie, które doda wszystkich użytkowników z tabeli pracowników do tabeli użytkowników:

INSERT INTO user (name, created_time)
   SELECT employee.name, employee.join_date
   FROM employee;

W tabeli pracownik mamy różne dane, ale z nich wybieramy tylko dwa pola – imię i nazwisko oraz czas przybycia do firmy.

Ponadto tabela użytkowników wymaga określenia poziomu użytkownika - poziomu. Pracownicy nie mają poziomu w tabeli pracowników, więc wykorzystamy fakt, że tabela użytkowników ma domyślną wartość dla pola poziomu. Po prostu nie określamy poziomu, a SQL ustawi wartość domyślną.

Załóżmy, że nie jesteśmy zadowoleni z wartości domyślnej i chcemy, aby poziom wynosił 99, i zastąpmy user.created_time dzisiejszą datą, wtedy możemy napisać to:

INSERT INTO user (name, level, created_time)
   SELECT employee.name, 99, CURDATE()
   FROM employee;

Można by zrobić dużo więcej, ale myślę, że na razie to wystarczy. Możesz przeczytać więcej na oficjalnej stronie MySQL.