Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка SQL(14) (оптимизация).docx
Скачиваний:
62
Добавлен:
17.03.2015
Размер:
452.16 Кб
Скачать

3.2. Примеры запросов с использованием единственной таблицы.

3.2.1. Выборка без использования фразы where.

3.2.1.1. Простейшие примеры.

Пример 1.

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

SELECT Продукт, Белки, Жиры, Углеводы

FROM Продукты;

дает результат

Результат

Продукт

Белки

Жиры

Углеводы

Говядина

189

124

NULL

Судак

190

80

NULL

Масло

60

825

90

Майонез

31

670

26

Яйца

127

115

7

Кофе

127

36

9

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

SELECT ID_продукта, Продукт, Белки, Жиры, Углеводы, К, Са, Na, В2, РР, С

FROM Продукты;

или использовать его более короткую нотацию:

SELECT *

Результат

Основа

Кофе

Крупа

Молок

Мясо

Овощи

Рыба

Фрукты

Яйца

FROM Продукты;

Результат

Основа

Овощи

Мясо

Овощи

Рыба

Рыба

Мясо

Молоко

Кофе


Пример 2.

Выдать основу всех блюд:

SELECT Основа FROM Блюда;

дает результат, показанный на рис. 3.1 а.

а

б


Рис. 3.1 Простейшие запросы

3.2.1.2. Исключение дубликатов (distinct).

В предыдущем примере был выдан правильный, но не совсем удачный перечень основных продуктов: из него не были исключены дубликаты. Для исключения дубликатов необходимо дополнить запрос ключевым словом DISTINCT (различный, различные):

SELECT DISTINCT Основа

FROM Блюда;

Результат приведен на рис. 3.1 б.

3.2.1.3. Выборка вычисляемых значений.

Пример 3.

Нужно получить значение калорийности всех продуктов. В этом запросе необходимо учесть, что при окислении 1 г углеводов или белков в организме освобождается в среднем 4.1 ккал, а при окислении 1 г жиров - 9.3 ккал:

SELECT Продукт, ((Белки+Углеводы)*4.1+Жиры*9.3) as ккал

FROM Продукты;

Выражение ((Белки+Углеводы)*4.1+Жиры*9.3) не является полем базовой таблицы, а следовательно, не имеет имени. Использование псевдонима позволяет именовать результирующий столбец (рисунок 3.2 а).

Фраза SELECT может включать не только выражения, но и отдельные числовые или текстовые константы. Следует отметить, что текстовые константы должны заключаться в апострофы (') (рисунок 3.2 б).

SELECT Продукт, 'Калорий =', ((Белки+Углеводы)*4.1+Жиры *9.3)

FROM Продукты;

Результат

Продукт

ккал

Говядина

NULL

Судак

NULL

Масло

8287,5

Майонез

6464,7

Яйца

1618,9

Сметана

3011,4

Кофе

892,4

Результат

Продукт

Говядина

Калорий =

NULL

Судак

Калорий =

NULL

Масло

Калорий =

8287,5

Майонез

Калорий =

6464,7

Яйца

Калорий =

1618,9

Сметана

Калорий =

3011,4

Кофе

Калорий =

892,4


а б

Рис.3.2. Примеры запросов с вычисляемыми полями

3.2.1.4. NULL-значения в выражениях.

В некоторых ячейках результата стоит NULL. Почему?

Как правило, применение NULL-значения в выражении приводит к результату, равному NULL. Например, SELECT (5+NULL) вернет NULL, а не 5. Как и в случае простых выражений, при передаче большинству функций NULL-значений результатом будет NULL. Исключение составляют функции, специально предназначенные для работы с неопределенными значениями.

ISNULL (<проверяемое поле>,< значение, если проверяемое поле равно NULL>)

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

Результат

Продукт

Говядина

1928,1

Судак

1523

Масло

8287,5

Майонез

6464,7

Яйца

1618,9

Сметана

3011,4

Кофе

892,4

SELECT Продукт,

( ISNULL(Белки,0)+ISNULL(Углеводы,0))*4.1

+ISNULL(Жиры,0) *9.3

FROM Продукты;