im, глядя на этот код:
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 таблицы, а код создает динамическую таблицу,
должен ли я смотреть на него по-другому, чтобы лучше понять его?
во-первых, im выбирая customer.name, но только после того, как последний код запущен, и у меня есть моя динамическая таблица, верно?
Должен ли я попытаться выровнять каждую 2 таблицы по строкам, используя динамическую таблицу, которая была сделана ранее?
а также во время создания таблицы записываются все данные из таблицы или только то, что я спрашиваю в том, где?
плохо оцените свою помощь.
Что касается теории, когда вы запрашиваете несколько таблиц при попытке присоединиться ко всей таблице, вычисляется временный кросс-продукт всех задействованных таблиц. Это означало бы, что общее число строк будет умножением числа строк каждой таблицы.
Однако на практике реализация 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%'
Подробнее читайте здесь по причинам.
Rapid Fire проделала хорошую работу, объясняя аспект "кросс-продукта". Вот несколько дополнительных советов.
В первую очередь: SQL не является процедурным кодом. Его запрос. Весь запрос выполняется одновременно. Вам нужно прочитать весь запрос, чтобы понять все это. Нет никакого "порядка", в котором вы читаете запросы. Для аналогии X = Y совпадает с Y = X... аналогично, вы читаете весь запрос как единое целое.
Затем SQL абстрагирует вас от процесса создания таблицы. Подумайте об этом с математической точки зрения, основанной на реляционной алгебре. То есть, Таблицы - это отношения (или кортежи) и т.д. Посмотрите C. J. Дайте книги и прочитайте их. Существует математический язык, на котором был разработан SQL, и обучение, которое значительно улучшит вашу способность понимать базы данных.