我需要帮助一些"术语"关于查询部分。但不仅可以查询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)100
和SELECT
之间的所有内容: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一样,可能是其他一些有特殊调用的连接,你可以记住任何有趣的东西。
答案 0 :(得分:15)
您可能对the official MySQL syntax对此事的评论感兴趣。在我看来,当你试图用编程语言术语来描述数学时,你永远不会过于正式。
t1.f1
被称为 select_expr ,fudge发音为英文,为&#34; select expression&#34;。请注意:
每个
select_expr
表示您要检索的列。
因此,用英语调用它的另一种不那么正式的方式可能是#34;列。&#34;
语法似乎区分子句和条件,其中子句包含关键字WHERE
本身,但条件只是简单 - 里面的旧SQL表达式。
如果给出
WHERE
子句,则表示行必须满足要选择的条件。where_condition
是一个表达式,对于要选择的每一行,其计算结果为true。
以及
在
WHERE
表达式中,您可以使用MySQL支持的任何函数和运算符,但聚合(汇总)函数除外。请参见第9.5节“表达式语法”
来自不同的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
)或复杂条件,其另外使用逻辑运算符:OR
,NOT
,{{ 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
的结果以及左表中不匹配的记录以及右表中不匹配的记录。
单词INNER
和OUTER
是可选的。你可以省略它们而不做任何改变。
答案 2 :(得分:10)
问: 1)SELECT
和FROM
之间的所有内容: 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)
你似乎已经理解了大部分条款相当不错,我会说,我相信你的大部分措辞都会被理解。展望正式文档似乎也是一个好主意。
以下是我对你的问题的看法,首先让我们回答你似乎知道的问题:
你不太确定的那些:
SELECT
和FROM
之间我会使用&#34;选择表达式&#34;或&#34;列表达式&#34;或&#34;列定义&#34; 当提到不同的联接时,我要么通过唯一的&#34;内部联接来区分它们&#34;或者&#34;左连接&#34;,或者如果你有多个连接,那么使用类似&#34;加入table1&#34;。 &#34;自我加入&#34;当然会引用一个使用不同别名引用自身的连接,但如果你还有很多其他连接,可能会变得混乱。
一般来说,只要您的意图和解决方案得到理解,大多数人都会理解并忽略措辞上的细微错误。