Основные сведения о языке SQL

Печать Предыдущая страница Стартовая страница Следующая страница

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

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

 

Функции SQL

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

  • AVERAGE ( ) - среднее значение;
  • COUNT ( ) – количество значений;
  • MAXIMUM ( ) – максимальное значение;
  • MINIMUM ( ) – минимальное значение;
  • SUM ( ) – сумма значений.

 

Характеристика оператора SELECT

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

Оператор SELECT -  важнейший оператор языка SQL. Он используется для отбора записей, удовлетворяющих сложным критериям поиска. Этот оператор имеет следующий формат:

SELECT  [DISTINCT]

<Список полей> или *

               FROM <Список таблиц>

               [WHERE <Условия отбора>]

[ORDER BY <Список полей для сортировки>]

[GROUP BY <Список полей для группирования >]

[HAVING <Условия группирования >]

 

Примечание: при описании операторов языка будем опускать несущественные операнды и элементы, для  обозначения отдельных элементов использовать символы  < и > (эти символы при программировании не указываются), необязательные элементы конструкций  языка заключаются в квадратные скобки. Для наглядности  зарезервированные слова языка SQL будем писать строчными, а имена прописными буквами. Элементы в списках, например, имена полей и таблиц должны быть разделены запятыми.

Результатом  выполнения оператора SELECT является набор данных, в котором могут быть разрешены или запрещены повторяющиеся записи  (имеющие одинаковые значения всех полей). Этим управляет описатель DISTINCT. Если описатель отсутствует, то в набор данных могут входить записи, имеющие одинаковые значения всех полей.

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

Список полей определяет состав полей результирующего набора данных, эти поля могут принадлежать разным таблицам. В списке должно быть задано хотя бы одно поле. Если в набор требуется включить все поля таблицы (таблиц), то вместо перечисления имен можно указать символ “*”. Если список содержит поля нескольких таблиц, то для указания принадлежности поля к той или иной таблице используют составное имя, которое включает имя таблицы и имя поля, разделенное точкой: <Имя таблицы>.<Имя поля>.

Операнд WHERE задает критерии, которым должны удовлетворять записи в результирующем наборе данных. Выражение, описывающее условие отбора, является логическим. Его элементами могут быть имена полей, операции сравнения, арифметические и логические операции, скобки, функции LIKE, NULL, IN и др.

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

Операнд HAVING используется совместно с операндом GROUP BY для отбора записей внутри групп. Правила записи условия группирования аналогичны правилам формирования условия отбора операнда WHERE.

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

 

Примеры создания запросов

Пример 1. Отбор всех полей.

   select * from  t_locality

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

 

Пример 2. Задание полей набора данных.

  select  linksheet, linkobject  from  t_locality

В набор данных, формируемый в результате SQL-запроса, включаются поля linksheet и linkobject  всех записей из таблицы t_locality. Порядок полей в наборе данных будет соответствовать порядку полей в этом списке.

 

Пример 3. Отбор записей с уникальными значениями поля.

   select  distinct  linkobject  from  t_locality

Записи выбираются из таблицы t_locality, при этом в набор данных каждое значение  поля  LINKOBJECT  включается только один раз.

 

Пример 4. Отбор записей из двух таблиц.

    select * from  t_locality, t_district

Результирующий набор данных содержит все поля всех записей таблиц t_locality и  t_district.

 

Пример 5. Отбор полей из разных таблиц.

    select  t_locality. linkobject , t_district.info  from  t_locality, t_district

Результирующий набор данных содержит поле linkobject из таблицы t_locality и  поле l_info из таблицы  t_district.

 

Простой критерий отбора записей

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

Критерий отбора представляет собой логическое выражение, в котором можно использовать следующие операции:

  • Операции сравнения (=, >, <, <>);
  • LIKE – сравнение по шаблону;
  • IS NULL – проверка нулевого значения;
  • IN – проверка вхождения;
  • BETWEEN – проверка вхождения в диапазон.

В простом критерии отбора используется одна операция. Для операций сравнения и сравнения по шаблону критерий отбора имеет следующий формат:

<Выражение1> < Операция сравнения > < Выражение2>

 

Пример 1. Отбор записей по значениям числового поля.

   select  l_kladr  from  t_locality  where  linkobject >1000

Оператор задает получение списка кодов КЛАДР (Классификатор

адресов России), имеющих номер объекта более 1000.

 

Пример2. Отбор записей по значениям символьного поля.

   select  linkobject from t_locality where  linksheet = ‘Московская область’

В данном примере составляется список номеров объектов Московской области.

 

Пример3. Проверка частичного совпадения.

select  linkobject from t_locality where  linksheet  like “мос%”

Получение списка объектов, названия которых начинается с букв “Мос”.

В выражениях операции LIKE  используются специальные символы:

  • % - замещение любого количества символов, в том числе и нулевого;
  • _   - замещение одного символа.

 

Сложные критерии отбора записей

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

  • Простые критерии.
  • Логические операции:
  • AND – логическое И
  • OR   – логическое ИЛИ
  • NOT – логическое НЕ
  • Круглые скобки.

 

Пример. Сложный критерий отбора

select  *  from  t_locality  where  (linksheet = 'московская область' )  and  (l_kladr = 5002100011500)

В приведенном примере  выбирается населенный пункт, который находится в Московской области и имеет значение кода КЛАДР  5002100011500.

 

Сортировка записей

Сортировка – это упорядочение записей по возрастанию или убыванию значений полей. Поля, по которым выполняется сортировка, указываются в операнде ORDER BY. По умолчанию сортировка происходит в порядке возрастания значений полей.

 

Пример. Сортировка записей.

  select  *   from  t_locality  order by l_kladr

Сортировка записей задана по полю l_kladr.

 

Редактирование записей

Редактирование записей – это изменение значений поля в группе записей. Оно выполняется оператором UPDATE.

UPDATE  <Имя таблицы>

                      SET <Имя поля>=<Выражение>,

                                                  …

                              <Имя поля>=<Выражение>

                     [WHERE  <Условие отбора>];

 

Пример. Изменение значений поля.

update  t_locality  set  linksheet = 'московская область'

В поле LINKSHEET записывается значение Московская область.

 

Вставка записей

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

INSERT  INTO <Имя таблицы>

                           (<Список полей>)

                           VALUES (<Список значений>);

Пример. Добавление записи.

insert  into  t_locality  (linksheet, l_kladr)

                           values(“московская область ”,5002100011500);

В таблицу  t_locality включается новая запись, содержащая  название листа карты и значение кода КЛАДР.

 

Удаление записей

Для удаления записей используется оператор DELETE , имеющий формат:

DELETE  FROM <Имя таблицы>

                [WHERE  <Условие отбора>];                    

 

Пример. Удаление записи.

delete  from  t_locality where linkobject =0 ;                    

Из таблицы  t_locality  удаляются все записи, которые имеют нулевое значения в поле linkobject.

 

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

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

Внутреннее соединение представляет простейший случай, когда после слова SELECT перечисляются поля разных таблиц.

 

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

select     t_locality.kladr, t_district.name_posel

  from     t_locality, t_district  where   t_locality.posel_id = t_district.posel_id

 

Устанавливается связь между таблицами t_locality и t_district. Набор данных включает поле l_kladr из таблицы t_locality и поле d_name из таблицы t_district  в соответствии с идентификатором  поселения.

 

При внутреннем соединении таблицы, поля которых указываются в SQL-запросе, равноправны.

При внешнем соединении таблиц можно указать, какая из таблиц будет главной, а какая – подчиненной. В этом случае формат операнда FROM  имеет вид:

FROM <Таблица1> [<Вид соединения>] JOIN < Таблица 2> ON <Условие отбора>

 

Критерий отбора после слова ON задает условие включения записей в набор данных; соединяемые (связываемые) таблицы указываются слева и справа от слова JOIN .  Какая из двух таблиц будет главной, определяет вид соединения:

  • LEFT      - слева;
  • RIGHT   - справа (по умолчанию).

 

Пример. Внешнее соединение

select     t_locality.sem9,t_locality.l_kladr, t_district.d_name

from       t_locality left join   t_district on t_locality. district_ref= t_district.id

 

Как и в предыдущем примере, связываются таблицы t_locality и t_district.