第一篇:黑马程序员c语言教程:SQL函数(7)
什么是分组函数
组函数类型
组函数语法
AVG(平均值)和 SUM(合计)函数
MIN(最小值)和 MAX(最大值)函数
COUNT(计数)函数
DISTINCT(distinct)关键字
组函数与空值
在组函数中使用NVL函数
第二篇:黑马程序员c语言教程:SQL函数
日期
Oracle 中的日期型数据实际含有两个值: 日期和时间。默认的日期格式是 DD-MON-RR.函数SYSDATE 返回: 日期 时间
在日期上加上或减去一个数字结果仍为日期。两个日期相减返回日期之间相差的天数。
可以用数字除24来向日期中加上或减去小时。
日期的数学运算
日期函数
转换函数
隐式数据类型转换
显式数据类型转换
第三篇:黑马程序员c语言教程:SQL函数
大小写控制函数
大小写控制函数
字符控制函数
数字函数
ROUND 函数
TRUNC 函数
MOD 函数
第四篇:黑马程序员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概念(7)
十六、控制用户访问 1.权限的类别
系统级权限: 针对整个系统操作的权限 如: 用户名/密码, 使用表空间的限额等
对象级权限: 针对某个具体object操作的权限
如: 针对某个表, 视图, 表的某个字段的select, update, delete权限 23
J2EE @ zxw 2.查看当前数据库的用户信息
SQL>select username,default_tablespace,temporary_tablespace from dba_users;查看在线用户信息 SQL>select count “number”,username “current username” from v$session group by username;用户查看自己的缺省表空间SQL>select username,default_tablespace from user_users;3.创建新用户
SQL> create user username identified by password default tablespace tablespace_name temporary tablespace temp quota unlimited on tablespace_name quota 1k on system [quota 1k on other_tablespace_name „„];给用户赋权限
SQL> grant connect, resource to username;查看当前用户的权限角色
SQL> select * from user_role_privs;查看当前用户的系统权限和表级权限
SQL> select * from user_sys_privs;SQL> select * from user_tab_privs;4、常用的角色及其权限
CONNECT 8 privs 连上Oracle,做最基本操作 RESOURCE 8 privs 具有程序开发最的权限 DBA 114 privs 数据库管理员所有权限
EXP_FULL_DATABASE 5 privs 数据库整个备份输出的权限 IMP_FULL_DATABASE 64 privs 数据库整个备份输入的权限 查看角色明细的系统权限
SQL> select * from role_sys_privs;
5、改变老用户 可以改变老用户的密码, 缺省表空间, 临时表空间, 空间限额.SQL> alter user username identified by password default tablespace tablespace_name temporary tablespace temp quota unlimited on tablespace_name quota 1k on system
[quota 1k on other_tablespace_name „„];撤销用户的角色或权限
SQL> revoke role_name or priv_name from username;注意事项
撤消用户的角色dba时, 同时撤消了用户unlimited tablespace的系统权限, 切记要再次赋予resource角色给此用户 SQL> grant resource to username;
6、删除用户
如果用户下没有任何数据对象 SQL> drop user username;如果用户下有数据对象
SQL> drop user username cascade;注意事项
如果用户下有含clob,blob字段的表, 应该先删除这些表后,才能用cascade选项完全删除.7、角色的概念和管理 24
J2EE @ zxw 角色是命名多个相关权限的组合.能把它赋于其它的用户或角色我们能创建角色, 使权限管理更容易一些.8、赋于系统的权限语法和例子 语法: SQL> GRANT sys_priv TO {user|role|PUBLIC} [WITH ADMIN OPTION];例子: SQL> GRANT create session TO sue, rich;SQL> GRANT create table To scott, manager;注意: 如果用WITH ADMIN OPTION通过中间用户赋于的系统权限中间用户删除后, 系统权限仍然存在.9、赋于数据对象级的权限语法和例子 语法: SQL> GRANT object_priv [(columns)] ON object TO {user|role|PUBLIC} [WITH GRANT OPTION];例子: SQL> GRANT select ON s_emp TO sue, rich;SQL> GRANT update(name, region_id)ON s_dept TO scott, manager;注意: 如果用WITH GRANT OPTION通过中间用户赋于的对象权限 中间用户删除后,对象权限就不存在了.-------------
----------------------------完--------------------------补充:
rownum表中的行号,自动生成的,只能用<,<=操作符 rowid用来唯一表示数据库表中的一行(1)在oralce上的分页需要用到伪列,只所以这么做,是因为oralce不支持rownum比较 比如说找出第三行纪录,那就是 select last_name, salary from(select rownum a, b.* from s_emp b)where a=3 如果找出第10行到第20行的数据的话,那就必须用到 select last_name, salary from(select rownum a, b.* from s_emp b)where a > 10 and a < 2;这是sql级别的分页,优点是速度快,缺点是可移植性差;(2)COURSEID COURSENAME SCORE------------------------------1 java 70 2 oracle 90 3 xml 40 4 jsp 30 5 servlet 80 25
J2EE @ zxw SQL> select courseid, coursename ,score ,decode(sign(score-61),-1,'fail','pass')as mark from course_v;COURSEID COURSENAME SCORE MARK----------------------------------1 java 70 pass 2 oracle 90 pass 3 xml 40 fail 4 jsp 30 fail 5 servlet 80 pass
(3)已经知道原表
year salary---------------------------------------2000 1000 2001 2000 2002 3000 2003 4000 显示查询结果
year salary---------------------------------------2000 1000 2001 3000 2002 6000 2003 10000 即salary为以前年的工资的和; 解答过程如下:
select b.year,sum(a.salary)from test a,test b where a.year<=b.year group by b.year order by year
/*============================== *Author: MartriWang@gmail.com *Date: 09/05/2007 *Description:ORACLE Summary
*============================*/ 汇总:
set autotrace on set autotrace traceonly explain set timing on 或通过SQL*PLUS trace,然后查看user_dump_dest下的跟踪文件,使用tkprof工具格式化后阅览。
alter session set events '10046 trace name context forever,level 12';alter session set events '10046 trace name context off';SELECT p.spid,s.username FROM v$session s,v$process p WHERE s.audsid=USERENV('sessionid')AND s.paddr = p.addr;使用方法示例:
DBserver% sqlplus perf/perf
SQL*Plus: Release 9.2.0.6.064bit Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.6.0-Production SQL> set timing on SQL> set autotrace on SQL> select count(*)from perf_sdcch_nn where start_time =(select max(start_time)from perf_sdcch_nn);COUNT(*)----------638 Elapsed: 00:00:00.80 Execution Plan---------------------------0 SELECT STATEMENT Optimizer=CHOOSE(Cost=1 Card=1 Bytes=8)1 0 SORT(AGGREGATE)2 1 INDEX(RANGE SCAN)OF 'IDX02_PERF_SDCCH_NN'(NON-UNIQUE)(Cost=2 Card=1495 Bytes=11960)3 2 SORT(AGGREGATE)4 3 INDEX(FULL SCAN(MIN/MAX))OF 'IDX02_PERF_SDCCH_NN'(NON-UNIQUE)(Cost=1 Card=3852090 Bytes=30816720)Statistics---------------------------0 recursive calls 0 db block gets 15 consistent gets 0 physical reads 0 redo size 492 bytes sent via SQL*Net to client 656 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts(memory)0 sorts(disk)1 rows processed SQL> 从上面的示例我们可以看到,该SQL语句执行花了0.8秒,select语句和inline view,都使用了名为'IDX02_PERF_SDCCH_NN'的索引
物理读为0,redo log size为0,没有生成REDO日志。