Page 134 - 4636
P. 134
Три останні рядки табл. 7.1 містять операції LIKE і REGEXP. Це форми перевірки
відповідності шаблону.
Операція LIKE використовує зіставлення з SQL-шаблоном. Шаблони можуть містити
звичайний текст, а також груповий символ % (знак відсотка), що означає відповідність з будь-
якою кількістю символів, і _ (символ підкреслення), що означає відповідність з одним символом.
Ключове слово REGEXP служить для співставлення з регулярними виразами. У MySQL
використовуються регулярні вирази в стилі POSIX. Замість REGEXP можна застосовувати також
ключове слово RLIKE, є його синонімом.
Регулярні вирази POSIX також наявні і в РНР. Можна перевіряти кілька критеріїв відразу з
використанням простих операцій і синтаксису зіставлення з шаблоном, після чого комбінувати їх
у більш складні критерії за допомогою операцій AND і OR. Наприклад:
select * from orders
where customerid = 3 or customerid = 4;
2 Відбірданих з декількох таблиць
Часто для отримання відповіді від бази даних можуть знадобитися дані з декількох таблиць.
Наприклад, якщо необхідно дізнатися, хто з клієнтів зробив замовлення протягом даного місяця,
доведеться переглянути таблиці customers і orders. Якщо потрібно дізнатися, що конкретно вони
замовили, доведеться переглянути і таблицюorder_iterns.
Ці дані зберігаються в різних таблицях, оскільки відносяться до різних реальним об'єктам.
Це один з принципів правильної структури бази даних.
Для отримання інформації подібного роду в SQL необхідно виконати операцію, звану
сполукою (join). З'єднання виконується для двох і більше таблиць відповідно до відносин між
даними. Якщо, наприклад, необхідно подивитися, які замовлення зробила клієнтка Саша
Валентей, спочатку потрібно переглянути таблицю customers і знайти в ній ідентифікатор клієнта
Саші (тобто customerid), а потім - таблицю orders на предмет замовлень, зроблених клієнтом з
даним ідентифікатором customerid.
Хоча на перший погляд операція з'єднання досить проста, насправді це один з найбільш
складних і тонких аспектів SQL. У MySQL реалізовано кілька різних типів з'єднання, кожен з
яких призначений для певних цілей.
7.3 Об'єднання таблиць
1 Просте об'єднання двох таблиць
Почнемо з пошуку замовлень, виконаних Славою Моргуновим:
select orders.orderid, orders.amount, orders.date
from customers, orders
where customers.name = 'СлаваМоргунов'
and customers.customerid = orders.customerid;
Результат запиту будет таким:
Orderid amount Date
1 69.98 2008-04-02
4 24.99 2008-05-01
Тут слід було б відзначити декілька моментів.
По-перше, для відповіді на цей запит необхідна інформація з двох таблиць, по-цьому
потрібно вказати обидві.
Вказавши дві таблиці, ви вказуєте тип з'єднання, можливо, навіть не знаючи його. Кома між
назвами таблиць еквівалентна конструкцій INNERJOIN (внутрішнє з'єднання) або CROSSJOIN
131