многотабличный запрос

#1 2 декабря 2017 в 18:17
Всем привет, прочитал около 10-ти статей по обьеденинию запросов к базе. Так и не понял:
  1. SELECT * FROM Таблица1, Таблица2 WHERE Условие1, Условие2
  1. SELECT * FROM Таблица1 INNER JOIN Таблица2 [(ON Условие1 [Условие2 ...])]
Эти два запроса одинаковые или нет? (Вывод будет одинаков?)
#2 2 декабря 2017 в 18:32
нет, во втором примере же джоин. Но это мое имхо новичка) Вам что надо сделать?
#3 2 декабря 2017 в 20:03


нет, во втором примере же джоин. Но это мое имхо новичка) Вам что надо сделать?

Jestik

Объединить несколько таблиц в один запрос
#4 2 декабря 2017 в 20:05
ВаленокPC,
Первый запрос выполнить возможно. Он выведет кучу несистематизированной информации из двух таблиц, которую даже невозможно будет использовать. Потому что все значения будут неуникальны и непонятно, что откуда.

А вот джойнить две таблицы получится только по условию. Например так:
  1. SELECT * FROM Таблица1
  2. INNER JOIN Таблица2 ON Таблица1.id = Таблица2.user_id
И результаты этого запроса уже вполне можно как-то использовать.
А вообще проще присвоить таблицам элиасы и оперировать ими. Результаты запросов тогда будут вполне вменяемыми и их можно применять.
Примеры:
  1. SELECT * FROM table1 a, table2 b WHERE a.id = b.user_id AND b.id > 7
аналогично этому:
  1. SELECT * FROM table1 a
  2. INNER JOIN table2 b ON a.id = b.user_id
  3. WHERE b.id > 7
================================================
А вообще, вру.
Первый запрос выведет результаты из обоих таблиц, а второй — только из первой.
================================================

Включите отладку в админке и ткните в футере в кнопку "Отладка". Там полно примеров таких запросов. Например:
  1. SELECT i.*, w.controller AS controller, w.name AS name
  2. FROM cms_widgets_bind i
  3. FORCE INDEX (page_id)
  4. INNER JOIN cms_widgets AS w ON w.id = i.widget_id
  5. WHERE (i.template = 'tseso') AND (i.is_enabled IS NOT NULL) AND (i.page_id IN ('0','151','152'))
  6. ORDER BY i.page_id, i.position, i.ordering
  7. LIMIT 1000
#5 2 декабря 2017 в 20:08


ВаленокPC,
Первый запрос выполнить возможно. Он выведет кучу несистематизированной информации из двух таблиц, которую даже невозможно будет использовать. Потому что все значения будут неуникальны и непонятно, что откуда.

А вот джойнить две таблицы получится только по условию. Например так:

  1. SELECT * FROM Таблица1
  2. INNER JOIN Таблица2 ON Таблица1.id = Таблица2.user_id
И результаты этого запроса уже вполне можно как-то использовать.
А вообще проще присвоить таблицам элиасы и оперировать ими. Результаты запросов тогда будут вполне вменяемыми и их можно применять.
Примеры:
  1. SELECT * FROM table1 a, table2 b WHERE a.id = b.user_id AND b.id > 7
аналогично этому:
  1. SELECT * FROM table1 a
  2. INNER JOIN table2 b ON a.id = b.user_id
  3. WHERE b.id > 7
================================================
А вообще, вру.
Первый запрос выведет результаты из обоих таблиц, а второй — только из первой.

Ris

Спасибо!
#6 2 декабря 2017 в 20:32
ВаленокPC,
Потыкайте в упражнения вот тут:
www.sql-ex.ru/learn_exercises.php
У меня за полдня пришло примерное понимание, что к чему в эскуеле.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.