英语术语MySQL查询

时间:2015-07-29 11:39:41

标签: mysql terminology

我需要帮助一些"术语"关于查询部分。但不仅可以查询PARTS,还可以查询任何与查询相关的词汇"也会非常有帮助,我对它们非常感兴趣。不仅仅是offset = e.Location; s(如下例所示),SELECT s,INSERT和其他查询。

例如:

UPDATE

我知道:

1)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 - &#34;表别名&#34;,这里没有错误?

2)t1, t2 - &#34;字段别名&#34;,f1a - idk ...&#34;表达别名&#34;也许?它们之间有区别吗?任何集体命名?

3)f2a - &#34; offset&#34;

我不确定怎么打电话:

1)100SELECT之间的所有内容:FROM

2)t1.f1, t1.f2, t2.f1 AS f1a, (t2.f2 * 10) AS f2a&#34; where where&#34;? &#34;条件&#34 ;?哪个更好?其他变种?

3)t1.f3 > t2.f3&#34;加入条件&#34;?

如果有超过1个加入感兴趣,我可以通过&#34; order&#34;以某种方式调用它们。或者&#34;深度&#34;?如果我可以通过&#34;深度&#34;那么(t1.f4 <> t2.f4)会怎样?

任何其他有趣的&#34;命名事物&#34;用你的例子将非常有帮助。就像SELF-JOIN一样,可能是其他一些有特殊调用的连接,你可以记住任何有趣的东西。

5 个答案:

答案 0 :(得分:15)

您可能对the official MySQL syntax对此事的评论感兴趣。在我看来,当你试图用编程语言术语来描述数学时,你永远不会过于正式。

1

t1.f1被称为 select_expr ,fudge发音为英文,为&#34; select expression&#34;。请注意:

  

每个select_expr表示您要检索的列。

因此,用英语调用它的另一种不那么正式的方式可能是#34;列。&#34;

2

语法似乎区分子句条件,其中子句包含关键字WHERE本身,但条件只是简单 - 里面的旧SQL表达式。

  

如果给出WHERE子句,则表示行必须满足要选择的条件。 where_condition是一个表达式,对于要选择的每一行,其计算结果为true。

以及

  

WHERE表达式中,您可以使用MySQL支持的任何函数和运算符,但聚合(汇总)函数除外。请参见第9.5节“表达式语法”

3

来自不同的syntax documentation page

  

MySQL为JOIN语句的table_references部分支持以下SELECT语法

因此,SELECT来自哪个表的整个部分称为&#34;表引用&#34;。从这里我们可以深入研究与上述示例匹配的生产语法:

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

这意味着您引用的部分包含在&#34;加入条件中。&#34;但是,与上面的WHERE子句一样,连接条件也包含ON关键字。实际表达式(t1.f4 <> t2.f4)同样是一个普通的conditional_expr或&#34;条件表达式&#34;,就像上面WHERE子句中的那个一样。

此文档页面中的更多详细信息可提供有价值的见解:

  

与ON一起使用的conditional_expr是可以在WHERE子句中使用的表单的任何条件表达式。通常,您应该将ON子句用于指定如何连接表的条件,并使用WHERE子句来限制结果集中所需的行。

因此,您可以通过调用WHERE条件a&#34;行限制表达式&#34;以非常有用,有意义的方式区分它们。和JOIN条件a&#34;加入条件表达式。&#34;

答案 1 :(得分:11)

SQL非常正式,结构非常好。 任何查询(无论SELECT还是INSERT等)都包含сlauses。对于SELECT - 查询,我建议从FROM - 子句开始阅读。其他人从DELETE / INSERT / UPDATE条款(第一行)开始。这些子句显示 正在操纵哪些数据集 。在这些子句中,您可以在括号中看到一个表或一个或多个表或JOIN - 表达式(在FROM)或子查询中。表格列表也表示加入,但稍后会解释。 E.g。

... 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 是别名。大多数DBMS在别名之前不需要单词AS,并且许多DBMS不允许使用单词INSERT。如果存在别名,则必须仅使用此别名。

所有查询(WHERE除外)都可以包含last_name="Ellison" - 子句。此子句限制受影响的行数。它包含条件。可以给出一个比较的简单条件(例如AND)或复杂条件,其另外使用逻辑运算符ORNOT,{{ 1}}。条件的不同部分可以通过括号分组。

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 - 子句包含表达式列表并提供投影 - 为已处理的记录集生成新的列集。任何表达式都可以包含使用可选字AS添加的列别名

ORDER BY - 子句控制结果记录(或结果集)的顺序。它仅适用于SELECT - 查询。 ORDER BY必须是最后一个条款。

GROUP BY - 子句和HAVING - 子句用于将某些记录分组为一个并在分组后过滤结果。分组将多个记录(在一个或多个字段中具有相同值)替换为一个记录。这些条款适用于SELECT - 查询。

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的结果以及左表中不匹配的记录以及右表中不匹配的记录。

单词INNEROUTER是可选的。你可以省略它们而不做任何改变。

答案 2 :(得分:10)

问: 1)SELECTFROM之间的所有内容: t1.f1,t1.f2,t2.f1 AS f1a,(t2.f2 * 10)AS F2A

答:我将其称为&#34; 选择列表&#34;。这是正在返回的表达式的列表。列表中的每个表达式都是结果集中的一列。 (表达式可以像列名一样简单,也可以更复杂,从函数或比较操作返回。

问: 2)t1.f3&gt; t2.f3&#34; where where&#34;? &#34;条件&#34 ;?哪个更好?其他变种?

答:为了返回一行而必须满足的这些条件的一般术语是&#34; 谓词&#34;。谓词是WHERE子句或ON子句中必须满足的条件才能返回行。

问: 3)(t1.f4&lt;&gt; t2.f4)&#34;加入条件&#34;?

答:同样,这是谓词。这恰好出现在ON子句而不是WHERE子句中。术语&#34;加入条件&#34;也适合。但就数据库如何解析和执行语句而言,它只是另一个谓词。

规范性实践是针对&#34;加入条件&#34;要包含在ON子句中,以及WHERE子句中的其他条件。

答案 3 :(得分:6)

1)2)我会使用显示它们所指的内容的别名。例如,select ... from my_first_table mft inner join user_rights ur where ...。 但如果你没有更好的选择,&#34; t1,t2,...&#34;没事。

3)是的

1)select子句或字段

2)where where

3)&#34;加入条件&#34;是对的

答案 4 :(得分:6)

你似乎已经理解了大部分条款相当不错,我会说,我相信你的大部分措辞都会被理解。展望正式文档似乎也是一个好主意。

以下是我对你的问题的看法,首先让我们回答你似乎知道的问题:

  1. &#34;表别名&#34;很好
  2. &#34;字段别名&#34;或&#34;表达别名&#34;很好。一个常见的答案可能是&#34;列别名&#34;,因为这些语句定义了结果的列
  3. &#34;偏移&#34; (或者可能&#34;行偏移&#34;)很好
  4. 你不太确定的那些:

    1. SELECTFROM之间我会使用&#34;选择表达式&#34;或&#34;列表达式&#34;或&#34;列定义&#34;
    2. 我倾向于使用&#34;其中表达式&#34;
    3. &#34;加入条件&#34;或者&#34;加入表达&#34;对我来说同样清楚
    4. 当提到不同的联接时,我要么通过唯一的&#34;内部联接来区分它们&#34;或者&#34;左连接&#34;,或者如果你有多个连接,那么使用类似&#34;加入table1&#34;。 &#34;自我加入&#34;当然会引用一个使用不同别名引用自身的连接,但如果你还有很多其他连接,可能会变得混乱。

      一般来说,只要您的意图和解决方案得到理解,大多数人都会理解并忽略措辞上的细微错误。