58
Глава 3.
Азбука запросов
| 9 |
| 9 |
| 10 |
| 10 |
| 11 |
| 12 |
| 13 |
++
24 rows in set (0.00 sec)
Поскольку у некоторых клиентов по нескольку счетов, один и тот же
ID клиента будет выведен столько раз, сколько счетов имеет клиент.
Но, очевидно, целью данного запроса является
выбор
клиентов, имею
щих счета, а не получение ID клиента
для каждой строки таблицы
ac
count
. Добиться этого можно, поместив ключевое слово
distinct
(от
личный) непосредственно после ключевого слова
select
, как в следую
щем примере:
mysql> SELECT DISTINCT cust_id
> FROM account;
++
| cust_id |
++
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
++
13 rows in set (0.01 sec)
Теперь в результирующем наборе 13 строк, по
одной для каждого кли
ента, а не 24 строки, по одной для каждого счета.
Если не требуется, чтобы сервер удалял дублирующие данные, или вы
уверены, что в результирующем наборе их не будет, вместо
DISTINCT
можно
указать ключевое слово
ALL
(все). Однако ключевое слово
ALL
применяется по умолчанию и в явном указании не нуждается, поэтому
большинство программистов не включает
ALL
в запросы.
Запомните, что формирование набора уникальных значений
требует
сортировки данных, что в случае больших результи
рующих наборов может занять много времени. Не поддавайтесь
Блок from
59
соблазну использовать
DISTINCT
только для того, чтобы гаранти
ровать
отсутствие дублирования; лучше потратьте некоторое
время на осмысление данных, с которыми работаете, чтобы уже
наверняка знать, где дублирование возможно.
Блок from
До сих пор мы рассматривали запросы, в блоках
from
которых была
указана только одна таблица. Хотя большинство
книг по SQL опреде
ляют блок
from
просто как список из одной или более таблиц, мне бы
хотелось расширить это определение следующим образом:
Блок
from
определяет таблицы, используемые запросом, а также средства
связывания таблиц.
Это определение включает две разные, но
взаимосвязанные концеп
ции, которые будут изучены в следующих разделах.
Таблицы
При встрече с термином
table
большинство людей представляют себе
набор взаимосвязанных строк, хранящихся в базе данных. Хотя один
из типов таблиц действительно описывается именно так,
мне бы хоте
лось использовать это слово в более общем значении – избавиться от
любого упоминания о способах хранения данных, сосредоточившись
только на наборе взаимосвязанных строк. Этому свободному определе
нию соответствуют три разных типа таблиц:
Достарыңызбен бөлісу: