Oracle基础
1、sql基础
1.1 基本概念
数据库对象:
1、表
2、约束条件:保证数据完整性
3、视图:虚表,命名的查询语句
4、索引:加速查询(加快查询的速度) create [unique] index idxname on tablename (col...) ; drop index idxname; 索引不可以更改,可删除重建
5、序列:一串连续递增或递减的数字,部长相同(代理键)
6、同义词:一个对象的另外一个叫法(对象的别名)
7、存储过程:用于操作
8、函数:用作复杂运算的,用于计算
9、触发器:由事件触发的存储过程
10、包
1.2 基本的sql语句
1、数据操作语言(DML)
增: insert into 表名 (字段1, 字段2) values (值1, 值2)
删:delete from 表名 where 条件
改:update 表名 set 字段1=值1, 字段2=值2... where条件
2、事务控制语言:
commit、rollback、savepoint存储点
3、数据定义语言(DDL):
对对象操作。
只对数据进行删除:
truncate :清除表中所有数据 ,不能回滚,释放存储空间 【truncate table customer】;
delete : 可以删除所有行数据,但可以回滚,不释放存储空间。【delete from customer where ...】;
对表结构进行删除:
drop : 删除表结构,把整个表都删了【drop table customer】
drop : 删除表字段, 只删除表中某个字段 【alter table customer drop column (字段1, 字段2, ...)】
增列: alter table 表名 add (字段1 数据类型 [默认值 ], ...)
修改列的类型和长度: alter table 表名 modify (字段1 类型 默认值)
删除字段: alter table 表名 drop column (字段1)
删除表: drop table 表名 cascade; 删除关联
rename dd to xx; 重命名表
添加主键: Alter table tablename add primary key (col )
删除主键: Alter table tablename drop primary key(col)
alter table emp add constraint ename_pk primary key (id, enmae); 复合主键




4、权限控制语句(DCL)
grant授予权限、revoke移除权限
1.3 常用函数:
1、 NVL(字段名,将要赋值的值)、in / not in 、like模糊匹配字符串的值、 is null \ is not null 、between ..and...、 通配符% -(单字符)、 distinct去重;
逻辑操作符(先not、再and、最后or)、null值作为无穷大来处理、 rownum显示行数量。
decode( 条件,比较值1,返回值1, ... 默认返回值)
to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss')
to_date('2004-05-07','yyyy-mm-dd')
2、单行函数:对单行数据进行计算并返回一个值的函数
initcap()、concat('', '')、length()、
substr(str, a ,b ); 从0开始,a是起始位置,b为长度
instr(str1, str2, a, b); 返回str1中包含str2的位置
lpad (列名, 数字,'要补上的字符') 左补
ltrim()左截取
replace(x, y [,z]) 返回X中的Y用Z替换后的结果,若没有z,则将X中的y删除
translate(x, y, z) 将y串中的x替换为z
3、多行函数:对多行数据(一组数据)进行计算返回一个值的函数
-- number函数
abs(x) 绝对值
ceil(x) 向上取整、floor(x) 向下取整
round(x [,y]) 保留y位小数,y位负数舍入到小数点左边相应的位上,y必须为整数 【四舍五入】
trunc(x [,y])截取值函数,
-- 时间函数
to_date( '2017-02-12', 'dd-mon-rr');
add_months(date, x);
sysdate系统时间、current_date
last_day() , 指定日期所在月份的最后一天的日期
localTimeStamp() ;
months_between(近日期, 以前的日期)
next_day(日期, 周几)
-- 显示转换
to_number(char, '')字符--数字; to_date(char, '') 字符---日期; to_char(date, '') 时间--字符
YYYY YEAR(年的拼写)
MM MONTH(月的全名) MON(月的前三个字符)
DD DAY(星期的全名)
HH24:MI:SS AM HH12:MI:SS PM
1.4 常用oracle数据库sql写法
1 #region 更新客户日志信息 2 public bool UpdateRecordeCutomerLog(string resultCode, string resultMsg, string Kunner) 3 { 4 try 5 { 6 string sql = @"update CUSTOMER_SAPLOG set 7 ishandled = '1', 8 issuccess = :issuccess, 9 resultdesc = :resultdesc, 10 handledate = :handledate 11 where 12 kunner = :kunner and 13 ishandled = '0'"; 14 15 OracleParameter[] pars = { 16 new OracleParameter(":issuccess",resultCode), 17 new OracleParameter(":resultdesc", resultMsg ), 18 new OracleParameter(":handledate", DateTime.Now), 19 new OracleParameter(":kunner", Kunner ) 20 }; 21 22 int count = DatabaseHelper.ExecuteSql(sql, pars); 23 return count > 0; 24 } 25 catch (Exception ex) 26 { 27 throw new Exception("更新客户日志信息出错:" + ex.Message); 28 } 29 } 30 #endregion 31 32 33 #region 查询客户信息 34 public int getCustomer(string cusName) 35 { 36 try 37 { 38 string strSQL; 39 strSQL = string.Format (@"SELECT CustomerName FROM Customer where CustomerName = '{0}'", cusName); 40 int count = DatabaseHelper.ExecuteInt(strSQL); 41 return count; 42 } 43 catch (Exception ex) 44 { 45 throw new Exception("查绚MES客户表发生异常,异常信息:" + ex.Message); 46 } 47 48 } 49 #endregion 50 51 #region 判断SalesOrder是否存在 52 public bool GetSalesOrder(string name) 53 { 54 try 55 { 56 string strSQL; 57 strSQL = @"SELECT SalesOrderName 58 FROM SalesOrder 59 where 60 SalesOrderName = '" + name + "'"; 61 int count = DatabaseHelper.ExecuteInt(strSQL); 62 return count > 0; 63 } 64 catch (Exception ex) 65 { 66 throw new Exception("查绚SalesOrder表发生异常,异常信息:" + ex.Message); 67 } 68 } 69 #endregion
2 视图
视图概念
1、视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上。
2、视图在操作上和数据表没有什么区别,本质区别是:数据表是实际存储记录的地方,然而视图并不保存任何记录。
3、相同的数据表,根据不同用户的不同需求,可以创建不同的视图(不同的查询语句)
4、视图的目的是方便查询,一般情况下不能对视图进行增删改
5、优点:
- 筛选表中的行,降低数据库的复杂程度
- 放置未经许可的用户访问敏感数据
6、创建视图:
create View vw_TblArea
as
select
t1.AreaId 城市编号,
t1.AreaName 城市名称,
t1.AreaName 省份名称
from TblArea as t1
inner join TblArea as t2 on t1.AreaId = t2.AreaPid
7、使用视图:
select * from vw_TblArea 或者
select * from vw_TblArea where 城市编号 > 10; --注意这里只能用视图中显示的名称,如果有别名,只能用别名查询
8、总结:视图就相当数据库的一个对象,存储这个sql语句;视图只能存储sql查询语句,存储过程可以写任何东西
普通视图
并不存储数据(虚拟表),访问的是真实表中的数据;
使用注意事项:1、视图查询不能用ordery by
浙公网安备 33010602011771号