SQL запити вибірки даних з таблиць (SELECT) (perl example sql select mysql)
Ключові слова:perl, example, sql, select, mysql, (знайти схожі документи)
Date: Thu, 20 Jul 2000 17:13:33 +0400 (MSD) From: MailList: Perl у прикладах Subject: SQL запити вибірки даних із таблиць (SELECT)
Запити вибірки даних із таблиць
У цій статті розглянуто запити типу SELECT, синаксис цих запитів, а також синтаксис операції JOIN в MySQL.
Загальний вигляд запиту SELECT такий:
SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [HIGH_PRIORITY] [DISTINCT DISTINCTROW ALL] пошук поля. [INTO 'file_name' export_options] [FROM список_таблиць [WHERE умовний_вираз] [GROUP BY список_полів] [HAVING умовний_вираз] [ORDER BY [ASC DESC] . ] [LIMIT [відступ,] кількість_рядків] [PROCEDURE назва_процедури] ]
де у квадратні дужки взяті ті параметри/інструкції/розділи, які є необов'язковими. SELECT-запити служать для отримання даних з таблиць за заданими критеріями. Також запити SELECT можуть використовуватися для обчислення без доступу до даних:
SELECT 1+1; (виведе 2)
Всі елементи запиту повинні бути представлені у запиті саме в такому порядку, в якому вони перераховані вище.
Ось основні зауваження щодо побудови запитів SELECT.
Шуканий вираз можна призначити псеводним (alias). Цей псевдонім буде використовуватися в назві колонки в представленні результату та в розділах ORDER BY і HAVING.
SELECT person, MAX(items) as maximum FROM persons GROUP BY person ORDER BY maximum
Можна також задавати псевдоніми для таблиць. Це досить кориснопід час операції JOIN (див. нижче).
SELECT * FROM table1 як a, table2 як b WHERE a.field_name = b.field_name
У розділах ORDER BY і GROUP BY можливе використання не тільки назв таблиць, але і їх псевдонімів (alias) або їх порядкових номерів у перерахуванні їх у розділі FROM. Для завдання напряму сортування за допомогою ORDER BY використовуються інструкції ASC (у порядку зростання) та DESC (у порядку зменшення).
SELECT person, MAX(items) as maximum FROM persons GROUP BY person ORDER BY maximum DESC
Не слід плутати конструкції WHERE та HAVING. Друга використовується як правило для накладання умови на значення, отримані обчисленням агрегатних функцій (MAX, SUM тощо), у той час як умови щодо значень полів слід вказувати в розділі WHERE. SELECT * FROM table_name HAVING field_name = value
слід писати як SELECT * FROM table_name WHERE field_name = value
Інструкція HIGH_PRIORITY забезпечує запиту пріоритет, вищий порівняно із запитами на зміну таблиці, і буде виконаний, навіть якщо в черзі на заблоковану читання таблицю стоїть такий запит. Інструкція SQL_BIG_RESULT вказує MySQL, що результат виконання запиту включає велику кількість рядків, що примушує MySQL використовувати для нього тимчасові таблиці, розташовані на жорсткому диску. Це корисно у запитах, які використовують GROUP BY і DISTINCT, оскільки в таких ситуаціях MySQL зробить сортування результату замість того, щоб створювати таблицю з необхідним у GROUP BY (DISTINCT) ключем. Інструкція SQL_BUFFER_RESULT вказує MySQL, що результат слід розмістити в тимчасових таблицях, що допоможе MySQL швидко зняти блокування з таблиць і працюватибільш ефективно у випадках, коли повернення результату може займати багато часу. SQL_SMALL_RESULT вказує на те, що набір , що повертається, включає невелику кількість даних, тобто MySQL слід використовувати швидкі тимчасові тиблиці замість того, щоб проробляти сортування даних. STRAIGHT_JOIN вказує на те, що таблиці мають бути об'єднані в тому порядку, в якому вони перераховані. Це прискорює виконання запитів у випадках, коли оптимізатор MySQL виконує об'єднання неоптимальним чином. Розділ LIMIT використовується для того, щоб обмежити кількість динних, що повертаються.
SELECT * FROM table_name LIMIT 5, 10;
Цей запит виведе рядки результату з 6 по 15 (параметр відступ відраховується з нуля). За замовчуванням відступ дорівнює 0.
SELECT * FROM table_name LIMIT 10;
В результаті виконання запиту SELECT. INTO OUTFILE 'назва_файлу' повертаються дані будуть записані у вказаний файл. Для виконання таких запитів необхідно, щоб не було файлу з таким ім'ям, крім того необхідні права на створення і запис у файл. MySQL підтримує кілька видів операції JOIN - об'єднання таблиць. Ось як може виглядати розділ FROM:
table_reference, table_reference table_reference [CROSS] JOIN table_reference table_reference INNER JOIN table_reference table_reference STRAIGHT_JOIN table_reference table_reference LEFT [OUTER] JOIN table_reference ON conditional_exp (column_list ) table_reference NATURAL LEFT [OUTER] JOIN table_reference
де table_reference - це опис таблиці (її ім'я, можливе з псевдонімом та ін.). При вказівці псевдоніма (alias) таблиціприсутність AS необов'язково. INNER JOIN і кома виконують одну і ту ж дію - повне об'єднання зазначених таблиць. Умова ON - це умова в тій формі, в якій умови можуть зустрічатися в розділі WHERE. Якщо при використанні LEFT JOIN у правій таблиці не знайдено жодного відповідного рядка, замість цієї таблиці використовується рядок з усіма значеннями встановленими в NULL. Інструкція USING показує на поля, які повинні бути присутніми в обох таблицях.
A LEFT JOIN B USING (C1, C2, C3.) це те саме, що й
A.C1=B.C1 AND A.C2=B.C2 AND A.C3=B.C3.
Використання NATURAL LEFT JOIN еквівалентно спільному використання LEFT JOIN та USING. STRAIGHT_JOIN виконує те саме, що й JOIN, за виключенням того, що в даному випадку ліва таблиця завжди зчитується перед правою. Це допомагає усунути помилки в порядку вибору таблиць оптимізатором.
SELECT * FROM table1,table2 WHERE table1. > SELECT * FROM table1 LEFT JOIN table2 ON table1. > SELECT * FROM table1 LEFT JOIN table2 USING (id); SELECT * FROM table1 LEFT JOIN table2 ON table1. > LEFT JOIN table3 ON table2. > SELECT * FROM table1 USE INDEX (key1,key2) WHERE key1=1 AND key2=2 AND key3=3; SELECT * FROM table1 IGNORE INDEX (key3) WHERE key1=1 AND key2=2 AND key3=3;
--------------------------------------------------- ------------ Цю та інші статті можна прочитати на http://pl.agava.ru ---------------- ------------------------------------------- У нашому форумі ( http://pl.agava.ru/cgi-bin/forum/config.pl) Ви можете отримати відповіді на питання, що цікавлять Вас по темі Perl, CGI і баз даних.
Тут Ви можете розміщувати свої резюме, пропозиції про співробітництво, інформацію про вакансіїдля web програмістів та дизайнерів. --------------------------------------------------- ------------