Как мы уже убедились, с помощью языка SQL можно создавать запросы, позволяющие извлечь данные из нескольких таблиц. Одна из возможностей сделать это заключается в связывании таблиц по одному или нескольким полям. Обратите внимание на то, что без связывания таблиц в результате запроса получится набор данных, содержащий все возможные комбинации строк каждой из исходных таблиц (известные также как декартово произведение):
SELECT ProductName, CategoryName FROM Products, Categories
В то время как запрос, показанный ниже, приводит к отображению списка продуктов с указанием, к какой категории принадлежит данный продукт:
SELECT ProductName, CategoryName
FROM Products, Categories
WHERE Products.CategorylD = Categories.CategorylD
Для наглядности можно сравнить результаты этих двух запросов.
В общем случае синтаксис для связывания таблиц имеет вид:
SELECT column-list
FROMtable1,table2
WHERE table! .column 1=table2.column2
Для вычисления суммарных значений на основе данных одной или нескольких таблиц можно использовать предложение GROUP BY:
GROUP BY {поле1} [,...]
Например, следующий запрос связывает две таблицы, сортирует их по полю CustomerlD, для каждого значения CustomerlD создает одну строку в результирующем наборе данных и вычисляет количество значений поля OrderlD для каждого значения CustomerlD:
SELECT Customers.CustomerlD,
COUNT (Orders. OrderlD) AS OrdersCount
FROM Customers INNER JOIN Orders
ON Customers.CustomerlD = Orders.CustomerlD
GROUP BY Customers.CustomerlD
ORDER BY OrdersCount DESC
В приведенном выше примере запроса мы использовали в предложении SELECT агрегатную функцию COUNT, вычисляющую количество значений.
Помимо перечисленных выше агрегатных функций можно использовать также математические и строковые функции, приведенные ниже:
Avg - Вычисляет среднее
Count - Вычисляет количество непустых значений в данной колонке
Max - Вычисляет наибольшее значение в колонке
Min - Вычисляет наименьшее значение в колонке
Sum - Вычисляет сумму значений в колонке
Математические и строковые функции SQL:
ABS
Возвращает абсолютное значение числа
CEIL
Округляет дробное число
FLOOR
Удаляет дробную часть числа
GREATEST
Возвращает наибольшее из двух значений.
LEAST
Возвращает наименьшее из двух значений.
MOD
Возвращает остаток от деления одного числа на другое
POWER
Возвращает значение, равное одному числу в степени.
ROUND
Округляет число с точностью до указанного десятичного знака
SIGN
Возвращает -1, если число отрицательное, и 1, если положительное
SQRT
Квадратный корень
LEFT
Возвращает указанное число знаков строки, начиная слева.
RIGHT
Возвращает указанное число знаков строки, начиная справа
UPPER
Заменяет все буквы в строке на прописные
LOWER
Заменяет все буквы в строке на строчные
INITCAP
Расставляет заглавные буквы в начале слов в строке
LENGTH
Вычисляет число символов в строке
LPAD
Добавляет указанный символ в левую часть строки в количестве, необходимом для того, чтобы строка имела заданную длину
RPAD
Добавляет указанный символ в правую часть строки в количестве, необходимом для того, чтобы строка имела заданную длину
SUBSTR
Извлекает подстроку нужной длины из строки, начиная с номера указанной позиции