英语术语MySQL查询

M0r*_*iis 17 mysql terminology

我需要有关查询部分的一些"术语"的帮助.但不仅查询PARTS,任何"查询相关的修辞格"也会非常有帮助,我对它们非常感兴趣.而且不仅仅是SELECTs(如下例所示),INSERTs,UPDATEs和其他查询.

例如:

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
Run Code Online (Sandbox Code Playgroud)

我知道:

1)t1, t2- "表别名",这里没有错误?

2)f1a- "字段别名",f2a- idk ..."表达别名"也许?它们之间有区别吗?任何集体命名?

3)100- "偏移"

我不知道怎么打电话:

1)所有之间SELECTFROM:t1.f1, t1.f2, t2.f1 AS f1a, (t2.f2 * 10) AS f2a

2)t1.f3 > t2.f3"where where"?"条件"?哪个更好?其他变种?

3)(t1.f4 <> t2.f4)"加入条件"?

如果有超过1个连接感兴趣,我可以通过"订单"或"深度"以某种方式调用它们吗?如果我可以通过"深度"来实现,那么它将如何RIGHT JOIN

使用您的示例进行任何其他有趣的"命名"将非常有用.像SELF-JOIN一样,可能是其他一些有特殊呼叫的连接,你可以记住任何有趣的东西.

mac*_*ing 15

您可能对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来自的整个部分称为"表引用".从这里我们可以深入研究与上述示例相匹配的生产语法:

join_table: table_reference [INNER | CROSS] JOIN table_factor [join_condition]
Run Code Online (Sandbox Code Playgroud)

这意味着您所指的部分包含在"连接条件"中.但是,与WHERE上面的子句一样,连接条件也包含ON关键字.实际表达式同样(t1.f4 <> t2.f4)是一个普通的conditional_expr或"条件表达式",就像WHERE上面的条款一样.

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

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

因此,您可以通过将WHERE条件称为"行限制表达式"并将JOIN条件称为"连接条件表达式" ,以非常有用,有意义的方式区分它们.


Nae*_*dov 11

SQL非常正式,结构非常好.任何查询(无论SELECTINSERT等等)由сlauses.对于SELECT查询,我建议从-clause开始阅读它FROM.在其他人开始于DELETE/ INSERT/ UPDATEclauses(第一行).这些子句显示正在操作哪些数据集.在这些子句中,您可以在括号中看到表或列表或表或JOIN--expressions(in 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 ... ) ...
Run Code Online (Sandbox Code Playgroud)

这些是中心子句,显示了要处理的表.

在子句中,可以使用别名引用每个表或子查询.别名将替换查询的所有其他部分中的表名.在以上示例中,t1,t2,t6t是别名.大多数DBMS AS在别名之前不需要单词,许多DBMS不允许使用单词.如果存在别名,则只能使用此别名.

所有查询(除外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")
Run Code Online (Sandbox Code Playgroud)

其他条款特定于查询.SELECT-clauses包含表达式列表并给出投影 - 为已处理的记录集生成新的列集.任何表达式都可以包含使用可选单词添加的列别名AS.

ORDER BY-clauses控制结果记录(或结果集)的顺序.它仅适用于SELECT-query.ORDER BY必须是最后一个条款.

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

一个SELECT查询可以是(其中方括号表示可选部分):

SELECT expressions
FROM tables or join expressions
[WHERE simple or complex condition]
[GROUP BY expressions
 [HAVING simple or complex condition]]
[ORDER BY expressions]
Run Code Online (Sandbox Code Playgroud)

其他更简单:

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...)
Run Code Online (Sandbox Code Playgroud)

或另一种形式

INSERT INTO table[(fields...)]
SELECT...   /* normal select-query */
Run Code Online (Sandbox Code Playgroud)

关于 JOIN

JOIN是关系代数运算的一种实现.当连接一个表的某个记录时,它将其与另一个表的记录连接起来并创建更广泛的记录.INNER JOIN(精确连接)仅将此操作应用于与连接条件匹配的记录对.

... users INNER JOIN roles ON (roles.id=user.role_id) ...
Run Code Online (Sandbox Code Playgroud)

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)... 
Run Code Online (Sandbox Code Playgroud)

FULL OUTER JOIN两者都做了,它给出了INNER JOIN左表中加上不匹配记录的结果以及右表中不匹配的记录.

单词INNER并且OUTER是可选的.你可以省略它们而不做任何改变.


spe*_*593 10

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

答:我将其称为" 选择列表 ".这是返回的表达式列表.列表中的每个表达式都是结果集中的一列.(表达式可以像列名一样简单,也可以更多地涉及,从函数或比较操作返回.

问:2)t1.f3> t2.f3"where clause"?"条件"?哪个更好?其他变种?

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

问:3)(t1.f4 <> t2.f4)"加入条件"?

答:同样,这是一个谓词.这恰好出现在ON子句而不是WHERE子句中.术语"连接条件"也是合适的.但就数据库如何解析和执行语句而言,它只是另一个谓词.

规范性实践是将"连接条件"包含在ON子句中,以及WHERE子句中的其他条件.


Keo*_*orl 6

1)2)我会使用别名来显示他们所指的内容.例如,select ... from my_first_table mft inner join user_rights ur where ....但是如果你没有更好的选择,"t1,t2,......"就可以了.

3)是的


1)选择子句或字段

2)where子句

3)"加入条件"是对的


hol*_*roy 6

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

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

  1. "表别名"很好
  2. "字段别名"或"表达别名"都很好.常见的答案可能是"列别名",因为这些语句定义了结果的列
  3. "偏移"(或可能是"行偏移")是好的

你不太确定的那些:

  1. SELECTFROM我之间要么使用"选择表达式"或"列表达式"或"列定义"
  2. 我倾向于使用"where expressions"
  3. "加入条件"或"加入表达"对我来说同样清楚

当引用不同的连接时,我要么通过唯一的"内连接"或"左连接"来区分它们,或者如果你有多个连接,那么使用类似"join on table1"的东西."自联接"当然是指使用不同别名引用回自身的联接,但如果您还有许多其他联接,则可能会变得混乱.

一般而言,只要您的意图和解决方案得到理解,大多数人都会理解并忽视措辞中的轻微错误.