Windows. Вирусы. Ноутбуки. Интернет. Office. Утилиты. Драйверы

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

В Интернете множество всевозможных статей, книг, самоучителей по SQL, но все они сложны для человека, который никогда не слышал об SQL, а может и вообще о программировании и поэтому для него все эти источники тяжелы для изучения. Здесь я пытаюсь объяснить основу одного оператора, не вдаваясь в глубь (именно это затрудняет изучение, что сразу от основы переходят к сложным запросам ), поэтому сначала необходимо узнать основу, а потом переходить к более сложному, что и облегчает изучение языка SQL. Данная статья отлично подойдет для начинающих, которые хотят научиться писать простые запросы SQL на выборку данных.

Что такое язык SQL и оператор SELECT

SQL – это язык запросов, который служит для манипуляции (управления) данными в реляционных базах данных. Имеет широкую популярность и поэтому любой уважающий себя IT-к должен знать основы этого языка, так как базы данных есть практически в каждой компании.

SELECT – оператор языка SQL, относится к группе операторов манипуляции данными (Data Manipulation Language, DML ) и служит для выборки данных из базы данных.

Примечание! Для того чтобы изучать язык SQL и базы данных существуют специальные бесплатные редакции крупных СУБД, например в SQL Server от компании Microsoft есть редакция Express. Как установить данную СУБД можете почитать в материале — Описание установки Microsoft SQL Server 2016 Express .

Вот самый простой пример использования оператора SELECT.

SELECT * FROM Table

  • * — показать все данные;
  • FROM — из источника;
  • Table — название источника (в нашем случае таблица ).

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

SELECT Price FROM Table

где, Price и есть название колонки.

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

Если Вам нужно указать несколько колонок, то просто перечисляйте их через запятую после оператора SELECT, например

SELECT price, name, model FROM Table

где, price, name, model это колонки из таблицы Table.

Условие выборки – оператор WHERE

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

SELECT price FROM Table WHERE price > 100

где, WHERE и есть условие, т.е. мы отображаем только те строки, которые соответствуют нашему условию (цена больше 100) .

Операторы сравнения в SQL

  • «>» – больше чего-либо;
  • «<» – меньше чего-нибудь;
  • «=» – равно;
  • «<>» – не равно;
  • «>=» – больше или равно;
  • «<=» – меньше или равно.

Также можно указывать в условии ключевое слово BETWEEN , т.е. попадает или не попадает значение в определенный промежуток, например

SELECT price FROM table WHERE price BETWEEN 400 AND 600

где, мы указываем, что цена должна быть в промежутке от 400 до 600.

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

SELECT price FROM table WHERE price IN (400, 600)

В данном случае мы хотим получить только цену со стоимостью 400 и 600.

Если нам нужно получить только уникальные строки источника, можно указать ключевое слово DISTINCT , например

SELECT DISTINCT price FROM Table WHERE price > 100

Примечание! Язык SQL не чувствителен к регистру, запросы можно писать как в одну строку, так и разбивать их на несколько. Например, следующие два запроса абсолютно одинаковые.

SELECT price FROM Table

Select price From Table

Сортировка ORDER BY

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

SELECT price FROM Table ORDER BY price DESC

Этот пример сортировки по убыванию, но можно сортировать и по возрастанию, вместо DESC пишем ASC, но обычно так не пишут, так как сортировка по возрастанию является по умолчанию.

Агрегирующие функции в SQL

В SQL очень полезные так называемые агрегирующие функции, а именно:

  • COUNT — количество значений в указанном столбце;
  • SUM — сумма значений в указанном столбце;
  • AVG — среднее значение в указанном столбце;
  • MIN — минимальное значение в указанном столбце;
  • MAX — максимальное значение в указанном столбце.

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

SELECT AVG(price), MAX(price), MIN(price) FROM table

Группировка GROUP BY

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

SELECT model, AVG (price) AS AVGPrice FROM table GROUP BY model

Если вы заметили, я здесь применил присвоение «псевдонима » для более удобного восприятия результатов этого запроса, т.е. после колонки пишите AS и название, которое Вы хотите, чтобы отображалась в результатах.

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

SELECT model, MAX(price) FROM table GROUP BY model HAVING MAX(price) < 500

В этом случае наш запрос выдаст нам сгруппированные по моделям компьютеры, максимальная цена которых, меньше 500.

Примечание! Подробней о группировке в SQL можете почитать вот в этом материале .

NULL значение в SQL

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

SELECT * FROM table WHERE price IS NULL

Что и будет означать поиск всех строк, в которых отсутствует значение для поля price.

Упрощенный синтаксис оператора SELECT

SELECT <Список полей> или * , ...] , ...]

Заметка! Если Вас интересует язык T-SQL, то рекомендую почитать мою книгу «Путь программиста T-SQL », в ней я подробно, с большим количеством примеров, рассказываю про основы языка Transact-SQL специально для начинающих.

На сегодня пока все, мы рассмотрели с Вами небольшую часть языка SQL, а именно оператор SELECT. Удачи!

И над данными таблиц.

Язык SQL называют встроенным , т.к. он содержит функций полноценного языка разработки, а ориентируется на доступ к данным, вследствие чего он входит в состав средств разработки приложений. Стандарты языка SQL поддерживают языки программирования Pascal, Fortran, COBOL, С и др.

Существует 2 метода использования встроенного SQL :

  • статическое использование языка (статический SQL ) – в тексте программы содержатся вызовы функций SQL, которые включают в исполняемый модуль после компиляции.
  • динамическое использование языка (динамический SQL ) – динамическое построение вызовов функций SQL и их интерпретация. Например , можно обратиться к данным удаленной БД в процессе выполнения программы.

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

Определение 1

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

Основные операторы языка запросов SQL

Операторы языка SQL условно разделяются на 2 подъязыка :

  1. Язык определения данных DDL ;
  2. Язык манипулирования данными DML .

В таблице символом * помечены специфические операторы языка.

Рассмотрим важнейшие операторы SQL.

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

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

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

    Пример 1

    Для создания таблицы books каталога книг, которая содержит поля:

    type – тип книги,

    name – название книги,

    price – цена книги

    оператор может выглядеть следующим образом:

    Оператор изменения структуры таблицы:

    При изменении структуры таблицы можно добавлять (ADD ), изменять (MODIFY ) или удалять (DROP ) один или несколько столбцов таблицы. Правила записи данного оператора такие же, как и для оператора CREATE TABLE . Чтобы удалить столбец указывать не нужно.

    Пример 2

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

    Оператор удаления таблицы:

    Пример 3

    Например, чтобы удалить существующую таблицу с именем books достаточно воспользоваться оператором:

    Оператор создания индекса:

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

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

    ASC задает автоматическую сортировку значений в столбцах в порядке возрастания (по умолчанию), а DESC – в порядке убывания.

    Оператор удаления индекса:

    Оператор создания представления:

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

    Оператор удаления представления:

    Оператор выборки записей:

    Оператор SELECT производит выборку и вычисления над данными из одной или нескольких таблиц. Результат выполнения оператора – ответная таблица, которая содержит (ALL ) или не содержит (DISTINCT ) строки, которые повторяются.

    Операнд FROM содержит список таблиц, из которых берутся записи для отбора данных.

    Оператор изменения записей:

    Новые значения полей в записях могут не содержать значений (NULL ) или вычисляться согласно арифметическому выражению.

    Оператор вставки новых записей:

    В первой записи оператора INSERT вводятся новые записи с заданными значениями в столбцах.

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

    Оператор удаления записей:

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

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

Введение

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

Определяют несколько категорий операторов SQL:

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

Операторы SQL для манипулирования данными

INSERT. Вставляет строки в существующую таблицу. Может использоваться как для одного значения, так и нескольких, определённых по некоему условию. Например:

имя таблицы (имя столбца 1, имя столбца 2)

VALUES (значение 1, значение 2).

Для использования оператора INSERT при нескольких значениях, применяется такой синтаксис:

имя таблицы 1 (имя столбца 1, имя столбца 2)

SELECT имя столбца 1, имя столбца 2

FROM имя таблицы 2

WHERE имя таблицы 2.имя столбца 1>2

Этот запрос выберет все данные из таблицы 2, которые больше 2 по столбцу 1 и вставит их в первую.

UPDATE. Как видно из названия, этот оператор SQL запроса обновляет данные в существующей таблице по определённому признаку.

UPDATE имя таблицы 1

SET имя столбца 2 = «Василий»

WHERE имя таблицы 1.имя столбца 1 = 1

Данная конструкция заполнит значением Василий все строки, в которых встретит цифру 1 в первом столбце.

Данные из таблицы. Можно указать какое-либо условие или же убрать все строки.

DELETE FROM имя таблицы

WHERE имя таблицы.имя столбца 1 = 1

Приведённый запрос удалит из базы все данные со значением один в первом столбце. А вот так можно очистить всю таблицу:

Оператор SELECT

Главное назначение SELECT — выборка данных по определенным условиям. Результатом его работы всегда является новая таблица с отобранными данными. Оператор MS может быть использован в массе различных запросов. Поэтому наряду с ним можно рассмотреть и другие смежные ключевые слова.

Для выбора всех данных из определённой таблицы используется знак «*».

FROM имя таблицы 1

Результатом работы данного запроса будет точная копия таблицы 1.

А здесь происходит выборка по условию WHERE, которое достаёт из таблицы 1 все значения, больше 2 в столбце 1.

FROM имя таблицы 1

WHERE имя таблицы 1.имя столбца 1 > 2

Также можно указать в выборке, что нужны только определённые столбцы.

SELECT имя таблицы 1.имя столбца 1

FROM имя таблицы 1

Результатом данного запроса будут все строки, со значениями из столбца 1. С помощью операторов MS SQL можно составить собственную таблицу, на ходу заменив, вычислив и подставив определённые значения.

имя таблицы 1.имя столбца 1

имя таблицы 1.имя столбца 2

имя таблицы 1.имя столбца 3

имя таблицы 1.имя столбца 2 * имя таблицы 1.имя столбца 3 AS SUMMA

FROM имя таблицы 1

Данный, на первый взгляд сложный запрос выполняет выборку всех значений из таблицы 1, затем создаёт новые колонки EQ и SUMMA. В первую заносит знак «+», во вторую произведение данных из столбца 2 и 3. Полученный результат можно представить в виде таблицы, для понимания как это работает:

При использовании оператора SELECT, можно сразу провести упорядочивание данных по какому-либо признаку. Для этого используется слово ORDER BY.

имя таблицы 1.имя столбца 1

имя таблицы 1.имя столбца 2

имя таблицы 1.имя столбца 3

FROM имя таблицы 1

ORDER BY имя столбца 2

Результирующая таблица будет выглядеть таким образом:

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

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

Таблица «Сотрудники»

Таблица «Зарплата»

Теперь нужно, как-то связав эти две таблицы получить общие значения. Используя основные операторы SQL сделать это можно так:

Сотрудники.Номер

Сотрудники.Имя

Зарплата.Ставка

Зарплата.Начислено

FROM Сотрудники, Зарплата

WHERE Сотрудники.Номер = Зарплата.Номер

Здесь происходит выборка из двух разных таблиц значений, объединённых по номеру. Результатом будет следующий набор данных:

Ещё немного о SELECT. Использование агрегатных функций

Один из основных операторов может производить некоторые вычисления при выборке. Для этого он использует определённые функции и формулы.

К примеру, чтобы получить количество записей из таблицы «Сотрудники», нужно использовать запрос:

SELECT COUNT (*) AS N

FROM Сотрудники

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

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

SUM(Зарплата.Начислено) AS SUMMA

MAX(Зарплата.Начислено) AS MAX

MIN(Зарплата.Начислено) AS MIN

AVG(Зарплата.Начислено) AS SRED

FROM Зарплата

Итоговая таблица будет такой:

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

Объединение, пересечение и разности

Объединить несколько запросов в SQL

SELECT Сотрудники.Имя

FROM Сотрудники

WHERE Сотрудники.Номер = 1

SELECT Сотрудники.Имя

FROM Сотрудники, Зарплата

WHERE Зарплата.Номер = 1

При этом стоит учитывать, что при таком объединении таблицы должны быть совместимы. То есть иметь одинаковое количество столбцов.

Синтаксис оператора SELECT и порядок его обработки

Первым делом SELECT определяет область, из которой он будет брать данные. Для этого используется ключевое слово FROM. Если не указано, что именно выбрать.

Затем может присутствовать SQL оператор WHERE. С его помощью SELECT пробегает по всем строкам таблицы и проверяет данные на соответствие условию.

Если в запросе имеется GROUP BY, то происходит группировка значений по указанным параметрам.

Операторы для сравнения данных

Их имеется несколько типов. В SQL операторы сравнения могут проверять различные типы значений.

    «=». Обозначает, как можно догадаться, равенство двух выражений. Например, он уже использовался в примерах выше - WHERE Зарплата.Номер = 1.

    «>». Знак больше. Если значение левой части выражения больше, то возвращается логическое TRUE и условие считается выполненным.

    «<». Знак меньше. Обратный предыдущему оператор.

    Знаки «<=» и «>=». Отличается от простых операторов больше и меньше, тем, что при равенстве операндов условие также будет истинным.

LIKE

Перевести данное ключевое слово можно как «похожий». Оператор LIKE в SQL используется примерно по такому же принципу — выполняет запрос по шаблону. То есть он позволяет расширить выборку данных из базы используя регулярные выражения.

Например, поставлена такая задача: из уже известной базы «Сотрудники» получить всех людей, чьё имя заканчивается на «я». Тогда запрос можно составить так:

FROM Сотрудники

WHERE Имя LIKE `%я`

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

CASE

Данный оператор SQL Server представляет собой реализацию множественного выбора. Он напоминает конструкцию switch во многих языках программирования. Оператор CASE в SQL выполняет действие по нескольким условиям.

Например, нужно выбрать из таблицы «Зарплата» максимальное и минимальное значение.

Тогда запрос можно составить так:

FROM Зарплата

WHERE CASE WHEN SELECT MAX(Начислено) THEN Максимум

WHEN SELECT MIN(Начислено) THEN Минимум

В данном контексте система ищет максимальное и минимальное значение в столбце «Начислено». Затем с помощью END создаётся поле «итог», в которое будет заноситься «Максимум» или «Минимум» в зависимости от результата выполнения условия.

Кстати, в SQL имеется и более компактная форма CASE — COALESCE.

Операторы определения данных

Это вид позволяет проводить разнообразное изменение таблиц — создание, удаление, модификации и работу с индексами.

Первый из них, который стоит рассмотреть — CREATE TABLE. Он делает не что иное, как создаёт таблицу. Если просто набрать запрос CREATE TABLE, ничего не случится, так как нужно ещё указать несколько параметров.

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

CREATE TABLE Сотрудники

(Номер number(10) NOT NULL

Имя varchar(50) NOT NULL

Фамилия varchar(50) NOT NULL)

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

DROP TABLE

Выполняет одну простую задачу — удаление указанной таблицы. Имеет дополнительный параметр IF EXISTS. Он поглощает ошибку при удалении, если искомая таблица не существует. Пример использования:

DROP TABLE Сотрудники IF EXISTS.

CREATE INDEX

В SQL имеется система индексов, которая позволяет ускорить доступ к данным. В общем, он представляет собой ссылку, которая указывает на определённый столбец. Создать индекс можно простым запросом:

CREATE INDEX название_индекса

ON название_таблицы(название_столбца)

Используется данный оператор в T-SQL, Oracle, PL SQL и многих других интерпретациях технологиях.

ALTER TABLE

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

    ADD. Осуществляет добавление столбца в таблицу. Синтаксис его такой: ALTER TABLE название_таблицы ADD название_столбца тип_хранимых_данных. Может иметь параметр IF NOT EXISTS, что подавить ошибку, если создаваемый столбец уже есть;

    DROP. Удаляет столбец. Также имеет ключ IF EXISTS, без которого сгенерируется ошибка, говорящая о том, что требуемый столбец отсутствует;

    CHANGE. Служит для переименования имени поля в указанное. Пример использования: ALTER TABLE название_таблицы CHANGE старое_имя новое_имя;

    MODIFY. Данная команда поможет сменить тип и дополнительные атрибуты определённого столбца. А используется он вот так: ALTER TABLE название_таблицы MODIFY название_столбца тип_данных атрибуты;

CREATE VIEW

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

Процесс создания происходит с помощью простого запроса:

CREATE VIEW название представления AS SELECT FROM * название таблицы

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

Немного о функциях

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

    COUNT. Производит подсчёт записей или строк в конкретной таблице. В качестве параметра можно указать имя столбца, тогда данные будут взяты из него. SELECT COUNT * FROM Сотрудники;

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

    MIN и MAX. Эти функции уже использовались в этой статье. Определяют они максимальное и минимальное значения из указанного столбца;

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

    ROUND. Функция округления десятичных дробных чисел. В синтаксисе используется название столбца и количество знаков после запятой;

    LEN. Простая функция, вычисляющая длину значений столбца. Результатом будет новая таблица с указанием количества символов;

    NOW. Это ключевое слово используется для вычисления текущей даты и времени.

Дополнительные операторы

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

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

    BETWEEN. Очень удобный инструмент для выборки. Он указывает область значений, среди которых нужно получить данные. На вход принимает параметр от и до какого числа используется диапазон;.

    NOT. Оператор придаёт противоположность выражению.

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

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

    UNION. Очень удобный оператор для объединения нескольких запросов. Он уже встречался среди примеров этой в этой статье. Можно вывести нужные строки из нескольких таблиц, объединив их UNION для более удобного использования. Синтаксис его такой: SELECT имя_столбца FROM имя_таблицы UNION SELECT имя_другого_столбца FROM имя_другой таблицы. В результате получится сводная таблица с объединёнными запросами.

    PRIMARY KEY. Переводится как «первичный ключ». Собственно, именно такая терминология и используется в справочных материалах. Он означает уникальный идентификатор строки. Применяется, как правило, при создании таблицы для указания поля, которое и будет содержать его.

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

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

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

    Ограничения. Если нужно получить из базы с тысячами строк всего лишь двух, то стоит использовать операторы типа LIMIT или TOP. Не нужно извлекать данные средствами языка разработки оболочки.

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

    Сортировка. Если есть возможность применять упорядочивание в запросе, то есть силами СУБД, то нужно её использовать. Это позволит значительно сэкономить на ресурсах при работе программы или сервиса.

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

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

    Типы. Для экономии места и ресурсов нужно чутко относиться к видам используемых данных. Если есть возможность воспользоваться менее «тяжёлым» для памяти типом, то надо применять именно его. Например, если известно, что в данном поле числовое значение не будет превышать 255, то зачем использовать 4-байтный INT, если есть TINYINT в 1 байт.

Заключение

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

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

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

Оператор языка SQL SELECT предназначен для запросов на выборку данных из базы данных. Он может быть использован как без условий (выбор всех строк во всех столбцах или всех строк в определённых столбцах), так и с многочисленными условиями (выбор определённых строк), которые заданы в секции WHERE. Ознакомимся со средствами SQL, которыми можно задавать эти условия на выборку данных, а также узнаем, как использовать оператор SELECT в подзапросах.

SELECT для выбора столбцов таблицы

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

SELECT * FROM ИМЯ_ТАБЛИЦЫ

То есть для выбора всех столбцов таблицы после слова SELECT нужно ставить звёздочку.

Пример 1. Есть база данных фирмы - Company. В ней есть таблица Org (Структура фирмы) и Staff (Сотрудники). Требуется выбрать из таблиц все столбцы. Соответствующий запрос для выбора всех столбцов из таблицы Org выглядит следующим образом:

SELECT * FROM ORG

Этот запрос вернёт следующее (для увеличения картинки щёлкнуть по ней левой кнопкой мыши):

Запрос для выбора всех столбцов из таблицы Staff выглядит следующим образом:

SELECT * FROM STAFF

Этот запрос вернёт следующее:


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

SELECT ВЫБИРАЕМЫЕ_СТОЛБЦЫ FROM ИМЯ_ТАБЛИЦЫ

Пример 2. Пусть требуется из таблицы Org выбрать столбцы Depnumb и Deptname, в которых содержатся данные соответственно о номерах отделов фирмы и об их названиях. Запрос для получения такой выборки будет следующим:

SELECT DEPNUMB, DEPTNAME FROM ORG

А из таблицы Staff нужно выбрать столбцы DEPT, NAME, JOB, в которых содержатся соответственно данные о номере отдела, в котором трудится сотрудник, его имени и должности:

SELECT DEPT, NAME, JOB FROM STAFF

Для выбора определённых строк таблицы вместе с оператором SELECT уже потребуется ключевое слово WHERE, указывающее на некоторое значение или несколько значений, содержащиеся в интересующих нас строках. Наиболее простые условия задаются при помощи операторов сравнения и равенства (, =), а также ключевого слова IS. Условий может быть несколько, тогда они перечисляются с использованием ключевого слова AND. Запросы для выбора строк имеют следующий синтаксис:

Пример 4. В предыдущем примере мы выбирали строки из таблицы только по значению одного столбца - DEPT. Пусть теперь нужно выбрать данные о сотрудниках, которые работают в 38-м отделе и должность которых - служащий (Clerk). Для этого в секции WHERE соответствующие значения нужно перечислить с использованием слова AND:


Пример 5. Пусть нужно выбрать из таблицы Staff идентификаторы и имена тех сотрудников, размер комиссии которых - неопределённый. Для этого в секции WHERE перед указанием значения столбца COMM - NULL нужно ставить не знак равенства, а слово IS:

Этот запрос вернёт следующие данные:


Для указания значений в строках, которые требуется выбрать, используются и знаки сравнения.

Использование SELECT и предикатов IN, OR, BETWEEN, LIKE

Предикаты - слова IN, OR, BETWEEN, LIKE в секции WHERE - также позволяют выбрать определённые диапазоны значений (IN, OR, BETWEEN) или значения в строках (LIKE), которые требуется выбрать из таблицы. Запросы с предикатами IN, OR, BETWEEN имеют следующий синтаксис:

Запросы с предикатом LIKE имеют следующий синтаксис:

Пример 7. Пусть требуется выбрать из таблицы Staff имена, должности и число отработанных лет сотрудников, работающих в отделах с номерами 20 или 84. Это можно сделать следующим запросом:

Результат выполнения запроса:


Пример 8. Пусть теперь требуется выбрать из таблицы Staff те же данные, что и в предыдущем примере. Запрос со словом OR аналогичен запросу со словом IN и перечислением интересующих значений в скобках. Запрос будет следующим:

Пример 9. Выберем из той же таблицы имена, должности и число отработанных лет сотрудников, зарплата которых между 15000 и 17000 включительно:

Результат выполнения запроса:


Предикат LIKE используется для выборки тех строк, в значениях которых встречаются символы, указанные после предиката между апострофами (").

Пример 10. Выберем из той же таблицы имена, должности и число отработанных лет сотрудников, имена которых начинаются с буквы S и состоят из 7 символов:

Символ подчёркивания (_) означает любой символ. Результат выполнения запроса:


Пример 11. Выберем из той же таблицы имена, должности и число отработанных лет сотрудников, имена которых начинаются с буквы S и содержат любые другие буквы в любом количестве:

Символ процентов (%) означает любое количество символов. Результат выполнения запроса:


Значения, указанные с использованием предикатов IN, OR, BETWEEN, LIKE можно инвертировать при помощи слова NOT. Тогда запрашиваемые данные будут иметь противоположный смысл. Если мы используем NOT IN (20, 84), то будут выведены данные сотрудников, которые работают во всех отделах, кроме имеющих номера 20 и 84. С использованием NOT BETWEEN 15000 AND 17000 можно получить данные сотрудников, зарплата которых не входит в интервал от 15000 до 17000. Запрос с NOT LIKE выведет данные сотрудников, чьи имена не начинаются или не содержат символов, указанных с NOT LIKE.

Написать SQL запросы с SELECT и предикатами IN, NOT IN, BETWEEN самостоятельно, а затем посмотреть решения

Есть база данных "Театр". Таблица Play содержит данные о постановках. Таблица Team - о ролях актёров. Таблица Actor - об актёрах. Таблица Director - о режиссёрах. Поля таблиц, первичные и внешние ключи можно увидеть на рисунке ниже (для увеличения нажать левой кнопкой мыши).


Пример 12. Вывести список актёров, которые не разу не были утверждены на главную роль. В таблице team данные о главных ролях содержатся в столбце mainteam. Если роль - главная, то в соответствующей строке отмечено "Y".

SELECT и ORDER BY - сортировка (упорядочение) строк

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

Пример 15. Пусть требуетя выбрать из таблицы Staff сотрудников, работающих в отделе с номером 84 и отсортировать (упорядочить) записи по числу отработанных лет в возрастающем порядке:

Слово ASC указывает, что порядок сортировки - возрастающий. Это слово не обязательно, так как возрастающий порядок сортировки применяется по умолчанию. Результат выполнения запроса:


Пример 16. Пусть требуетя выбрать те же данные, что и в предыдущем примере, но отсортировать (упорядочить) записи по числу отработанных лет в убывающем порядке:

Слово DESC указывает, что порядок сортировки - убывающий. Результат выполнения запроса:


SELECT и DISTINCT - удаление дубликатов строк

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

Пример 17. Пусть требуетcя узнать, какие существуют отделы и какие должности среди отделов, номера которых меньше 30. Это можно сделать при помощи следующего запроса:

Результат выполнения запроса:


Оператор SELECT в подзапросах SQL

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

Пример 18. Все те же таблицы ORG и STAFF. Пусть требуетcя узнать, в каком подразделении работает сотрудник с идентификационным номером 280, и где это подразделение расположено. Но информация о подразделениях хранится в таблице ORG, а информация о сотрудниках - в таблице STAFF. Это можно сделать при помощи следующего запроса с подзапросом, в котором внешний SELECT обращается к таблице ORG, а внутренний SELECT - к таблице STAFF:

Результат выполнения запроса:


Пример 19. Пусть теперь требуетcя узнать, в каких подразделениях (без дублирования) работают сотрудники с заработной платой менее 13000. Для этого в секции WHERE внешнего SELECT (запрос к таблице ORG) задаётся условие, принимающее диапазон значений (IN), а внутренний SELECT (к таблице STAFF) как раз возвращает требуемый диапазон значений:

Реляционные базы данных и язык SQL

Дисциплина: Базы данных

Операторы языка SQL

Язык SQL включает в себя операторы разных катего­рий. Любой SQL-оператор состоит из зарезервированных слов и слов, опре­деляемых пользователем в соответствии с установленными синтаксическими правилами. Как и во многих языках программирования, большинство ком­понентов операторов языка не чувствительны к регистру. Исключение из этого правила как обычно составляют символьные данные, при задании ко­торых необходимо помнить о регистре и использовать тот, который необхо­дим для представления данных.

Для записи операторов в языке принят свободный формат, позволяющий посредством отступов и выравниваний придать SQL-программе более чита­бельный вид.

    каждая фраза в операторе должна начинаться с новой строки;

    начало каждой фразы должно быть выровнено с началом остальных фраз оператора;

    каждая часть фразы должна начинаться с новой строки с некоторым от­ступом относительно начала всей фразы, что позволит выделить подчи­ненные части;

    для записи операторов применяются некоторые соглашения:

    для записи зарезервированных слов используются прописные буквы;

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

    вертикальная черта "|"" указывает на необходимость выбора одного из не­скольких значений;

    фигурные скобки определяют обязательный элемент;

    квадратные скобки определяют необязательный элемент;

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

Операторы определения данных (табл.1) применяются для описания структур используемых данных. В состав этой категории входят следующие операторы: create table, drop table, alter table, create view, ALTER VIEW, DROP VIEW.

Таблица 1 . Операторы определения данных

Оператор Пояснение

create table Создать таблицу

DROP table Удалить таблицу

alter table Изменить таблицу

CREATE VIEW Создать представление

alter view Изменить представление

drop view Удалить представление

Операторы манипулирования данными, образующие следующую категорию операторов, предназначены для заполнения таблиц данными и для обновле­ния загруженной в них информации. К данной категории относятся сле­дующие операторы: delete, insert, update (табл.2).

Таблица 2 . Операторы манипулирования данными

Оператор Пояснение

Delete Удаляет одну или несколько строк, соответствующих условиям

фильтрации, из базовой таблицы

INSERT Вставляет одну строку в базовую таблицу

update Обновляет значения одного или нескольких столбцов в одной или

нескольких строках, соответствующих условиям фильтрации

Для выборки информации из базы данных предназначен язык запросов, ко­торый в языке SQL представлен одним оператором select (табл.3).

Таблица 3. Язык запросов

Оператор Пояснение

select Выбирает строки; оператор, позволяющий сформировать результирующую

таблицу, соответствующую запросу

Кроме указанных категорий операторов, назначение которых не сложно представить, прочитав пояснения в таблицах, необходимо выделить еще две: операторы управления транзакциями (табл. 4) и средства администриро­вания данных (табл. 5).

Таблиц 4. Управление транзакциями

Оператор Пояснение

commit Завершить транзакцию- завершить обработку информации,

объединенную в транзакцию

rollback Откатить транзакцию- отменить изменения, проведенные в ходе выполнения

состояние БД, пометить его для то­го, чтобы можно было в дальнейшем к нему вернуться

Таблица 5 . Администрирование данных

Оператор Пояснение

ALTER DATABASE Изменить набор основных объектов в базе данных, ограниче­ний, касающихся

всей базы данных

ALTER DBAREA Изменить ранее созданную область хранения

ALTER PASSWORD Изменить пароль для всей базы данных

CREATE DATABASE Создать новую базу данных

CREATE DBAREA Создать новую область хранения и сделать ее доступной для размещения

DROP DATABASE Удалить существующую базу данных

DROP DBAREA Удалить существующую область хранения (если в ней на на­стоящий момент не

располагаются активные данные)

GRANT Предоставить права доступа на ряд действий над некоторым объектом БД

REVOKE Лишить прав доступа к некоторому объекту или некоторым действиям над

объектом

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

Начинать знакомство с данным языком принято с рассмотрения возможно­стей языка запросов, который в языке SQL представлен одним оператором select, потому что этот мощный оператор, естественно, является и самым сложным. К тому же в дальнейшем интересно посмотреть, как его можно использовать совместно с операторами манипулирования данными.

    Оператор выбора SELECT . Формирование запросов к базе данных

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

Формат оператора select:

SELECT *|<список полей> FROM <список таблиц>

Указанный порядок следования фраз в операторе select не может быть из­менен, но не все его части являются обязательными. К обязательным пред­ложениям относятся только фразы select и from. Все остальные части опе­ратора могут быть использованы по усмотрению программиста. Пояснение:

□ Фраза select :

Наличие ключевого слова all (по умолчанию) означает, что в резуль­тирующую таблицу включаются все строки, удовлетворяющие услови­ям запроса, что может привести к появлению в результирующей таб­лице одинаковых строк;

Ключевое слово distinct предназначено для приведения таблицы в соответствие с принципами теории отношений, где предполагается отсутствие дубликатов строк;

Символ "* " определяет очень часто встречаемую ситуацию, когда в ре­зультирующий набор включаются все столбцы из исходной таблицы запроса.

□ Во фразе from задается перечень исходных таблиц запроса.

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

Сравнения "= , <>, >, <, >=, <=" - для сравнения результатов вы­числения двух выражений; более сложные выражения строятся с по­мощью логических операторов AND, OR, NOT; значения выражений вычисляются в порядке, который определяется приоритетом исполь­зуемых операторов и наличием скобок в выражении;

between А and В - предикат истинен, когда вычисленное значение выражения попадает в заданный диапазон (предикат not between a and В истинен тогда, когда сравниваемое значение не попадает в заданныйинтервал);

in - предикат истинен тогда, когда сравниваемое значение входит в множество заданных значений; при этом множество значений может быть задано простым перечислением или встроенным подзапросом (предикат not in истинен тогда, когда сравниваемое значение не вхо­дит в заданное множество);

like и not like - предикаты, смысл которых противоположен, тре­буют задания шаблона, с которым сравнивается заданное значение; предикат like истинен тогда, когда сравниваемое значение соответст­вует шаблону, и ложен в противном случае;

IS null - предикат, применяющийся для выявления равенства зна­чения некоторого атрибута неопределенному значению:

    <имя атрибута> IS null - принимает значение true, если в дан­ной строке указанный атрибут имеет неопределенное значение и значение false, в противном случае;

    <имя атрибута> IS NOT null - все происходит наоборот.

exist и not exist , используемые во встроенных подзапросах.

□ Во фразе group by задается список полей группировки.

□ Во фразе having задаются предикаты-условия, накладываемые на каждую группу.

□ Во фразе order by задается список полей упорядочения результата, то есть список полей, который определяет порядок сортировки в результи­рующей таблице.

В стандарте SQL определено понятие NULL-значения, которое вызвало необхо­димость применения трехзначной логики, где все логические операции выпол­няются в соответствии с приведенной ниже таблицей истинности (табл.6).

Таблица 6 . Таблица истинности

A AND B

Т RUE

1.1. Простые запросы

Запрос 1

Вывести сведения о кафедрах университета.

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

SELECT * FROM kafedra

Результатом выполнения такого запроса будет являться таблица, содержащая сведения обо всех кафедрах университета:

Kod kaf

Name kaf

Nom_telef

Nom_Auditoria

Col_sotr

Иванов Т.М.

Общей математики

Махов К Л.

Росс Л.Т.

Фирсов С.С.

Прикладной математики

Ляхова И.Т.

Запрос 2

Вывести номера телефонов кафедр университета.

Результат такого запроса должен содержать только два столбца: Name _ kaf и Nom _ telef , поэтому сам запрос должен выглядеть следующим образом:

SELECT Name_kaf, Nom_telef FROM kafedra

Результирующая таблица:

Name kaf Nomjelef

Физики 23-34-24

Общей математики 23-65-43

Истории 23-78-72

Графики 23-99-77

Прикладной математики 23-66-62

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

Запрос 3

Вывести сведения о кафедре графики.

SELECT * FROM kafedra WHERE Name_kaf = "Графики"

Ответ на такой запрос будет содержать только одну строку:

Kod.kaf Name_kaf Nomjelef Nom_Auditoria Col_sotr Zav_kaf

004 Графики 23-99-77 385 18 Фирсов C.C.

Запрос 4

Вывести сведения о кафедрах университета, находящихся на первом этаже, учитывая тот факт, что номера аудиторий первого этажа лежат в диапазо­не от 1 до 99.

Запрос будет выглядеть следующим образом:

SELECT * FROM kafedra WHERE Nom_Auditoria BETWEEN 1 AND 99

Результат запроса:

Kodjcaf Name_kaf Norn lelef Norn Audit oria Coi_sotr Zavkaf

002 Общей мате- 23-65-43 003 22 Махов К.Л.

математики

В общем случае строки в результирующей таблице выводятся в неупорядоченном каким-либо образом состоянии. Просматривать и анализировать такой материал не всегда удобно. Для сортировки строк по какому-либо столбцу применяется фраза order by. Она включает список разделенных запятыми наименований столбцов, по которым требуется упорядочить вы­водимую информацию. Данная фраза должна всегда располагаться последней в операторе select и при ее наличии появляется возможность отсортировать строки по возрастанию (asc) или убыванию (desc) значений указанного столбца или комбинации указанных столбцов, независимо о" того, присутствуют эти столбцы в результирующей таблице или нет.

Запрос 5

Вывести сведения о кафедрах университета в виде, отсортированном т столбцу Name _ kaf в порядке возрастания.

Запрос будет выглядеть следующим образом:

SELECT * FROM kafedra ORDER BY Name_caf ASC

Результат данного запроса:

Kod_kaf Name_kaf Nomjelef Nom_Auditoria Col_sotr Zav kaf

004 Графики 23-Э9-77 385 18 ФирсовС.С.

003 Истории 23-78-72 465 16 Росс Л.Т.

002 Общей ма- 23-65-43 003 22 Махов К.Л.

тематики

005 Прикладной 23-66-62 028 24 Ляхова И.Т.

математики

001 Физики 23-34-24 132 25 Иванов Т.М.

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

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ: