in和exists
in
针对in很好理解,
select * from T1 where T1.a in (select T2.a from T2) ”
这里的“in”后面括号里的语句搜索出来的字段的内容一定要相对应,一般来说,T1和T2这两个表的a字段表达的意义应该是一样的,否则这样查没什么意义。
exists:
select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;
T1数据量小而T2数据量非常大时,T1<<T2 时,1) 的查询效率高。
刚开始有点不理解为啥是select 1,后来一想,最根本的原因是不能按照in的思路去考虑exists
通过使用EXISTS,Oracle会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间。
Oracle在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在一个加了索引的临时表中。在执行子查询之前,
系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。这也就是使用EXISTS比使用IN通常查询速度快的原因。
instr函数:
在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置。
语法如下:
instr( string1, string2 [, start_position [, nth_appearance ] ] )
string1 源字符串,要在此字符串中查找。
string2 要在string1中查找的字符串.
start_position 代表string1 的哪个位置开始查找。此参数可选,如果省略默认为1. 字符串索引从1开始。
如果此参数为正,从左到右开始检索,如果此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引。
nth_appearance 代表要查找第几次出现的string2. 此参数可选,如果省略,默认为 1.如果为负数系统会报错。
注意:
如果String2在String1中没有找到,instr函数返回0.
注:也可利用此函数来检查String1中是否包含String2,如果返回0表示不包含,否则表示包含。
substr函数:
The "substring" functions return a portion of string, beginning at character position, substring_length characters long.
The "substring" functions 返回一个字符串的一部分,
参数:
字符串,截取的开始位置,截取的长度
Examples
The following example returns several specified substrings of "ABCDEFG":
SELECT SUBSTR('ABCDEFG',3,4) "Substring"
FROM DUAL;
Substring
---------
CDEF
SELECT SUBSTR('ABCDEFG',-5,4) "Substring"
FROM DUAL;
Substring
---------
CDEF
分享到:
相关推荐
同时,`SUBSTR`函数用于截取字符串的子串,常用于处理复杂的搜索条件,如`SUBSTR('&&name', INSTR('&&name','')+1)`用于获取包含空格的名字的第二部分。 #### 3. LIKE 运算符 `LIKE` 运算符用于模式匹配查询,支持...
IN和EXISTS操作符的区别 **IN**操作符用于检查一个值是否存在于一组值中,而**EXISTS**操作符用于检查是否存在任何满足给定条件的记录。 **示例**:查询所有部门编号存在于另一个表中的员工: 使用IN: ```sql ...
- Oracle使用`SUBSTR`、`INSTR`和`REPLACE`,SQL Server则对应为`SUBSTRING`、`CHARINDEX`和`REPLACE`。 - Oracle的`REGEXP_LIKE`支持正则表达式匹配,SQL Server则需使用`PATINDEX`和`LIKE`组合,或引入`fn_split...
接下来,我们关注两个重要的字符串处理函数——`instr`和`substr`。`instr`函数用于找到一个子字符串在另一个字符串中的位置,例如: ```sql -- 找到'd'第一次出现的位置 select instr('abcdvdgc','d') from dual; ...
13.1.3 EXISTS及其相关子查询的使用 13.2 外部连接 13.2.1 Oracle9i以前版本中的外部连接的语法 13.2.2 现在的外部连接语法 13.2.3 用外部连接代替NOTIN 13.2.4 用NOTEXISTS代替NOTIN 13.3 自然连接和内部连接 13.4 ...
13.1.3 EXISTS及其相关子查询的使用 13.2 外部连接 13.2.1 Oracle9i以前版本中的外部连接的语法 13.2.2 现在的外部连接语法 13.2.3 用外部连接代替NOTIN 13.2.4 用NOTEXISTS代替NOTIN 13.3 自然连接和内部连接 13.4 ...
- `EXISTS` 和 `NOT EXISTS`:检查子查询是否返回任何行。 8. **游标** - 游标允许逐行处理查询结果,常用于存储过程和PL/SQL块。 9. **触发器** - 触发器是在特定数据库事件(如INSERT、UPDATE或DELETE)发生...
6. SQL中还包含用于字符串定位的函数INSTR和LENGTH,用于字符串转换的函数TO_CHAR和TO_NUMBER。 7. SQL21自学通中也讲解了数学函数,如ABS求绝对值,FLOOR、CEIL、EXP分别求向下取整、向上取整和指数,LN和LOG用于...
虽然 `IN` 和 `EXISTS` 都可以用来检查某个值是否存在于另一个表中,但它们在性能上有所不同。一般来说,`EXISTS` 的性能更好,因为它一旦找到匹配项就会停止搜索,而 `IN` 则需要完全执行子查询。 #### SELECT * ...
- `UPPER()`和`LOWER()`转换为大写或小写,`INSTR()`查找子串位置,`SUBSTR()`截取字符串等。 7. 多记录组函数: - `AVG()`计算平均值,`SUM()`求和,`COUNT()`计数,`MAX()`和`MIN()`找出最大值和最小值。 - `...
4. 字符串处理函数:文档中包含了字符串处理函数,如“CHR”、“CONCAT”、“INITCAP”、“UPPER”、“LOWER”、“LPAD”、“RPAD”、“LTRIM”、“RTRIM”、“REPLACE”、“SUBSTR”、“TRANSLATE”、“INSTR”和...
字符串函数如CHR、CONCAT、INITCAP、UPPER、LOWER、LPAD、RPAD、LTRIM、RTRIM、REPLACE、SUBSTR、TRANSLATE、INSTR、LENGTH、TO_CHAR、TO_NUMBER等。 3. 条件表达式和流程控制:包括STARTING WITH、EXISTS、ANY和...
- **字符函数**:CHR、CONCAT、INITCAP、LOWER/UPPER、LPAD/RPAD、LTRIM/RTRIM、REPLACE、SUBSTR、TRANSLATE和INSTR用于字符串操作。 - **转换函数**:TO_CHAR和TO_NUMBER用于数据类型的转换。 - **其他函数**:...
5. SQL高级特性:例如EXISTS、ANY、ALL等操作符,以及如何使用子查询和连接(JOINS),还有事务控制(如COMMIT、ROLLBACK等)。 6. 特定数据库系统的特性:例如针对Microsoft Access、Microsoft和Sybase SQL Server...
5. 模式匹配函数:INSTR和LENGTH用于在字符串中查找子串并获取长度,而REPLACE, SUBSTR, TRANSLATE则用于字符串的替换、截取和翻译。 6. 条件语句和逻辑运算:WHERE子句用于过滤数据,而AND, OR, NOT等逻辑运算符则...
例如聚合函数COUNT、SUM、AVG、MAX、MIN,数学函数如ABS、FLOOR、CEIL、EXP、LN等,以及字符处理函数如CHR、CONCAT、INITCAP、UPPER、LOWER、LPAD、RPAD、LTRIM、RTRIM、REPLACE、SUBSTR、TRANSLATE、INSTR、LENGTH...
- LPAD, RPAD, LTRIM, RTRIM, REPLACE, SUBSTR, TRANSLATE, INSTR:字符串函数,用于对字符串进行格式化。 - TO_CHAR, TO_NUMBER:类型转换函数,用于将数据类型从一种转换为另一种。 - GREATEST, LEAST:用于比较值...