2010-08-02 2 views
3

Если сравнить C против SQL, это аргумент:В непроцедурных языках, что определяет, как это должно быть сделано?

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

Итак, как часть для таких языков, как SQL задается самим языком, не так ли? Что делать, если я хочу изменить способ работы какого-либо запроса. Предположим, я хочу изменить способ обработки SELECT. Это возможно?

ответ

4

Таким образом, как часть для таких языков, как SQL задается языком самих, не так ли?

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

Предположим, я хочу изменить способ обработки SELECT. Это возможно?

В некоторой степени, да. Вы можете:

  1. Перепишите запрос, чтобы достичь того же результата другим способом, или
  2. Использование намекая - http://en.wikipedia.org/wiki/Hint_%28SQL%29

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

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

2

Это на самом деле преувеличивает разницу. Нет четкой точки, в которой говорится о том, как дела обстоят, а другое - только о том, что она сделала. Скорее, возможно, придется указать, что/как делаются на более высоком уровне детализации, чем другие. Типичная реализация SQL позволяет пользователю контролировать такие вещи, как то, какие индексы используются (или игнорируются), какие блокировки делать и т. Д.

Если вы должны были выполнить ту же работу на C, вы бы (в какой-то момент) должны указать намного больше деталей (если вы не использовали что-то вроде ODBC). Тем не менее, вы все еще говорите, что нужно делать, а не все детали того, как это должно быть сделано (например, несмотря на то, что он как минимум на низком уровне, чем язык ассемблера, C все равно сделает некоторые преобразования типов автоматически, поэтому вы не нужно рассказывать ему, как делать что-то вроде добавления целого числа в число с плавающей запятой, - просто скажите ему, чтобы добавить их, и он обрабатывает детали).

Итог: попытка говорить об одном как процедурное, а другое как непроцедурное - вводит в заблуждение. SQL не всегда требует столько деталей, но это разница в степени, а не «как» и «что».

Смежные вопросы