новое поле в запросе sql
Как добавить новый столбец в таблицу на SQL?
Продолжаем изучать SQL и сегодня мы поговорим о том, как можно добавить новую колонку в уже существующую таблицу с данными. И как обычно рассмотрим примеры реализации этого в разных СУБД.
Очень часто бывает, что нужно добавлять колонки в существующие таблицы, которые уже находятся в работе и в них уже есть данные. Причины такой необходимости могут быть разные, например, добавилась еще одна характеристика и ее нужно хранить именно в этой таблице. Ну, в общем если Вы читаете эту статью, то у Вас возникла такая необходимость и сейчас мы с Вами научимся добавлять новые столбцы в таблицу.
Добавляем колонку в таблицу в PostgreSQL
Сначала начнем разбирать пример на СУБД PostgreSQL. Допустим, у нас есть таблица «users» и в ней уже есть данные:
id | Name | Fam |
1 | User1 | Fam1 |
2 | User2 | Fam2 |
3 | User3 | Fam3 |
Другими словами у нас в таблице имеется:
У нас возникла необходимость добавить в нашу таблицу еще и отчество пользователя. Обращаю Ваше внимание на то, что перед добавлением новой колонке Вы должны определить, какой тип данных будет в этой колонке. В нашем примере подойдет тип varchar.
Переходим к добавлению столбца:
Теперь после того, как Вы добавили колонку, можно обновить данные, например, добавим в строку со значением user1 отчество Otch1:
После этого можете проверить данные, выполнив запрос на выборку с помощью нам уже известного оператора SELECT:
Вы получите следующий результат:
id | Name | Fam | Otch |
1 | User1 | Fam1 | Otch1 |
Добавляем новую колонку в таблицу в MS SQL Server 2000
Думаю, что с PostgreSQL мы разобрались, а точнее научились добавлять колонки в существующие таблицы.
Теперь попробуем проделать то же самое в MS SQL Server 2000. Все исходные данные допустим, будут такими же.
Здесь запрос практически такой же, но все равно он немного отличается:
Здесь уже название схемы указывать необязательно (по умолчанию таблица будет определена на основе контекста подключения), а также ключевое слово column тоже нет необходимости писать. Давайте также обновим и проверим наши данные:
Заметка! Всем тем, кто только начинает свое знакомство с языком SQL, рекомендую прочитать книгу «SQL код» – это самоучитель по языку SQL, которую написал я, и в которой я подробно, и в то же время простым языком, рассказываю о языке SQL.
Вот и все! Надеюсь, Вам помог этот небольшой урок по добавлению колонок в существующие таблицы с использованием языка SQL. Удачи!
SQL-Урок 13. Добавление данных (INSERT INTO)
1. Добавление целых строк
INSERT INTO Sellers (ID, Address, City, Seller_name, Country) VALUES (‘6’, ‘1st Street’, ‘Los Angeles’, ‘Harry Monroe’, ‘USA’)
Также можно изменять порядок указания названий колонок, однако одновременно нужно менять и порядок значений в параметре VALUES.
2. Добавление части строк
В предыдущем примере при использовании оператора INSERT мы явно отмечали имена столбцов таблицы. Используя данный синтаксис, мы можем пропустить некоторые столбцы. Это значит, что вы вводите значение для одних столбцов но не предлагаете их для других. Например:
INSERT INTO Sellers (ID, City, Seller_name) VALUES (‘6’, ‘Los Angeles’, ‘Harry Monroe’)
3. Добавление отобранных данных
INSERT INTO Sellers (ID, Address, City, Seller_name, Country) SELECT ID, Address, City, Seller_name, Country FROM Sellers_EU
Нужно обратить внимание, чтобы значение внутренних ключей не повторялись (поле ID), в противном случае произойдет ошибка. Оператор SELECT также может включать предложения WHERE для фильтрации данных. Также следует отметить, что СУБД не обращает внимания на названия колонок, которые содержатся в операторе SELECT, для нее важно только порядок их расположения. Поэтому данные в первом указанном столбце, что были выбраны из-за SELECT, будут в любом случае заполнены в первый столбец таблицы Sellers, указанной после оператора INSERT INTO, независимо от названия поля.
4. Копирование данных из одной таблицы в другую
Часто при работе с базами данных возникает необходимость в создании копий любых таблиц, с целью резервирования или модификации. Чтобы сделать полную копию таблицы в SQL предусмотрен отдельный оператор SELECT INTO. Например, нам нужно создать копию таблицы Sellers, нужно будет прописать запрос следующим образом:
SELECT * INTO Sellers_new FROM Sellers
Добавление столбцов в таблицу (компонент Database Engine)
В этой статье содержатся инструкции по добавлению новых столбцов в таблицу в SQL Server при помощи SQL Server Management Studio или Transact-SQL.
Перед началом
Ограничения
Использование инструкции ALTER TABLE для добавления столбцов в таблицу приводит к автоматическому добавлению этих столбцов в конец таблицы. Если требуется, чтобы столбцы располагались в таблице в определенном порядке, воспользуйтесь SQL Server Management Studio. Однако помните, что это не рекомендуемый метод конструирования баз данных. Рекомендуется указывать порядок, в котором возвращаются столбцы, на уровне приложения и запроса. Не следует предполагать, что SELECT * будет возвращать все столбцы в ожидаемом порядке, основанном на порядке их определения в таблице. Всегда указывайте столбцы в запросах и приложениях по именам в том порядке, в котором они должны следовать.
безопасность
Permissions
Требуется разрешение ALTER на таблицу.
Использование среды SQL Server Management Studio
Вставка в таблицу столбцов с помощью конструктора таблиц
В обозревателе объектов щелкните правой кнопкой мыши таблицу, в которую необходимо добавить столбцы, и выберите пункт Конструктор.
Введите имя столбца в ячейку. Имя столбца — значение, которое необходимо указать.
Нажмите клавишу TAB, чтобы перейти к ячейке Тип данных и выбрать тип данных из раскрывающегося списка.
Это — обязательное значение, и если его не указать, будет использоваться значение по умолчанию.
Значения по умолчанию можно установить или изменить в диалоговом окне Параметры в Инструменты для баз данных.
По окончании добавления столбцов из меню Файл выберите пункт Сохранить имя таблицы.
Создание таблицы в SQL
Для создания таблиц используется оператор CREATE TABLE.
Для примера используем ранее созданные таблицы.
Итак, в результате в базе данных Institute мы собираемся получить следующие таблицы:
Используем следующие правила:
Название таблицы может быть написано и без кавычек, так как состоит из одного слова.
Поле name будет строковым, ограничим его в 25 символов ( VARCHAR(25) ), поле тоже обязательно для заполнения, поэтому добавим NOT NULL :
`name` VARCHAR(25) NOT NULL,
`zarplata` INT(11), `premia` INT(11),
После перечисления всех полей указываем ключевое поле:
Получаем код создания таблицы teachers :
CREATE TABLE `teachers` ( `id` INT(11) NOT NULL, `name` VARCHAR(25) NOT NULL, `zarplata` INT(11), `premia` INT(11), PRIMARY KEY (`id`) );
Проверить результат можно в сервисе онлайн визуализации схемы базы данных https://dbdesigner.net/, указания по работе с сервисом можно прочитать здесь.
Для заполнения таблицы данными используется оператор INSERT языка SQL.
Обновление таблиц: удаление и добавление полей
ALTER TABLE teachers ADD phone CHAR (20);
Протестируем в сервисе http://sqlfiddle.com/ (инструкция по использованию сервиса здесь).
Добавим код в левое окно:
select * from teachers;
ALTER TABLE teachers DROP COLUMN phone
CREATE TABLE `teachers` ( `id` INT(11) NOT NULL, `name` VARCHAR(25) NOT NULL, `zarplata` INT(11), `premia` INT(11), `phone` char(20), PRIMARY KEY (`id`) ); ALTER TABLE teachers DROP COLUMN phone; INSERT INTO teachers VALUES (1, ‘Иванов’,10000,500), (2, ‘Петров’,15000,1000), (3, ‘Сидоров’,14000,800), (4,’Боброва’,11000,800);
От CREATE до JOIN: введение в SQL + шпаргалка
Львиная доля мировой информации хранится в реляционных базах данных. Чтобы работать с ней, нужно владеть языком SQL-запросов.
Для решения многих стандартных задач не требуется быть SQL-виртуозом, достаточно изучить азы работы с базами:
Этими азами мы и займемся: разберем синтаксис SQL-запросов в теории и на реальных примерах. К счастью, язык баз данных очень похож на простые английские предложения, так что вы легко с ним справитесь.
Чтобы учиться эффективнее, сразу же закрепляйте новые знания практикой. Поиграть с SQL можно на этом замечательном ресурсе. В левой панели вы должны ввести весь код, относящийся к структуре базы данных. После этого начинайте экспериментировать с SELECT’ами в правом поле.
* В примерах используется SQL-синтаксис для MySQL 5.6. Запросы, предназначенные для разных СУБД, могут различаться.
Терминология
База данных состоит из таблиц, а таблица – из колонок и строк.
Каждая колонка, или поле таблицы, представляет собой конкретный вид информации, например, имя студента (строка) или зарплата сотрудника (число).
Каждая строка, или запись таблицы, – это описание конкретного объекта, например, студента или сотрудника.
Уровень: Новичок
Создание и редактирование таблиц
CREATE
Несложно догадаться, что оператор CREATE создает новую таблицу в базе. Ему нужно передать описания всех полей таблицы в формате:
Создадим таблицу с данными о собаках и их рационе питания:
ALTER
Не всегда получается создать идеальную таблицу с первого раза. Не бойтесь вносить изменения, добавлять, удалять или изменять существующие поля:
DROP и TRUNCATE
Оператор DROP удаляет таблицу из базы целиком:
Если вам нужно удалить только записи, сохранив саму таблицу, воспользуйтесь оператором TRUNCATE:
Атрибуты и ограничения
Можно ограничить диапазон данных, которые попадают в поле, например, запретить устанавливать в качестве возраста или веса отрицательные числа.
Самые распространенные в SQL ограничения целостности (CONSTRAINTS):
Ограничения можно добавлять при создании таблицы, а затем при необходимости добавлять/изменять/удалять. Они могут действовать на одно поле или комбинацию полей.
Первичный ключ, автоматический инкремент, NOT NULL и значение по умолчанию мы уже использовали в примере с собаками.
Решим новую задачу – составление списка президентов:
Ограничение уникальности не позволит занести в таблицу одного и того же президента одной страны дважды. Кроме того, не попадут в список и слишком молодые политики.
Для добавления и удаления ограничений к существующим таблицам используйте оператор ALTER. Ограничениям можно давать имя, чтобы ссылаться на них впоследствии. Для этого предназначена конструкция CONSTRAINT.
Еще одно удобное ограничение в SQL – внешний ключ (FOREIGN KEY). Он позволяет связать поля двух разных таблиц.
Для примера возьмем базу данных организации с таблицами сотрудников и отделов:
Теперь в поле department таблицы employees нельзя будет указать произвольный отдел. Он обязательно должен содержаться в таблице departments.
Сохранение и обновление записей
INSERT
Добавить в таблицу новую запись (или даже сразу несколько) очень просто:
Вы даже можете скопировать записи из одной таблицы и вставить их в другую одним запросом. Для этого нужно скомбинировать операторы INSERT и SELECT:
UPDATE
Оператор UPDATE используется для изменения существующих записей таблицы.
Вот так легким движением руки мы обнулили зарплату сразу у всех сотрудников.
Запрос можно уточнить, добавив секцию WHERE с условием отбора записей.
С условиями мы подробно разберемся чуть позже, когда будем говорить о выборке данных из базы.
DELETE
Можно удалить из таблицы все записи сразу или только те, которые соответствуют некоторому условию:
Уровень: уверенный пользователь
Выборка и фильтрация данных
Для получения данных из базы служит оператор SELECT. В SQL есть множество способов отфильтровать именно те данные, которые вам нужны, а также отсортировать их и разбить по группам.
Вот небольшая демо-база, на которой вы можете попрактиковаться:
SELECT
Можно переименовывать поля для вывода:
Ограничение количества результатов:
Агрегатные функции и группировка
SQL позволяет привести несколько записей таблицы к некоторому единому значению:
Агрегатные функции могут работать со всеми записями таблицы разом, а могут и с отдельными группами. Чтобы эти группы сформировать, используйте оператор GROUP BY:
Полученные группы тоже можно отфильтровывать: для этого предназначена конструкция HAVING. Например, не будем учитывать в выборке отделы, в которых работает меньше трех человек:
Объединение таблиц
Очень часто нужная вам информация хранится в разных таблицах – это обусловлено законами нормализации. Поэтому важно уметь объединять их.
В запросе, захватывающем несколько таблиц, нужно указать следующее:
Соединение бывает внутреннее (INNER) и внешнее (OUTER).
Внутреннее соединение
При внутреннем соединении вы получите в результате только те записи, для которых нашлось соответствие во всех таблицах.
SQL просмотрит каждую запись из таблицы employees и попытается поставить ей в соответствие каждую запись из таблицы departments. Если это удастся (id отделов совпадают), запись будет включена в результат, иначе – не будет.
Таким образом, вы не увидите Kenny Washington, у которого отдел не указан, а также все отделы, в которых нет сотрудников.
Если не указано условие для соединения таблиц, SQL создаст все возможные комбинации сотрудников и отделов.
Внешнее соединение
При внешнем соединении в результат попадают также записи без соответствий. При этом вы можете регулировать, из какой таблицы такие записи берутся, а из какой – нет.
Например, чтобы увидеть в результате Kenny Washington, потребуется левое внешнее соединение. Слово OUTER можно не указывать – соединение по умолчанию внешнее:
Теперь в результате есть все данные из левой таблицы (employees), даже если для них нет соответствия.
Правое соединение соответственно проигнорирует Кенни, но выведет все пустые отделы:
И наконец, полное внешнее соединение выведет и соответствия, и пустые отделы, и сотрудников без отдела.
Декартово произведение
Оператор CROSS JOIN позволяет получить все возможные комбинации записей из двух таблиц:
Автосоединение
Кроме того, таблицу можно соединять с самой собой. Это пригодится, чтобы найти босса для каждого сотрудника. Сейчас в поле boss находится идентификатор другого сотрудника, необходимо вывести его имя:
Благодаря использованию левого соединения мы можем вывести также сотрудников, не имеющих руководителей.
Объединение выборок
SQL позволяет сделать две отдельные выборки, а затем объединить их результаты по определенному правилу:
UNION
Объединить штатных и внештатных сотрудников
INTERSECT
Найти всех сотрудников, которые участвуют в сборной предприятия по спортивной ходьбе
MINUS
Найти всех сотрудников, которые не участвуют в сборной предприятия по спортивной ходьбе и заставить участвовать :
Уровень: SQL-мастер
Представления
Views, или представления, в SQL – это SELECT-запрос, который вы можете сохранить для дальнейшего использования. Один раз написали, а потом можете пользоваться полученной таблицей, которая – внимание! – всегда остается актуальной в отличие от результата обычных запросов.
У представлений есть еще одна важная миссия: обеспечение безопасности. Под view вы легко можете скрыть бизнес-логику и архитектуру базы и защитить свое приложение от нежелательных вторжений.
Представление может извлекать данные из одной или нескольких таблиц. Кроме того, при соблюдении ряда условий представление может быть изменяемым, то есть совершая операции над ним, можно изменять базовые таблицы.
Если представление изменяемое, можно использовать при его создании CHECK OPTION для проверки изменений на соответствие некоторому предикату:
Представления могут основываться как на таблицах базы, так и на других представлениях, образуя несколько уровней вложенности. С учетом этого предложение WITH можно расширить:
Чтобы удалить представление, используйте уже знакомый оператор DROP:
Индексы
Индексы – это специальный таблицы, которые позволяют ускорить поиск по базе данных. Их можно представить как алфавитный указатель в большой книге.
Наличие индексов в базе ускоряет выполнение операций SELECT и вычисление условий WHERE. Но есть и обратная сторона медали: замедляются операции вставки и удаления данных, так как при этих изменениях необходимо пересчитывать индексы.
Триггеры
Триггеры в SQL – это процедуры, которые автоматически запускаются при выполнении определенной операции (INSERT/UPDATE/DELETE) – до (BEFORE) или после (AFTER) нее.
Удалить существующий триггер можно с помощью оператора DROP: