SQL语句
<h1>select 语句</h1>
<p>select语句的作用:选择,投影,连接</p>
<p>*<em>语法: SELECT [DISTINCt] {</em>,column [alias] …… } FROM table;**
[] 括起来的可选
{} 括起来的必选
关键字大写</p>
<p>oracle优化器的规划成本很高,所以调优思路是尽量让sql语句的执行计划能够被共享,sql语句的执行计划能够被共享的要求是两条sql语句要一模一样。</p>
<p><strong>缺省对齐方式:</strong>
左部对齐:日期、字符
右部对齐:数字格式数据</p>
<p>*<em> 表达式的优先级:</em> / + - ** </p>
<ul>
<li>乘除的优先级大于加减的</li>
<li>同级从左到右</li>
<li>非同级的想要优先用()括起来</li>
</ul>
<p><strong> 并置运算符 || </strong>
可以将一些列连接起来显示,也可以将一些列和一些字符串连接起来
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=15b3fd513bcc455004e4e5ac95a46d49&amp;file=file.png" alt="" /></p>
<p>""与‘’使用时机:""在起别名的时候使用,其他都用‘’</p>
<p><strong>去重:distinct </strong>
<strong>from dual 空表</strong></p>
<h1>where 和 order by</h1>
<p>缺省的日期值格式:DD-MON-YY
比较操作符:
\> 大于
\>= 大于等于
< 小于
<= 小于等于
<> 不等于</p>
<p>BETWEEN …… AND ……
IN 包含 NOT IN 不包含
LIKE 通配符</p>
<ul>
<li>% 代表0个或多个字符</li>
<li><em> 代表一个字符
escape '\' 声明转义字符
eg:SELECT * FROM emp WHERE ename LIKE '%_%' escape '\'; \将'</em>'转义成一个普通字符
is NULL 空值、is not NULL 非空值</li>
</ul>
<p>逻辑操作符:AND、OR、NOT</p>
<p>操作符的优先级:比较 > NOT > AND > OR</p>
<h2>ORDER BY 子句</h2>
<ul>
<li>ASC 升序,缺省</li>
<li>DESC 降序
1.可以对多个列进行排序
2.可以从select中没有的列进行排序
3.distinct 是去重后自动排序的,所以不能再对他进行order by.</li>
</ul>
<h1>单行函数</h1>
<p><strong>大小写转换函数</strong></p>
<ul>
<li>LOWER('SQL Course') 转换成小写</li>
<li>UPPER('SQL Course') 转换成大写</li>
<li>INITCAP('SQL Course') 首字母大写</li>
</ul>
<p><strong>字符操作函数</strong></p>
<ul>
<li>CONCAT('Good','String') ——》 GoodString 将两个字符串拼接成一个字符串,仅限于2个字符串</li>
<li>SUBSTR('String',1,3) ——》Str 截取字符串,第一个数字是开始位置,第二个数字是结束位置</li>
<li>LENGTH('String') ——》6 统计字符串的长度</li>
<li>INSTR('String','r') ——》 统计某个字符(r)的位置</li>
<li>LPAD(sal,10,'<em>') ——》</em>******5000 以指定字符(*)补齐字符串到指定长度(10),通常用于位数不够时进行补齐</li>
<li>TRIM('S' FROM 'SSMITH') ——》MITH 在字符串中去掉某个字符(S),通常用于去掉字符串中的空格</li>
</ul>
<p><strong>数字函数</strong></p>
<ul>
<li>ROUND:对指定的值进行四舍五入,ROUND(45.923,2) ——》45.92 ROUND(45.923,0) ——》46 ROUND(45.923,-1) ——》50
注意:0表示小数点左边第一个,-1是小数点左边第二位</li>
<li>TRUNC:对指定的值进行取整,TRUNC(45.923,2) ——》45.92 TRUNC(45.923) ——》45 TRUNC(45.923,-1) ——》40
注意:0表示小数点右边,可以不用写明,-1是小数点左边第一位</li>
<li>MOD:返回除法计算后的余数,通常用于计算某个数能否被另一个数整除,MOD(sal,comm) sal被comm整除后的余数</li>
</ul>
<p><strong>使用日期</strong>
缺省格式:DD-MON-YY
SYSDATE 返回当前系统的时间,返回日期和时间的函数
DUAL 是一个显示SYSDATE的虚拟表</p>
<p>日期的计算</p>
<ul>
<li>为一个日期值增加或者减少一个数字
eg: 计算员工入职的周数:select ename,(sysdate-hiredate)/7 week from emp;</li>
<li>计算出两个日期之间相隔的天数
>MONTHS_BETWEEN:两个日期之间的月数
ADD_MONTHS:为一个日期增加月数
NEXT_DAY:一个日期的下一个指定日子 NEXT_DAY('01-SEP-95','FRIDAY') ——》'08-SEP-95' 95年9月1日的下一个星期五
LAST_DAY:某个月份的最后一天
ROUND:对日期进行四舍五入计算 ROUND('25-JUL-95','MONTH')——》 01-AUG-95 对95年6月25日的月进行四舍五入
TRUNC: 对日期进行取整计算,跟ROUND的用户一样</li>
<li>要为日期值增加小时数,可以将小时数除以24后加上</li>
</ul>
<p><strong>转换函数</strong>
数据类型转换:</p>
<ul>
<li>隐式数据类型转换:自动转换,不用函数
>如下类型字符可自动转换
varchar2 or char -> number
varchar2 or char -> date
number -> varchar2
date -> varchar2
注意:隐式转换不会用到索引,所以出于性能考虑,在select的时候不要用到隐式转换
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=a89d36dca6bba1255c65ed749f79f7f7&amp;file=file.png" alt="" />
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=64297d0782ac377c5b3aebee97bef484&amp;file=file.png" alt="" /></li>
<li>显式数据类型转换
>number -> character:to_char
character ——> number:to_number
character ——> date:to_date
date ——> character:to_char</li>
</ul>
<p>to_date(date,'fmt')
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=d9c178888af993bd3d7e5a205dcfb63c&amp;file=file.png" alt="" />
to_date('2021-10-1','yyyy-mm-dd')
日期中时间的格式:HH24:MI:SS</p>
<p>to_char(number,'fmt')
>9:表示数字
0:强制显示一个0
$:在一个浮点值前面显示一个$符号
L:使用浮点类型的本地货币符号
.:显式一个小数点
,:千位的指示符
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=b05027b4c845c7885b0c09a5e9fb1768&amp;file=file.png" alt="" />
注意:如果显示的位数不够,他会输出一长串#号,所以数字的长度应该要够长</p>
<p>NVL(expr1,expr2):空值处理函数,如果expr1为空,则返回expr2,否则返回expr1
用NVL处理的时候,()内的两个字符类型必须要一致</p>
<p>DECODE 函数 类似于 CASE or IF-THEN-ELSE语句 (oracle独有的函数,case的功能更全面)
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=51734521510930b522f7b737a110978e&amp;file=file.png" alt="" /></p>