Как создать в таблице новый столбец sql
Перейти к содержимому

Как создать в таблице новый столбец sql

  • автор:

Как добавить новый столбец в таблицу между существующими столбцами?

Уже не впервые на форумах встречаю вопрос о том, как добавить новый столбец в определенное место существующей таблицы, скажем, между первым и вторым столбцом. Этот наивный с точки зрения реляционной модели вопрос, тем не менее, имеет некоторый смысл с точки зрения языка SQL.

Я говорю «наивный», поскольку по определению атрибуты отношения не упорядочены, и обращение к значениям атрибута выполняется по его имени, но не по позиции. Что же касается языка SQL, то столбцы в таблице имеют порядок, который задается в операторе CREATE TABLE. Новый же столбец, который добавляется с помощью оператора ALTER TABLE, становится последним в таблице. Т.е. стандарт языка SQL не предусматривает возможности непосредственно добавить столбец в определенную позицию в списке столбцов.

Справедливости ради следует сказать, что некоторые реализации языка SQL расширяют стандарт в этом плане. Например, в MySQL в операторе ALTER TABLE вы можете указать позицию добавляемого столбца (новый столбец может стать первым или после указанного столбца).

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

 SELECT * FROM Employees ORDER BY last_name, first_name; 

Если потребовалось добавить в таблицу Employees дополнительную информацию о сотрудниках, которая логически должна находиться в определенном месте (например, отчество непосредственно между именем и фамилией), то вместо того, чтобы вносить изменения в клиентские приложения, может оказаться проще изменить структуру таблицы Employees.

Итак, имеется таблица Employees, которая создается следующим оператором:

 CREATE TABLE Employees( emp_num INT NOT NULL PRIMARY KEY, first_name CHAR(30) NOT NULL, last_name CHAR(30) NOT NULL ); 

Теперь нам требуется добавить столбец middle_name (отчество) между столбцами first_name и last_name.

В MySQL это можно сделать просто:

 ALTER TABLE Employees ADD COLUMN middle_name CHAR(10) NULL AFTER first_name; 

В SQL Server так поступить нельзя, но можно использовать следующий алгоритм:

» создание новой таблицы требуемой структуры;
» копирование данных из таблицы Employees в эту новую таблицу;
» удаление таблицы Employees;
» переименование новой таблицы в таблицу с именем Employees.

Ниже приводятся операторы T-SQL, которые реализуют этот алгоритм.

 -- Создаем временную таблицу требуемой структуры CREATE TABLE Emp_temp( emp_num INT NOT NULL PRIMARY KEY, first_name CHAR(30) NOT NULL, middle_name CHAR(30) NULL, last_name CHAR(30) NOT NULL ); GO -- Копируем данные из старой таблицы в новую INSERT INTO Emp_temp(emp_num, first_name, last_name) SELECT * FROM Employees; GO -- Удаляем старую таблицу DROP TABLE Employees; GO -- Переименовываем новую EXEC sp_rename 'Emp_temp', 'Employees'; GO 

Обратите внимание, что столбец middle_name допускает NULL-значения. Мы не можем добавить столбец в существующую таблицу (или, как в нашем случае, не задавая значения для этого столбца при копировании данных из таблицы Employees в таблицу Emp_temp), если он не имеет значения по умолчанию. Здесь мы принимаем по умолчанию значение NULL.

Мы можем выполнить два первых шага за одно действие с помощью оператора SELECT INTO, который «на лету» создает новую таблицу:

 SELECT emp_num, first_name, CAST(NULL AS CHAR(30)), last_name INTO Emp_temp FROM Employees; 

Оператор CAST позволяет нам тут же задать требуемый тип добавляемого столбца. Остальные столбцы наследуют типы из таблицы-источника.

Если вы хотите проверить работу последнего скрипта, приведите таблицу в исходное состояние, удалив добавленный ранее столбец:

 ALTER TABLE Employees DROP COLUMN middle_name; 

Заметим, что при использовании оператора SELECT INTO теряются ключи. Поэтому нам придется добавить ограничение PRIMARY KEY (первичный ключ) либо во временную таблицу, либо уже в переименованную, чтобы получить в точности требуемую структуру:

 ALTER TABLE Emp_temp ADD CONSTRAINT emp_PK PRIMARY KEY(emp_num); 

Аналогичный алгоритм можно применить и для перестановки уже существующих столбцов. Помимо указанной причины такая перестановка может повысить производительность, связанную с сокращением объема данных, записываемых в журнал транзакций в некоторых реализациях. Это связано со спецификой обработки строк фиксированной и переменной длины. Вот какие рекомендации по этому поводу дает Джо Селко * :

» помещайте первыми нечасто обновляемые столбцы постоянной длины;
» затем помещайте нечасто обновляемые столбцы переменной длины;
» последними помещайте часто обновляемые столбцы;
» ставьте рядом столбцы, которые, как правило, обновляются одновременно.

* Селко Д. Стиль программирования Джо Селко на SQL. — М.: Изд-во «Русская редакция»; СПб.: Питер, 2006

Как добавить столбец в таблицу sql

Чтобы добавить столбец, еще его называют полем, в таблицу, используется запрос под названием ALTER . Лучше сразу перейти к наглядному примеру.

-- в таблице "games" -- добавить столбец с именем "price" и типом "int" ALTER TABLE games ADD COLUMN price int; 

07 сентября 2023

Здравствуй те. Спасибо за информацию. У меня один вопрос. ALTER TABLE tb_site ADD COLUMN sites_wm varchar(12); Строка sites_wm varchar(12) добавится в самый конец, можно ли изменить её местонахождение и скажем расположить пятой с верху или в этом запросе этого сделать нельзя!? Тогда подскажите как перемещать строки, если их скажем штук 15 и мне нужно сделать сортировку что то поднять что то опустить. Да я могу качнуть Таблицу и отредактировать это отдельно. Но может это возможно сделать прямо в базе данных .

Как добавить новый столбец в таблицу на SQL?

Продолжаем изучать SQL и сегодня мы поговорим о том, как можно добавить новую колонку в уже существующую таблицу с данными. И как обычно рассмотрим примеры реализации этого в разных СУБД.

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

Добавляем колонку в таблицу в PostgreSQL

Сначала начнем разбирать пример на СУБД PostgreSQL. Допустим, у нас есть таблица «users» и в ней уже есть данные:

id Name Fam
1 User1 Fam1
2 User2 Fam2
3 User3 Fam3

Другими словами у нас в таблице имеется:

  • id – это уникальный идентификатор пользователя;
  • Name – это имя пользователя;
  • Fam – это фамилия пользователя.

У нас возникла необходимость добавить в нашу таблицу еще и отчество пользователя. Обращаю Ваше внимание на то, что перед добавлением новой колонке Вы должны определить, какой тип данных будет в этой колонке. В нашем примере подойдет тип varchar.

Переходим к добавлению столбца:

ALTER TABLE work.users ADD COLUMN otch VARCHAR (20)
  • ALTER TABLE – инструкция изменения таблицы;
  • users – название нужной таблицы;
  • work – схема, в которой расположена таблица;
  • add column – инструкция добавления столбца;
  • otch – название нашей новой колонки;
  • varchar (20) – тип данных, 20 это максимальное количество символов.

Теперь после того, как Вы добавили колонку, можно обновить данные, например, добавим в строку со значением user1 отчество Otch1:

UPDATE work.users SET Otch = 'Otch1' WHERE name = 'User1'

После этого можете проверить данные, выполнив запрос на выборку с помощью нам уже известного оператора SELECT:

SELECT * FROM work.users WHERE name = 'User1'

Вы получите следующий результат:

id Name Fam Otch
1 User1 Fam1 Otch1

Добавляем новую колонку в таблицу в MS SQL Server 2000

Думаю, что с PostgreSQL мы разобрались, а точнее научились добавлять колонки в существующие таблицы.

Теперь попробуем проделать то же самое в MS SQL Server 2000. Все исходные данные допустим, будут такими же.

Здесь запрос практически такой же, но все равно он немного отличается:

ALTER TABLE users ADD otch VARCHAR (20)

Здесь уже название схемы указывать необязательно (по умолчанию таблица будет определена на основе контекста подключения), а также ключевое слово column тоже нет необходимости писать. Давайте также обновим и проверим наши данные:

UPDATE users SET Otch = ' Otch1' WHERE name = 'User1'
SELECT * FROM users WHERE name = 'User1'

Заметка! Всем тем, кто только начинает свое знакомство с языком SQL, рекомендую прочитать книгу «SQL код» – это самоучитель по языку SQL, которую написал я, и в которой я подробно, и в то же время простым языком, рассказываю о языке SQL.

Вот и все! Надеюсь, Вам помог этот небольшой урок по добавлению колонок в существующие таблицы с использованием языка SQL. Удачи!

Как связать данные нескольких столбцов и вставить их в новый столбец одной и той же таблицы

У меня есть таблица где есть данные, но теперь нужно добавить новый столбец (я отдельно добавил ее — new_column) и в нее вставить запись собранной из других столбцов той же таблицы, пытался сделать так но не работает: insert into table t (new_column) select (column_1 || ‘-‘ || column_2 || ‘-‘ || column_3 || ‘-‘ || column_4) nc from table; commit;

Отслеживать

задан 19 янв в 6:35

67 3 3 бронзовых знака

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

В таком случае, лучше всего, подходит вычисляемый столбец:

ALTER TABLE table ADD (nc varchar(512) GENERATED ALWAYS AS (column_1 || '-' || column_2 || '-' || column_3 || '-' || column_4) VIRTUAL); 

Отслеживать

ответ дан 19 янв в 6:57

Vitaliy Zlobin Vitaliy Zlobin

1,676 1 1 золотой знак 5 5 серебряных знаков 15 15 бронзовых знаков

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *