sql 语句的区别

问题描述

select s from t_sc where c=(select c from t_c where cn='jsp')select s from t_sc,t_c where t_c.c=t_sc.c and cn='jsp'select s from t_sc join t_c on (t_sc.c=t_c.c) where cn='jsp' 这三种sql语句的区别在那 ? 求高手解释一下

解决方案

一是使用子查询,会创建临时表二和三区别不是特别大三里默认的join是inner join二里where查询时,优化器可能会自动把where查询变成inner join,两者效率区别不大,上面例子的二和三应该是等价的吧
解决方案二:
还有 一 可能会报错的。。。如果select c from t_c where cn='jsp'的结果不止一条的话。。。。应该用in , select s from t_sc where c in (select c from t_c where cn='jsp') ;
解决方案三:
第一个是子查询语句,返回的是满足条件c的数据;第三个是内连接查询,内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种;第三个应该是外连接查询 (包括左外连接、右外连接、全外连接)。外连不但返回符合连接和查询条件的数据行,还返回不符合条件的一些行。三者的共同点是都返回符合连接条件和查询条件(即:内连接)的数据行。不同点如下:左外连接还返回左表中不符合连接条件单符合查询条件的数据行。右外连接还返回右表中不符合连接条件单符合查询条件的数据行。全外连接还返回左表中不符合连接条件单符合查询条件的数据行,并且还返回右表中不符合连接条件单符合查询条件的数据行。全外连接实际是上左外连接和右外连接的数学合集(去掉重复),即“全外=左外 UNION 右外”。说明:左表就是在“(LEFT OUTER JOIN)”关键字左边的表。右表当然就是右边的了。在三种类型的外连接中,OUTER 关键字是可省略的。

时间: 2025-01-31 07:46:01

sql 语句的区别的相关文章

SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别

原文:SQL点滴31-SQL语句中@@IDENTITY和@@ROWCOUNT区别  SQL语句中@@IDENTITY和@@ROWCOUNT区别 在一条 INSERT.SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值. 如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL. 如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值. 如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入

sql-C#中写SQL语句,单双引号的区别,为什么会报标准表达式中数据类型不匹配。

问题描述 C#中写SQL语句,单双引号的区别,为什么会报标准表达式中数据类型不匹配. OleDbDataAdapter WorkPieceDataDA = new OleDbDataAdapter("update" + "[" + ming + "]" + "set " + lieming[j, 0] + " = '" + jilushuzhi_left[j, i] + "' where 点数 =

sql语句中left join、inner join中的on与where的区别

原文:sql语句中left join.inner join中的on与where的区别 table a(id, type): id     type ---------------------------------- 1      1         2      1          3      2          table b(id, class): id    class --------------------------------- 1      1 2      2 sql语

oracle清空表sql语句 以及Truncate与delete区别

oracle清空表sql语句 以及truncate与delete区别 truncate table [表名] 使用truncate语句从表中删除或群集的所有行.默认情况下,oracle数据库教程也将执行以下任务: 解除分配的唯一例外的是删除的行中使用的所有存储空间由minextents指定参数 下次存储参数设置的从进程的truncate部分取消了最后的范围大小 删除与truncate语句行可以比下降并重新创建表有效.跌落并重新创建一个表的表无效依赖的对象,需要你在桌子上补对象的特权,并要求您重新

SQL语句Left join 中On和Where的用法区别

原文地址:点击打开链接 SQL语句如下: SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.id = 表2.id AND 表2.Name != 'ff' WHERE 表1.NAME != 'aa'        步骤1:返回笛卡尔积(SELECT * FROM 表1 CROSS JOIN 表2) 步骤2:应用ON筛选器(当前的条件为  表1.id = 表2.id AND 表2.Name != 'ff') 步骤3:添加外部行 这一步只对OUTER JOIN起作用,如果是LEF

解析sql语句中left_join、inner_join中的on与where的区别_Mysql

table a(id, type):id     type ----------------------------------1      1         2      1          3      2          table b(id, class):id    class ---------------------------------1      12      2sql语句1:select a.*, b.* from a left join b on a.id = b

两表连接的SQL语句

两表连接的SQL语句:这两种写法哪种好?现在提倡用哪一种呢? 例如:一个二表连接的SQL,有两种写法: (1)select A.c1,A.c2,B.c1,B.c2 from table1 A,table2 B where A.id=B.id (2)select A.c1,A.c2,B.c1,B.c2 from table1 A join table2 B on A.id=B.id 哪种写法好呢?现在提倡用哪一种? 你喜欢用哪一种? 我习惯用(1) ---这两个哪个好? 其中11楼的回答最为深入.

SQL语句优化技术分析

优化|语句 操作符优化 IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格. 但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:        ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询.由此可见用IN的SQL至少多了一个转换的过程.一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不

使你的 SQL 语句完全优化

我们要做到不但会写SQL,还要做到写出性能优良的SQL语句. (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. (2)WHERE子句中