Итак, вы узнали, как извлекать и агрегировать существующие данные из базы данных. Но в какой-то момент вам, вероятно, потребуется отредактировать данные в базе данных или добавить новые таблицы. Например, вам может понадобиться изменить значение, переименовать столбец или даже удалить таблицу. Команды такого рода называются операторами «DDL» или «языка определения данных».

В этом модуле вы узнаете, как:

  • Создание и удаление таблиц с помощью SQL
  • Заполнить таблицы новыми данными
  • Обновить существующие данные в таблицах
  • Добавлять и удалять строки и столбцы

Убедитесь, что вы завершили модули 1–3, прежде чем приступать к модулю 4.

Создание таблицы

Мы рассмотрели, как создать таблицу из файла и как создать новую таблицу с помощью веб-интерфейса bit.io в модуле 1. В этом разделе мы обсудим, как создать и заполнить таблицу с помощью SQL.

Санта выбрал свои подарки для пингвинов и хочет хранить их на новом столе. Вы можете создать новую пустую таблицу командой CREATE TABLE. Создание таблицы в Postgres состоит из трех основных частей: имя таблицы, имена столбцов и типы столбцов. Базовый шаблон:

CREATE TABLE table_name (column_1 columnINSERT INTOtype, column_2 columnDROP TABLE table_name;type, …)

Итак, чтобы создать пустую таблицу для Санты, чтобы записывать подарки пингвинов по островам и видам, используйте:

CREATE TABLE penguin_gifts (
  island TEXT,
  species TEXT,
  gift TEXT
);

Новая таблица появится в списке таблиц, но в ней еще нет строк.

Заполнение таблицы

Вы можете заполнить таблицы в postgres оператором INSERT INTO. Далее таблица будет заполнена подарками для пингвинов каждого острова. Все пингвины Торгерсена получают шарфы; все пингвины Dream получают маленькие варежки; и все пингвины Биско получают большие свитера.

INSERT INTO penguin_gifts (island, species, gift)
VALUES ('Torgersen', 'Gentoo', 'Scarf'),
('Torgersen', 'Chinstrap', 'Scarf'),
('Torgersen', 'Adelie', 'Scarf'),
('Dream', 'Gentoo', 'Small Mittens'),
('Dream', 'Chinstrap', 'Small Mittens'),
('Dream', 'Adelie', 'Small Mittens'),
('Biscoe', 'Gentoo', 'Large Sweater'),
('Biscoe', 'Chinstrap', 'Large Sweater'),
('Biscoe', 'Adelie', 'Large Sweater');

И теперь в нашей таблице есть данные!

Обратите внимание на структуру оператора INSERT INTO. Он включает в себя имя таблицы, имена столбцов и вставляемые значения:

INSERT INTO table_name (column_names)
VALUES (row_1), (row_2), … ;

Удаление таблиц

Вы можете удалить таблицу с помощью DROP TABLE table_name; . Попробуйте!

Упражнение:

  1. Создайте таблицу с названием «рост» со столбцами «имя», «возраст» и «рост» с помощью команды CREATE TABLE. Типы столбцов должны быть text, float и float соответственно.
  2. Напишите оператор INSERT, чтобы добавить в таблицу следующие данные:
name | age  | height
--------------------
John | 25.1 | 183.2 
Jane | 27.4 | 171.0

Теперь удалите таблицу с помощью команды DROP TABLE.

Редактирование таблиц

Обновить существующие значения таблицы

Посмотрев на совокупные данные, которые вы собрали в модуле 3, Санта решил, что он не может с чистой совестью просто распределить подарки по островам. Пингвины Адели есть на всех трех островах — что самые маленькие из пингвинов Палмера должны делать с большими свитерами? И шарфы на Торгерсене не будут так красиво смотреться с их короткими клювами! Санта решил, что эти пингвины должны получить то, что все пингвины действительно хотят на Рождество: iPad. Нам нужно соответствующим образом обновить таблицу penguin_gifts. Делаем это командой UPDATE:

UPDATE table_name
SET column = new_value
WHERE condition;

Чтобы назначить iPad пингвинам Адели, нам нужно:

UPDATE penguin_gifts
SET gift = 'iPad'
WHERE species = 'Adelie';

Обновленная таблица выглядит так:

Упражнение. Санта допустил ошибку. У него не хватает iPad на всех пингвинов Адели. Он решил, что с их короткими ластами они, вероятно, будут достаточно маленькими варежками. Обновите таблицу penguin_gifts, чтобы пингвины Адели на острове Биско получили маленькие варежки. Подсказка: предложение WHERE для UPDATEs работает так же, как и для SELECTs. Вы можете указать несколько условий с помощью ключевого слова AND.

Удалить строки

Чтобы удалить строку, используйте команду DELETE следующим образом:

DELETE FROM table_name
WHERE condition;

Внимание! Обязательно включите предложение WHERE, иначе вы можете случайно удалить все данные из таблицы.

Деду Морозу все еще трудно понять, что подарить пингвинам Адели, поэтому давайте пока полностью отбросим эти строки и начнем сначала.

DELETE FROM penguin_gifts
WHERE species='Adelie'

Что дает нам:

Упражнение. Повторно добавьте строки для пингвинов Адели для каждого острова. Торгерсен Адели получает iPad; Адели мечты получают маленькие варежки; и Биско Адели получают шляпы.

Подсказка: добавление одной строки выглядит следующим образом

INSERT INTO penguin_gifts (island, species, gift)
VALUES ('Torgersen', 'Adelie', 'iPad')

Конечный результат должен выглядеть следующим образом:

Добавление столбцов

Вы можете использовать команды ALTER TABLE и ADD COLUMN для добавления новых столбцов. Как и при создании таблицы, при добавлении нового столбца необходимо указать тип столбца. Давайте добавим новый столбец в penguin_gifts для price, чтобы помочь Санте с бухгалтерией. Мы можем сделать это следующим образом:

ALTER TABLE penguin_gifts
ADD COLUMN price float;

И добавьте значения с помощью подхода UPDATE, изученного выше.

UPDATE penguin_gifts
SET price = 14.99
WHERE gift = 'Small Mittens';

Который дает:

Упражнение. Введите цены на оставшиеся товары. Цены:

  • Шарф: 50,00
  • iPad: 449,00
  • Шляпа: 23,45
  • Большой свитер: 114,99

После этого ваша таблица должна выглядеть так:

Переименовать столбцы и таблицы

Давайте изменим имя столбца price на retail_price, используя операторы ALTER TABLE и RENAME:

ALTER TABLE penguin_gifts
RENAME price
TO retail_price;

И переименуйте таблицу penguin_gifts в gifts с помощью:

ALTER TABLE penguin_gifts
RENAME TO gifts;

Напомним, что вы также можете переименовывать таблицы с помощью веб-интерфейса. После внесения этих изменений ваша база данных должна выглядеть так:

Санта получает специальные предложения на подарки, и на самом деле ему не нужна колонка retail_price. Давайте завершим этот раздел, опустив его.

ALTER TABLE gifts
DROP COLUMN retail_price;

Ресурсы

Теперь переходим к Модулю 5: Присоединения.