понимание присоединиться - PullRequest
0 голосов
/ 01 декабря 2010

я смотрю на этот код:

select customers.name
from customers, orders, order_items, books
where customers.customerid = orders.customerid
and orders.orderid = order_items.orderid
and order_items.isbn = books.isbn
and books.title like '%java%';

и мне трудно его понять.

сначала у меня есть 4 таблицы, и код создает динамическую таблицу,
Должен ли я взглянуть на него в другом порядке, чтобы лучше его понять?

Сначала я выбираю customer.name, но только после запуска последнего кода и у меня есть динамическая таблица, верно?

Должен ли я постараться построчно каждые 2 таблицы использовать динамическую таблицу, которая была сделана строкой ранее?

, а также во время создания таблицы все данные из таблицы выполняетнаписано или только то, что я спрашиваю, где?

я не ценю вашу помощь.

Ответы [ 2 ]

3 голосов
/ 02 декабря 2010

Что касается теории, то при запросе нескольких таблиц в попытке объединить все таблицы вычисляется временный перекрестный продукт всех задействованных таблиц. Это будет означать, что общее количество строк будет умножением количества строк в каждой таблице.

На практике, однако, реализация SQL (MySQL в вашем случае) позаботится об эффективном вычислении запроса. путь выполнения запроса вычисляется на основе различных параметров и используется для получения желаемого результата.

Лучшим способом написания вышеприведенного утверждения будет следование новому синтаксису:

SELECT customers.name FROM customers
INNER JOIN orders ON customers.customerid = orders.customerid
INNER JOIN order_items ON orders.orderid = order_items.orderid
INNER JOIN books ON order_items.isbn = books.isbn
WHERE books.title LIKE '%java%'

Читайте больше от здесь по причинам, почему.

0 голосов
/ 02 декабря 2010

Rapid Fire проделал хорошую работу, объяснив аспект «кросс-продукт».Вот несколько дополнительных советов.

Прежде всего: SQL - это не процедурный код.Это запрос.Весь запрос происходит одновременно.Вы должны прочитать весь запрос, чтобы понять все это.Не существует «порядка», в котором вы читаете запросы. Для аналогии X = Y - это то же самое, что и Y = X ... аналогично, вы читаете весь запрос как одну единицу.

Далее, SQLабстрагирует вас от процесса создания таблицы.Попробуйте подумать об этом с математической точки зрения, основанной на реляционной алгебре.То есть таблицы - это отношения (или кортежи) и так далее.Найдите книги CJ Date и прочитайте их.Существует математический язык, на котором был разработан SQL, и изучение которого значительно улучшит вашу способность понимать базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...