首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL 查询条件放到 JOIN 子句WHERE 子句差别

我们再写 SQL 时候,最常碰到一个问题就是,把查询条件放到 JOIN 子句和放到 WHERE 子句有什么不同呢?...比如: 查询条件放到 JOIN 语句: SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts JOIN wp_skus sku ON sku.post_id...'publish' ORDER BY sku.price DESC, wp_posts.post_date DESC LIMIT 0, 10 查询条件放到 WHERE 语句: SELECT SQL_CALC_FOUND_ROWS...但是语义上:JOIN - 描述两个表之间关系,WHERE - 从结果集中删除行。这两种方法直接存在显著语义上差别,尽管两种方法对结果和性能都无影响,但是选择正确语法将有助于代码更易于被阅读。...OUTER JOIN:如果使用是 OUTER JOIN,可能会不同,比如上面的 SQL 改成 LEFT JOIN,并且连接条件失败,则查询条件放到 JOIN 子句仍将获得一行,但是如果放到 WHERE

2.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

SQL语句where 和 on 区别

先说结论: 在使用left join左连接时,on and和on where条件区别如下: 1、on条件是在生成临时表时使用条件,它不管on中条件是否为真,都会返回左边表中记录。...2、where条件是在临时表生成好后,再对临时表进行过滤条件。...这时已经没有left join含义(必须返回左边表记录)了,条件不为真的就全部过滤掉,on后条件用来生成左右表关联临时表,where条件对临时表中记录进行过滤。...join过程可以这样理解:首先两个表做一个笛卡尔积,on后面的条件是对这个笛卡尔积做一个过滤形成一张临时表,如果没有where就直接返回结果,如果有where就对上一步临时表再进行过滤。...where过滤作用就出来了,右连接原理是一样。到这里就真相大白了:inner join中on和where没区别,右连接和左连接就不一样了。 本文转载自: SQL语句where和 on区别?

3K20

sql中select into用法_sql语句insert into用法

大家好,我是架构君,一个会写代码吟诗架构师。今天说一说sql中select into用法_sql语句insert into用法,希望能够帮助大家进步!!!...示例如下: select * into A from B 2.insert into select 语句: 注意: (1)要求目标表B必须存在,并且字段field,field1...也必须存在 (2)注意...B主键约束,如果B有主键而且不为空,则 field1, field2...中必须包括主键 (3)注意语法,不要加values,和插入一条数据sql混了,不要写成:insert into B (field...,field2) values (1,2) 正确写法SQL: 此代码由Java架构师必看网-架构君整理 insert into B (field,field1,...) select value,value1...,... from A 或 insert into B select * from A 今天文章到此就结束了,感谢您阅读,Java架构师必看祝您升职加薪,年年好运。

2K30

sql语句where与having区别

Where 是一个约束声明,使用Where约束来自数据库数据,Where是在结果返回之前起作用Where中不能使用聚合函数。...在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行。而where子句在查询过程中执行优先级高于聚合语句。 下面用一个例子进一步说明问题。...则 sql 语句应为: select deparment, avg(salary) as average from salary_info group by deparment having...一来,我们要使用聚合语句 avg ;二来,我们要对聚合后结果进行筛选( average > 3000 ),因此使用 where 会被告知 sql 有误。...例2:要查询每个部门工资大于3000员工个数 sql语句应为: select deparment, count(*) as c from salary_info where salary >

1.5K20

SQL语句where 1=1意义

我们在看别人项目的时候,很多时候看到这样SQL语句: select * from user where 1=1 其中这个where1=1是有特殊意义,包含以下两种情境:动态SQL拼接和查询表结构。...一 动态SQL拼接 适合多条件搜索,当要构造动态sql语句时为了防止sql语句结构不当,所以加上where 1=1 ,这样SQL语句不会报错,例如: String sql="select * from...当我们SQL语句加上where 1=1时候,就不报错了,如下: String sql="select * from table_name where 1=1"; if( conditon 1) {...sql=sql+" and var2=value2"; } if(conditon 2) { sql=sql+" and var3=value3"; } SQL语句加上where 1=1,只是为了满足多条件查询页面中不确定各种因素而采用一种构造一条正确能运行动态...SQL语句一种方法。

3.7K51

oracle游标 sql语句,sql游标

sql游标 游标的类型: 1、静态游标(不检测数据行变化) 2、动态游标(反映所有数据行改变) 3、仅向前游标(不支持滚动) 4、键集游标(能反映修改,但不能准确反映插入、删除) 游标使用顺序: 1...][STATIC | KEYSET | DYNAMIC ] [READ_ONLY | SCROLL_LOCKS] for selet语句 [for update[of 列名[,列名]] 注:LOCAL...auth_cur cursor for select au_id, au_lname, au_fname, state from authors open auth_cur fetc 相关文档: 1.Oracle...删除表中多余重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小记录. delete from people where peopleId in (select peopleId...,如果不要的话可以注释掉或再加个参数来选择操作 insert into @t select ID,ParentID,@i from t_ …… 根據前一篇關於自動備份文章,對應自動還原方案 create

1.4K20

Oracle查询优化-04插入、更新与删除数据

4.1 插入新记录 问题 向表中插入一条新记录。 解决方案 使用带有values子句insert语句来插入一行。...子句)并且其意图是确保任何引用该视图 INSERT 或 UPDATE 语句都应用 WHERE 子句,则必须使用 WITH CHECK OPTION 定义该视图。...---- 4.5多表插入语句 oracle从9i开始可以用一条insert语句实现向多个表中插入数据 Oracle Insert all有三种情况: 一、无条件 INSERT ALL 二、条件...WHEN 子句求值; 2、如果第一个 WHEN 子句值为 true,Oracle 服务器对于给定行执行相应 INTO 子句,并且跳过后面的 WHEN 子句(后面的when语句都不再考虑满足第一个...When子句记录,即使该记录满足when语句条件)。

1.2K10

Oracle 23c 中 RETURNING INTO 子句

在执行INSERT、UPDATE 和 DELETE 语句时,现在我们可以通过RETURNING INTO 子句返回受影响数据新值或者旧值。...在 Oracle 23c中,INSERT、UPDATE 和 DELETE 语句 RETURNING INTO 子句得到了增强,可以返回受相应语句影响旧值和新值。...作为 SQL 命令执行一部分,能够获取受 INSERT、UPDATE 和 DELETE 语句影响旧值和新值,为开发人员提供了读取这些值统一方法,并减少了数据库必须执行工作量。...当对单行进行操作时,带有returning_clause DML 语句可以使用受影响行、rowid 和受影响行REF 来检索列值,并将它们存储在主变量或PL/SQL 变量中。...对于 INSERT 语句,每个 expr 必须是一个简单表达式。INSERT 语句 RETURNING 子句中不支持聚合函数。 单集聚合函数表达式不能包含 DISTINCT 关键字。

28320

oraclesql语句简单优化

当你向ORACLE提交一个SQL语句,ORACLE会首先在这块内存中查找相同语句....这里需要注明是,ORACLE对两者采取是一种严格匹配,要达成共享,SQL语句必须 完全相同(包括空格,换行等). 1,共享语句必须满足三个条件: A....两个SQL语句中必须使用相同名字绑定变量(bind variables) 例如:第一组两个SQL语句是相同(可以共享),而第二组中两个语句是不同(即使在运行时,赋于不同绑定变量相同值)....ov_ind; 2,选择最有效表名顺序(只在基于规则优化器中有效) ORACLE解析器按照从右到左顺序处理FROM子句表名,因此FROM子句中写在最后表(基础表 driving table...实际上,ORACLE在解析过程中, 会将’’ 依次转换成所有的列名, 这个工作是通过查询数据字典完成, 这意味着将耗费更多时间. 5,减少访问数据库次数 当执行每条SQL语句时, ORACLE

1.3K20

SQL 简易教程 中

把通配符置于开始处,搜索起来是最慢SQL IN 操作符 IN 操作符允许您在 WHERE 子句中规定多个值。...NOT关键字可以用在要过滤列前,而不仅是在其后。 对于这里这种简单 WHERE 子句,使用 NOT 确实没有什么优势。但在更复杂子句中,NOT是非常有用。...带有文本值 BETWEEN 操作符实例 下面的 SQL 语句选取 name 以介于 'A' 和 'H' 之间字母开头所有网站: SELECT * FROM Websites WHERE name...只需要添加促使查询没有数据返回 WHERE 子句即可: SELECT * INTO newtable FROM table1 WHERE 1=0; INSERT INTO SELECT 语句 从一个表复制数据...GROUP BY column_name; HAVING 子句SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。

2.8K10

2018-07-12 Oracle for update和for update nowait区别Oracle for update和for update nowait区别

如果加了for update后 该语句用来锁定特定行(如果有where子句,就是满足where条件那些行)。...这个问题估计很多玩ORACLE同学们都没有去思考过【网上相关帖子不多】。 现在将其功能讲解一下。 从单独一张表操作来看,上面二条语句效果确实是相同。...这种情况经常会出现在用户对带有连接查询视图进行操作场景下。用户只锁定相关表数据,其他用户仍然可以对视图中其他原始表数据来进行操作。...Oracle for update行锁 SELECT...FOR UPDATE 语句语法如下: SELECT ......select语句 再运行sql2 select * from t where a='1' for update; 则这一句sql在执行时,永远处于等待状态,除非窗口1中sql被提交或回滚。

1.6K20

powerdesigner生成mysql语句_oracle创建表sql语句

表中每个字段数据类型、中文注释、是否可为NULL 问题,非常影响我们建表效率。本篇文章,以Mysql数据库表为原表,通过PowerDesigner工具将其转化成Oracle数据库建表语句。...图8 9、之后,会弹出 “Generated Files” 窗口,由log日志、生成sql脚本文件可知,程序运行成功。...如下图12所示,在下图12中,我将转成Oracle建表语句 student 表名改成了 student003....图12 12、在SQL语句中,添加给表建立中文注释命令、添加给表建立主键命令。命令如下所示,截图如图13所示。 -- 新增命令,给表命名。...Mysql数据库表转成Oracle数据库表SQL语句如下所示: /*==============================================================*/ /

5.7K20

oracle数据库sql语句优化(循环语句有几种语句)

下面列举一些工作中常常会碰到OracleSQL语句优化方法: 1、SQL语句尽量用大写; 因为oracle总是先解析SQL语句,把小写字母转换成大写再执行。...4、WHERE子句连接顺序: ORACLE采用自下而上顺序解析WHERE子句,根据这个原理,表之间连接必须写在其他 WHERE条件之前, 那些可以过滤掉最大数量记录条件必须写在WHERE子句末尾...6、减少访问数据库次数: ORACLE在内部执行了许多工作: 解析SQL语句,估算索引利用率,绑定变量,读数据块等。...VERSION = 604); 11、避免使用耗费资源操作: 带有DISTINCT、UNION、MINUS、INTERSECT、ORDER BYSQL语句会启动SQL引擎执行 耗费资源排序...DISTINCT需要一次排序操作,而其他至少需要执行两次排序。 通常,带有UNION、MINUS、INTERSECTSQL语句都可以用其他方式重写。

2.8K10

SQL 性能优化 总结

(2) WHERE子句连接顺序:SQL Server、 ORACLE采用自下而上顺序解析WHERE子句,根据这个原理,表之间连接必须写在其他 WHERE条件之前, 那些可以过 滤掉最大数量记录条件必须写在...(4)减少访问数据库次数: ORACLE在内部执行了许多工作: 解析 SQL 语句,估算索引利用率, 绑定变量 , 读数据块等。...sql语句用大写;因为oracle 总是先解析sql 语句,把小写字母转换成大写再执行 (20)在java代码中尽量少用连接符“+”连接字符串!...(33)避免使用耗费资源操作:带有DISTINCT,UNION,MINUS,INTERSECT,ORDERBY SQL语句会启动SQL 引擎 执行耗费资源排序(SORT)功能.DISTINCT需要一次排序操作...通常,带有UNION, MINUS , INTERSECTSQL语句都可以用其他方式重写.

1.8K20

select for update和select for update wait和select for update nowait区别

, 4, 6); 以上是基础数据 在oracle中,如果只进行select语句的话,是不会进行加锁,也就是oracle会返回当前时刻结果集,即使这个时候可能有另外一个进程在修改当前结果集数据,因为没有加锁...,那么oralce会给符合where条件数据行加上一个行级锁 1、select for update 但是如果你select 语句加了for update,那么就不是上面这回事了,当oracle发现...执行语句6秒后,报错。 最后对会话一(SQL窗口一)进行commit操作 ? 紧接着执行会话二(SQL窗口二)中sql语句,此时被加锁数据行被释放 ?...测试结果证明,在没有OF子句情况下,对多表查询结果集进行select foe update,oracle会对满足where 条件所有数据行进行加锁 b、使用OF子句 使用OF子句,那么oracle...比对测试结果,发现在OF子句作用下,oracle对同时满足where子句(设置要加锁数据行)和OF子句(主要设置加锁表)数据行进行了加锁。

2.4K100

SQL优化法则小记

被程序语句获得锁 c. redo log buffer 中空间 d. oracle为管理上述 3 种资源中内部花费 11.用 where子句替换having子句: 避免使用 having子句...= d.dept_no); 19.sql 语句用大写;因为 oracle 总是先解析 sql 语句,把小写字母转换成大 写再执行 20.在 java 代码中尽量少用连接符“+”连接字符串!...注意当字符和数值比较时, oracle会优先转换数值类型到字符类型 31.需要当心 where子句: 某些 select语句 where子句不使用索引. 这里有一些例子....33.避免使用耗费资源操作: 带有 distinct,union,minus,intersect,order by SQL 语句会启动 SQL 引擎 执行耗费资源排序(SORT)功能. distinct...通常, 带有union,minus,intersect SQL 语句都可以用其他方式重 写.

2K90
领券