Базы данных. SQL. Создание таблиц. Оператор CREATE TABLE
Перед изучением данной темы рекомендуется ознакомиться с темой:
- Microsoft SQL Server Management Studio 2018. Пример создания простейшего запроса
Содержание
- 1. Оператор CREATE TABLE. Создание таблицы. Общая форма
- 2. Примеры создания таблиц
- 2.1. Пример создания простейшей таблицы учета товаров в магазине
- 2.2. Пример создания таблицы учета телефонов абонентов
- 2.3. Пример создания таблицы учета заработной платы и отчислений в организации
- Связанные темы
Поиск на других ресурсах:
1. Оператор CREATE TABLE. Создание таблицы. Общая форма
Таблица является основным элементом любой реляционной базы данных. Вся необходимая информация, которая должна храниться в базе данных, размещается в таблицах. Таблицы могут быть связаны между собой. Количество таблиц в базе данных не ограничено и зависит от сложности решаемой задачи.
Для создания таблицы в языке SQL используется оператор CREATE TABLE. В простейшем случае общая форма оператора CREATE TABLE следующая
CREATE TABLE Table_Name ( Field_Name_1 Type_1, Field_Name_2 Type_2, ... Field_Name_N Type_N )
здесь
- Table_Name – имя таблицы базы данных. Если в базе данных есть таблица с таким именем, то возникнет ошибка;
- Field_Name_1, Field_Name_2, Field_Name_N – имена полей (столбцов) таблицы базы данных. Имя каждого поля должно быть уникальным. В разных таблицах имена полей могут совпадать;
- Type_1, Type_2, Type_N – соответственно типы полей Field_Name_1, Field_Name_2, Field_Name_N такие как INTEGER, DECIMAL, DATE и другие.
На поля Field_Name_1, Field_Name_2, Field_Name_N могут накладываться ограничения. Каждое ограничение указывается после имени поля. В этом случае общая форма оператора CREATE TABLE выглядит примерно следующим образом:
CREATE TABLE Table_Name ( Field_Name_1 Type_1 Attribute_1, Field_Name_2 Type_2 Attribute_2, . .. Field_Name_N Type_N Attribute_N )
здесь
- Attribute_1, Attribute_2, Attribute_N – ограничения, накладываемые на поля Field_Name_1, Field_Name_2, Field_Name_N. Ограничения задаются одним из возможных слов: NULL, NOT NULL, UNIQUE, CHECK, PRIMARY KEY, FOREIGN KEY и других.
Рассмотрение существующих полей атрибутов в языке SQL не является предметом изучения данной темы.
⇑
2. Примеры создания таблиц
2.1. Пример создания простейшей таблицы учета товаров в магазине
Условие задачи.
- Используя средства языка SQL создать таблицу с именем Product, которая будет отображать следующую информацию об учете товаров в магазине
Название товара | Стоимость закупки, грн. | Количество, штук | Дата получения | Примечание |
… | … | … | … | … |
- Таблица обязана содержать первичный ключ и обеспечивать уникальность записей.
Решение.
- Для обеспечения уникальности записей в таблице нужно создать дополнительное поле, которое будет являться счетчиком (автоинкрементом). Название поля – ID_Product. Это поле есть первичным ключом. Также это поле имеет ограничение NOT NULL (непустое поле).
- Следующим шагом решения есть назначение имен полям таблицы. В связи с тем, что не все системы управления базами данных (СУБД) поддерживают символы кириллицы, имена полей таблицы будут задаваться латинскими символами. В нашем случае формируются имена и типы данных, сформированные в следующей таблице:
Название поля в условии задачи | Название поля на языке SQL | Тип поля | Объяснение |
ID_Product | ID_Product | INTEGER | Первичный ключ, счетчик, NOT NULL |
Название товара | [Name] | VARCHAR(100) | Строковый тип переменной длины максимум до 100 символов |
Стоимость закупки | Price | DECIMAL(15, 2) | Точность равна 15 знакам, масштаб равен 2 знакам после запятой |
Количество штук | [Count] | INTEGER | Целое число |
Дата получения | [Date] | DATE | |
Примечание | Note | VARCHAR(200) |
- Написание кода на языке SQL с учетом особенностей предыдущих шагов. Текст программы создания таблицы на языке SQL следующий
CREATE TABLE [Product] ( [ID_Product] Integer Not Null Primary Key, [Name] VarChar(100) , [Price] Decimal(15, 2), [Count] Integer, [Date] Date, [Note] VarChar(200) )
CREATE TABLE Product ( ID_Product Integer Not Null Primary Key, Name VarChar(100) , Price Decimal(15, 2), Count Integer, Date Date, Note VarChar(200) )
В приведенном выше коде для поля ID_Product задаются ограничения Not Null и Primary Key. В результате запуска программы на SQL будет создана следующая таблица
ID_Product | Name | Price | Count | Date | Note |
… | … | … | … | … | … |
На рисунке 1 отображаются поля созданной таблицы в Microsoft SQL Server Management Studio.
Рисунок 1. Этапы создания таблицы Product в Microsoft SQL Server Management Studio 18: 1 – создание файла; 2 – набор SQL-запроса; 3 – запуск запроса на выполнение; 4 – результирующая таблица
Конечно, можно создать таблицу, в которой нет поля ID_Product и нету первичного ключа. Такая таблица не будет обеспечивать уникальность записей, поскольку возможна ситуация, когда данные в двух записях могут совпасть. В этом случае SQL код программы имеет вид
CREATE TABLE Product ( Name VarChar(100) , Price Decimal(15, 2), Count Integer, Date Date, Note VarChar(200) )
⇑
2.2. Пример создания таблицы учета телефонов абонентов
Условие задачи.
Используя средства языка SQL (T-SQL) создать таблицу учета телефонов абонентов.
Name | Address | Phone Number 1 | Phone Number 2 | Phone Number 3 |
Ivanov I. | New York | 123456 | 067-1234567 | – |
Johnson J. | Kiev | 789012 | 033-7777778 | 102 |
Petrenko P.P. | Warshaw | 044-2521412 | – | – |
… | … | … | … | … |
Обеспечить уникальность и корректное сохранение записей таблицы.
Решение.
Для обеспечения уникальности записей нужно создать дополнительное поле – счетчик. Это поле будет увеличивать свое значение на 1 при каждом добавлении новой записи. Если запись будет удаляться, текущее максимальное значение счетчика не будет уменьшаться. Таким образом, все числовые значения этого поля будут различаться между собой (будут уникальными). В нашем случае добавляется поле ID_Subscriber. Это поле не допускает нулевые значения (NULL).
Для полей Name и [Phone Number 1] целесообразно задать ограничение (атрибут) NOT NULL. Это означает, что в эти поля обязательно нужно ввести значение. Это логично, поскольку абонент в базе данных должен иметь как минимум имя и хотя бы один номер телефона.
После внесенных изменений поля таблицы будут иметь следующие свойства
Тип данных | Объяснение | |
ID_Subscriber | INTEGER | Первичный ключ, счетчик, NOT NULL |
Name | VARCHAR(50) | Фамилия и имя абонента |
Address | VARCHAR(100) | Адрес |
[Phone Number 1] | VARCHAR(20) | NOT NULL |
[Phone Number 2] | VARCHAR(20) | |
[Phone Number 3] | VARCHAR(20) |
Учитывая вышесказанное, команда CREATE TABLE на языке Transact-SQL (T-SQL) будет выглядеть следующим образом
Create Table Subscriber ( ID_Subscriber Int Not Null Primary Key, [Name] VarChar(50) Not Null, [Address] VarChar(100), [Phone Number 1] VarChar(20) Not Null, [Phone Number 2] VarChar(20), [Phone Number 3] VarChar(20) )
В запросе имена полей
[Phone Number 1] [Phone Number 2] [Phone Number 3]
обязательно должны быть в квадратных скобках [], поскольку имена состоят из нескольких слов (между словами есть символ пробела).
На рисунке 2 показаны этапы создания таблицы в системе Microsoft SQL Server Management Studio.
Рисунок 2. Окно Microsoft SQL Server Management Studio. Этапы формирования запроса: 1 — создание файла «SQL Query 2.sql»; 2 — набор SQL-запроса; 3 — выполнение; 4 — результирующая таблица
⇑
2.3. Пример создания таблицы учета заработной платы и отчислений в организации
Условие задачи
Используя язык SQL сделать таблицу Account, в которой ведется учет начисленной заработной платы в некой организации. Образец таблицы следующий
Name | Position | Accrued salary | Date of employment | Gender |
Johnson J. | Manager | 3200.00 | 01.02.2128 | M |
Petrova M.P. | Clerk | 2857.35 | 02.03.2125 | F |
Williams J. | Secretary | 3525.77 | 01.08.2127 | F |
Wilson K. | Recruiter | 1200.63 | 22.07.2125 | F |
… | … | … | … | … |
Таблицу реализовать так, чтобы обеспечивалась уникальность записей.
Решение.
Чтобы обеспечить уникальность записей, создается дополнительное поле-счетчик ID_Account типа Int. Это поле целесообразно выбрать первичным ключом, если нужно будет использовать данные этой таблицы в других связанных таблицах.
После модификации поля таблицы будут иметь следующие свойства.
Название поля (атрибут) | Тип данных | Дополнительные объяснения |
ID_Account | Int | Автоинкремент (счетчик), первичный ключ (Primary Key), ненулевое поле (Not Null), обеспечивает уникальность записей |
[Name] | VARCHAR(50) | Фамилия и имя, не нулевое поле (Not Null) |
Position | VARCHAR(100) | Должность, не нулевое поле (Not Null) |
Salary | DECIMAL | Тип, предназначенный для сохранения денежных величин |
[Employment Date] | DATE | Дата, не нулевое поле (Not Null) |
Gender | CHAR(1) | Стать, не нулевое поле (Not Null) |
В модифицированной таблице поле Salary допускает нулевые (Null) значения. Таким случаем может быть, например, когда человек принят на работу, но заработная плата ему еще не начислена. В данной ситуации временно устанавливается Null-значение. Все остальные поля обязательны для заполнения.
Запрос на язык SQL, создающий вышеприведенную таблицу имеет вид
/* Create the Account table */ Create Table Account ( ID_Account Int Not Null Primary Key, [Name] VarChar(50) Not Null, [Position] VarChar(100) Not Null, Salary Decimal Null, [Employment Date] Date Not Null, Gender Char(1) )
Результат выполнения SQL-запроса показан на рисунке 3
Рисунок 3. Результат выполнения запроса на языке Transact-SQL (T-SQL)
⇑
Связанные темы
- Microsoft SQL Server Management Studio 18. Пример создания простейшего запроса
- Модификация таблиц. Оператор ALTER TABLE. Примеры
⇑
Упрощение создания таблиц для записи в них данных из SQL запросов — NTA на vc.
ruNTA
В одном из фильмов с Уиллом Смитом главный герой в процессе обзвона клиентов заметил, что если он не кладет трубку, а сразу набирает следующий номер, то на один звонок он тратит меньше времени и в день может совершить больше звонков. Таким образом, он сократил время на мелких рутинных делах. Подобное возможно и в других сферах деятельности. Например, если работа связана с выгрузкой или загрузкой данных на SQL Server.
2155 просмотров
При написании больших запросов зачастую требуется записать в «физическую» таблицу результаты соединения нескольких таблиц. Конечно, сделать это можно (или даже нужно) традиционным способом с применением инструкции create TABLE, но для этого необходимо заранее знать все типы данных в столбцах, прописывать их наименования, что занимает определённое время. Более того, в силу человеческого фактора не исключён риск совершения ошибок, которые приведут к лишним трудозатратам на пересоздание таблицы и потере времени при выполнении запроса.
Кто-то скажет: «А как же инструкция select INTO?». Да, эта инструкция позволяет сразу из запроса создать новую таблицу и записать туда результаты запроса выборки, но есть один большой очень критичный недостаток. На больших объёмах данных запросы, содержащие данную инструкцию занимают значительное количество ресурсов на сервере и блокируют работу других пользователей сервера. Обычно такие запросы отключаются администраторами серверов, а в некоторых случаях ещё и блокируются учётные записи пользователей, злоупотребляющих такими выгрузками.
В качестве решения вопроса можно применить следующий вариант. Учитывая, что инструкция select INTO копирует структуру результирующей таблицы, можно применить её к запросу, но не нагружая сервер, выбирать 0 строк (Select top 0 * into и т.д.). После этого, выполнить обычный запрос insert INTO во вновь созданную таблицу. Для того чтобы не делать это каждый раз (ведь главная цель – экономия времени), оформляем всё это в хранимую процедуру с использованием инструкции IF EXIST и данных из системных таблиц.
Таким образом, получаем следующий код:
create procedure [dbo].[sp_ctwsi] (@tablename nvarchar(max), @sql nvarchar(max)) as begin if not exists ( select s.name shm, o.name tbl from sys.objects o inner join sys.schemas s on o.schema_id = s.schema_id where type = ‘u’ and o.name = substring(@tablename, CHARINDEX(‘.’, @tablename)+1, len(@tablename) — CHARINDEX(‘.’, »)+1) and s.name = substring(@tablename, 1, CHARINDEX(‘.’, @tablename)-1) ) begin exec (‘select top 0 * into ‘[email protected]+’ from (‘ + @sql +’) t’ ) end else begin exec (‘insert into ‘[email protected]+’ select * from (‘ + @sql +’) t’ ) end end
Как видно из кода, на входе в процедуру требуется передать два параметра – наименование таблицы со схемой через точку (например, «dbo.MyTable») и SQL-запрос, результаты которого требуется записать в таблицу.
Вот так можно один раз потратить немного времени на написание процедуры и избавиться от мелких, но рутинных задач в дальнейшем. И это только один из вариантов, ведь у каждого программиста наверняка может найтись свой алгоритм оптимизации повседневных задач.
Создание запросов Make Table — визуальные инструменты для баз данных
Редактировать
Твиттер LinkedIn Фейсбук Электронная почта
- Статья
- 2 минуты на чтение
Применяется к: SQL Server
Вы можете копировать строки в новую таблицу с помощью запроса Make Table, который полезен для создания подмножеств данных для работы или копирования содержимого таблицы из одной базы данных в другую. Запрос «Создать таблицу» похож на запрос «Вставить результаты», но создает новую таблицу, в которую копируются строки.
При создании запроса на создание таблицы вы указываете:
Имя новой таблицы базы данных (целевой таблицы).
Таблица или таблицы, из которых необходимо скопировать строки (исходная таблица). Вы можете копировать из одной таблицы или из объединенных таблиц.
Столбцы в исходной таблице, содержимое которых вы хотите скопировать.
Порядок сортировки, если вы хотите копировать строки в определенном порядке.
Условия поиска для определения копируемых строк.
Параметры группировки, если вы хотите скопировать только сводную информацию.
Например, следующий запрос создает новую таблицу с именем uk_customers
и копирует в нее информацию из таблицы customers
:
SELECT * INTO uk_customers ОТ клиентов ГДЕ страна = 'Великобритания'
Для успешного использования запроса на создание таблицы:
Для создания запроса на создание таблицы
Добавьте исходную таблицу или таблицы на панель диаграммы.
В меню Query Designer выберите Change Type , а затем щелкните Make Table .
В диалоговом окне Создать таблицу введите имя целевой таблицы. Конструктор запросов и представлений не проверяет, используется ли имя уже или есть ли у вас разрешение на создание таблицы.
Чтобы создать целевую таблицу в другой базе данных, укажите полное имя таблицы, включая имя целевой базы данных, владельца (если требуется) и имя таблицы.
Укажите столбцы для копирования, добавив их в запрос. Дополнительные сведения см. в разделе Добавление столбцов в запросы. Столбцы будут скопированы, только если вы добавите их в запрос. Чтобы скопировать строки целиком, выберите * (Все столбцы) .
Конструктор запросов и представлений добавляет выбранные вами столбцы в столбец Столбец панели Критерии.
Если вы хотите копировать строки в определенном порядке, укажите порядок сортировки. Дополнительные сведения см. в разделе Сортировка и группировка результатов запроса 9.0020 .
Укажите строки для копирования, введя условия поиска. Дополнительные сведения см. в разделе Указание критериев поиска.
Если не указать условие поиска, все строки из исходной таблицы будут скопированы в целевую таблицу.
Примечание
Когда вы добавляете столбец для поиска на панель критериев, конструктор запросов и представлений также добавляет его в список копируемых столбцов. Если вы хотите использовать столбец для поиска, но не копировать его, снимите флажок рядом с именем столбца в прямоугольнике, представляющем таблицу или объект с табличной структурой.
Если вы хотите скопировать сводную информацию, укажите параметры «Группировать по». Дополнительные сведения см. в разделе Суммирование результатов запроса.
При выполнении запроса на создание таблицы в области результатов не отображаются результаты. Вместо этого появляется сообщение, указывающее, сколько строк было скопировано.
См. также
Разделы с практическими рекомендациями по разработке запросов и представлений
[Типы запросов (../../ssms/visual-db-tools/types-of-queries-visual-database-tools.md)
Обратная связь
Просмотреть все отзывы о странице
Как создать таблицу в SQL Server — Data to Fish
База данных / 4 сентября 2021 г.
В этом руководстве вы увидите полные шаги по созданию таблицы в SQL Server. Пример также рассматривается в демонстрационных целях.
Действия по созданию таблицы в SQL Server
Шаг 1. Создание базы данных
Если вы еще этого не сделали, создайте базу данных, в которой будет храниться таблица. Например, вы можете использовать следующий запрос для создания базы данных с именем test_database :
CREATE DATABASE test_database
Шаг 2: Создайте таблицу
Далее создайте таблицу в своей базе данных.
Например, давайте создадим таблицу с именем « products », которая содержит 2 столбца:
- product_name
- цена
В таблице должны храниться следующие данные:
product_name | цена |
Настольный компьютер | 800 |
Ноутбук | 1200 |
Планшет | 200 |
Монитор | 350 |
Принтер | 150 |
Где тип данных для ‘ 9Столбец 0019 product_name ‘ будет иметь вид nvarchar(50) , а тип данных для столбца price будет int (для целых чисел).
Затем вы можете создать таблицу, используя следующий запрос CREATE TABLE в своей базе данных:
CREATE TABLE products ( product_name nvarchar(50), цена инт )
Шаг 3: Вставьте значения в таблицу
Теперь добавим следующие значения в таблицу «products»:
имя_продукта | цена |
Настольный компьютер | 800 |
Ноутбук | 1200 |
Планшет | 200 |
Монитор | 350 |
Принтер | 150 |
Вы можете вставить значения в таблицу с помощью запроса INSERT INTO:
INSERT INTO products (product_name, price) ЦЕННОСТИ («Настольный компьютер», 800), («Ноутбук», 1200), («Таблетка», 200), («Монитор», 350), («Принтер», 150)
Шаг 4.
Убедитесь, что значения были вставлены в таблицуНаконец, выполните следующий запрос SELECT, чтобы убедиться, что значения были вставлены в таблицу:
SELECT * FROM products
Вы должны получить следующие результаты:
product_name | цена |
Настольный компьютер | 800 |
Ноутбук | 1200 |
Планшет | 200 |
Монитор | 350 |
Принтер | 150 |
Создайте таблицу в SQL Server с первичным ключом и столбцом идентификаторов
Первичный ключ уникально идентифицирует каждую запись (т. применяется к вашему столбцу всякий раз, когда в таблицу вставляется новая запись.
Допустим, вы хотите создать таблицу с первичным ключом и столбцом идентификации.
Например, предположим, что вы хотите воссоздать таблицу « products » со следующими тремя столбцами:
- product_id
- имя_продукта
- цена
Где столбец product_id будет выбран в качестве первичного ключа , а также столбца идентификатора .
Вот как новые продукты 9Таблица 0020 должна выглядеть так:
product_id | имя_продукта | цена |
1 | Настольный компьютер | 800 |
2 | Ноутбук | 1200 |
3 | Планшет | 200 |
4 | Монитор | 350 |
5 | Принтер | 150 |
Теперь давайте воссоздадим эту таблицу с помощью запросов.
Для начала бросьте таблицу «продукты», чтобы начать с нуля. Вы можете удалить таблицу «products», используя следующий запрос:
DROP TABLE products
Затем заново создайте таблицу с помощью запроса CREATE TABLE:
CREATE TABLE products ( product_id int identity(1,1) первичный ключ, product_name nvarchar(50), цена инт )
Затем вы можете добавить записи в таблицу, выполнив этот запрос INSERT INTO:
INSERT INTO products (product_name, price) ЦЕННОСТИ («Настольный компьютер», 800), («Ноутбук», 1200), («Таблетка», 200), («Монитор», 350), ('Printer',150)
5 новых записей будут вставлены в таблицу (обратите внимание, что не было необходимости заполнять столбец product_id с помощью запроса на вставку.