Английская терминология MySQL-запросы

Мне нужна помощь с некоторой "терминологией" о деталях запроса. Но не только запрос PARTS, то любые "связанные с запросом цифры речи" также будут очень полезными, я сильно заинтересован в них. И не только о SELECT (как в примере ниже), INSERT s, UPDATE и других запросах.

Например:

SELECT t1.f1, t1.f2, t2.f1 AS f1a, (t2.f2 * 10) AS f2a
FROM talbe1 AS t1
INNER JOIN table2 AS t2 ON (t1.f4 <> t2.f4)
WHERE t1.f3 > t2.f3
LIMIT 100, 9999

Я знаю, что:

1) t1, t2 - "псевдонимы таблицы", здесь нет ошибки?

2) f1a - "псевдоним поля", f2a - idk... "выражение alias" может быть? Есть ли разница между ними? Любое коллективное название?

3) 100 - "offset"

Я не уверен, как позвонить:

1) все между SELECT и FROM: t1.f1, t1.f2, t2.f1 AS f1a, (t2.f2 * 10) AS f2a

2) t1.f3 > t2.f3 "where clause"? "состояние"? что лучше? другие варианты?

3) (t1.f4 <> t2.f4) "условие соединения"?

Также интересуется, если есть более одного соединения, можно ли их каким-то образом называть "заказ" или "глубина"? И если я могу сделать это с помощью "глубины", то как это будет с RIGHT JOIN?

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

Ответы

Ответ 1

SQL очень формален, и он действительно хорошо структурирован. Любой запрос (независимо от SELECT или INSERT и т.д.) Состоит из clauses. В SELECT -queries я предлагаю начать читать его из FROM -clause. В других случаях начинаются с DELETE/INSERT/UPDATE предложений (первая строка). В этих разделах показано, что обрабатывается набор данных. В этих разделах вы можете увидеть таблицу или список или таблицы или JOIN -выражения (в FROM) или подзапросы в скобках. Список таблиц также означает объединение, но будет объяснено позже. Например.

... FROM tab1 t1  
... FROM tab1 t1, tab2 t2
... FROM tab1 JOIN tab2 ON ( ... )
... FROM (select * from tab3 ...) t
DELETE tab4 ...  /* doesn't delete the table, but its records*/
INSERT INTO tab5 ...
UPDATE tab6 t6 ...
UPDATE (select * from tab3 ... ) ...

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

Внутри предложения каждая таблица или подзапрос может ссылаться с помощью псевдонима. Псевдонимы заменят имя таблицы во всех остальных частях запроса. В приведенных выше примерах t1, t2, t6 и t являются псевдонимами. Большинство СУБД не требуют слова AS перед псевдонимом, и многие этого не допускают. Если присутствует псевдоним, вы должны использовать только этот псевдоним.

Все запросы (кроме INSERT) могут содержать WHERE -clauses. Этот раздел ограничивает количество затронутых строк. Он содержит условие. Можно дать одно простое условие одного сравнения (например, last_name="Ellison") или сложные условия, которые дополнительно используют логические операторы: AND, OR, NOT. Различные части условия могут быть сгруппированы по скобкам.

WHERE t1.last_name="Ellison" AND t1.first_name="Clark"
WHERE usr.id=profile.usr_id AND
     (usr.state="active" OR usr.role="contributor")

Другие предложения относятся к запросам. SELECT -clauses содержит список выражений и дает проекция - создает новый набор столбцов для обработанного набора записей. Любое выражение может содержать псевдонимы столбцов, добавленные с помощью необязательного слова AS.

ORDER BY -clauses управляет порядком записей результатов (или набора результатов). Он применим только к запросу SELECT -query. ORDER BY должно быть последним предложением.

GROUP BY -clauses и HAVING -clauses используются для группировки определенных записей в один и фильтрации результата после группировки. Группировка заменяет несколько записей (которые имеют одинаковое значение в одном или нескольких полях) в одну запись. Эти предложения применимы к SELECT -query.

A SELECT запрос может быть (где квадратные скобки указывают дополнительные части):

SELECT expressions
FROM tables or join expressions
[WHERE simple or complex condition]
[GROUP BY expressions
 [HAVING simple or complex condition]]
[ORDER BY expressions]

Другие проще:

DELETE table
[WHERE simple or complex condition]

UPDATE table
SET field=expression, field=expression, ...
[WHERE simple or complex condition]

INSERT INTO table[(fields...)]
VALUES (expressions...)

или в другой форме

INSERT INTO table[(fields...)]
SELECT...   /* normal select-query */

Относительно JOIN

JOIN представляет собой реализацию операции реляционной алгебры. При присоединении к какой-либо записи одной таблицы она объединяет это с записью другой таблицы и делает более широкую запись. INNER JOIN (точное соединение) применяет это действие только к парам записей, которые соответствуют условию соединения.

... users INNER JOIN roles ON (roles.id=user.role_id) ...

LEFT OUTER JOIN дополнительно добавляет непревзойденные записи из первой таблицы в результирующий набор. RIGHT JOIN наоборот.

-- two identical joins using different join operators
... users LEFT OUTER JOIN roles ON (roles.id=user.role_id)...
... roles RIGHT OUTER JOIN users ON (roles.id=user.role_id)... 

FULL OUTER JOIN делает оба, он дает результат INNER JOIN плюс несравнимые записи из левой таблицы плюс несравнимые записи из правой таблицы.

Слова INNER и OUTER являются необязательными. Вы можете их опустить, и ничего не меняется.

Ответ 2

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

1.

t1.f1 называется select_expr, fudge-произносится на английском языке как "select expression". Обратите внимание:

Каждый select_expr указывает столбец, который вы хотите получить.

Таким образом, другой менее формальный способ назвать его на английском языке, вероятно, будет "столбец".

2.

Синтаксис, по-видимому, отличает предложение и условие, в котором предложение включает в себя только ключевое слово WHERE, но это условие является просто явным SQL-выражением внутри.

Предложение WHERE, если задано, указывает условие или условия, которые должны соответствовать строки, которые должны быть выбраны. where_condition - выражение, которое оценивается как true для каждой выбранной строки.

а также

В выражении WHERE вы можете использовать любую из функций и операторов, поддерживаемых MySQL, за исключением агрегатных (сводных) функций. См. Раздел 9.5 "Синтаксис выражения"

3.

От другой страницы документации синтаксиса

MySQL поддерживает следующие синтаксисы JOIN для table_references части операторов SELECT

Таким образом, вся часть, о которой таблицы относятся к SELECT from, называется "ссылкой на таблицу". Отсюда мы можем выкопать в синтаксис бит для производства, который соответствует вашему приведенному выше примеру:

join_table: table_reference [INNER | CROSS] JOIN table_factor [join_condition]

Это означает, что часть, о которой вы говорите, содержится в "условии соединения". Однако, как и в случае с предложением WHERE выше, условие соединения также содержит ключевое слово ON. Фактическое выражение (t1.f4 <> t2.f4) - это опять-таки старое conditional_expr или "условное выражение", как и одно из предложения WHERE выше.

Более подробная информация с этой страницы документа дает ценную информацию:

conditional_expr, используемый с ON, представляет собой любое условное выражение формы, которое может использоваться в предложении WHERE. Как правило, вы должны использовать предложение ON для условий, которые определяют, как присоединиться к таблицам, и предложение WHERE, чтобы ограничить, какие строки вы хотите в наборе результатов.

Таким образом, вы можете неофициально различать их полезными и значимыми способами, вызывая условие WHERE "выражение ограничения строки" и условие JOIN "выражение условия соединения".

Ответ 3

Q: 1) все между SELECT и FROM: t1.f1, t1.f2, t2.f1 AS f1a, (t2.f2 * 10) AS f2a

A: Я называю это " выбрать список". Это список выражений, которые возвращаются. Каждое выражение в списке является столбцом в наборе результатов. (Выражение может быть таким же простым, как имя столбца, или может быть больше задействовано, возврат из функции или операции сравнения.

Q: 2) t1.f3 > t2.f3 "where clause"? "состояние"? что лучше? другие варианты?

A: Общий термин для этих условий, который должен быть удовлетворен для возвращения строки, является "предикатом ". Предикаты - это условия в предложениях WHERE или ON, которые должны быть выполнены для возврата строки.

Q: 3) (t1.f4 < > t2.f4) "условие соединения"?

A: Опять же, это предикат . Это просто появляется в предложении ON, а не в предложении WHERE. Также подходит термин "условие соединения". Но с точки зрения того, как эта база данных анализирует и выполняет оператор, это просто еще один предикат.

Нормативная практика заключается в том, что условие объединения должно быть включено в предложение ON и другие условия в предложении WHERE.

Ответ 4

1) 2) Я бы использовал псевдонимы, которые показывают, на что они ссылаются. Например, select ... from my_first_table mft inner join user_rights ur where .... Но если у вас нет лучших вариантов, "t1, t2,..." в порядке.

3) yes


1) выбрать предложение или поля

2) где предложение

3) "условие соединения" является правильным

Ответ 5

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

Вот мои ответы на ваши вопросы, сначала давайте ответить тем, кого вы знаете:

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

Те, о которых вы не очень уверены:

  • Между SELECT и FROM я бы использовал либо выражение "select expression", либо выражение столбца или определения столбцов
  • Я обычно использую "где выражения"
  • "условие соединения" или "выражение объединения" одинаково мне понятны

При обращении к различным объединениям я бы либо разделил их на единственное "внутреннее соединение", либо "левое соединение", или если у вас есть несколько объединений, используйте что-то вроде "join on table1". "Self join", конечно, ссылается на соединение, ссылающееся на себя, используя другой псевдоним, но может запутаться, если у вас также есть много других объединений.

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