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
   136   137   138   139   140   141   142   143   144   145   146