|
Язык запросов: Внутреннее и внешнее соединение | ☑ | ||
---|---|---|---|---|
0
nop
23.10.08
✎
12:17
|
ВНУТРЕНЕЕ - в результирующей таблице будут только записи для которых соединение таблиц удалось.
ВНЕШНЕЕ = ВНУТРЕНЕЕ + записи из одной, обеих таблиц (ЛЕВОЕ, ПРАВОЕ, ПОЛНОЕ) для которых соединение не удалось. Верно? |
|||
1
IronDemon
23.10.08
✎
12:19
|
Внутреннее соединение
При внутреннем соединении в результат запроса попадают только записи удовлетворяющие заданному условию. В связанных таблицах обычно есть одно поле, значения в котором совпадают в двух таблицах, например, ссылка на элемент справочника Номенклатура. Допустим, необходимо выбрать все проданные товары и вывести их в отчет с указанием артикула. Это делает представленный ниже запрос: Левое внешнее соединение Конструкция ЛЕВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Но, в отличие от внутреннего соединения, в результат запроса надо включить еще и записи из первого источника (указанного слева от слова СОЕДИНЕНИЕ), для которых не найдено соответствующих условию записей из второго источника. Правило. В случае левого внешнего соединения в результат запроса будут включены все записи из первого источника; они будут соединены с записями из второго источника при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из второго источника, будут содержать значение NULL в полях, формируемых на основании записей из этого источника. Правое внешнее соединение Конструкция ПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить еще и записи из второго источника (указанного справа от слова СОЕДИНЕНИЕ), для которых не найдено соответствующих условию записей из первого источника. Правило. В случае правого внешнего соединения в результат запроса будут включены все записи из второго источника; они будут соединены с записями из первого источника при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из первого источника, будут содержать значение NULL в полях, формируемых на основании записей из этого источника. Правое внешнее соединение полностью аналогично левому, за исключением того, что таблицы поменялись местами. Например, представленный ниже запрос эквивалентен предыдущему, но вместо левого, используется правое внешнее соединение: |
|||
2
Shurjk
23.10.08
✎
12:20
|
(0) Что значит "соединение удалось"?
|
|||
3
ЁБ
23.10.08
✎
12:23
|
Спецификации "ВНУТРЕННЕЕ" и "ВНЕШНЕЕ" ни на что не влияют. Их ввели только для красоты.
А так есть четыре типа соединения : СОЕДИНЕНИЕ (берем только записи удовлетворяющие условию) ЛЕВОЕ СОЕДИНЕНИЕ (берем весь левый источник и пришпандориваем правый по условию) ПРАВОЕ СОЕДИНЕНИЕ (берем весь правый источник и пришпандориваем правый по условию) ПОЛНОЕ СОЕДИНЕНИЕ (берем оба источника и заполняем по условию) |
|||
4
nop
23.10.08
✎
12:24
|
(3) о, понял! Спасибо :)
|
|||
5
ЁБ
23.10.08
✎
12:24
|
+
ПРАВОЕ СОЕДИНЕНИЕ (берем весь правый источник и пришпандориваем левый по условию) |
|||
6
nop
23.10.08
✎
16:41
|
Можно делать СОЕДИНЕНИЕ со вложенным запросом (виртуальной таблицей) ?
ВЫБРАТЬ * из Документ.Х СОЕДИНЕНИЕ ( Выбрать р1, р2 ИЗ РегистрСведений.У ГДЕ ...) ПО .... ?? |
|||
7
nop
23.10.08
✎
16:55
|
апну
|
|||
8
ДенисЧ
23.10.08
✎
17:01
|
(6) "В качестве источника данных запроса может выступать также вложенный запрос; в тако м случае описание источника содержит <Описание запроса>" (с) ЖЖК
|
|||
9
nop
23.10.08
✎
17:02
|
(8) Спс
|
|||
10
nop
28.10.08
✎
12:55
|
СОЕДИНЕНИЕ в условии ПО допускаются синонимы полей или только имена? Например
"ВЫБРАТЬ | ЗарплатаКВыплатеОрганизацийЗарплата.Ссылка, | ЗарплатаКВыплатеОрганизацийЗарплата.СчетУчета КАК СчетУчетаХХХ |ИЗ | Документ.ЗарплатаКВыплатеОрганизаций.Зарплата КАК ЗарплатаКВыплатеОрганизацийЗарплата | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОВыплатахРаботникамОрганизацийПоПлатежнымВедомостям КАК РанееВыплаченныеСуммы | ПО ЗарплатаКВыплатеОрганизацийЗарплата.СчетУчетаХХХ = РанееВыплаченныеСуммы.СчетУчета |
|||
11
Defender aka LINN
28.10.08
✎
12:56
|
(10) В таблице "ЗарплатаКВыплатеОрганизацийЗарплата" нет поля "СчетУчетаХХХ". Сечешь? :)
|
|||
12
nop
28.10.08
✎
12:58
|
(11) то есть синонимы не катят для СОЕДИНЕНИЕ ?
|
|||
13
MSensey
28.10.08
✎
12:59
|
не катят
|
|||
14
Defender aka LINN
28.10.08
✎
12:59
|
(12) Катят имена полей. А уж как они в таблице появились - дело десятое.
|
|||
15
nop
28.10.08
✎
13:01
|
(14) не пойму... (10) будет работать??
|
|||
16
MSensey
28.10.08
✎
13:04
|
(15) не будет, см (11)
|
|||
17
nop
28.10.08
✎
13:05
|
(16) млин... а если СОЕДИНЯТЬ виртуальные таблицы?
|
|||
18
MSensey
28.10.08
✎
13:06
|
(17) даже в этом случаем мир не изменится
|
|||
19
MSensey
28.10.08
✎
13:06
|
(17) а чем тебя не устраивает (11) ?
|
|||
20
Defender aka LINN
28.10.08
✎
13:08
|
(17) Смотри:
"Товар" - тоже псевдоним. Но только внутри запроса "Таблица1". |
|||
21
Defender aka LINN
28.10.08
✎
13:09
|
+(20) Блин. Соединение-то и забыл :)
|
|||
22
nop
28.10.08
✎
13:13
|
(21) Понял! Спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |