ПредишенСледващото

Предистория материали по основните програмни езици и оформление на сайтове.

Готов техника за създаване на прости и сложни динамични уебсайтове с PHP и MySQL.

разработване на уеб сайтове в "ключ".

Развитие на отделните фрагменти обекти, съвети за оформлението на уеб страници и уеб програмиране.

уеб инструмент

уеб магазин

Уеб услуги

Уеб графика

уеб ресурси

Извличане на данни от множество таблици

Искаш ли да сме в крак с развитието, което е на сайта? Регистрация за получаване на последните новини и статии.

Погледнете на Google

Извличане на данни от множество таблици

Извличане на данни от множество таблици

Тези данни се съхраняват в различни таблици, тъй като те се отнасят за различни реални обекти. Това е един от принципите на доброто проектиране на база данни.

Въпреки, че на пръв поглед операция връзка е съвсем проста, в действителност това е един от най-сложните и деликатни аспекти на SQL. Няколко различни видове съединения, всяка предназначени за определена цел се осъществява в MySQL.

А просто свързване на две маси

Нека да започнем с търсене на Владимир Сидоров:

MySQL> изберете orders.orderid, orders.amount, orders.date
-> От клиенти, поръчки
-> Къде customers.name = 'Владимир Сидоров "
-> И клиенти. CustomerId = orders.customerid;

Резултатът е:

Там трябва да спомена няколко точки.

Обява на двете таблици, можете също така да определите типа на връзката, може би без дори да го осъзнават. Запетая маси между имена еквивалентни конструкции ВЪТРЕШЕН JOIN (вътрешно свързване), или CROSS JOIN (кръстосано свързване). Този тип връзка се нарича пълен съединение или декартови маси продукта. Това означава следното :. "Марк каза маси и да ги направи в един голям Голяма маса трябва да съдържа един ред за всяка възможна комбинация от споменатите редове на всяка маса в списъка, независимо от това дали те имат смисъл, или не." С други думи, ние получаваме една маса, в която всеки ред на таблицата клиент sopostovlyat нареждания за всеки ред на таблицата, без значение каква поръчки са направени от конкретни клиенти.

В повечето случаи, такава комбинация не прави много смисъл. Като правило, ние се нуждаем линии, които са наистина едни и същи, т.е. когато конкретни поръчки отговарят на клиенти, които са били направени.

Това се постига чрез поставяне на структурата в WHERE присъединят условия. Това е специален вид на условен израз, който обяснява кои атрибути отрази на отношенията между двете таблици. В този случай, състоянието ни в тази връзка са:

и клиенти. CustomerId = orders.customerid

MySQL, че инструктира да се сложи масата за резултат само тези редове, за които CustomerId от таблицата с клиентите съвпада с CustomerId на поръчки маса.

Да го превърнем в състояние за заявката, тогава ние, всъщност, получи различен тип връзка -връзка за равенство.

Обърнете внимание на нотацията точка, която сме свикнали да се изяснят определена графа на конкретна таблица. По този начин, customers.customerid отнася до колона от таблица CustomerID Клиентите, а orders.customerid - CustomerId на колона на поръчки маса.

нотация точка се изисква, когато имената на колоните са двусмислени, какво ще се случи, ако се появи със същото име в няколко таблици.

Както може да се използва за разграничаване имена разширение на колони от различни бази данни. В нашия пример тя се появява като обозначение table.column (table.column). Можете да зададете различен начин - database.table.column (baza_dannyh.tablitsa.stolbets), например, за да проверите за условия, като:

От друга страна, нотация точка може да се използва за всички препратки към колоните в запитването. Това често се премахва главоболието, особено когато исканията стават все по-сложни. MySQL не изисква, но е полезно да се четат заявки - това не е толкова лошо. Ако забележите, че ще се придържат към този принцип във всички наши примери, да се вземат най-малко, че такова състояние:

клиенти. име = "Владимир Сидоров"

колона име присъства само в таблицата с клиентите си, така че не е необходимо да се уточни, но, но, като цяло, е разбираемо.

Съединение с три или повече таблици

Съединение голям брой маси не е сложно, свързваща две маси. Основното правило е - трябва да сдвоите на масата, като се имат предвид условията за сдружаване. Това може да бъде представен като взаимоотношения между масите във всяка такава двойка.

Например, ако искате да разберете кой клиент поръча книга за развитието на уеб сайтове, използвайки PHP и MySQL, трябва да следите на тези отношения в рамките на малък брой таблици.

Вие ще трябва да се намерят клиенти, които са направили най-малко един ред, съдържащ съответните order_items книгата на проектиране на уеб сайт с помощта на PHP и MySQL. От Таблица sustomers преместени в поръчки маса използване CustomerId, както и в предишни случаи. поръчки от таблицата в order_items маса, използващи OrderID. От order_items - в таблицата за книги с желаната книга, Ръководейки номер ISBN. След като бъдат установени всички връзки, може да поискаме една книга с думата "Дизайн" в заглавието и да получите резултат от имена на клиенти, които са закупили някой от тези книги.

Нека да разгледаме искането, изпълнявайки следните стъпки:

MySQL> изберете customers.name
-> От клиенти, поръчки, order_items, книги
-> Когато customers.customerid = orders.customerid
-> И orders.orderid = order_items.orderid
-> И order_items.isbn = books.isbn
-> И books.title като "% Разработване%";

Тази заявка връща следния резултат:

Моля, имайте предвид, че данните са били проследени от четири различни таблици, както и да правят това с комбинация от собствен капитал, отне три различни условия на сдружението. Обикновено, всяка двойка маси изисква един присъединят състояние, по този начин броя на комбинация от условия е по-малко от броя присъедини таблици. Това правило може да бъде полезна за отстраняване на грешки на заявки, че работата е нестабилна. Проверете свързванията и условия, се уверете, че можете винаги да следва планираното пътя, от това, което вече знаем - факта, че трябва да знаете.

Търсене на линии за данни

Друг често срещан тип връзка в Mysql - лява връзка.

В предишните примери са избрани само тези редове, в които е имало кореспонденция между масите. Но може да се наложи и реда, при които линията липсва. Например, вие трябва да намерите клиенти, които не са направили една поръчка, или книги, които правят никой не нареди.

Най-простият отговор на този въпрос в лявата Mysql включва използването на съединението, в което се търси струни конкретно условие на свързване на две маси. Ако дясната страна на споменатата таблица няма подходящи линия добавен в резултат на линията с нулеви стойности в съответните колони.

MySQL> изберете клиенти. CustomerId, customers.name, поръчки. OrderID
-> От клиентите напуснали присъединят поръчки
-> На customers.customerid = поръчки. CustomerId;

Това SQL заявка за търсене са връзката лявата за клиентите поръчки и таблици. Нейният синтаксис във връзка с условията за свързване малко по-различни. Условия съединение е посочено в специална конструкция на.

Ето резултатите от търсенето:

Резултатът показва, че не съответстваща Алексеева Иван zakza поле идентификатор OrderID защото стойността му е NULL.

Ако искате да намерите само онези клиенти, които не си поръчат, това може да се постигне чрез извършване на проверките за стойност NULL в първичния ключ на дясната таблица (в този случай OrderID)? тъй като линии с реални стойности не могат да съдържат NULL стойност:

MySQL> изберете клиенти. CustomerId, клиенти. име
-> От клиентите напуснали присъединят поръчки
-> Използване на (CustomerId)
-> Къде поръчки. OrderID е NULL;

резултатите за заявките е както следва:

Вероятно сте забелязали, че в този пример сме използвали малко по-различен синтаксис на състоянието на присъединят. Лява ръка връзка подкрепя ON синтаксис, който е използван в първия пример, както и използването на синтаксиса, който е бил използван във втория. ИЗПОЛЗВАНЕ синтаксис не е предназначен да покаже на масата, откъдето се доставя атрибут на връзката, така че тя да може да се използва, колоните на всяка маса трябва да имат едно и също име.

Използването на други имена на таблици: прякори

Често това е много удобно, а понякога е нужен достъп маси под различно име. Тези имена са наречени псевдонимите (aliase). Те могат да бъдат създадени в началото на заявката, след което използвайте, ако е необходимо. Псевдоними са много удобни, той е същият като работния плот пряк. Обърнете внимание, че изглежда като доста продължителна проверка, ние се счита по-рано, пренаписана, използвайки псевдоними:

MySQL> изберете c.name
-> От клиентите, като в, поръчки като о, order_items като Ой, книги като б
-> Когато c.customerid = o.customerid
-> И o.orderid = oi.orderid
-> И ой. ISBN = b.isbn
-> И b.title като "% Разработване%";

За да се определи таблица псевдоним се използва за конструиране на AS. В допълнение, псевдоними могат да бъдат дадени за колони, но ние ще се върнат към това, след като ние считаме общи функции.

Таблични псевдоними, необходими в случай на сдружение самата маса. Това звучи много по-заплашително и мистична, отколкото е всъщност. И този подход е много полезна за намиране на редове в същата таблица, в която има и други ценности, които изискваме. Ако искате да намерите на клиентите, които живеят в един град, например, да се създаде клуб на читателя, може да се възлага на една и съща маса (sustomers) две различни псевдоними:

MySQL> изберете c1.name, c2. име, С1. град
-> От клиенти като С1, С2 клиенти
-> Къде С1. град = c2. град
-> И c1.name = c2.name !;

Ние се преструваме, че клиентите в таблицата са две различни таблици C1 и C2, както и извършване на техния съюз чрез колонна град. Второто условие, c1.name! = C2.name, е необходимо да се избегне съвпадение самия клиент.

Обобщение на типове връзки

В таблицата са изброени различните видове съединения обсъдени по-горе. Има и няколко други видове, обаче, са изброени в таблица съединение се използват най-често.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!