|
|
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
Привет! Вот есть такой запрос, например Код: plaintext можно ли так их писать, а Sql у меня опыта такого большого нету.... (select * from .... )))) вот и спрашиваю... Спасибо! З.Ы. такой запрос кстати выводит, то что мне нужно... но я так полагаю, он не совсем правиль или коректно написан, да? Мда...Это не Рио Дежанейро! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2009, 00:13 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
возможно, использование exists конструкции увеличит скорость запроса. а вообще, надо в профильный форум - Oracle, SQL Server и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2009, 02:54 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
Остап Ибрагимовично я так полагаю, он не совсем правиль или коректно написан, да?Это можно понять, посмотрев план выполнения запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2009, 09:03 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
Алексей К, Запросто то как раз и выводит все то что и нужно... но сам запрос, мне так кажется не красиво написан... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2009, 11:44 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
Остап Ибрагимовично сам запрос, мне так кажется не красиво написан...Ну напишите красиво :-)) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2009, 12:26 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
Правильно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2009, 14:53 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
SeVaПравильно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Вот типа такого я и имел ввиду... Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2009, 15:27 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
отнюдь неправильно, запрос возвращает больше данных, чем первоначальный. да и работать может медленее/быстрее, чем первый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2009, 15:33 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2009, 15:40 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
Остап Ибрагимович, Вложенные запросы или join-ы - и так и так правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2009, 23:21 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
SQL_Lamer Вложенные запросы или join-ы - и так и так правильно Отнюдь: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. (ключевые слова: декартово произведение , distinct ) ________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 01:04 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
Формально вложенные запросы и join аналогичны,но использование первого, в таком варианте однозначно говорит о незнании sql(Ex_Soft, убери where в своем запросе).Любителям exists, следует учесть, что это - Self-Join, в общем варианте будут разные результирующие наборы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 11:42 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
SeVa убери where в своем запросе Убрать ГДЕ? _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 12:39 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
SeVa Формально вложенные запросы и join аналогичны Да?.. А я всю жизнь думал, что join - это декартово произведение ДВУХ таблиц со всеми вытекающими. А вложенный запрос, это выборка из ОДНОЙ таблицы записей, удовлетворяющих условию подзапроса. А оно вишь как... _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 12:53 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 13:34 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
SeVa Джойны разные бывают Гм... Повторяю то, что хочу донести: Ex_Soft А я всю жизнь думал, что join - это декартово произведение ДВУХ таблиц со всеми вытекающими. А вложенный запрос, это выборка из ОДНОЙ таблицы записей, удовлетворяющих условию подзапроса. Т.е.: запрос с вложенным запросом Код: plaintext 1. 2. 3. 4. 5. 6. мы могли бы просто напечатать WHERE snum = 1004 Код: plaintext 1. 2. 3. join (не важно какой) уже предполагает соединение двух и более таблиц, а это уже, IMHO, совсем другое, чем обычная выборка из одной таблицы по условию (пусть даже описанном во вложенном запросе). Ессесно речь о коррелированном/соотнесенном подзапросе не идет. Вот, будьте любезны, если уж join и вложенный запрос аналогичны, можете привести запрос с join'ом без distinct, который в выше указанной дрозофиле вернет две строки, как в случае с вложенным запросом? А еще лучше - дайте тынць на источник этого утверждения. _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 14:18 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
Не понял вопрос. Источник один - посмотри план выполнения Вместо Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 16:17 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
SeVa посмотри план выполнения Код: plaintext 1. 2. 3. 4. 5. 6. QUERY PLAN FOR STATEMENT 1 (at line 1). STEP 1 The type of query is SELECT. 4 operator(s) under root |ROOT:EMIT Operator | | |SEQUENCER Operator has 2 children. | | | | |SCALAR AGGREGATE Operator | | | Evaluate Ungrouped ONCE AGGREGATE. | | | | | | |SCAN Operator | | | | FROM TABLE | | | | TT2 | | | | T2 | | | | Using Clustered Index. | | | | Index : pkTT2 | | | | Forward Scan. | | | | Positioning by key. | | | | Keys are: | | | | Id ASC | | | | Using I/O Size 2 Kbytes for index leaf pages. | | | | With LRU Buffer Replacement Strategy for index leaf pages. | | | | Using I/O Size 2 Kbytes for data pages. | | | | With LRU Buffer Replacement Strategy for data pages. | | | | |SCAN Operator | | | FROM TABLE | | | TT1 | | | T1 | | | Using Clustered Index. | | | Index : pkTT1 | | | Forward Scan. | | | Positioning by key. | | | Keys are: | | | Id ASC | | | Using I/O Size 2 Kbytes for index leaf pages. | | | With LRU Buffer Replacement Strategy for index leaf pages. | | | Using I/O Size 2 Kbytes for data pages. | | | With LRU Buffer Replacement Strategy for data pages. другими словами ( sequence ( scalar_agg ( i_scan pkTT2 ( table ( T2 TT2 ) ) ) ) ( i_scan pkTT1 ( table ( T1 TT1 ) ) ) ) ( prop ( table ( T2 TT2 ) ) ( parallel 1 ) ( prefetch 2 ) ( lru ) ) ( prop ( table ( T1 TT1 ) ) ( parallel 1 ) ( prefetch 2 ) ( lru ) ) это на select @@version Adaptive Server Enterprise/15.0.2/EBF 14332/P/NT (IX86)/Windows 2000/ase1502/2486/32-bit/OPT/Thu May 24 04:10:36 2007 И на Firebird 2.0 WI-V6.3.3.12981 Plan PLAN (T2 NATURAL) PLAN (T1 INDEX (PKT1)) Adapted Plan PLAN (T2 NATURAL) PLAN (T1 INDEX (PKT1)) никаких join'ов... _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 17:34 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
Осталось еще и для join планы показать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 18:53 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
SeVa Осталось еще и для join планы показать смысл? join даст join. Это - не неожиданно. А, вот, как SeVa Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. Это для меня - новость. Вот я и хочу, так сказать, научную базу сего факта... _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 19:15 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
какая научная база? SQL оперирует множествами. Оптимизатор операции на двух и более множествах так или иначе преобразует в join'ы, т.к. других способов объединить множества у него нет (кроме union). например Код: plaintext Код: plaintext запрос Код: plaintext запрос, приведенный SeVa - ошибочен: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 19:35 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
авторexists также преобразуется к inner join, но немного более сложному и может работать значительно быстрее при наличии подходящего уникального индекса. запрос, приведенный SeVa - ошибочен: 1.exists преобразуется к self-join(в терминах команды ms sql),а не к простому Join.Это две большие разницы, выбираются только первые вхождения, а не все. 2.запрос не мой, я его скопировал автор Оптимизатор операции на двух и более множествах так или иначе преобразует в join'ы, т.к. других способов объединить множества у него нет (кроме union). Да, но только для разных наборов могут разные планы выполнения этих join авторсмысл? join даст join. Это - не неожиданно. А, вот, как А ты проверь.В ранних версиях MS SQL in и join могли иметь разные планы выполнения, посему in и не рекомендовалось использовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 19:55 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
AAron какая научная база? Реляционная алгебра. Которая как раз и AAron оперирует множествами А AAron SQL уже зиждется на реляционной алебре. Которая имеет свои законы, 4 example: rUs=sUr, (rUs)Ut=rU(sUt) и т.п., согласно которым оптимизатор преобразовывает запрос. Вот я и добиваюсь: на основании какого(их) закона(ов) при изЪятии подзапроса из условия в Код: plaintext 1. 2. 3. 4. 5. 6. AAron например Код: plaintext 1. Код: plaintext 1. тынць Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. SeVa MS SQL У меня его, слава Богу, - нЭт. Я говорю о SQL, а не о каких-то специфических реализациях для определенных серверов определенных версий. _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 20:16 |
|
||
|
Правильно ли писать такие вложеные запросы по выборке
|
|||
|---|---|---|---|
|
#18+
ок. вариант с джойном может вернуть большее количество записей в случае неуникальности для указанного тынца. пусть r - фильтруемое множество, s - фильтрующее множество. выполнение операции IN как раз и есть пересечение множеств r и s. а тот символ, который Вы использовали - это объединение множеств, что, согласитесь, несколько иное. собственно, операции над множествами описаны здесь насчет того, кто кем оперирует - ваше же утверждение, что SQL базируется на реляционной алгебре, оперирующей множествами, приводит к выводу, что и SQL оперирует множествами. хотя, согласен, что такая формулировка слишком упрощена, но в данном случае это роли не играет. законы (именно законы) заставляющие оптимизатор работать так или иначе - это к разработчикам оптимизаторов. Известные мне Oracle и MSSQL в этом случае будут строить джойны (заодно вспомним алгоритмы пересечения множеств). не думаю, что ASE и DB2 сильно отличаются в этом плане. а вообще, это отношения к теме автора не имеет, варианты емы были предложены. далее - в профильный форум. закругляюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2009, 21:05 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=35796015&tid=1351957]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
91ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 237ms |
| total: | 431ms |

| 0 / 0 |
