SQL — что это, для чего необходим язык, а также базовые функции для новичков. Transact-SQL - создание базы данных

Каждый веб-разработчик должен знать SQL, чтобы писать запросы к базам данных. И, хотя, phpMyAdmin никто не отменял, зачастую необходимо испачкать руки, чтобы написать низкоуровневый SQL.

Именно поэтому мы подготовили краткий экскурс по основам SQL. Начнем же!

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

Для создания таблиц предназначена инструкция CREATE TABLE . В качестве аргументов должно быть задано название столбцов, а также их типы данных.

Создадим простую таблицу по имени month . Она состоит из 3 колонок:

  • id – Номер месяца в календарном году (целое число).
  • name – Название месяца (строка, максимум 10 символов).
  • days – Количество дней в этом месяце (целое число).

Вот как будет выглядеть соответствующий SQL запрос:

CREATE TABLE months (id int, name varchar(10), days int);

Также при создании таблиц целесообразно добавить первичный ключ для одной из колонок. Это позволит держать записи уникальными и ускорит запросы на выборку. Пусть в нашем случае уникальным будет название месяца (столбец name )

CREATE TABLE months (id int, name varchar(10), days int, PRIMARY KEY (name));

Дата и время
Тип данных Описание
DATE Значения даты
DATETIME Значения даты и времени с точностью до минты
TIME Значения времени

2. Вставка строк

Теперь давайте заполнять нашу таблицу months полезной информацией. Добавление записей в таблицу производится через инструкцию INSERT . Есть два способа записи этой инструкции.

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

Этот способ записи прост, но небезопасен, поскольку нет гарантии, что по мере расширения проекта и редактировании таблицы, столбцы будут располагаться в том же порядке, что и ранее. Безопасный (и в тоже время более громоздкий) способ записи инструкции INSERT требует указания как значений, так и порядка следования столбцов:

Здесь первое значение в списке VALUES соответствует первому указанному имени столбца и т.д.

3. Извлечение данных из таблиц

Инструкция SELECT - наш лучший друг, когда мы хотим получить данные из базы данных. Она используется очень часто, так что отнеситесь к этому разделу очень внимательно.

Самый простое использование инструкции SELECT - запрос, который возвращает все столбцы и строки из таблицы (например, таблицы по имени characters ):

SELECT * FROM "characters"

Символ звездочка (*) означает, что мы хотим получить данные из всех столбцов. Так базы данных SQL обычно состоят из более чем одной таблицы, то требуется обязательно указывать ключевое слово FROM , следом за которым через пробел должно следовать название таблицы.

Иногда мы не хотим получить данные не из всех столбцов в таблице. Для этого, вместо звездочки (*) мы должны через запятую записать имена желаемых столбцов.

SELECT id, name FROM month

Кроме того, во многих случаях мы хотим, чтобы полученные результаты были отсортированы в определенном порядке. В SQL мы делаем это с помощью ORDER BY . Он может принимать опциональный модификатор – ASC (по-умолчанию) сортирующий по возрастанию или DESC , сортирующий по убыванию:

SELECT id, name FROM month ORDER BY name DESC

При использовании ORDER BY убедитесь, что оно будет последним в инструкции SELECT . В противном случае будет выдано сообщение об ошибке.

4. Фильтрация данных

Вы узнали, как выбрать из базы данных с помощью SQL запроса строго определенные столбцы, но что если нам нужно получить еще и определенные строки? На помощь здесь приходит условие WHERE , позволяющее нам фильтровать данные в зависимости от условия.

В этом запросе мы выбираем только те месяцы из таблицы month , в которых больше 30 дней с помощью оператора больше (>).

SELECT id, name FROM month WHERE days > 30

5. Расширенная фильтрация данных. Операторы AND и OR

Ранее мы использовали фильтрацию данных с использованием одного критерия. Для более сложной фильтрации данных можно использовать операторы AND и OR и операторов сравнения (=,<,>,<=,>=,<>).

Здесь мы имеем таблицу, содержащую четыре самых продаваемых альбомов всех времен. Давайте выберем те из них, которые классифицируются как рок и у которых менее 50 миллионов проданных копий. Это можно легко сделать путем размещения оператора AND между этими двумя условиями.


SELECT * FROM albums WHERE genre = "рок" AND sales_in_millions <= 50 ORDER BY released

6. In/Between/Like

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

  • IN – служит для указания диапазона условий, любое из которых может быть выполнено
  • BETWEEN – проверяет, находится ли значение в указанном диапазоне
  • LIKE – ищет по определенным паттернам

Например, если мы хотим выбрать альбомы с поп и соул музыкой, мы можем использовать IN("value1","value2") .

SELECT * FROM albums WHERE genre IN ("pop","soul");

Если мы хотим получить все альбомы, изданные между 1975 и 1985годами, мы должны записать:

SELECT * FROM albums WHERE released BETWEEN 1975 AND 1985;

7. Функции

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

  • COUNT() – возвращает количество строк
  • SUM() – возвращает общую сумму числового столбца
  • AVG() – возвращает среднее значение из множества значений
  • MIN() / MAX() – получает минимальное / максимальное значение из столбца

Чтобы получить самый последний год в нашей таблице мы должны записать такой SQL запрос:

SELECT MAX(released) FROM albums;

8. Подзапросы

В предыдущем пункте мы научились делать простые расчеты с данными. Если мы хотим использовать результат от этих расчетов, нам не обойтись без вложенных запросов. Допустим, мы хотим вывести artist , album и release year для старейшего альбома в таблице.

Мы знаем, как получить эти конкретные столбцы:

SELECT artist, album, released FROM albums;

Мы также знаем, как получить самый ранний год:

SELECT MIN(released) FROM album;

Все, что нужно сейчас, - это объединить два запроса с помощью WHERE:

SELECT artist,album,released FROM albums WHERE released = (SELECT MIN(released) FROM albums);

9. Объединение таблиц

В более сложных базах данных существует несколько таблиц, связанных друг с другом. Например, ниже представлены две таблицы о видеоиграх (video_games ) и разработчиков видеоигр (game_developers ).


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

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

SELECT video_games.name, video_games.genre, game_developers.name, game_developers.country FROM video_games INNER JOIN game_developers ON video_games.developer_id = game_developers.id;

Это самый простой и наиболее распространенный тип JOIN . Есть несколько других вариантов, но они применимы к менее частым случаям.

10. Алиасы

Если вы посмотрите на предыдущий пример, то вы заметите, что существуют две колонки называемые name . Это сбивает с толку, так что давайте установим псевдоним одного из повторяющихся столбцов, например, name из таблицы game_developers будет называться developer .

Мы также можем сократить запрос задав псевдонимы имен таблиц: video_games назовем games , game_developers - devs :

SELECT games.name, games.genre, devs.name AS developer, devs.country FROM video_games AS games INNER JOIN game_developers AS devs ON games.developer_id = devs.id;

11. Обновление данных

Часто мы должны изменить данные в некоторых строках. В SQL это делается с помощью инструкции UPDATE . Инструкция UPDATE состоит из:

  • Таблицы, в которой находится значение для замены;
  • Имен столбцов и их новых значений;
  • Выбранные с помощью WHERE строки, которые мы хотим обновить. Если этого не сделать, то изменятся все строки в таблице.

Ниже приведена таблица tv_series с сериалами с их рейтингом. Однако, в таблицу закралась маленькая ошибка: хотя сериал Игра престолов и описывается как комедия, он на самом деле ей не является. Давайте исправим это!

Данные таблицы tv_series UPDATE tv_series SET genre = "драма" WHERE id = 2;

12. Удаление данных

Удаление строки таблицы с помощью SQL - это очень простой процесс. Все, что вам нужно, - это выбрать таблицу и строку, которую нужно удалить. Давайте удалим из предыдущего примера последнюю строку в таблице tv_series . Делается это с помощью инструкции >DELETE

DELETE FROM tv_series WHERE id = 4

Будьте осторожными при написании инструкции DELETE и убедитесь, что условие WHERE присутствует, иначе все строки таблицы будут удалены!

13. Удаление таблицы

Если мы хотим, чтобы удалить все строки, но оставить саму таблицу, то воспользуйтесь командой TRUNCATE:

TRUNCATE TABLE table_name;

В случае, когда мы на самом деле хотим, чтобы удалить и данные, и саму таблицу, то нам пригодится команда DROP:

DROP TABLE table_name;

Будьте очень осторожны с этими командами. Их нельзя отменить!/p>

На этом мы завершаем наш учебник по SQL! Мы многое о чем не рассказали, но то, что вы уже знаете, должно быть достаточно, чтобы дать вам несколько практических навыков в вашей веб-карьере.

Инсталлируйте программное обеспечение SQL Server Management Studio. Это программное обеспечение можно бесплатно загрузить с сайта Microsoft. Оно позволяет вам подключаться и управлять вашим SQL сервером через графический интерфейс вместо того, чтобы использовать командную строку.

Запустите SQL Server Management Studio. При первом запуске программы вам будет предложено выбрать, к какому сервер подключаться. Если у вас уже есть сервер и вы работаете, имеете необходимые разрешения для подключения к нему, то можете ввести адрес сервера и идентификационную информацию. Если вы хотите создать локальную базу данных, установите имя базы данных Database Name как. и тип аутентификации как "Windows Authentication".

  • Нажмите кнопку Подключить чтобы продолжить.
  • Определите место для папки Databases. После выполнения соединения с сервером (локальное или удаленное), откроется окно обозревателя объектов Object Explorer в левой стороне экрана. В верхней части дерева обозревателя объектов будет сервер, к которому вы подключены. Если дерево не расширено, нажмите на значок "+" рядом с ним. Определите место папки базы данных Databases.

    Создайте новую базу данных. Щелкните правой кнопкой мыши по папке Databases и выберите пункт "New Database...". Появится окно, которое позволяет настроить базу данных перед ее созданием. Дайте имя базе данных, которое поможет вам идентифицировать ее. Большинство пользователей могут оставить значения остальных настроек по умолчанию.

    • Вы заметите, что при вводе имени базы данных два дополнительных файла будут созданы автоматически: Data и Log. Файл данных (Data) вмещает все данные в вашей базе данных, в то время как файл журнала (Log) отслеживает изменения в базе данных.
    • Нажмите кнопку OK, чтобы создать базу данных. Вы увидите вашу новую базу данных, которая появится в развернутой папке Databases. Она будет иметь значок цилиндра.
  • Создайте таблицу. База данных может только хранить данные, если вы создаете структуру для этих данных. Таблица содержит информацию, которую вы вводите в вашу базу данных, и вам нужно будет создать ее, прежде чем можете продолжить. Разверните новую базу данных в папке Databases, и щелкните правой кнопкой мыши на папке Tables и выберите пункт "New Table...".

    • Windows откроется в остальной части экрана, позволяя вам управлять вашей новой таблицей.
  • Создайте Primary Key (первичный ключ). Настоятельно рекомендуется, чтобы вы создавали первичный ключ в качестве первого столбца в вашей таблице. Он действует как идентификационный номер, или номер записи, что позволит вам легко выводить эти записи позже. Для его создания введите "ID" в столбце Name field, тип int в поле Data Type и снимите флажок "Allow Nulls". Нажмите на значок Key iна панели инструментов, чтобы установить этот столбец в качестве Primary Key (первичного ключа).

    • Вы же не хотите допустить нулевые значения, так как всегда хотите иметь запись по крайней мере "1". Если вы разрешите 0, ваша первая запись будет "0".
    • В окне Column Properties прокрутите вниз, пока не найдете опцию Identity Specification. Разверните ее и установите "(ls Identity)" на "Yes". Эта опция автоматически увеличит значение столбца ID для каждой записи, автоматически нумеруя каждую новую запись.
  • Разберитесь, как устроены таблицы. Таблицы состоят из полей или столбцов. Каждый столбец представляет один из аспектов записи базы данных. Например, если вы создаете базу данных сотрудников, вы можете иметь столбец "FirstName", столбец "LastName", столбец "Address" и столбец "PhoneNumber".

    Создайте остальные столбцы. Когда закончите заполнение полей для Primary Key, заметите, что новые поля появляются под ним. Это позволит вам войти в свой следующий столбец. Заполните поля, как считаете нужным, и убедитесь, что правильно выбрали тип данных для информации, которая будет введена в этом столбце:

    • nchar(#) - это тип данных следует использовать для текста, как имена, адреса и т.д. Число в скобках – это максимальное количество символов, разрешенное для это го поля. Установление лимита гарантирует, что ваш размер базы данных остается управляемым. Номера телефонов должны быть сохранены в этом формате, так как вы не выполняете математические функции с ними.
    • int - это целые числа, и обычно используются в поле идентификатора.
    • decimal(x,y) - будут хранить числа в десятичной форме, а числа в скобках обозначают соответственно общее количество цифр и количество цифр после десятичной. Например, decimal(6,2) будет сохранять числа как 0000.00.
  • Сохраните вашу таблицу. Когда вы закончите создавать свои столбцы, то вам нужно сохранить таблицу перед вводом информации. Щелкните на значке Save на панели инструментов, а затем введите название таблицы. Рекомендуется присваивать имя таблице таким образом, чтобы оно помогло вам распознать содержимое, особенно для больших баз данных с несколькими таблицами.

    Добавьте данные в вашу таблицу. После того, как вы сохранили таблицу, можете начать добавлять в нее данные. Откройте папку Tables в окне обозревателя объектов Object Explorer. Если вашей новой таблицы нет в списке, щелкните правой кнопкой мыши на папке Tables и выберите Refresh. Щелкните правой кнопкой мыши по таблице и выберите "Edit Top 200 Rows".

    Каждый из нас регулярно сталкивается и пользуется различными базами данных. Когда мы выбираем адрес электронной почты, мы работаем с базой данных. Базы данных используют поисковые сервисы, банки для хранения данных о клиентах и т.д.

    Но, несмотря на постоянное использование баз данных, даже для многих разработчиков программных систем остается много «белых пятен» из-за разного толкования одних и тех же терминов. Мы дадим краткое определение основных терминов баз данных перед рассмотрением языка SQL. Итак.

    База данных - файл или набор файлов для хранения упорядоченных структур данных и их взаимосвязей. Очень часто базой данных называют систему управления - это только хранилище информации в определенном формате и может работать с различными СУБД.

    Таблица - представим себе папку, в которой хранятся документы, сгруппированные по определенному признаку, например список заказов за последний месяц. Это и есть таблица в компьютерной Отдельная таблица имеет свое уникальное имя.

    Тип данных - вид информации, разрешенной для хранения в отдельном столбце или строке. Это могут быть числа или текст определенного формата.

    Столбец и строка - все мы работали с электронными таблицами, в которых также присутствуют строки и столбцы. Любая реляционная база данных работает с таблицами аналогичным образом. Строки иногда называют записями.

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

    Что такое SQL?

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

    С 1992 г. существует общепринятый стандарт, называемый ANSI SQL. Он определяет базовый синтаксис и функции операторов и поддерживается всеми лидерами рынка СУБД, такими как ORACLE Рассмотреть все возможности языка в одной небольшой статье невозможно, поэтому мы кратко рассмотрим только основные SQL запросы. Примеры наглядно показывают простоту и возможности языка:

    • создание баз и таблиц;
    • выборка данных;
    • добавление записей;
    • модификация и удаление информации.

    Типы данных SQL

    Все столбцы в таблице базы данных хранят один тип данных. Типы данных в SQL такие же, как и в других языках программирования.

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

    Создавать новые базы, таблицы и другие запросы в SQL можно двумя способами:

    • Операторами SQL через консоль СУБД
    • Используя интерактивные средства администрирования, входящие в состав сервера баз данных.

    Создается новая база данных оператором CREATE DATABASE <наименование базы данных>; . Как видим, синтаксис прост и лаконичен.

    Таблицы внутри базы данных создаем оператором CREATE TABLE со следующими параметрами:

    • наименование таблицы
    • имена и типы данных столбцов

    В качестве примера создадим таблицу Commodity со следующими столбцами:

    Создаем таблицу:

    CREATE TABLE Commodity

    (commodity_id CHAR(15) NOT NULL,

    vendor_id CHAR(15) NOT NULL,

    commodity_name CHAR(254) NULL,

    commodity_price DECIMAL(8,2) NULL,

    commodity_desc VARCHAR(1000) NULL);

    Таблица состоит из пяти столбцов. После наименования идет тип данных, столбцы разделяются запятыми. Значение столбца может принимать пустые значения (NULL) или должно быть обязательно заполнено (NOT NULL), и это определяется при создании таблицы.

    Выборка данных из таблицы

    Оператор выборки данных - самые часто используемые SQL запросы. Для получения информации необходимо указать, что мы хотим выбрать из такой таблицы. Вначале простой пример:

    SELECT commodity_name FROM Commodity

    После оператора SELECT указываем имя столбца для получения информации, а FROM определяет таблицу.

    Результатом выполнения запроса будут все строки таблицы со значениями Commodity_name в том порядке, в котором они были внесены в базу данных т.е. без всякой сортировки. Для упорядочивания результата используется дополнительный оператор ORDER BY.

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

    SELECT commodity_id, commodity_name, commodity_price FROM Commodity

    Есть возможность получить как результат запроса значение всех столбцов строки. Для этого используется знак «*»:

    SELECT * FROM Commodity

    • Дополнительно SELECT поддерживает:
    • Сортировку данных (оператор ORDER BY)
    • Выбор согласно условиям (WHERE)
    • Группировку срок (GROUP BY)

    Добавляем строку

    Для добавления строки в таблицу используются SQL запросы с оператором INSERT. Добавление может производиться тремя способами:

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

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

    INSERT INTO Commodity VALUES("106 ", "50", "Coca-Cola", "1.68", "No Alcogol ,)

    Пример добавляет в таблицу новый товар. Значения указываются после VALUES для каждого столбца. Если нет соответствующего значения для столбца, то необходимо указывать NULL. Столбцы заполняются значениями в порядке, указанном при создании таблицы.

    В случае добавления только части строки необходимо явно указать наименования столбцов, как в примере:

    INSERT INTO Commodity (commodity_id, vendor_id, commodity_name)

    VALUES("106 ", ‘50", "Coca-Cola",)

    Мы ввели только идентификаторы товара, поставщика и его наименование, а остальные поля отставили пустыми.

    Добавление результатов запроса

    В основном INSERT используется для добавления строк, но может использоваться и для добавления результатов оператора SELECT.

    Изменение данных

    Для изменения информации в полях таблицы базы данных необходимо использовать оператор UPDATE. Оператор может применяться двумя способами:

    • Обновляются все строки в таблице.
    • Только для определенной строки.

    UPDATE состоит из трех основных элементов:

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

    Рассмотрим пример. Допустим, у товара с ID=106 изменилась стоимость, поэтому эту строку необходимо обновить. Пишем следующий оператор:

    UPDATE Commodity SET commodity_price = "3.2" WHERE commodity_id = "106"

    Мы указали имя таблицы, в нашем случае Commodity, где будет производиться обновление, затем после SET - новое значение столбца и нашли нужную запись, указав в WHERE нужное значение ID.

    Для изменения нескольких столбцов после оператора SET указываются несколько пар столбец-значение, разделенных запятыми. Смотрим пример, в котором обновляется наименование и цена товара:

    UPDATE Commodity SET commodity_name=’Fanta’, commodity_price = "3.2" WHERE commodity_id = "106"

    Для удаления информации в столбце можно присвоить ему значение NULL, если это позволяет структура таблицы. Необходимо помнить, что NULL - это именно «никакое» значение, а не нуль в виде текста или числа. Удалим описание товара:

    UPDATE Commodity SET commodity_desc = NULL WHERE commodity_id = "106"

    Удаление строк

    SQL запросы на удаление строк в таблице выполняются оператором DELETE. Есть два варианта использования:

    • в таблице удаляются определенные строки;
    • удаляются все строки в таблице.

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

    DELETE FROM Commodity WHERE commodity_id = "106"

    После DELETE FROM указываем имя таблицы, в которой будут удаляться строки. Оператор WHERE содержит условие, по которому будут выбираться строки для удаления. В примере мы удаляем строку товара с ID=106. Указывать WHERE очень важно т.к. пропуск этого оператора приведт к удалению всех строк в таблице. Это относится и к изменению значения полей.

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

    Использование SQL в Microsoft Access

    Обычно используется в интерактивном режиме для создания таблиц, баз данных, для управления, изменения, анализа данных в базе данных и с целью внедрить запросы SQL Access через удобный интерактивный конструктор запросов (Query Designer), используя который можно построить и немедленно выполнить операторов SQL любой сложности.

    Также поддерживается режим доступа к серверу, при котором СУБД Access может использоваться как генератор SQL-запросов к любому ODBC источнику данных. Эта возможность позволяет приложениям Access взаимодействовать с любого формата.

    Расширения SQL

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

    Наиболее распространенные диалекты языка:

    • Oracle Database - PL/SQL
    • Interbase, Firebird - PSQL
    • Microsoft SQL Server - Transact-SQL
    • PostgreSQL - PL/pgSQL.

    SQL в Интернет

    СУБД MySQL распространяется под свободной лицензией GNU General Public License. Имеется коммерческая лицензия с возможностью разработки заказных модулей. Как составная часть входит в наиболее популярные сборки Интернет-серверов, таких как XAMPP, WAMP и LAMP, и является самой популярной СУБД для разработки приложений в сети Интернет.

    Была разработана компанией Sun Microsystems и в настоящий момент поддерживается корпорацией Oracle. Поддерживаются базы данных размером до 64 терабайт, стандарт синтаксиса SQL:2003, репликация баз данных и облачных сервисов.

    В составе Microsoft Visual Studio 2008 находится сервер баз данных Microsoft SQL Server 2005 Express Edition. От полнофункционального сервера данных он отличается только ограничением размера базы данных в 2 гигабайта, что позволяет производить разработку и тестирование приложений баз данных.

    Для работы по созданию базы данных и таблиц будем использовать Microsoft SQL Server Management Studio Express. Данный программный продукт является свободнораспространяемым и доступен для скачивания в Интернет.

    1.4.1. Определение структуры базы данных

    Внешний вид окна программы Microsoft SQL Server Management Studio Express приведен на рис. 14.

    Рис. 14. Внешний вид окна программы Microsoft SQL Server Management Studio Express

    Для создания базы данных необходимо кликнуть правой кнопкой мыши на пункте «Базы данных» и выбрать пункт меню «Создать базу данных». Окно создания БД представлено на рис. 15.

    Рис. 15. Окно создания БД

    В данном окне задается имя базы данных, имена и пути к файлам базы данных, начальный размер файлов и шаг увеличения размера БД в случае необходимости. После нажатия кнопки «ОК» созданная БД появляется в списке баз данных (рис. 16).

    Рис. 16. Вид Management Studio с созданной базой данных

    Созданная база данных пуста, т. е. не содержит ни одной таблицы. Поэтому следующей задачей является создание таблиц, структура которых аналогична таблицам из базы данных Access. При создании таблиц необходимо обратить внимание на соотношения типов Access и SQL Server, представленные в таблице 6.

    Таблица 6. Соответствие типов данных Microsoft Access и Microsoft SQL

    Тип данных Microsoft Access

    Тип данных Microsoft SQL

    Описание типа данных Microsoft SQL

    Текстовый

    Тип данных для хранения текста до 4000 символов

    Поле МЕМО

    Тип данных для хранения символов в кодировке Unicode до 1 073 741 823 символов

    Числовой

    Численные значения (целые) в диапазоне от -2 147 483 648 до +2 147 483 647

    Дата/время

    Денежный

    Денежный тип данных, значения которого лежат в диапазоне

    от -922 337 203 685 477.5808 до +922 337 203 685 477.5807, с точностью до одной десятитысячной

    См. пункт 3

    Логический

    Переменная, способная принимать только два значения - 0 или 1

    Поле объекта OLE

    Переменная для хранения массива байтов от 0 до 2 147 483 647 байт

    См. пункт 2

    Мастер подстановок

    См. пункт 1

    Для создания таблиц необходимо выбрать в контекстном меню ветки «Таблицы» пункт «Создать таблицу». Среда Management Studio принимает следующий вид (рис. 17).

    Рис. 17. Среда Management Studio в режиме создания таблицы

    Для определения связей между таблицами необходимо задать первичные ключи таблиц. Для этого в контекстном меню соответствующего поля выбрать пункт «Задать первичный ключ» (рис. 18).

    Рис. 18. Задание первичного ключа

    Для создания связей между таблицами и схемы базы данных необходимо создать новую диаграмму базы данных, выбрав соответствующий пункт в контекстном меню ветви «Диаграммы баз данных». Добавив в появившемся окне необходимые таблицы в диаграмму, получаем следующий вид среды Management Studio (рис. 19).

    Рис. 19. Начало построения диаграммы БД

    Создание связей происходит путем совмещения связываемых полей. Результатом становится появление окна создания отношения (рис. 20).

    Рис. 20. Создание отношения между таблицами БД

    Особо отметим пункт «Спецификация INSERT и UPDATE», задающий правила обновления и удаления связанных данных в таблицах.

    После создания остальных таблиц и их связей схема данных будет выглядеть следующим образом (рис. 21).

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

    Завершив работу со схемой данных, сохраняем ее. Отметим, что в SQL Management Studio, в отличие от Access, для одной базы данных может быть создано несколько диаграмм (рис. 22).

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

    Рис. 21. Схема базы данных BDTur_firmSQL

    Рис. 22. Несколько диаграмм для одной БД

    Разновидность языка, применяемая в конкретной СУБД, называется диалектом SQL . Например, диалект СУБДOracleназываетсяPL / SQL ; вMSSQLServerиDB2 применяется диалектTransact - SQL ; вInterbaseиFirebird–isql . Каждый диалектSQLсовместим до определенной степени со стандартомSQL, но может иметь отличия и специфические расширения языка, поэтому для выяснения синтаксиса того или иногоSQL-оператора следует в первую очередь смотретьHelp конкретной СУБД.

    Для операций над базами данных и таблицами в стандарте sql предусмотрены операторы:

    Ниже приводится синтаксис этих операторов по стандарту SQL92. Поскольку их синтаксис в СУБД может отличаться от стандарта, при выполнении лабораторной работы рекомендуется обращаться к справочной системе СУБД.

    Имена объектов базы данных (таблиц, столбцов и др.) могут состоять из буквенно-цифровых символов и символа подчеркивания. Специальные символы (@$# и т.п.) обычно указывают на особый тип таблицы (системная, временная и др.). Не рекомендуется использовать в именах национальные (русские) символы, пробелы и зарезервированные слова, но если они всё же используются, то такие имена следует писать в кавычках ".." или в квадратных скобках [..].

    Далее при описании конструкций операторов SQLбудут использоваться следующие обозначения: в квадратных скобках записываются необязательные части конструкции; альтернативные конструкции разделяются вертикальной чертой | ; фигурные скобки {} выделяют логические блоки конструкции; многоточиеуказывает на то, что предшествующая часть конструкции может многократно повторяться. «Раскрываемые» конструкции записываются в угловых скобках < >.

    Создание базы данных

    CREATE DATABASE Имя_базы_данных

    Удаление одной и более баз данных

    DROP DATABASE Имя_базы_данных [,Имя_базы_данных …]

    Объявление текущей базы данных

    USE Имя_базы_данных –- в SQL Server и MySQL

    SET DATABASE Имя _ базы _ данных – в Firebird

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

    CREATE TABLE Имя_таблицы (

    <описание_столбца> [, <описание_столбца> |

    <ограничение_целостности_таблицы> …]

    < описание_столбца >

    Имя_столбца ТИП

    {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]

    ТИП столбца может быть либо стандартным типом данных (см. таблицу 1), либо именем домена (см. п.6.2).

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

    Описание вычислимого столбца в SQL Server имеет вид:

    <описание_столбца> Имя_столбца AS выражение

    Описание вычислимого столбца в Firebird имеет вид:

    <описание_столбца> Имя_столбца COMPUTED BY <выражение>

    СУБД MySQL 3.23 вычислимые столбцы не поддерживает.

    < >

    CONSTRAINT Имя_ограничения_целостности

    {UNIQUE|PRIMARY KEY}(список_столбцов_образующих_ключ )

    |FOREIGN KEY (список _ столбцов _FK )

    REFERENCES Имя_таблицы (список_столбцов_ PK )

    {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]

    {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]

    |CHECK (условие_проверки )

    Некоторые СУБД допускают объявление врéменных таблиц (существующих только во время сеанса). В SQL Server имена временных таблиц должны начинаться с символа # (локальные временные таблицы, видимые только создавшему их пользователю) или ## (глобальные таблицы, видимые всем пользователям); в MySQL для создания временных таблиц используется ключевое слово TEMPORARY, например:

    CREATE TEMPORARY TABLE … (далее синтаксис см. CREATE TABLE).

    Изменение структуры таблицы

    Используется для изменения типа столбцов существующих таблиц, добавления и удаления столбцов и ограничений целостности.

    ALTER TABLE Имя_таблицы

    Изменение типа столбца (в SQLServerиFirebird)

    ALTER COLUMN Имя_столбца новый_ТИП

    Изменение типа, имени и ограничений столбца (в MySQL)

    CHANGE COLUMN Имя_столбца <описание_столбца>

    Добавление обычного или вычислимого столбца

    |ADD <описание_столбца >

    Добавление ограничения целостности

    | ADD

    <ограничение_целостности_таблицы >

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

    |DROP COLUMN Имя_столбца

    Удаление ограничения целостности

    |DROP CONSTRAINT Имя_ограничения_целостности

    Включение или отключение проверки ограничений целостности

    ВMSSQLServer

    |{CHECK|NO CHECK} CONSTRAINT

    {Список_имен_ограничений_целостности |ALL}

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

    DROP TABLE Имя_таблицы

    

    Далее рассмотрим, как при создании новых таблиц командой CREATETABLEили изменении структуры существующих таблиц командойALTERTABLEобъявить декларативные ограничения целостности (подробнее они описаны в п.4.2) .

    1. Обязательное наличие данных (NULL–значения)

    Объявляется словом NULL(столбец может иметь пустые ячейки) илиNOT NULL(столбец обязательный). По умолчанию принимаетсяNULL.

    Пример создания таблицы 7:

    CREATE TABLE Clients(

    ClientName NVARCHAR (60) NOT NULL ,

    DateOfBirth DATE NULL ,

    Phone CHAR (12)); -- по умолчанию тоже NULL

    2. Значение по умолчанию (DEFAULT)

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

    Рассмотрим пример создания таблицы Orders (Заказы). Столбец OrderDate принимает по умолчанию значение текущей даты, а столбец Quantity (количество) по умолчанию равен 0.

    CREATE TABLE Orders(

    OrderNum INT NOT NULL , -- номер заказа

    OrderDate DATETIME NOT NULL -- дата заказа

    DEFAULT GetDate(),

    Функция GetDate() возвращает текущую дату 8

    Quantity SMALLINT NOT NULL -- кол-во товара, DEFAULT 0);

    3. Объявление первичных ключей (PRIMARYKEY)

    Простой первичный ключ объявляется словами PRIMARYKEYпри создании таблицы. Например,

    CREATE TABLE Staff(-- таблица "Работники"

    TabNum INT PRIMARY KEY , -- первичный ключ

    WName NVARCHAR (40) NOT NULL , -- ФИО

    ... -- описание прочих столбцов );

    Составной первичный ключ объявляется иначе:

    -- способ 1 (объявление PK при создании таблицы)

    CREATE TABLE Clients(

    PasSeria NUMERIC (4,0)NOT NULL ,-- серия паспорта

    PasNumber NUMERIC (6,0)NOT NULL ,-- номер паспорта

    Name NVARCHAR (40)NOT NULL ,

    Phone CHAR (12),

    -- объявление составного первичного ключа

    CONSTRAINT Clients_PK

    PRIMARY KEY (PasSeria,PasNumber));

    -- способ 2(PK объявляется после создания таблицы)

    -- сначала создаем таблицу без PK

    CREATE TABLE Clients(

    PasSeria NUMERIC (4,0)NOT NULL ,--серия паспорта

    PasNumber NUMERIC (6,0)NOT NULL ,--номер паспорта

    ClientName NVARCHAR (40)NOT NULL ,

    Phone CHAR (12));

    -- модификация таблицы добавляем РК

    ALTER TABLE Clients

    ADD CONSTRAINT Clients_PK

    PRIMARY KEY (PasSeria,PasNumber);

    4. Уникальность столбцов (UNIQUE)

    Подобно Primary Key указывает, что столбец или группа столбцов не могут содержать повторяющихся значений, но не являютсяPK . Все столбцы, объявленныеUNIQUE, должны бытьNOTNULL. Пример объявления простого уникального столбца:

    CREATE TABLE Students(

    SCode INT PRIMARY KEY , -- суррогатный РК

    FIO NVARCHAR (40) NOT NULL , -- ФИО

    RecordBook CHAR (6) NOT NULL UNIQUE ); -- № зачетки

    Пример объявления составного уникального поля:

    CREATE TABLE Staff(-- таблица " Работники "

    TabNum INT PRIMARY KEY , -- табельный номер

    WName NVARCHAR (40) NOT NULL , -- ФИО

    PasSeria NUMERIC (4,0) NOT NULL , -- серия паспорта

    PasNumber NUMERIC (6,0) NOT NULL , -- номер паспорта

    -- объявление составного уникального поля

    CONSTRAINT Staff_UNQ UNIQUE (PasSeria,PasNumber));

    5. Ограничения на значения столбца (CHECK)

    Это ограничение позволяет указать диапазон, список или «маску» логически допустимых значений столбца.

    Пример создания таблицы Workers (Работники) :

    CREATE TABLE Workers(

    -- табельные номера 4-значные

    TabNum INT PRIMARY KEY

    CHECK (TabNum BETWEEN 1000 AND 9999),

    Name VARCHAR (60) NOT NULL , -- ФИО сотрудника

    -- пол буква " м " или " ж "

    Gentry CHAR (1) NOT NULL

    CHECK (Gentry IN ("м","ж")),

    Возраст не менее 14 лет

    Age SMALLINT NOT NULL CHECK (Age>=14),

    --№ свидет-ва пенсионного страхования (по маске)

    PensionCert CHAR (14)

    CHECK (PensionSert LIKE ""));

    В этом примере показаны разные типы проверок. Диапазон допустимых значений указывается конструкцией BETWEEN…AND; обычные условия (как для столбцаAge ) используют знаки сравнений =, <>, >, >=, <, <=, связанные при необходимости логическими операциямиAND,OR,NOT(например,Age >=14ANDAge <=70); для указания списка допустимых значений используется предикатINи его отрицаниеNOTIN; конструкция

    LIKEмаска_допустимых_значений EXCEPTсписок_исключений

    используется для задания маски допустимых значений строковых столбцов. В маске применяются два спецсимвола: «%» – произвольная подстрока, и ­«_» – любой единичный символ. Конструкция EXCEPTявляется необязательной.

    В условии отбора CHECKмогут сравниваться значения двух столбцов одной таблицы и столбцы разных таблиц.

  • Понравилась статья? Поделиться с друзьями: