Источник: https://bugza.info/uroki-po-sql/ - не понятно, что является первоисточником. Но опять местами есть проблемы с пониманием из-за явных ошибок при переводе. Местами что-то исправил, что-то оставил как есть.
От начала и до конца копипаст, с незначительными корректировками от себя.
"
SQL как и другие языки программирования имеет свои команды (операторы), с помощью которых отдаются инструкции для выборки данных.
Выборка данных (SELECT)
Самым первым и главным оператором в SQL является SELECT. С его помощью мы можем отбирать необходимые нам поля данных в таблице.
1. Выборка отдельных полей.
SELECT Product FROM Sumproduct
Видим, что наш SQL запрос отобрал колонку Product из таблицы Sumproduct .
2. Выборка нескольких полей.
Допустим, нам необходимо выбрать название и количество реализованного товара. Для этого просто перечисляем необходимые поля через запятую:
SELECT Product, Quantity FROM Sumproduct
3. Выборка всех столбцов.
Если же нам необходимо получить всю таблицу со всеми полями, тогда просто ставим знак звездочка (*):
SELECT * FROM Sumproduct
Поздравляю, Вы сделали первые SQL запросы.
PS. Все операторы в SQL нечувствительны к регистру, поэтому вы можете писать как большими буквами, так и маленькими (как правило, их принято писать большими буквами, чтобы различать от названий полей и таблиц). Названия же таблиц и полей является наоборот чувствительными к регистру и должны писаться точно как в БД.
Сортировка (ORDER BY)
Может понадобиться сортировать нашу выборку — в алфавитном порядке для текста или по возрастанию/убыванию — для цифровых значений. Для таких целей в SQL есть специальный оператор ORDER BY.
1. Сортировка выбранных данных.
Например, всю нашу таблицу посортируем по сумме реализации продукции, а именно по столбцу Amount.
SELECT * FROM Sumproduct ORDER BY Amount
По умолчанию запрос посортировал записи по возрастанию в поле Amount.Обязательно нужно соблюдать последовательность расположения операторов, т.е. оператор ORDER BY должен идти в самом конце запроса. В противном случае будет получено сообщение об ошибке.
Также особенностью оператора ORDER BY является то, что он может сортировать данные по полю, которого мы не выбирали в запросе, то есть достаточно, чтобы оно вообще было в БД.
2. Сортировка по нескольким полям.
Теперь посортируем наш пример дополнительно за еще одним полем. Пусть это будет поле City, которое отображает место реализации продукции.
SELECT * FROM Sumproduct ORDER BY Amount, City
Очередность сортировки будет зависеть от порядка расположения полей в запросе. То есть, в нашем случае сначала данные будут рассортированы по колонке Amount , а затем по City.
3. Направление сортировки.
Несмотря на то, что по умолчанию оператор ORDER BY сортирует по возрастанию, мы можем также прописать сортировки значений по убыванию. Для этого в конце каждого поля проставляем оператор DESC (что является сокращением от слова DESCENDING).
SELECT * FROM Sumproduct ORDER BY Amount DESC, City
В данном примере, значение в поле Amount были посортированы по убыванию, а в поле City — по возрастанию. Оператор DESC применяется только для одного столбца, поэтому при необходимости его нужно прописывать после каждого поля, которое принимает участие в сортировке.
Фильтрация данных (WHERE)
В большинстве случаев необходимо получать не все записи, а только те, которые соответствуют определенным критериям. Поэтому для осуществления фильтрации выборки в SQL есть специальный оператор WHERE.
1. Простое фильтрование оператором WHERE.
Например, отберем записи, относящиеся только к определенному товару. Для этого мы укажем дополнительный параметр отбора, который будет фильтровать значение по колонке Product.
Пример запроса для отбора текстовых значений:
SELECT * FROM Sumproduct WHERE Product = ‘Bikes’
Как видим, условие отбора взято в одинарные кавычки, что является обязательным при фильтровании текстовых значений. При фильтровании числовых значений кавычки не нужны.
Пример запроса для отбора числовых значений:
SELECT * FROM Sumproduct WHERE Amount > 40000 ORDER BY Amount
В этом примере мы отобрали записи, в которых выручка от реализации составила более 40 тыс. и, дополнительно, все записи посортировали по возрастанию по полю Amount.
В таблице ниже указан перечень условных операторов, поддерживаемых SQL:
Знак операции | Значение |
= | Равно |
<> | Не равно |
< | Меньше |
<= | Меньше или равно |
> | Больше |
>= | Больше или равно |
BETWEEN | Между двумя значениями |
IS NULL | Отсутствует запись |
2. Фильтрация по диапазону значений (BETWEEN).
Для отбора данных, которые лежат в определенном диапазоне, используется оператор BETWEEN. В следующем запросе будут отобраны все значения, лежащие в пределах от 1000 в 2000 включительно, в поле Amount.
SELECT * FROM Sumproduct WHERE Amount BETWEEN 1000 AND 2000
3. Выборка пустых записей (IS NULL).
В SQL существует специальный оператор для выборки пустых записей (NULL). Пустой записью считается любая ячейка в таблице, в которую не введены какие-либо символы. Если в ячейку введен 0 или пробел, то считается, что поле заполнено.
SELECT * FROM Sumproduct WHERE Amount IS NULL
4. Расширенное фильтрации (AND, OR).
Язык SQL не ограничивается фильтрацией по одному условию, для собственных целей вы можете использовать достаточно сложные конструкции для выборки данных одновременно по многим критериям. Для этого в SQL есть дополнительные операторы, которые расширяют возможности оператора WHERE. Такими операторами являются: AND, OR, IN, NOT. Приведем несколько примеров работы данных операторов.
SELECT * FROM Sumproduct WHERE Amount > 40000 AND City = ‘Toronto’
SELECT * FROM Sumproduct WHERE Month= ‘April’ OR Month= ‘March’
Давайте объединим операторы AND и OR. Для этого сделаем выборку велосипедов (Bikes) и коньков (Skates), которые были проданы в марте (March).
SELECT * FROM Sumproduct WHERE Product = ‘Bikes’ OR Product = ‘Skates’ AND Month= ‘March’
Видим, что в нашу выборку попало за много значений (кроме марта (March), также январь (January), февраль (February) и апрель (April)). В чем же причина? А в том, что SQL имеет приоритеты выполнения команд. То есть оператор AND имеет более высокий приоритет, чем оператор OR, поэтому сначала были отобраны записи с коньками, которие проданные в марте, а потом все записи, касающиеся велосипедов.
Итак, чтобы получить правильную выборку, нам нужно изменить приоритеты выполнения команд. Для этого используем скобки, как в математике. Тогда, сначала будут обработаны операторы в скобках, а затем — все остальные.
SELECT * FROM Sumproduct WHERE (Product = ‘Bikes’ OR Product = ‘Skates’) AND Month= ‘March’
5. Расширенная фильтрация (оператор IN).
SELECT * FROM Sumproduct WHERE ID IN (4, 12, 58, 67)
Оператор IN выполняет ту же функцию, что и OR, однако имеет ряд преимуществ:
- При работе с длинными списками, предложение с IN легче читать;
- Используется меньшее количество операторов, что ускоряет обработку запроса;
- Самое важное преимущество IN в том, что в его конструкции можно использовать дополнительную конструкцию SELECT
6. Расширенная фильтрация (оператор NOT).
SELECT * FROM Sumproduct WHERE NOT City IN (‘Toronto’, ‘Montreal’)
Ключевое слово NOT позволяет убрать ненужные значения из выборки. Также его особенностью является то, что оно проставляется перед названием столбца, участвующего в фильтровании, а не после.
Символы подстановки и регулярные выражения (LIKE)
Часто, для фильтрации данных, нам нужно будет осуществить выборку не по точному совпадении условия, а по приближенному значению. То есть когда, например, мы ищем товар, название которого соответствует определенному шаблону или содержит определенные символы или слова. Для таких целей в SQL существует оператор LIKE, который ищет приближенные значения. Для конструирования такого шаблона используются метасимволы (специальные символы для поиска части значения), а именно: «знак процента» (%) или звездочка (*), «символ подчеркивания» (_) или «знак вопроса» (?), «квадратные скобки» ([ ]).
1. Метасимвол знак процента (%) или звездочка (*)
Давайте из нашей таблицы, например, отберем записи, относящиеся только к товарам, содержащих в своем названии слово Skis (лыжи). Для этого составим соответствующий шаблон:
SELECT * FROM Sumproduct WHERE Product LIKE ‘*Skis*’
Как видим, СУБД отобрала только те записи, где в колонке Product были товары, содержащие слово Skis. Также отметим, что в данном примере используется метасимвол «звездочка» (*), поскольку СУБД Access не поддерживает «знак процента» (% ) для оператора LIKE.
2. Метасимвол знак подчеркивания (_) или знак (?)
Знак подчеркивания или вопросительный знак применяется для того, чтобы заменить один символ в слове. Давайте в слове Bikes заменим все гласные буквы на «вопросительный знак» (?) и посмотрим на результат:
SELECT * FROM Sumproduct WHERE Product LIKE ‘B?k?s’
Мы использовали метасимвол «вопросительный знак» (?), поскольку СУБД Access не поддерживает «знак подчеркивания» (_) для оператора LIKE.
3. Метасимвол квадратные скобки ([ ])
Метасимвол «квадратные скобки» ([ ]) используется для одновременного указания набора символов, по которым нужно выполнить поиск.
SELECT * FROM Sumproduct WHERE City LIKE ‘[TN]*’
В примере выше, мы отобрали записи, где в поле City названия городов начинаются с буквы T или N. Также, в данном случае, мы можем использовать еще один метасимвол, который выполняет обратное действие. Добавим в наше регулярное выражение восклицательный знак (!), что будет означать «не равно» (для СУБД Access) или знак степени (^) (для других СУБД).
SELECT * FROM Sumproduct WHERE City LIKE ‘[!TN]*’
То есть, последний созданный нами запрос будет читаться как: выбрать все колонки из таблицы Sumproduct и только те записи, где в поле City названия городов не начинаются на буквы T или N. Дополнительно отметим, что набор букв в метасимволе «квадратные скобки» отвечает только за одну позицию в тексте.
Мы можем получить аналогичный результат, если воспользоваться уже известным нам оператором NOT, однако с восклицательным знаком (!) запись будет короче.
Вычисляемые поля
1. Выполнение математических операций
Одним из способов использования расчетных полей является выполнение математических операций над выбранными данными. Предположим, нужно вычислить среднюю цену каждого товара. Для этого нужно переделить колонку Amount (сумма) на Quantity (количество):
SELECT DISTINCT Product, Amount/Quantity FROM Sumproduct
СУБД отобрала все наименования товаров и отобразила их среднюю стоимость в отдельном столбце, который был создан во время выполнения запроса. Также можно заметить, что использовали дополнительный оператор DISTINCT, который нужен для отображения уникальных названий товаров (без него получили бы дублирование записей).
2. Использование псевдонимов
В предыдущем примере рассчитывали среднюю стоимость каждого товара и отобразили значение в расчетном столбце. Однако в дальнейшем, будет неудобно обращаться к этому полю, так как его название является неинформативным (СУБД дала название полю — Expr1001 ). Можно назвать поле самостоятельно, заранее указав его название в запросе, то есть дать псевдоним. Давайте перепишем предыдущий пример и укажем псевдонима для расчетного поля:
SELECT DISTINCT Product, Amount/Quantity AS AvgPrice FROM Sumproduct
Наше расчетное поле получило собственное название AvgPrice. Для этого мы использовали оператор AS, после которого указали необходимое нам название. Стоит отметить, что в SQL поддерживаются только основные математические операции: сложение (+), вычитание (-), умножение (*), деление (/). Также для изменения очередности выполнения операции можно использовать круглые скобки.
Часто псевдонимы используют не только чтобы называть расчетные поля, но и для переименования действующих. Это может быть необходимым, если действующее поле имеет длинное название или название не достаточно информативным.
3. Соединение полей (конкатенация)
Кроме математических операций можно объединять текст и выводить его в отдельном поле. Пример:
SELECT Month + ‘ ‘ + Product AS NewField, Quantity FROM Sumproduct
В этом примере соединили значение в двух столбцах и вывели результат в новое поле NewField.
Функции обработки данных
Как и в большинстве языков программирования, в SQL существуют функции для обработки данных. Стоит отметить, что в отличие от SQL-операторов, функции не стандартизованы для всех видов СУБД, то есть для выполнения одних и тех же операции над данными, разные СУБД имеют свои собственные имена функций. Это означает, что код запроса написан в одной СУБД может не работать в другой, и это нужно учитывать в дальнейшем. Больше всего это касается функций для обработки текстовых значений, преобразования типов данных и манипуляций над датами.
Обычно СУБД поддерживается стандартный набор типов функций, а именно:
Текстовые функции, которые используются для обработки текста (выделение части символов в тексте, определение длины текста, перевод символов в верхний или нижний регистр …)
Числовые функции. Используются для выполнения математических операций над числовыми значениями
Функции даты и времени (осуществляют манипулирования датой и временем, рассчитывают период между датами, проверяют даты на корректность и т.п.)
Статистические функции (для вычисления максимальных /минимальных значений, средних значений, подсчет количества и суммы …)
Системные функции (предоставляют разного рода служебную информацию о СУБД, пользователе и др..).
1. Функции SQL для обработки текста
Реализация SQL в СУБД Access имеет следующие функции для обработки текста:
Знак операции | Значение |
LEFT() | Отбирает символы в тексте слева |
RIGHT() | Отбирает символы в тексте справа |
MID() | Отбирает символы с середины текста |
UCase() | Переводит символы в верхний регистр |
LCase() | Переводит символы в нижний регистр |
LTrim() | Удаляет все пустые символы слева от текста |
RTrim() | Удаляет все пустые символы справа от текста |
Trim() | Удаляет все пустые символы с обеих сторон текста |
Переведем названия товаров в верхний регистр с помощью функции UCase():
SELECT Product, UCase(Product) AS Product_UCase FROM Sumproduct
Выделим первые три символа в тексте с помощью функции LEFT():
SELECT Product, LEFT(Product, 3) AS Product_LEFT FROM Sumproduct
2. Функции SQL для обработки чисел
Функции обработки чисел предназначены для выполнения математических операций над числовыми данными. Эти функции предназначены для алгебраических и геометрических вычислений, поэтому они используются значительно реже функций обработки даты и времени. Однако числовые функции наиболее стандартизированными для всех версий SQL. Давайте взглянем на перечень числовых функций:
Знак операции | Значение |
SQR() | Возвращает корень квадратный указанного числа |
ABS() | Возвращает абсолютное значение числа |
EXP() | Возвращает экспоненту указанного числа |
SIN() | Возвращает синус указанного угла |
COS() | Возвращает косинус указанного угла |
TAN() | Возвращает тангенс указанного угла |
Мы привели лишь несколько основных функций, однако вы всегда можете обратиться к документации вашей СУБД, чтобы увидеть полный перечень функций, которые поддерживаются с их подробным описанием.
Например, напишем запрос для получения корня квадратного для чисел в столбце Amount с помощью функции SQR():
SELECT Amount, SQR(Amount) AS Amount_SQR FROM Sumproduct
3. Функции SQL для обработки даты и времени
Функции манипулирования датой и временем являются одними из важнейших и часто используемых функций SQL. В базах данных значения дат и времени хранятся в специальном формате, поэтому их невозможно использовать напрямую без дополнительной обработки. Каждая СУБД имеет свой набор функций для обработки дат, что, к сожалению, не позволяет переносить их на другие платформы и реализации SQL.
Список некоторых функций для обработки даты и времени в СУБД Access:
Знак операции | Значение |
DatePart() | Возвращает часть даты: год, квартал, месяц, неделя, день, час, минуты, секунды |
Year(), Month() | Возвращает год и месяц соответственно |
Hour(), Minute(), Second() | Возвращает час, минуты и секунды указанной даты |
WeekdayName() | Возвращает название дня недели |
Посмотрим на примере как работает функция DatePart():
SELECT Date1, DatePart(«m», Date1) AS Month1 FROM Sumproduct
Функция DatePart () имеет дополнительный параметр, который нам позволяет отобразить необходимую часть даты. В примере мы использовали параметр «m» , который отображает номер месяца (таким же образом мы можем отразить год — «yyyy» , квартал — «q «, день — » d «, неделю — » w «, час — » h «, минуты — «n» , секунды — «s» и т.д.).
4. Статистические функции SQL
Статистические функции помогают нам получить готовые данные без их выборки. SQL-запросы с этими функциями часто используются для анализа и создания различных отчетов. Примером таких выборок может быть: определение количества строк в таблице, получение суммы значений по определенному полю, поиск наибольшего /наименьшего или среднего значения в указанном столбце таблицы. Также отметим, что статистические функции поддерживаются всеми СУБД без особых изменений в написании.
Список статистических функций в СУБД Access:
Знак операции | Значение |
COUNT() | Возвращает число строк в таблице или столбце |
SUM() | Возвращает сумму значений в столбце |
MIN() | Возвращает наименьшее значение в столбце |
MAX() | Возвращает наибольшее значение в столбце |
AVG() | Возвращает среднее значение в столбце |
SELECT COUNT(*) AS Count1 FROM Sumproduct — возвращает количество всех строк в таблице
SELECT COUNT(Product) AS Count2 FROM Sumproduct — возвращает количество всех непустых строк в поле Product
SELECT SUM(Quantity) AS Sum1 FROM Sumproduct WHERE Month = ‘April’
SELECT SUM(Quantity*Amount) AS Sum2 FROM Sumproduct
SELECT MIN(Amount) AS Min1 FROM Sumproduct
SELECT MAX(Amount) AS Max1 FROM Sumproduct
SELECT AVG(Amount) AS Avg1 FROM Sumproduct
Группировка данных (GROUP BY)
1. Создание групп (GROUP BY)
Группы создаются с помощью предложения GROUP BY оператора SELECT. Рассмотрим на примере.
SELECT Product, SUM(Quantity) AS Product_num FROM Sumproduct GROUP BY Product
Данным запросом мы извлекли информацию о количестве реализованной продукции в каждом месяце. Оператор SELECT приказывает вывести два столбца Product — название продукта и Product_num — расчетное поле, которое мы создали для отображения количества реализованной продукции (формула поля SUM (Quantity)). Предложение GROUP BY указывает СУБД сгруппировать данные по столбцу Product. Стоит также отметить, что GROUP BY должен идти после предложения WHERE и перед ORDER BY.
2. Фильтрующие группы (HAVING)
Так же, как мы фильтровали строки в таблице, мы можем осуществлять фильтрацию по сгруппированным данным. Для этого в SQL существует оператор HAVING. Возьмем предыдущий пример и добавим фильтрацию по группам.
SELECT Product, SUM(Quantity) AS Product_num FROM Sumproduct GROUP BY Product HAVING SUM(Quantity)>4000
Видим, что после того, как была посчитана количество реализованного товара в разрезе каждого продукта, СУБД «отсекла» те продукты, которых было реализовано меньше 4000 шт.
Как видим, оператор HAVING очень похож на оператора WHERE , однако между собой они имеют существенное отличие: WHERE фильтрует данные до того, как они будут сгруппированы, а HAVING — осуществляет фильтрацию после группировки. Таким образом, строки, которые были изъяты предложением WHERE НЕ будут включены в группу. Итак, операторы WHERE и HAVING могут использоваться в одном предложении. Рассмотрим пример:
SELECT Product, SUM(Quantity) AS Product_num FROM Sumproduct WHERE Product<>’Skis Long’ GROUP BY Product HAVING SUM(Quantity)>4000
Мы к предыдущему примеру добавили оператор WHERE, где указали товар Skis Long, что в свою очередь повлияло на группирование оператором HAVING. Как результат видим, что товар Skis Long не попал в перечень групп с количеством реализованной продукции больше 4000 шт.
3. Группировка и сортировка
Как и при обычной выборке данных, мы можем сортировать группы после группировки оператором HAVING. Для этого мы можем использовать уже знакомый нам оператор ORDER BY. В данной ситуации его применения аналогичное предыдущим примерам. К примеру:
SELECT Product, SUM(Quantity) AS Product_num FROM Sumproduct GROUP BY Product HAVING SUM(Quantity)>3000 ORDER BY SUM(Quantity)
или просто укажем номер поля по порядку, по которому хотим сортировать:
SELECT Product, SUM(Quantity) AS Product_num FROM Sumproduct GROUP BY Product HAVING SUM(Quantity)>3000 ORDER BY 2
Видим, что для сортировки сводных результатов нам нужно просто прописать предложения с ORDER BY после оператора HAVING. Однако есть один нюанс. СУБД Access не поддерживает сортировку групп по псевдонимами колонок, то есть в нашем примере, чтобы сортировать значения, мы не сможем в конце запроса прописать ORDER BY Product_num .
Подзапросы
До сих пор мы получали данные из базы данных с помощью простых запросов и одного оператора SELECT. Однако, все же, чаще нам нужно будет выбирать данные, соответствующие многим условиям, и здесь не обойтись без расширенных запросов. Для этого в SQL существуют подзапросы или вложенные подзапросы, когда один оператор SELECT вкладывается в другой.
1. Фильтрация с помощью подзапросов
Таблицы баз данных, которые используются в СУБД Access являются реляционными таблицами, т.е. все таблицы можно связать между собой по общим полям. Допустим у нас хранятся данные в двух разных таблицах и нам нужно выбрать данные в одной из них, в зависимости от того, какие данные в другой. Для этого создадим еще одну таблицу в нашей базе данных. Это будет, например, таблица Sellers с информацией об отделах продаж:
Теперь мы имеем две таблицы — Sumproduct и Sellers, которые имеют одинаковое поле City . Предположим, нам нужно посчитать сколько товаров было продано только в Канаде. Сделать это нам помогут подзапросы. Итак, сначала напишем запрос для выборки городов, которые находятся в Канаде:
SELECT City FROM Sellers WHERE Country = ‘Canada’
Теперь передадим эти данные в следующий запрос, который будет выбирать данные из таблицы Sumproduct:
SELECT SUM(Quantity) AS Qty_Canada FROM Sumproduct WHERE City IN (‘Montreal’,’Toronto’)
Также мы можем объединить эти два запроса в один. Таким образом, один запрос, который выводит данные будет главным, а второй запрос, которий передает входные данные, будет вспомогательным (подзапросом). Для вложения подзапроса используем конструкцию WHERE … IN (…), о которой говорилось в разделе Расширенное фильтрование:
SELECT SUM(Quantity) AS Qty_Canada FROM Sumproduct WHERE City IN (SELECT City FROM Sellers WHERE Country = ‘Canada’)
Видим, что мы получили аналогичные данные, как и с помощью двух отдельных запросов. Таким же образом, мы можем увеличивать глубину вложенности запросов, вкладывая подзапросы сколько угодно раз.
2. Использование подзапросов в качестве расчетных полей
Мы также можем использовать подзапросы в качестве расчетных полей. Отразим, например, количество реализованной продукции по каждому продавцу с помощью следующего запроса:
SELECT Seller_name, (SELECT SUM(Quantity) FROM Sumproduct WHERE Sellers.City = Sumproduct.City) AS Qty FROM Sellers
Первый оператор SELECT отражает два столбца — Seller_name и Qty. Поле Qty является расчетным, оно формируется в результате выполнения подзапроса, который взят в круглые скобки. Этот подзапрос выполняется по одному разу для каждой записи в поле Seller_name и в общем будет выполнен четыре раза, поскольку выбрано имена четырех продавцов.
Также в подзапросе, предложение WHERE выполняет функцию объединения, поскольку с помощью WHERE мы соединили две таблицы по полю City, использовав полные названия столбцов (Таблица.Поле).
Объединение таблиц (INNER JOIN)
Наиболее мощной особенностью языка SQL есть возможность сочетать различные таблицы в оперативной памяти СУБД при выполнении запросов. Объединение очень часто используются для анализа данных. Как правило, данные находятся в разных таблицах, что позволяет их более эффективно хранить (поскольку информация НЕ дублируется), упрощает обработку данных и позволяет масштабировать базу данных (возможно добавлять новые таблицы с дополнительной информацией). Таблицы баз данных, которые используются в СУБД Access являются реляционными таблицами, т.е. все таблицы можно связать между собой по общим полям.
1. Создание объединения таблиц
Объединение таблиц очень простая процедура. Нужно указать все таблицы, которые будут включены в объединение и «объяснить» СУБД, как они будут связаны между собой. Объединение делается с помощью слова WHERE, например:
SELECT DISTINCT Seller_name, Product FROM Sellers, Sumproduct WHERE Sellers.City = Sumproduct.City
Соединив две таблицы, мы смогли увидеть какие товары реализует каждый продавец. Рассмотрим код запроса подробнее, поскольку он немного отличается от обычного запроса. Оператор SELECT начинается с указанием столбцов, которые мы хотим вывести, однако эти поля находятся в разных таблицах, предложение FROM содержит две таблицы, которые мы хотим объединить в операторе SELECT, таблицы объединяются с помощью слова WHERE, указывающее столбцы для объединения. Обязательно нужно указывать полное название поля (Таблиця.Поле), поскольку поле City есть в обоих таблицах.
2. Внутреннее объединение
В предыдущем примере для объединения таблиц мы использовали слово WHERE, которое осуществляет проверку на основе эквивалентности двух таблиц. Объединение такого типа называется также "внутренним объединением". Существует также и другой способ объединения таблиц, который явно указывает на тип объединения. Рассмотрим следующий пример:
SELECT DISTINCT Seller_name, Product FROM Sellers INNER JOIN Sumproduct ON Sellers.City = Sumproduct.City
В этом запросе вместо WHERE мы использовали конструкцию INNER JOIN … ON … , которая дала аналогичный результат. Несмотря на то, что объединение с предложением WHERE короче, все же лучше использовать INNER JOIN, поскольку она является более гибкой.
Выборка уникальных данных (SELECT DISTINCT)
Оператор SQL DISTINCT используется для указания на то, что следует работать только с уникальными значениями столбца.
Оператор SQL DISTINCT нашел широкое применение в операторе SQL SELECT, для выборки уникальных значений. Так же используется в агрегатных функциях.
Синтаксис
При выборке:
SELECT DISTINCT поле FROM имя_таблицы WHERE условие
При подсчете:
SELECT COUNT(DISTINCT поле) FROM имя_таблицы WHERE условие
При суммировании:
SELECT SUM(DISTINCT поле) FROM имя_таблицы WHERE условие
"
Комментариев нет:
Отправить комментарий