SELECT * FROM tl_documentation WHERE storehouse_id =2 OR customer_id =2 AND product_id =20 ORDER BY id DESC LIMIT 0 , 30 以下列表显示了操作符优先级的由低到高的顺序.排列在同一行的操作符具有相同的优先级. := ||, OR, XOR &&, AND NOT BETWEEN, CASE, WHEN, THEN, ELSE =, <=>, >=, &g
今天在做项目的时候发现一个查询的结果不太对. 随后拿出sql仔细端详一番,where条件中发现一个条件本应该是 …… xx in (‘13’,‘14’)……,却写成了…… xx = ‘13’ or xx = ‘14‘ ……,与其并列的还有几个and条件. 随后和同事讨论为什么是这样的结果?where中的 and 和 or 执行顺序是什么?同时存在并列会如何运行? 猜来猜去.发现很简单,是有优先级的. 特此记录
在三元运算中(expr1)?(expr2):(expr3); and,or,xor的优先级要小于三元运算符,所以需要添加括号例:如果$a为true,$b为fals,$a and $b?"true":"false";输出的结果为1,($a and $b)?"true":"false";输出的结果为false; &&,|| 运算的时候无需添加括号;
SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后被处理. 每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入.这些虚拟表对调用者(客户端应用程序或者外部查询)不可用.只是最后一步生成的表才会返回 给调用者.如果没有在查询中指定某一子句,将跳过相应的步骤.下面是对应用于SQL server 2000和SQL Server 2005的各个逻辑
SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后被处理. 每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入.这些虚拟表对调用者(客户端应用程序或者外部查询)不可用.只是最后一步生成的表才会返回 给调用者.如果没有在查询中指定某一子句,将跳过相应的步骤.下面是对应用于SQL server 2000和SQL Server 2005的各个逻辑