我需要有关查询部件的一些"术语"的帮助。但是,不仅查询PARTS,而且任何"与查询相关的修辞格"也将非常有帮助,我对它们非常感兴趣。并且不仅关于SELECT s(如下例所示),INSERT s,UPDATE s和其他查询。
例如:
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 ..."表达式别名"也许吗?它们之间有区别吗?有任何集体命名吗?
3)100-"偏移"
我不确定如何致电:
1)全部在SELECT和FROM之间:t1.f1, t1.f2, t2.f1 AS f1a, (t2.f2 * 10) AS f2a
2)t1.f3 > t2.f3" where子句"?"条件"?哪个更好?其他变体?
3)(t1.f4 <> t2.f4)"加入条件"?
如果连接数不止1个,我也很感兴趣,我可以用"顺序"或"深度"来称呼它们吗?如果我可以通过"深度"做到这一点,那么RIGHT JOIN的效果如何?
您的示例的任何其他有趣的"事物命名"都将非常有帮助。像SELF-JOIN一样,可能是其他具有特殊调用的联接,您可以记住的任何有趣的事情。
正如@ francis-usher在回答中所建议的那样,阅读官方文档(在/doc/refman/5.7/en/select.html上查找)是获得术语的最佳方法。 不用担心您的英语。
@axiac那几乎不是我的英语。 问题有很多版本:)
确实,经过社区的努力,它才形成了这种形状。 之前没有注意到这一点;-)
@ M0rtiis我一次尝试仅在OP不付出努力的情况下标记问题所在语言的问题。如果OP做出努力(像您一样),我可能会建议您进行编辑,但永远不会做出标记,投下赞成票等。我希望 网络上的其他居民也相应采取行动:)
您可能对官方MySQL语法对此事有何看法感兴趣。在我看来,当您尝试描述诸如编程语言之类的数学术语时,永远不要过分正式。
1。
t1.f1称为select_expr,在英语中以"选择表达式"发音为软糖。注意:
Each select_expr indicates a column that you want to retrieve.
因此,另一种不太正式的英语调用方式可能是"列"。
2。
语法似乎区分了子句和条件,其中子句包含关键字WHERE本身,但条件只是其中的普通SQL表达式。
The WHERE clause, if given, indicates the condition or conditions that rows must satisfy to be selected. where_condition is an expression that evaluates to true for each row to be selected.
并且
In the WHERE expression, you can use any of the functions and operators that MySQL supports, except for aggregate (summary) functions. See Section 9.5,"Expression Syntax"
3。
来自不同的语法文档页面
MySQL supports the following JOIN syntaxes for the table_references part of SELECT statements
因此,关于要从SELECT引用哪些表的整个部分称为"表引用"。在这里,我们可以对与上面的示例相匹配的产品进行语法分析:
join_table: table_reference [INNER | CROSS] JOIN table_factor [join_condition]
这意味着您要引用的部分包含在"连接条件"中。但是,与上面的WHERE子句一样,联接条件也包含ON关键字。同样,实际表达式(t1.f4 <> t2.f4)是普通的conditional_expr或"条件表达式",就像上面的WHERE子句中的表达式一样。
此文档页面上的更多详细信息提供了宝贵的见解:
The conditional_expr used with ON is any conditional expression of the form that can be used in a WHERE clause. Generally, you should use the ON clause for conditions that specify how to join tables, and the WHERE clause to restrict which rows you want in the result set.
因此,您可以通过将您的WHERE条件称为"行限制表达式"而将JOIN条件称为"联接条件表达式",以一种有用的有意义的方式非正式地区分它们。
我也学到了很多! 我今天查起来之前都不知道这些东西。 感谢您提出一个好的问题。
对不起..但是wtf。 这个答案的所有者是另一个人。" Francais Uther"就在附近。 我不仅在谈论昵称,而且根据声誉,答案数,徽章等,这实际上是另一个帐户。发生了什么?
ILLUMINATI !!! !!! Nah JK,由于我无法在工作中访问我的个人gmail,因此我创建了该帐户。 现在,我合并了我的2个帐户,以便可以在工作中或在家中通过电子邮件访问它们。 谢谢你的赏金!
好的,然后)我不知道有关帐户合并的可能性)抱歉
SQL非常正式,并且结构非常好。
任何查询(无论SELECT或INSERT等如何)都由lauses组成。对于SELECT-查询,我建议从FROM-子句开始读取它。在其他情况下,从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是别名。大多数DBMS在别名前都不需要AS一词,而且许多不允许。如果存在别名,则只能使用此别名。
所有查询(INSERT除外)都可以包含WHERE-子句。本条款限制了受影响的行数。它包含一个条件。可以给出一个比较简单的简单条件(例如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-子句包含一个表达式列表并给出投影-生成新的列集用于已处理的记录集。任何表达式都可以包含使用可选单词AS添加的列别名。
ORDER BY-子句控制结果记录(或结果集)的顺序。它仅适用于SELECT -query。 ORDER BY必须是最后一个子句。
GROUP BY-子句和HAVING-子句用于将某些记录分组为一个,并在分组后过滤结果。分组会将多条记录(在一个或多个字段中具有相同的值)替换为一条记录。这些子句适用于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]
其他的比较简单:
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是可选的。您可以省略它们,并且没有任何变化。
谢谢你的回应
它增加了更多的"形式"。 你帮了很多
Q:1)都在SELECT和FROM之间:t1.f1,t1.f2,t2.f1 AS f1a,(t2.f2 * 10)AS f2a
答:我将其称为"选择列表"。这就是要返回的表达式列表。列表中的每个表达式都是结果集中的一列。 (表达式可以像列名一样简单,也可以包含更多来自函数或比较操作的返回值。
问:2)t1.f3> t2.f3" where子句"?"条件"?哪个更好?其他变体?
答:为了返回行必须满足的这些条件的总称是"谓词"。谓词是WHERE子句或ON子句中的条件,必须满足这些条件才能返回行。
问:3)(t1.f4 <> t2.f4)"加入条件"?
答:这又是一个谓词。这恰好出现在ON子句中,而不是WHERE子句中。术语"加入条件"也是合适的。但是就该数据库如何解析和执行该语句而言,它只是另一个谓词。
规范性做法是将"联接条件"包含在ON子句中,并将其他条件包含在WHERE子句中。
谢谢你的回应
我想说,您似乎对大多数术语都理解得很好,而且我相信您的大部分措辞都会使您理解。寻找正式文档似乎也是一个好主意。
这是我对您的问题的看法,首先让我们回答您似乎认识的问题:
"表别名"很好
"字段别名"或"表达式别名"是好的。常见的答案可能是"列别名",因为这些语句定义了结果的列
"偏移量"(或可能的"行偏移量")很好
您不太确定的那些:
在SELECT和FROM之间,我将使用"选择表达式"或"列表达式"或"列定义"
我倾向于使用" where表达式"
"连接条件"或"连接表达式"对我来说同样清楚
当提到不同的联接时,我可以通过仅"内部联接"或"左联接"来区分它们,或者如果您有多个联接,则使用" table1上的联接"之类的东西。"自连接"当然是指使用不同别名指向其自身的连接,但是如果您还有许多其他连接,也可能会造成混淆。
通常,只要能理解您的意图和解决方案,大多数人都会理解并忽略措辞中的小错误。
感谢您的参与
1)2)我将使用别名来显示它们指的是什么。例如,select ... from my_first_table mft inner join user_rights ur where ...。
但是,如果您没有更好的选择,则可以使用" t1,t2,..."。
3)是的
1)选择子句或字段
2)where子句
3)"加入条件"正确
感谢您的回应。 我认为在示例t1中也显示它引用了table1,2 :)
如果觉得《mysql查询专业术语 英语术语MySQL查询》对你有帮助,请点赞、收藏,并留下你的观点哦!