Подтвердить что ты не робот

Как думать в SQL?

Как мне перестать думать о каждом запросе с точки зрения курсоров, процедур и функций и начать использовать SQL так, как должно быть? Переходим ли мы к переходу к мышлению в SQL просто по практике или есть ли какая-либо магия для изучения языка запросов на основе набора? Что вы сделали для перехода?

4b9b3361

Ответ 1

Несколько примеров того, что должно прийти вам в голову, если вы действительно SQL geek:

  • Согласование Библии является индексом FULLTEXT для Bible

  • Luca Pacioli. Сумма арифметики, которая описывает бухгалтерию с двойным входом, фактически является нормированной схемой базы данных

  • Когда Xerxes I подсчитал свою армию, окружив область, в которой его люди заняты, а затем отправил других людей через это ограждение, он использовал метод HASH AGGREGATE.

  • The House That Jack Built следует переписать с помощью самосоединения.

  • The Twelve Days of Christmas следует переписать с помощью самосоединения и ROWNUM

  • There Was An Old Woman Who Swallowed a Fly следует переписать с помощью CTE 's

  • Если European Union были вызваны European Union All, мы увидели бы 27 написания слова euro на Euro banknote вместо 2.

И, наконец, вы можете прочитать хромую статью в своем блоге о том, как я перестала беспокоиться и научилась любить SQL (я почти забыл, что написал):

И еще одна статья только по теме:

Ответ 2

Главное, что вы управляете SETS и элементами наборов; и связывание разных наборов (и соответствующих элементов) вместе. Это действительно его сердце, имхо. Поэтому каждая таблица должна иметь первичный ключ; почему вы видите операторов набора на языке; и почему набор операторов, таких как UNION, не будет (по defualt) возвращать повторяющиеся строки.

Конечно, на практике правила множеств согнуты или сломаны, но это не так сложно понять, когда это необходимо (в противном случае SQL будет ограниченно TOO). Имхо, просто взломайте свою дискретную математическую книгу и повторите с некоторыми упражнениями.

Ответ 3

Лучший совет, который я могу вам дать, заключается в том, что каждый раз, когда вы думаете о переработке чего-то подряд, вы останавливаетесь и спрашиваете себя, есть ли способ, основанный на множестве.

Ответ 4

То, что я узнал, было, выполняя множество запросов, и работало над заданием, которое требовало от вас мыслить с точки зрения наборов результатов.

Из вашего вопроса, похоже, вы писали много интерфейсного кода, который использует последовательные/процедурные/итеративные манипуляции данными. Если у вас нет проектов, требующих использования навыков набора результатов, я лично не буду беспокоиться об этом.

Одна вещь, которую вы, возможно, захотите попробовать, - это попытаться написать аналитические запросы, например, создавать упрощенные отчеты о ваших данных. В этих случаях вы пытаетесь суммировать большие объемы данных, оцепляя их наборы.

Другим хорошим способом было бы прочитать книгу о теоретических/математических основах для RDBMSes. Они строго придерживаются теории множеств и того, как части синтаксиса SQL-запроса связаны непосредственно с математикой за ней. Конечно, это требует от вас математики.:)

Ответ 5

Я обнаружил, что Art Of SQL был полезным ударом в голову, чтобы попасть в правильное мышление.

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

Вы пишете невероятно сложный оператор обновления, который может быть трудно понять кем угодно, кроме вас, и его трудно поддерживать, или вы пишете менее эффективную, но удобную в управлении процедуру?

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

ссылка: Искусство SQL

Ответ 6

Когда люди спрашивают меня о присоединениях, я посылаю им здесь, он имеет отличное визуальное представление о том, что они собой представляют.

Ответ 7

Одно упражнение, которое вы можете попробовать, следующее:

Возьмите некоторый из вашего существующего кода отчетности с вашего прикладного уровня, желательно что-то, что создает единый табличный набор данных. Начиная с самых основных элементов, переместите его в SQL View.

Возьмите все столбцы, вытащенные из одной таблицы, и напишите инструкцию SQL, чтобы выбрать эти данные. Затем присоединитесь к одной таблице за раз и начните выяснять соответствующие условия и логику для вашего вывода.

Вы можете столкнуться с какой-то конкретной задачей, которая сначала кажется невозможной в SQL, но в зависимости от реализации, против которой вы программируете, почти всегда есть способ получить результат, который вы ищете. Проверьте документацию на реализацию SQL или попробуйте Google.

Это упражнение имеет преимущество, давая вам оригинальный отчет для тестирования, поэтому вы знаете, получаете ли вы ожидаемый результат.

Несколько вещей, на которые нужно обратить внимание:

  • Рекурсия и графики - довольно продвинутые методы; вы можете начать с чего-то более простого. (У Джо Селко есть хорошая книга по теме, если вам интересно.)
  • Часто существует большая разница между BIT и C-style bool. По крайней мере, вам может потребоваться явно передать ваш результат от INT до BIT.
  • OUTER JOIN полезны, когда часть данных может быть пустой, но старайтесь не злоупотреблять ими.

Ответ 8

Я думаю, что нужно время, чтобы приспособиться (это было давно для меня, поэтому я не очень хорошо помню). Но, возможно, ключевым моментом является то, что SQL declarative - то есть вы указываете , что вы хотите сделать, а не точно как это должно выполняться процедурно. Итак, для простого примера:

"Получите мне имена и зарплаты сотрудников в отделах, расположенных в Лондоне"

Соответствующий SQL почти естественен:

select name, salary
from employees
join departments on departments.deptno = employees.deptno
where departments.location = 'London';

Мы сказали "SQL", как присоединяться к подразделениям для сотрудников, но только декларативно (NATURAL JOIN устраняет необходимость сделать это, но опасно, поэтому не используется на практике). Мы не определили процедурно, как это должно быть сделано (например, "для каждого отдела, найти всех сотрудников..." ). SQL может выбрать оптимальный метод для выполнения запроса.

Ответ 9

Joe Celko Размышление в наборах (книга)

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

Эта книга изменит то, как вы подумайте о проблемах, которые вы решаете с программами SQL. Сосредоточение на трех ключевые методы на основе таблиц, Celko раскрывает свою власть через подробные примеры и четкие объяснения. В виде вы овладеете этими методами, youll найти, что вы можете концептуализировать проблемы, связанные с наборами и разрешимый через декларативный программирование. Вскоре вы будете кодирование быстрее, написание более эффективный код и применение полного мощь SQL.