Советы или рекомендации по переводу объединений SQL с литерального языка в синтаксис SQL? - PullRequest
2 голосов
/ 16 ноября 2009

Я часто точно знаю, чего я хочу, и знаю, как связаны таблицы, чтобы получить его, но мне очень трудно переводить эти знания буквального языка в синтаксис SQL, когда речь идет о соединениях. Есть ли у вас какие-либо советы или приемы, которыми вы могли бы поделиться в прошлом?

Это простой, но плохой пример:

"У меня есть категории, в которых есть продукты" один ко многим ", которые имеют варианты" один ко многим ", которые имеют источники" один ко многим ". Мне нужны все источники, которые относятся к категории XYZ."

Я представляю себе что-то, где вы вычеркиваете определенные языковые термины и заменяете их синтаксисом SQL. Можете ли вы поделиться тем, как вы формулируете свои запросы, основываясь на некоторой концепции, подобной этой? Спасибо!

Ответы [ 6 ]

6 голосов
/ 16 ноября 2009
  • Используйте Конструктор запросов SQL , чтобы легко объединять запросы. Присоединяйтесь к запросам из коллекции визуальных таблиц, а затем, если вы хотите узнать, как она работает, просто исследуйте ее. как я это узнал. Вы не заметите, как это мило, пока не попробуете.

  • Визуальное представление соединений SQL - пошаговое руководство, объясняющее SQL JOIN s.

  • Полная ссылка на соединение SQL-Server, внутреннее соединение, левое внешнее соединение, правое внешнее соединение, полное внешнее соединение, в SQL-Server 2005 (см. Снимок ниже).

  • ToTraceString из ObjectQuery Entity Frameork (который вы добавляете к нему Include шейпингов) также является хорошим способом изучить его.

  • Типы соединений SQL-сервера (с подробными примерами для каждого типа соединения) :
    INNER JOIN - сопоставить строки между двумя таблицами, указанными в операторе INNER JOIN, на основе одного или нескольких столбцов, имеющих совпадающие данные. Предпочтительно объединение основано на ссылочной целостности, обеспечивающей взаимосвязь между таблицами для обеспечения целостности данных.
    Просто добавьте небольшой комментарий к основным определениям, приведенным выше, в общем, опция INNER JOIN считается наиболее распространенным объединением, необходимым в приложениях и / или запросах. Хотя это имеет место в некоторых средах, это действительно зависит от структуры базы данных, ссылочной целостности и данных, необходимых для приложения. Поэтому, пожалуйста, найдите время, чтобы понять запрашиваемые данные, а затем выберите правильный вариант объединения.
    Хотя большая часть логики соединения основана на сопоставлении значений между двумя указанными столбцами, можно также включить логику, используя больше, меньше, чем не равно, и т. Д. LEFT OUTER JOIN - На основе двух таблиц, указанных в предложении соединения, все данные возвращаются из левой таблицы. В правой таблице совпадающие данные возвращаются в дополнение к NULL значениям, где запись существует в левой таблице, но не в правой таблице.
    Следует помнить, что логика LEFT и RIGHT OUTER JOIN противоположна друг другу. Таким образом, вы можете изменить либо порядок таблиц в конкретном операторе соединения, либо изменить JOIN слева направо или наоборот и получить те же результаты.
    RIGHT OUTER JOIN - На основе двух таблиц, указанных в предложении соединения, все данные возвращаются из правой таблицы. В левой таблице совпадающие данные возвращаются в дополнение к NULL значениям, где запись существует в правой таблице, но отсутствует в левой таблице.
    Self Join - В этом случае одна и та же таблица указывается дважды с двумя разными псевдонимами для сопоставления данных в одной таблице.
    CROSS JOIN - На основе двух таблиц, указанных в предложении соединения, создается декартово произведение, если предложение WHERE фильтрует строки. Размер декартового произведения основан на умножении количества строк в левой таблице на количество строк в правой таблице. Пожалуйста, соблюдайте осторожность при использовании CROSS JOIN.
    FULL JOIN - На основе двух таблиц, указанных в предложении соединения, все данные возвращаются из обеих таблиц независимо от совпадающих данных.

SQL Query designer sample

2 голосов
/ 16 ноября 2009

Я думаю, что большинство людей подходят к этому:

  • Ищите субстантивы, так как они могут указывать на потенциальные таблицы
  • Ищите прилагательные, потому что они, вероятно, являются полями
  • Отношения между субстантивами дают правила JOIN

Нет ничего лучше, чем нарисовать эти структуры на листе бумаги.

1 голос
/ 16 ноября 2009
  1. Напишите и отладьте запрос, который возвращает поля из таблицы, содержащей большинство - или наиболее важные - данные. Добавьте ограничения, которые зависят только от этой таблицы или независимы от всех таблиц.
  2. Добавить новый where термин, который относится к другой таблице.
  3. Повторяйте 2. пока не закончите.

Я еще не использовал оператор join в запросе, даже после 20+ лет написания SQL-запросов. Почти всегда можно написать их в виде

 select field, field2, field3, <etc.>
 from table
 where field in (select whatever from table2 where whatever) and
       field2 in (select whatever from table2 where whatever) and ...

или

 select field, field2, field3, <etc.>
 from table1, table2, ...
 where table1.field = table2.somefield and
       table1.field2 = table3.someotherfield and ...

Как кто-то другой написал, просто будьте смелыми и практикуйтесь. Это будет похоже на поездку на велосипеде после 4 или 5 раз, когда создается такой запрос.

0 голосов
/ 16 ноября 2009

Посмотрите на ERD.
Логическая или физическая версия, она покажет, какие таблицы связаны друг с другом. Таким образом, вы можете увидеть, к каким таблицам нужно присоединиться, чтобы перейти от точки / таблицы a к точке / таблице b, и по каким критериям.

0 голосов
/ 16 ноября 2009

SQL сильно отличается от императивного программирования.

1) Для разработки таблиц рассмотрите сущности (реальные вещи в мире, вызывающем озабоченность), отношения (между сущностями) и атрибуты (значения, связанные с сущностью).

2) для написания оператора Select рассмотрим пластиковый экструзионный пресс:
а) вы кладете в необработанные записи из таблиц, где в записях существуют условия
б) вам, возможно, придется объединить таблицы, чтобы получить нужные вам данные
в) вы изготавливаете экструзионные сопла, чтобы сделать пластик нужной вам формы. Это отдельные выражения списка выбора.
d) вы можете захотеть, чтобы n-все наборы данных списка приходили к вам в определенном порядке, вы можете применить условие Order By.

3) создание выражений List наиболее похоже на императивное программирование после обнаружения функции if (exp, true-exp, false-exp).

0 голосов
/ 16 ноября 2009

Одно слово: практика.

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

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