当前所在位置:珠峰网资料 >> 计算机 >> Oracle认证 >> 正文
Oracle常用sql操作整理总结(2)
发布时间:2010/12/4 23:13:40 来源:城市学习网 编辑:ziteng

  3. 数据表间的连接技巧

  连接N个表, 需要N-1个连接操作

  被连接的表最好建一个单字符的别名, 字段名前加上这个单字符的别名

  BETWEEN .. AND.. 比用 >= AND <= 要好

  连接操作的字段名上最好要有索引

  连接操作的字段最好用整数数字类型

  有外连接时, 不能用OR或IN的比较操作

  4. 如何分析和执行SQL语句

  写多表连接SQL语句时要知道它的分析执行计划的情况.

  Sys用户下运行@/ORACLE_HOME/sqlplus/admin/plustrce.sql 产生plustrace角色

  Sys用户下把此角色赋予一般用户 SQL> grant plustrace to &username;

  一般用户下运行@/ORACLE_HOME/rdbms/admin/utlxplan.sql

  产生plan_table

  SQL> set time on; 说明:打开时间显示

  SQL> set autotrace on; 说明:打开自动分析统计,并显示SQL语句的运行结果

  SQL> set autotrace traceonly; 说明:打开自动分析统计,不显示SQL语句的运行结果

  接下来你就运行测试SQL语句,看到其分析统计结果了。

  一般来讲,我们的SQL语句应该避免大表的全表扫描。

  SQL> set autotrace off; 说明:关闭自动分析统计

  五、集合函数

  经常和group by一起使用

  1. 集合函数列表

  AVG (DISTINCT | ALL | N) 取平均值

  COUNT (DISTINCT | ALL | N | expr | * ) 统计数量

  MAX (DISTINCT | ALL | N) 取最大值

  MIN (DISTINCT | ALL | N) 取最小值

  SUM (DISTINCT | ALL | N) 取合计值

  STDDEV (DISTINCT | ALL | N) 取偏差值,如果组里选择的内容都相同,结果为0

  VARIANCE (DISTINCT | ALL | N) 取平方偏差值

  2. 使用集合函数的语法

  SELECT column, group_function FROM table

  WHERE condition GROUP BY group_by_expression

  HAVING group_condition ORDER BY column;

  3. 使用count时的注意事项

  SELECT COUNT(*)  FROM table;

  SELECT COUNT(常量) FROM table;

  都是统计表中记录数量,如果没有PK后者要好一些

  SELECT COUNT(all 字段名) FROM table;

  SELECT COUNT(字段名) FROM table;

  不会统计为NULL的字段的数量

  SUM,AVG时都会忽略为NULL的字段

  4. 用group by时的限制条件

  SELECT字段名不能随意, 要包含在GROUP BY的字段里

  GROUP BY后ORDER BY时不能用位置符号和别名

  限制GROUP BY的显示结果, 用HAVING条件

  5. 例子

  SQL> select title,sum(salary) payroll from s_emp

  where title like ‘VP%’ group by title

  having sum(salary)>5000 order by sum(salary) desc;

  找出某表里字段重复的记录数, 并显示

  SQL> select (duplicate field names) from table_name

  group by (list out fields) having count(*)>1;

  6. 判断题(T/F)

  (1) Group functions include nulls in calculations [F]

  (2) Using the having clause to exclude rows from a group calculation [F]

  解释:

  Group function 都是忽略NULL值的 如果您要计算NULL值, 用NVL函数

  Where语句在Group By前把结果集排除在外Having语句在Group By后把结果集排除在外

  六、子查询

  1. 查询语句可以嵌套

  例如: SELECT …… FROM (SELECT …… FROM表名1, [表名2, ……] WHERE 条件) WHERE 条件2;

  2. 何处可用子查询?

  当查询条件是不确定的条件时

  DML(insert, update,delete)语句里也可用子查询

  HAVING里也可用子查询

  3. 两个查询语句的结果可以做集合操作

  例如:

  并集UNION(去掉重复记录)

  并集UNION ALL(不去掉重复记录)

  差集MINUS,

  交集INTERSECT

  4. 子查询的注意事项

  先执行括号里面的SQL语句,一层层到外面

  内部查询只执行一次

  如果里层的结果集返回多个,不能用= > < >= <=等比较符要用IN.

  5. 子查询的例子(1)

  SQL> select title,avg(salary) from s_emp

  group by title Having avg(salary) =

  (select min(avg(salary)) from s_emp

  group by title);

  找到最低平均工资的职位名称和工资

  5. 子查询的例子(2)

  子查询可以用父查询里的表名

  这条SQL语句是对的:

  SQL>select cty_name from city where st_code in

  (select st_code from state where st_name=’TENNESSEE’ and

  city.cnt_code=state.cnt_code);

  说明:父查询调用子查询只执行一次.

  6.取出结果集的80 到100的SQL语句

  ORACLE处理每个结果集只有一个ROWNUM字段标明它的逻辑位置,

  并且只能 用ROWNUM<100, 不能用ROWNUM>80。

  以下是经过分析后较好的两种ORACLE取得结果集80到100间的SQL语句

  ( ID是唯一关键字的字段名 )

  语句写法:

  SQL>select * from (

  ( select rownum as numrow, c.* from (

  select [field_name,...] from table_name where 条件1 order by 条件2) c)

  where numrow > 80 and numrow <= 100 )

  order by 条件3;

  七、在执行SQL语句时绑定变量

  1. 接收和定义变量的SQL*PLUS命令

  ACCEPT

  DEFINE UNDEFINE

  &

  2. 绑定变量SQL语句的例子(1)

  SQL> select id, last_name, salary from s_emp where dept_id = &department_number;

  Enter value for department_number: 10

  old 1: select id, last_name, salary from s_emp where dept_id=&department_number;

  new 1: select id, last_name, salary from s_emp where dept_id= 10

  SQL> SET VERIFY OFF | ON;可以关闭和打开提示确认信息old 1和new 1的显示.[NextPage]

  3. 绑定变量SQL语句的例子(2)

  SQL> select id, last_name, salary

  from s_emp

  where title = ‘&job_title’;

  Enter value for job_title: Stock Clerk

  SQL> select id, last_name, salary

  from s_emp

  where hiredate >to_date( ‘&start_hire_date’,'YYYY-MM-DD’);

  Enter value for start_hire_date : 2001-01-01

  把绑定字符串和日期类型变量时,变量外面要加单引号

  也可绑定变量来查询不同的字段名

  输入变量值的时候不要加;等其它符号

  4. ACCEPT的语法和例子

  SQL> ACCEPT variable [datatype] [FORMAT] [PROMPT text] [HIDE]

  说明: variable 指变量名 datatype 指变量类型,如number,char等 format 指变量显示格

  式 prompt text 可自定义弹出提示符的内容text hide 隐藏用户的输入符号

  使用ACCEPT的例子:

  ACCEPT p_dname PROMPT ‘Provide the department name: ‘

  ACCEPT p_salary NUMBER PROMPT ‘Salary amount: ‘

  ACCEPT pswd CHAR PROMPT ‘Password: ‘ HIDE

  ACCEPT low_date date format ‘YYYY-MM-DD’ PROMPT“Enter the low date range(’YYYY-MM-DD’):”

  4. DEFINE的语法和例子

  SQL> DEFINE variable = value

  说明: variable 指变量名 value 指变量值

  定义好了变良值后, 执行绑定变量的SQL语句时不再提示输入变量

  使用DEFINE的例子:

  SQL> DEFINE dname = sales

  SQL> DEFINE dname

  DEFINE dname = “sales” (CHAR)

  SQL> select name from dept where lower(name)=’&dname’;

  NAME

  ————————-

  sales

  sales

  SQL> UNDEFINE dname

  SQL> DEFINE dname

  Symbol dname is UNDEFINED

  5. SQL*PLUS里传递参数到保存好的*.sql文件里

  SQL> @ /路径名/文件名 参数名1[,参数名2, ….]

  SQL> start /路径名/文件名 参数名1[,参数名2, ….]

  注意事项:

  一次最多只能获取9个&变量, 变量名称只能是从&1,&2到&9

  变量名后不要加特殊的结束符号

  如果在SQL*PLUS里要把&符号保存在ORACLE数据库里,要修改sql*plus环境变量define

  SQL> set define off;

  八、概述数据模型和数据库设计

  1. 系统开发的阶段:

  Strategy and Analysis

  Design

  Build and Document

  Transition

  Production

  2. 数据模型

  Model of system in client’s mind

  Entity model of client’s model

  Table model of entity model

  Tables on disk

  3. 实体关系模型 (ERM)概念

  ERM ( entity relationship modeling)

  实体 存有特定信息的目标和事件 例如: 客户,订单等

  属性 描述实体的属性 例如: 姓名,电话号码等

  关系 两个实体间的关系 例如:订单和产品等

  实体关系模型图表里的约定

  Dashed line (虚线) 可选参数 “may be”

  Solid line (实线) 必选参数 “must be”

  Crow’s foot (多线) 程度参数 “one or more”

  Single line (单线) 程度参数 “one and only one”

  4. 实体关系模型例子

  每个订单都必须有一个或几个客户

  每个客户可能是一个或几个订单的申请者

  5. 实体关系的类型

  1:1 一对一 例如: 的士和司机

  M:1 多对一 例如: 乘客和飞机

  1:M 一对多 例如: 员工和技能

  6. 校正实体关系的原则

  属性是单一值的, 不会有重复

  属性必须依存于实体, 要有唯一标记

  没有非唯一属性依赖于另一个非唯一的属性

  7. 定义结构时的注意事项

  减少数据冗余

  减少完整性约束产生的问题

  确认省略的实体,关系和属性

  8. 完整性约束的要求

  Primary key 主关键字 唯一非NULL

  Foreign key 外键 依赖于另一个Primary key,可能为NULL

  Column 字段名 符合定义的类型和长度

  Constraint 约束条件 用户自定义的约束条件,要符合工作流要求

  例如: 一个销售人员的提成不能超过它的基本工资

  Candidate key 候选主关键字 多个字段名可组成候选主关键字, 其组合是唯一和非NULL的

  9. 把实体关系图映射到关系数据库对象的方法

  把简单实体映射到数据库里的表

  把属性映射到数据库里的表的字段, 标明类型和注释

  把唯一标记映射到数据库里的唯一关键字

  把实体间的关系映射到数据库里的外键

  其它的考虑:

  设计索引,使查询更快

  建立视图,使信息有不同的呈现面, 减少复杂的SQL语句

  计划存储空间的分配

  重新定义完整性约束条件

  10. 实体关系图里符号的含义

  PK 唯一关键字的字段

  FK 外键的字段

  FK1,FK2 同一个表的两个不同的外键

  FK1,FK1 两个字段共同组成一个外键

  NN 非null字段

  U 唯一字段

  U1,U1 两个字段共同组成一个唯一字段

  九、创建表

  1. ORACLE常用的字段类型

  ORACLE常用的字段类型有

  VARCHAR2 (size) 可变长度的字符串, 必须规定长度

  CHAR(size) 固定长度的字符串, 不规定长度默认值为1

  NUMBER(p,s) 数字型p是位数总长度, s是小数的长度, 可存负数

  最长38位. 不够位时会四舍五入.

  DATE 日期和时间类型

  LOB 超长字符, 最大可达4G

  CLOB 超长文本字符串

  BLOB 超长二进制字符串

  BFILE 超长二进制字符串, 保存在数据库外的文件里是只读的.

  数字字段类型位数及其四舍五入的结果

  原始数值1234567.89

  数字字段类型位数 存储的值

  Number 1234567.89

  Number 12345678

  Number  错

  Number(9,1) 1234567.9

  Number(9,3) 错

  Number(7,2) 错

  Number(5,-2) 1234600

  Number(5,-4) 1230000

  Number(*,1) 1234567.9

  2. 创建表时给字段加默认值 和约束条件

  创建表时可以给字段加上默认值

  例如 : 日期字段 DEFAULT SYSDATE

  这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间

  创建表时可以给字段加上约束条件

  例如: 非空 NOT NULL

  不允许重复 UNIQUE

  关键字 PRIMARY KEY

  按条件检查 CHECK (条件)

  外键 REFERENCES 表名(字段名)

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved