Введение

Завершено

Язык SQL

SQL — это акроним для Structured Query Language (язык структурированных запросов). Язык SQL используется для взаимодействия с реляционными базами данных. Инструкции SQL используются для выполнения таких задач, как обновление данных или получение данных из базы данных. Например, инструкция SQL SELECT используется для составления запроса базы данных, и она возвращает набор строк данных. Распространенные системы управления реляционными базами данных, использующие SQL, включают Microsoft SQL Server, MySQL, PostgreSQL, MariaDB и Oracle.

Существует стандарт языка SQL, определяемый Американским национальным институтом стандартов (ANSI). Каждый поставщик добавляет свои собственные варианты и расширения.

Запрос SQL SELECT извлекает таблицу данных из базы данных.

В этом модуле вы научитесь выполнять следующие задачи:

  • Что такое язык SQL и как он используется
  • Поиск объектов базы данных в схемах
  • Поиск типов инструкций SQL
  • Использование оператора SELECT для вызова таблиц из базы данных
  • Работа с типами данных
  • Обработка значений NULL

Transact-SQL

Основные инструкции SQL, такие как SELECT, INSERT, UPDATE и DELETE, доступны независимо от системы реляционной базы данных, с которой вы работаете. Хотя эти операторы SQL являются частью стандарта ANSI для SQL, многие системы управления базами данных (СУБД) также имеют свои собственные расширения. Эти расширения предоставляют функциональные возможности, не охваченные стандартом SQL, и включают такие области, как управление безопасностью и программируемость. Системы баз данных Майкрософт, такие как SQL Server, База данных SQL Azure, Microsoft Fabric и другие используют диалект SQL с именем Transact-SQL или T-SQL. T-SQL содержит расширения языка для написания хранимых процедур и функций, которые представляют собой код приложения, хранящийся в базе данных, и управления учетными записями пользователей.

SQL — это декларативный язык

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

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

Реляционные данные

SQL чаще всего (хотя и не всегда) используется для получения данных из реляционных баз данных. В реляционных базах данных данные упорядочиваются в виде нескольких таблиц (технически это называется связями). Каждая из таких таблицу представляет определенный тип сущности (например, клиент, продукт или заказ на продажу). Атрибуты этих сущностей (например, "имя клиента", "цена продукта" или "дата заказа на продажу") определяются как столбцы или атрибуты таблицы, а каждая строка в таблице представляет собой экземпляр типа сущности (например, определенный клиент, продукт или заказ на продажу).

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

Реляционная база данных, содержащая четыре таблицы

На схеме показана реляционная база данных, содержащая четыре таблицы:

  • Клиент
  • SalesOrderHeader
  • SalesOrderDetail
  • Продукт

Каждый клиент идентифицируется уникальным полем CustomerID — это поле является первичным ключом для таблицы Customer. У таблицы SalesOrderHeader для идентификации каждого заказа есть первичный ключ с именем OrderID. Кроме того, она содержит внешний ключ CustomerID, который ссылается на первичный ключ в таблице Customer, чтобы указать, какой клиент связан с каждым заказом. Данные об отдельных артикулах в заказе хранятся в таблице SalesOrderDetail, имеющей составной первичный ключ, объединяющий OrderID в таблице SalesOrderHeader со значением LineItemNo. Сочетание этих значений однозначно определяет элемент строки. Поле OrderID также используется в качестве внешнего ключа для указания заказа, к которому принадлежит элемент строки, поле ProductID используется как внешний ключ к первичному ключу ProductID таблицы Product, чтобы указать, какой продукт был заказан.

Обработка на основе наборов

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

Не отвлекаясь на математику теории наборов, можно представить себе набор как коллекцию определенных, отдельных объектов, которые рассматриваются как единая сущность. В отношении баз данных SQL Server можно представить себе набор в виде коллекции различных объектов, содержащих ноль или более элементов одного типа. Например, таблица Customer представляет собой набор: а точнее, набор всех клиентов. Вы увидите, что результаты инструкции SELECT также формируют набор.

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

Одна важная особенность, о которой следует упомянуть, заключается в том, что нет спецификации, касающейся упорядочения элементов набора. Эта неупорядоченность применяется к таблицам реляционной базы данных. Нет понятия первой строки, второй строки или последней строки. Доступ к элементам и сами элементы можно получать в любом порядке. Если необходимо вернуть результаты в определенном порядке, нужно явно указать его с помощью предложения ORDER BY в запросе SELECT.