文章目录
日志编号 | 说明 |
---|---|
C-2020-08-10 | 第一次创建 |
SQL
SQL 遵循声明式编程范式。声明式编程是以数据结构的形式来表达程序执行的逻辑。声明式编程与命令式编程最大的区别就在于,声明式编程只是告诉计算机需要做什么,但是不用体现出具体怎么做。
这篇文章的作用主要是列举,列举出日常会用的内容,起检索作用。
SQL中常用操作符,方法
any,some,all
部分匹配/全匹配。
其中any和some的效果一样。
select sal from emp where sal > any(1000,1500,3000);
between x and y
范围内的值,这个是闭区间。
and or
在SQL中这两个字使用品率很高,其中and的优先级高于or,体现出来的效果去下:
select * from tbl_name where a = 'a' or b = 'b' and c='c';
--等同于
select * from tbl_name where a = 'a' or (b = 'b' and c='c');
exists(子查询)
exists表示存在,后面括号中都会跟上一个子查询。exists做的事情,当子查询能够通过传入的参数查询到对应记录(这里的记录不要求是什么固定字段。也就是任何字段都可以,也有常见的查个1),就表示满足子查询的条件。
注意,由于exists会把传入的每个值都执行一次子查询来判断是否满足条件,因此同等条件下,使用in的执行效果比exists更有效率。
like
like表示模糊查询,在like的条件中可以用%和_当占位符。其中%表示任意字符出现任意次, _表示任意字符出现1次。
注,在SQL有一些字符有特殊意义,此时在进行匹配的时候需要用到转义字符。SQL中的转义字符是escape。
escape
转义字符。SQL中由于一些字符有特殊意义,比如%这样的字符。当需要把这些类型的字符当做本身而非特殊意义使用时,就需要escape了。
select * from tbl_name where col_A like '%a%%' escape 'a';
上面的例子是想查询col_A中的值包含“a%”的内容。但是因为%本身在SQL里有特殊意义,因此使用了转义字符 escape。
escape的用法就是传入一个目标字符,之后在目标字符之后出现的第一个字符当做字符本身,而非特殊意义来使用。
+,-,*,/
在进行算数运算时,如果参与运算的参数中包括null,则整体运算结果就是null。
nvl(arg1,arg2)
去除null值。如果arg1是null,则返回arg2的值,否则返回arg1的值。
union
并集。将多个查询的结果集进行合并,合并过程里自动去除重复数据,重复的数据只保存一份。
union all
全集。将多个查询的结果集进行合并,合并过程里如果出现重复内容,都会进行保留。
intersect
交集。将多个查询的结果集进行交集操作,构造交集的过程里如果出现重复内容,会自动去重,重复内容只保留一份。
intersect all
交集。与上面的intersect不同的在于,这样算出来的交集不会自动去除重复数据,构造交集的过程里如果出现重复数据,都会进行保留。
minus
差集。将多个查询的结果集进行差集操作。
注意,作为minus的两个结果集,如果顺序不同,得到的结果可能不同。因为对于minus而言,是为了找出只存在第一个结果集,不存在第二个结果集中的数据。
--只存在于A,不存在于B
result_set_A minus result_set_B
--只存在于B,不存在于A
result_set_B minus result_set_A
group by having
在分组之后,可以用having 条件对分组结果进行筛选。
统一列举一些常见函数
函数 | 意义 |
---|---|
concat(str1,str2) | 拼接字符串 |
initcap(column) | 将结果集中对应字段查询结果的首字母大写 |
lower(str) | 小写 |
upper(str) | 大写 |
lpad(str,legth,[pad_str]) | 在str左侧填充pad_str,使str的长度达到Length,默认pad_str是空格 |
rpad(str,legth,[pad_str]) | 在str右侧填充pad_str,使str的长度达到Length,默认pad_str是空格 |
ltrim(str1,[str2]) | 左去除str1中包含的str2,str2默认是空格 |
rtrim(str1,[str2]) | 右去除str1中包含的str2,str2默认是空格 |
length(str) | 返回字符串长度 |
trim(str1 from str2) | oracle里面没有这个方法好像。 |
round(number ,n) | 四舍五入number,n表示小数点后几位 |
trunc(number,n) | 截取数值number,n表示小数点后几位 |
mod(x,y) | 返回x对y取余的结果 |
ceil(number) | 向上取整 |
floor(number) | 向下取整 |
sum() | 求合 |
COUNT() | 计数器 |
MAX()/MIN() | 最大值/最小值 |
AVG() | 平均值 |
数据库隔离级别
数据库隔离级别有四个,分别是读未提交,读已提交,可重复读,序列化。
针对不同的隔离级别,会出现脏读,不可重复读,幻读这三种异常情况。
隔离级别 | 异常 |
---|---|
读未提交 | 脏读,不可重复读,幻读 |
读已提交 | 不可重复读,幻读 |
可重复读 | 幻读 |
序列化 | 无 |