INSERT Employees(ID,Position,Department) VALUES

CREATE DATABASE Test


Удалить базу данных можно командой (стоит быть очень осторожным с данной командой):


DROP DATABASE Test


Для того, чтобы переключиться на нашу базу данных, можно выполнить команду:


USE Test


Или же выберите базу данных Test в выпадающем списке в области меню SSMS. При работе мною чаще используется именно этот способ переключения между базами.

Теперь в нашей БД мы можем создать таблицу используя описания в том виде как они есть, используя пробелы и символы кириллицы:


CREATE TABLE [Сотрудники](

[Табельный номер] int,

[ФИО] nvarchar(30),

[Дата рождения] date,

[E-mail] nvarchar(30),

[Должность] nvarchar(30),

[Отдел] nvarchar(30)

)


В данном случае нам придется заключать имена в квадратные скобки […].

Но в базе данных для большего удобства все наименования объектов лучше задавать на латинице и не использовать в именах пробелы. В MS SQL обычно в данном случае каждое слово начинается с прописной буквы, например, для поля «Табельный номер», мы могли бы задать имя PersonnelNumber. Так же в имени можно использовать цифры, например, PhoneNumber1.

На заметку
В некоторых СУБД более предпочтительным может быть следующий формат наименований «PHONE_NUMBER», например, такой формат часто используется в БД ORACLE. Естественно при задании имя поля желательно чтобы оно не совпадало с ключевыми словами используемые в СУБД.

По этой причине можете забыть о синтаксисе с квадратными скобками и удалить таблицу [Сотрудники]:


DROP TABLE [Сотрудники]


Например, таблицу с сотрудниками можно назвать «Employees», а ее полям можно задать следующие наименования:

· ID – Табельный номер (Идентификатор сотрудника)

· Name – ФИО

· Birthday – Дата рождения

· Email – E-mail

· Position – Должность

· Department – Отдел


Очень часто для наименования поля идентификатора используется слово ID.

Теперь создадим нашу таблицу:


CREATE TABLE Employees(

ID int,

Name nvarchar(30),

Birthday date,

Email nvarchar(30),

Position nvarchar(30),

Department nvarchar(30)

)


Для того, чтобы задать обязательные для заполнения столбцы, можно использовать опцию NOT NULL.

Для уже существующей таблицы поля можно переопределить при помощи следующих команд:


-- обновление поля ID

ALTER TABLE Employees ALTER COLUMN ID int NOT NULL

-- обновление поля Name

ALTER TABLE Employees ALTER COLUMN Name nvarchar(30) NOT NULL

На заметку
Общая концепция языка SQL для большинства СУБД остается одинаковой (по крайней мере, об этом я могу судить по тем СУБД, с которыми мне довелось поработать). Отличие DDL в разных СУБД в основном заключаются в типах данных (здесь могут отличаться не только их наименования, но и детали их реализации), так же может немного отличаться и сама специфика реализации языка SQL (т.е. суть команд одна и та же, но могут быть небольшие различия в диалекте, увы, но одного стандарта нет). Владея основами SQL вы легко сможете перейти с одной СУБД на другую, т.к. вам в данном случае нужно будет только разобраться в деталях реализации команд в новой СУБД, т.е. в большинстве случаев достаточно будет просто провести аналогию.

Чтобы не быть голословным, приведу несколько примеров тех же команд для СУБД ORACLE:


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

CREATE TABLE Employees(

ID int, -- в ORACLE тип int - это эквивалент(обертка) для number(38)

Name nvarchar2(30), -- nvarchar2 в ORACLE эквивалентен nvarchar в MS SQL

Birthday date,

Email nvarchar2(30),

Position nvarchar2(30),

Department nvarchar2(30)

);

-- обновление полей ID и Name (здесь вместо ALTER COLUMN используется MODIFY(…))

ALTER TABLE Employees MODIFY(ID int NOT NULL,Name nvarchar2(30) NOT NULL);

-- добавление PK (в данном случае конструкция выглядит как и в MS SQL, она будет показана ниже)

ALTER TABLE Employees ADD CONSTRAINT PK_Employees PRIMARY KEY(ID);


Для ORACLE есть отличия в плане реализации типа varchar2, его кодировка зависит настроек БД и текст может сохраняться, например, в кодировке UTF-8. Помимо этого длину поля в ORACLE можно задать как в байтах, так и в символах, для этого используются дополнительные опции BYTE и CHAR, которые указываются после длины поля, например:


NAME varchar2(30 BYTE) -- вместимость поля будет равна 30 байтам

NAME varchar2(30 CHAR) -- вместимость поля будет равна 30 символов


Какая опция будет использоваться по умолчанию BYTE или CHAR, в случае простого указания в ORACLE типа varchar2(30), зависит от настроек БД, так же она иногда может задаваться в настройках IDE. В общем порой можно легко запутаться, поэтому в случае ORACLE, если используется тип varchar2 (а это здесь порой оправдано, например, при использовании кодировки UTF-8) я предпочитаю явно прописывать CHAR (т.к. обычно длину строки удобнее считать именно в символах).

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


INSERT Employees(ID,Position,Department) VALUES

(1000,N'Директор',N'Администрация'),

(1001,N'Программист',N'ИТ'),

(1002,N'Бухгалтер',N'Бухгалтерия'),

(1003,N'Старший программист',N'ИТ')


В данном случае, команда INSERT также выдаст ошибку, т.к. при вставке мы не указали значения обязательного поля Name.
В случае, если бы у нас в первоначальной таблице уже имелись эти данные, то команда «ALTER TABLE Employees ALTER COLUMN ID int NOT NULL» выполнилась бы успешно, а команда «ALTER TABLE Employees ALTER COLUMN Name int NOT NULL» выдала сообщение об ошибке, что в поле Name имеются NULL (не указанные) значения.

Добавим значения для полю Name и снова зальем данные:


Наши рекомендации