第一篇:黑马程序员c语言教程:SQL函数
大小写控制函数
大小写控制函数
字符控制函数
数字函数
ROUND 函数
TRUNC 函数
MOD 函数
第二篇:黑马程序员c语言教程:SQL函数
日期
Oracle 中的日期型数据实际含有两个值: 日期和时间。默认的日期格式是 DD-MON-RR.函数SYSDATE 返回: 日期 时间
在日期上加上或减去一个数字结果仍为日期。两个日期相减返回日期之间相差的天数。
可以用数字除24来向日期中加上或减去小时。
日期的数学运算
日期函数
转换函数
隐式数据类型转换
显式数据类型转换
第三篇:黑马程序员c语言教程:SQL函数(7)
什么是分组函数
组函数类型
组函数语法
AVG(平均值)和 SUM(合计)函数
MIN(最小值)和 MAX(最大值)函数
COUNT(计数)函数
DISTINCT(distinct)关键字
组函数与空值
在组函数中使用NVL函数
第四篇:黑马程序员c语言教程:sql语言课堂强化
sql语言课堂强化 select a, b, c select.....(多个列)from.....一个表(多个表)where....(条件)group by...(分组)--难点 having......(分组过滤)order by 1(排序)
SQL语言是数据库的“键盘”,请大家重视基本功的训练
课堂考试 9:10 左右 学员到我笔记本上 上机操作 求所有部门的平均奖金
select avg(nvl(comm, 0))from emp;
select avg(sal)from emp;求各部门的平均薪水
select deptno, avg(sal)from emp group by deptno
====>错误案例
select deptno, ename, avg(sal)from emp group by deptno /
select d from emp group by a, b, c 求各部门每个工种的平均薪水, 并显示部门编号、工种、平均薪水
select deptno, job, avg(sal)
from emp group by deptno, job--先按deptno、job分组,出来n组数据,在这个基础之上,再进行计算求各部门每个工种大于2000的薪水 select sal from emp where sal>2000
4-1 求各部门每个工种,平均薪水大于2000的薪水
select deptno, job, avg(sal)from emp group by deptno, job having avg(sal)>2000 求10号部门的平均工资(2种写法)select deptno, avg(sal)from emp where deptno=10 group by deptno
select deptno, avg(sal)from emp group by deptno having deptno = 10 创建一个学生表
sid sname
email sex age 7 并向表中插入一条数据
create table student(sid number, sname varchar2(20), email varchar2(64), sex number,age number)insert into student(sid, sname, email, sex, age)values(1, 'tom11', '11@163.com', 1, 20)
//只显示大于4个人的部门信息
select deptno, count(*)from emp group by deptno having count(deptno)> 4 /
--创建表
--1 查询 员工号 姓名 月薪 年薪 年收入 部门名称
select e.deptno, e.ename, e.sal, e.sal*12 yearsal,(e.sal*12+nvl(e.comm,0))incoming , d.dname from emp e, dept d where e.deptno = d.deptno
====>
---2 创建一个表, 把第一步骤查询的信息,存放在另外一张表中 create table s1 as(select e.deptno, e.ename, e.sal, e.sal*12 yearsal,(e.sal*12+nvl(e.comm,0))incoming , d.dname from emp e, dept d where e.deptno = d.deptno)
create view myview1 as(select e.deptno, e.ename, e.sal, e.sal*12 yearsal,(e.sal*12+nvl(e.comm,0))incoming , d.dname from emp e, dept d where e.deptno = d.deptno)
create table empincome as
select e.empno, e.ename, e.sal, e.sal*12 annalsal, sal*12+nvl(comm, 0)income, d.dname from emp e, dept d where e.deptno = d.deptno;
--创建表的同时copy数据
第五篇:黑马程序员c语言教程:Oracle简介
9.通过子查询建表 通过子查询建表的例子
SQL>CREATE TABLE emp_41 AS SELECT id, last_name, userid, start_date FROM s_emp WHERE dept_id = 41;SQL> CREATE TABLE A as select * from B where 1=2;只要表的结构.10.用子查询建表的注意事项
可以关连多个表及用集合函数生成新表,注意选择出来的字段必须有合法的字段名称,且不能重复。
用子查询方式建立的表,只有非空NOT NULL的约束条件能继承过来, 其它的约束条件和默认值都没有继承过来.根据需要,可以用alter table add constraint ……再建立其它的约束条件,如primary key等.11.Foreign Key的可选参数ON DELETE CASCADE 在创建Foreign Key时可以加可选参数: ON DELETE CASCADE它的含义是如果删除外键主表里的内容,子表里相关的内容将一起被删除.如果没有ON DELETE CASCADE参数,子表里有内容,父表里的主关键字记录不能被删除掉.12.如果数据库表里有不满足的记录存在,建立约束条件将不会成功.13.给表创建和删除同义词的例子 SQL> CREATE SYNONYM d_sum 2 FOR dept_sum_vu;SQL> CREATE PUBLIC SYNONYM s_dept 2 FOR alice.s_dept;SQL> DROP SYNONYM s_dept;
十、ORACLE里的数据字典
1.什么是数据字典?ORACLE的数据字典是数据库的重要组成部分之一,它随着数据库 的产生而产生, 随着数据库的变化而变化, 体现为sys用户下所有的一些表和视图.2.数据字典里存了以下内容: 用户信息
用户的权限信息
所有数据对象信息表的约束条件统计分析数据库的视图等 不能手工修改数据字典里的信息.16
J2EE @ zxw 3.常用的数据字典
Dictionary 存放所有数据表,视图,同义词名称和解释 Dict_columns 数据字典里字段名称的和解释 Dba_users 用户 Dba_tablespaces 表空间
Dba_data_files 数据库的文件 Dba_free_space 空闲表空间 Dba_rollback_segs 回滚段
User_objects 数据对象 User_constraints 约束条件 User_sequences 序列号 User_views 视图 User_indexes 索引 User_synonyms 同义词
Session_roles 用户的角色 User_role_privs 用户的角色权限 User_sys_privs 用户的系统权限 User_tab_privs 用户的表级权限 V$session 实时用户情况 V$sysstat 实时系统统计 V$sesstat 实时用户统计 V$sgastat 实时SGA使用 V$locked_object 实时锁 V$controlfile 控制文件 V$logfile 日志文件 V$parameter 参数文件 4.数据字典的分类 数据字典四大类别
User_ 用户下所有数据库对象
All_ 用户权限范围内所有的数据库对象 Dba_ 所有的数据库对象
V$Content$nbsp;统计分析数据库的视图 赋于oem_monitor权限非DBA用户也可查询V$*视图
5.查询数据字典
SQL> select * from dictionary where instr(comments,'index')>0;SQL> select constraint_name, constraint_type, 2 search_condition, r_constraint_name 3 from user_constraints 4 where table_name = ‘&table_name';十一.控制数据、INSERT(往数据表里插入记录的语句)SQL> insert into 表名(字段名1, 字段名2, ……)values(值1, 值2, ……);SQL> insert into 表名(字段名1, 字段名2, ……)select(字段名1, 字段名2, ……)from 另外的表名 where 条件;可以用&标记变量的方法多次输入记录
快速插入数据的方法, 一般用于大于128M的数据转移 SQL> insert /*+ append */ into 表名
select * from 另外的用户名.另外的表名 WHERE 条件;SQL> commit;注意事项:
用INSERT /*+ APPEND */ 的方法会对target_tablename产生级别为6的独占锁,如果运行此命令时还有对target_tablename的DML操作会排队在它后面, 对OLTP系统在用的表操作是不合适的。17
J2EE @ zxw 2.插入字符串类型的字段的注意事项: 字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’
如果字段值里包含单引号’ 需要进行字符串转换, 我们把它替换成两个 单引号’ ’
字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验 ‘’ 标记是NULL, user 标明当前用户
日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒
用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)TO_DATE()还有很多种日期格式, 可以参看ORACLE DOC.年-月-日 小时:分钟:秒 的格式YYYY-MM-DD HH24:MI:SS NSERT时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型, 方法借用ORACLE里自带的DBMS_LOB程序包.3、UPDATE(修改数据表里记录的语句)SQL> UPDATE 表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 条件;如果修改的值N没有赋值或定义时, 将把原来的记录内容清为NULL, 最好在修改前进行非空校验;值N超过定义的长度会出错, 最好在插入前进行长度校验.新功能,可以修改子查询后的结果集
例子:SQL> update(select * from s_dept)set id=50 where id=60;
4、DELETE(删除数据表里记录的语句)SQL> DELETE FROM 表名 WHERE 条件;注意:删除记录并不能释放ORACLE里被占用的数据块表空间.它只把那些 被删除的数据块标成unused.如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间
SQL> TRUNCATE TABLE 表名;此操作不可回退.5、SQL语句的分类 数据定义语言(DDL):create、alter、drop(创建、修改结构、删除)(其他:rename)数据操纵语言(DML):insert、delete、select、update(增、删、查、改)(其他:truncate)
数据控制语言(DCL):grant、revoke(授权、回收)、set role 事务控制:commit、rollback、savepoint(其他:lock table、set constraint、set transaction)
审计控制:audit、noaudit 系统控制:alter system 会话控制:alter session 其他语句:comment(添加注释)、explain plan、analyze、validate、call
6、ORACLE里事务控制 Commit 提交事务 Rollback 回退事务
Savepoint 设置断点, 在事务中标记位置, 事务结束, 断点释放
事务结束的情况遇到commit或者rollback遇到DDL和DCL语句发现错误,如死锁用户退出
SQL*PLUS系统重启或崩溃 7.DML操作的注意事项 18
J2EE @ zxw 以上SQL语句对表都加上了行级锁, 确认完成后, 必须加上事物处理结束的命令COMMIT 才能正式生效, 否则改变不一定写入数据库里.行级锁也未能得到释放.如果想撤回这些操作, 可以用命令 ROLLBACK 复原.在运行INSERT, DELETE 和 UPDATE 语句前最好估算一下可能操作的记录范围, 应该把它限定在较小(一万条记录)范围内,.否则ORACLE处理这个事物用到很大的回退段.程序响应慢甚至失去响应.如果记录数上十万以上这些操作, 可以把这些SQL语句分段分次完成, 其间加上COMMIT 确认事物处理.太过频繁的commit不好