Page 141 - 4636
P. 141
7.7 Вибір отриманих рядкі
Конструкцією оператора SELECT, яка може виявитися особливо корисною у веб-додатках,
є LIMIT. Її використовують для вказівки рядків результату, які мають бути повернені. Вона
вимагає визначення двох параметрів: номер початкового рядка і кількості отриманих рядків.
Наступний запит ілюструє застосування LIMIT:
select name
from customers
limit 2, 3;
Цей запит можна інтерпретувати таким чином: “Вибрати імена клієнтів, а потім повернути
3 рядки, починаючи з рядка 2”. Не забувайте, що нумерація починається з нуля.
Ця конструкція дуже зручна для веб-додатків, наприклад, коли покупець переглядає
каталог, і необхідно, щоб на кожній сторінці відображало лише 10 пунктів. Зверніть увагу, що
конструкція LIMIT у стандарті ANSI SQL відсутня. Це розширення MySQL, тому використання
LIMIT призводить до несумісності коду з багатьма СУРБД.
7.8 Використання підзапитів
Підзапит - це запит, вкладений всередину іншого запиту. Хоча більша частина
функціональності - підзапитів може бути реалізована шляхом використання з’єднань і
тимчасових таблиць, підзапити часто легше читати і реалізовувати.
1 Прості підзапити
Найбільш поширеним застосуванням підпорядкованого можна вважати випадок, коли
результат одного запиту використовується в операції порівняння, що знаходиться в іншому
запиті. Наприклад, якщо необхідно знайти замовлення на максимальну суму серед усіх
замовлень, то оператор SELECT може виглядати таким чином:
select customerid,
amount from orderswhere amount = (select max(amount) from orders);
Результат його виконання показаний нижче:
Сustomerid Amount
4 74.98
У цьому випадку підзапит повертає єдине значення (максимальну суму замовлення), яке
потім бере участь у порівнянні в рамках зовнішнього запиту. Це дуже хороший приклад, оскільки
запит подібного роду не може бути елегантно реалізований в ANSI SQL.
Однак той самий висновок і дає запит зі з'єднанням:
select ctistomerid, amount
from ordefs
order by amount desc
limit 1;
Але в силу наявності в даному запиті конструкції LIMIT він не сумісний з більшістю
СУРБД, хоча в MySQL він виконується більш ефективно, ніж варіант з підзапитом.
Одна з головних причин, чому механізм підзапиту так довго не з'являвся в MySQL, полягає
в тому, що існує дуже мало речей, які можна виконувати тільки з їх допомогою. Технічно можна
створити одиночний, сумісний з ANSI SQL запит, який дає той самий ефект, але ґрунтується на
неефективному і хитрому прийомі, який носить назву MAX-CONCAT.
138