^vw
v .
Рис
. 5
song
perform er
album
Angie’s Heart
Modem Talking
Back For Good
All I W ant
La Bouche
Noname
Save Me
Morandi
rform er
album
r
V
. ;
\v’
' V
:-:
11
Angie's Heart
Modern Talking
Back For Good
Noname
il l W ant
La Bouche
itfn
tfl.
..
.І.
і n .^ 'г.Ж
гг
і .
.r
ir
0
r
m
i
M
7
&
со un i f )
sum (fil
3
24805317
декса. Так, если мы сортируем результат по полю
song, то нам будет необходим
индекс
на таблицу
mp3 по полю title.
В данном случае, разумеется (ведь всего три за-
писи
в таблице),
индекс
не
нужен.
Однако,
если
количество
записей
будет исчисляться сотнями и тыся-
чами, без индекса такие записи бу-
дут серьёзно тормозить.
Результат
можно
тоже
ограни-
чить количеством строк. Действи-
тельно,
если у нас в архиве будет
несколько
тысяч
файлов,
то
не
имеет
смысла
просматривать
их
все. Для ограничения количества строк применя-
ется ключевое слово LIMIT.
Допустим, что необходимо увидеть лишь 2 строки
с предыдущего результата. Запрос будет таким:
SELECT mp3.title AS song, performer.name AS per-
former, album.title AS album
I
FROM mp3, performer, album
WHERE mp3.albumJd=album.id AND
_
____
mp3. perf_id=perf orme r. id
ORDER BY трЗ.уеаг
LIMIT 2
!:U
.V:
Результат - на
рис. 6.
Иногда
необходимо
просмот-
реть строки результата не с са-
мой
первой
строки,
а
несколько
дальше.
Что-то
вроде просмотра результата по страницам с опре-
делённым количеством видимых строк.
Так, если выводим строки по страницам, и не-
обходимо вывести строки, скажем, с 10-й по 20-
ю,
то
в
этом
случае
к
слову
LIMIT добавляется
ещё один параметр:
SELECT mp3.title AS song, performer.name AS per-
former, album.title AS album
¥
:
I
FROM mp3, performer, album
î
WHERE mp3.album_id=album.id AND
>
mp3.perf_id=performer.id
ORDER BY трЗ.уеаг
LIMIT 2, 3
Э
тот
запрос
выведет
одну
строку,
пропустив две первых
(рис. 7).
До сих пор мы рассматривали выборку из табли-
цы по строкам, т.е. каждая строка результата отно-
силась к какой-то записи таблицы. Однако не редко
возникает необходимость получить какую-то сум-
марную информацию по строкам, например, сумму
значений некоторого поля.
Или минимальное, максимальное или среднее
значение поля.
Или количество строк, удовлет-
воряющих условию запроса. Такие операции на-
зываются
группированием.
Для
этого
предна-
значены функции SQL, имеющие название
агре-
гатных
(aggregate).
^
Наиболее
простая
агрегатная
функция
-
это
count().
Она возвращает количество строк. В обра-
щении она проста:
N3XT
song
perform er
album
Save M e
Morandi
N3XT
SELECT count(*) FROM mp3
Попробуйте самостоятельно выпол-
нить этот запрос, и вы убедитесь, что
результатом
будет
количество
запи-
сей в таблице mp3.
Конечно,
к этому
запросу
можно
добавлять
условия.
Например, чтобы подсчитать количес-
тво записей в mp3 для песен, которые
датированы ранее 2007, пишем:
SELECT count(*)
FROM
mp3 WHERE
! year<2007
Следующая
агрегатная
функция
-
это
sum().
Она
возвращает
сумму
значений
поля.
Напри-
мер, чтобы подсчитать сумму размеров файлов в
таблице mp3, пишем:
SELECT sum(filesize) FROM mp3
Л
Конечно, к такому запросу можно добавить усло-
вие WHERE.
Аналогичным образом пользуемся фун-
кциями
m in()
- минимальное значение по-
ля,
тах()
- максимальное значение,
avg()
- среднее значение. Допуска-
ется
использование
сразу не-
скольких функций в запросах и
а г)
max(year)
avg(filesize)
..
1998
2007
8268439.0000
по разным полям, например:
SELECT count(*), sum(filesize), min(year),
max(year), avg(filesize)
FROM mp3
P
i
Î :
»Sk
Save Me
fllesifce
perform er
10967632
Morandi
Angie’s Heart
4249079
Modem Talking
W
'
?
..
All I Want
9688606
La Bouche
Получим результат, как на
рис. 8.
Группировать строки можно как по всей таблице,
что мы и проделали, так и по некоторому полю. Для
этого существует ключевое слово GROUP. Напри-
мер, надо выбрать сумму размеров файлов для пе-
сен по каждому исполнителю.
Сначала
я
покажу
запрос,
который
выбирает песню с названием исполни-
теля и размером. Как построить такой
запрос, должно быть уже понятно:
SELECT mp3.title AS song, mp3.file-
size AS filesize,
!
performer.name AS performer
FROM mp3, performer
WHERE mp3.perfJd=performer.id
L(vt >
-•
:>
>?vsi
- ft ■■
Получим
рис. 9.
Теперь нам следует сгруппировать эти песни по
имени
исполнителя
(performer).
Разумеется,
что
название
песни тут не будет иметь значения,
по-
скольку в группе их будет несколько, а размер фай-
ла будем суммировать:
>v" ,
предыдущая страница 30 Компьютер 2011 06 читать онлайн следующая страница 32 Компьютер 2011 06 читать онлайн Домой Выключить/включить текст