有了mysql的SQL经验,学习起oracle感觉得心应手,下面是对于我了解到的语法的一些小见解:
一、单表查询
(一)简单条件查询(SQL通用语言)
1.精确查询
2.模糊查询
select * from 表名 where 字段名 like '%刘%'
3.and运算符(并且)
select * from 表名 where 条件1 and 条件2
4.or运算符(或)
select * from 表名 where 条件1 and 条件2
5.and 与or运算符混合使用
6.范围查询
select * from 表名 where usenum>=10000 and usenum<=20000
select * from 表名 where usenum between 10000 and 20000
7.空值查询
select * from 表名 where 字段 is null
select * from 表名 where 字段 is not null
(二)去掉重复记录
--写法一
select distinct addressid from T_OWNERS ;
--写法二
select distinct(addressid) from t_owners;
(三)排序查询
order by 字段 asc/desc
(四)基于伪列的查询
伪列是oracle中独有的,伪列也是真实存在的列,也是可以用来进行查询操作的,伪列只能用来查,不能做增删改操作
ROWID:物理文件上唯一区别这条记录的唯一标识
ROWNUM为结果集中每一行编号
(五)聚合统计
Sum/avg/count/max/min
二、连接查询
1.内连接
select * from 表1 inner join 表2 on 连接条件;
2.左外连接
SELECT * FROM 左表 left join 右表 on 连接条件;
SELECT * FROM 左表,右表 WHERE ow.id=ac.owneruuid(+) -----------左连接(+)写在右表条件上
3.右外连接(与左外链接反之)
4.全外连接(自行了解)
三、子查询
(一)单行子查询
select * from 表名 where 条件 in( select 字段 from 表名 where 条件)
(二)多行子查询
1、in 运算符符合里边一个条件
2、all运算符符合所有条件
3、any运算符符合任意一个条件
(三)嵌套子查询
(四)标量子查询
标量子查询实现:dual,oracle中独有的,是虚表,专门用来帮忙显示数据的
(五)相关子查询
四、分页查询(借助rownum,需要用到子查询)
select * from (select rownum r,t.* from 表名 t where rownum<=20) where r>10
五、单行函数–PL/SQL
(一)字符函数
CONCAT : 拼接两个字符串
select concat(stuname,age) 只能拼接两个字段 from student
LENGTH :以字符给出字符串的长度
select length(stuname),stuname from student
REPLACE :执行字符串搜索和替换
select replace(‘helloworld’,‘e’,‘zz’) from dual;
(二)数值函数
函数
用途
ABS(value)
绝对值
CEIL(value)
大于或等于value的最小整数
FLOOR(value)
小于或等于value的最大整数
MOD(value,divisor)
求模
POWER(value,exponent)
value的exponent次幂
ROUND(value,precision)
按precision 精度4舍5入
SQRT(value)
value 的平方根(三)日期函数
函数
用途
ADD_MONTHS
在日期date上增加count个月
LAST_DAY( date ))
返回日期date 所在月的最后一天
MONTHS_BETWEEN(date2,date1))
给出 Date2 - date1 的月数(可以是小数)
NEXT_DAY( date,’day’)
给出日期date之后下一天的日期,这里的day为星期
ROUND(date,’format’)
ROUND函数判断时间的区间
NEXT_DAY( date,’day’)
给出日期date之后下一天的日期,这里的day为星期(四)转换函数
函数
用途
TO_CHAR
转换日期格式到字符串
TO_DATE
按照指定的格式将字符串转换到日期型
TO_NUMBER
将数字字串转换到数字(五)其它函数
函数
用途
举例
NVL(检测的值,如果为null的值)
空值处理函数
select NVL(age,0) from student
NVL2(检测的值,如果不为null的值,如果为null的值)
空值处理函数
select NVL2(age,0,1) from student
decode
根据条件返回相应值
decode(条件,值1,翻译值1,值2,翻译值2,…值n,翻译值n,缺省值)
六、分析函数
函数
用途
RANK
相同的值排名相同,排名跳跃
DENSE_RANK
相同的值排名相同,排名连续
ROW_NUMBER
返回连续的排名,无论值是否相等
七、集合运算
函数
用途
UNION ALL(并集)
返回各个查询的所有记录,包括重复记录
UNION(并集)
返回各个查询的所有记录,不包括重复记录
INTERSECT(交集)
返回两个查询共有的记录
MINUS(差集)
返回第一个查询检索出的记录减去第二个查询检索出的记录之后剩余的记录
八、视图
(一)什么是视图
视图是基于 SQL 语句的结果集的可视化的表,,视图包含行和列,表是物理存在的,视图是虚拟的内存表。
视图本身并不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也随之变化。
(二)创建或替换视图语法
CREATE OR REPLACE FORCE VIEW view_name AS subquery
[WITH CHECK OPTION ] :插入或修改的数据行必须满足视图定义的约束;
[WITH READ ONLY] : 该视图上不能进行任何DML操作。
(三)删除视图语法
DROP VIEW view_name
九、序列
(一)什么是序列
序列是ORACLE提供的用于产生一系列唯一数字的数据库对象
(二)创建与使用序列
CREATE SEQUENCE 序列名 [START WITH 起始数] [INCREMENT BY 增长量]
[MAXVALUE 最大值] [MINVALUE 最小值]
提取下一个值 :select 序列名称.nextval from dual
提取当前值:select 序列名称.currval from dual
十、同义词
十一、索引
(一)什么是索引
索引是一种独立于表的数据库对象,可以存储在于表不同的磁盘中间或表空间;
索引相当于字典的目录,作用在于提升查询效率,降低磁盘读写,提升数据库性能。
(二)普通索引
create index 索引名称 on 表名(列名);
(三)唯一索引
create unique index 索引名称 on 表名(列名);
(四)复合索引
create index 索引名称 on 表名(列名,列名.....);
到这里大概就结束了,以后有涉及到新学会继续分享的,(* ̄︶ ̄)