1、6.6. 子查询的例子(2) 136.7. 取出结果集的80 到100的SQL语句 137. 在执行SQL语句时绑定变量 137.1. 接收和定义变量的SQL*PLUS命令 137.2. 绑定变量SQL语句的例子(1) 137.3. 绑定变量SQL语句的例子(2) 147.4. ACCEPT的语法和例子 147.5. DEFINE的语法和例子 147.6. SQL*PLUS里传递参数到保存好的*.sql文件里 158. 概述数据模型和数据库设计 158.1. 系统开发的阶段: 158.2. 数据模型 158.3. 实体关系模型 (ERM)概念 158.4. 实体关系模型例子 168.5. 实体
2、关系的类型 168.6. 校正实体关系的原则 168.7. 定义结构时的注意事项 168.8. 完整性约束的要求 168.9. 把实体关系图映射到关系数据库对象的方法 178.10. 实体关系图里符号的含义 179. 创建表 179.1. ORACLE常用的字段类型 179.2. 创建表时给字段加默认值 和约束条件 189.3. 创建表的例子 189.4. 创建表时的命名规则和注意事项 189.5. 约束名的命名规则和语法 199.6. 使用约束时的注意事项 199.7. 由实体关系图到创建表的例子 s_dept 199.8. 较复杂的创建表例子 199.9. 通过子查询建表 209.10.
3、用子查询建表的注意事项 209.11. Foreign Key的可选参数ON DELETE CASCADE 209.12. 如果数据库表里有不满足的记录存在,建立约束条件将不会成功. 209.13. 给表创建和删除同义词的例子 2110. ORACLE里的数据字典 2110.1. 什么是数据字典? 2110.2. 数据字典里存了以下内容:10.3. 常用的数据字典 2110.4. 数据字典的分类 2210.5. 查询数据字典 2211. 控制数据 2211.1. INSERT(往数据表里插入记录的语句) 2211.2. 插入字符串类型的字段的注意事项: 2311.3. UPDATE (修改数据
4、表里记录的语句) 2311.4. DELETE (删除数据表里记录的语句) 2311.5. SQL语句的分类 2311.6. ORACLE里事务控制 2411.7. DML操作的注意事项 2412. 改变表和约束条件 2412.1. 改变表的几种情况(1) 运行时会加表级锁 2412.2. 改变表的几种情况(2) 运行时会加表级锁 2512.3. 改变表的几种情况(3) 运行时会加表级锁 2512.4. 删除表及表里的数据 2512.5. 删除表后应该注意的问题 2612.6. 给表加注释 2613. 创建序列号 2613.1. 创建序列号里各参数的解释 2613.2. 插入自动增长序列号字段
5、的方法 2613.3. 查询序列号的情况 2713.4. 改变序列号 2713.5. 删除序列号 2713.6. 不能用序列号的nextval和currval的地方 2714. 创建视图 2714.1. 视图的概念和优点 2814.2. 创建视图的语法 2814.3. 创建修改视图的例子 2814.4. 查询视图的数据字典 2814.5. 简单和复杂的视图对比 2914.6. 在视图上可以用DML命令吗? 2914.7. 在视图里使用 WITH CHECK OPTION约束条件 2914.8. 删除视图 2915. 创建索引 2915.1. 索引的概念 2915.2. 什么时候创建索引? 30
6、15.3. B*树索引的结构 每个索引由字段值和指针或ROWID组成 3015.4. 创建索引的语法 3015.5. 创建索引的注意事项 3015.6. 查询索引的方法 3015.7. 不用索引的地方 3115.8. 重建索引的语法 3115.9. 删除索引 3116. 控制用户访问 3116.1. 权限的类别 3116.2. 查看当前数据库的用户信息 3116.3. 创建新用户 3116.4. 常用的角色及其权限 3216.5. 改变老用户 3216.6. 删除用户 3216.7. 角色的概念和管理 3316.8. 赋于系统的权限语法和例子 3316.9. 赋于数据对象级的权限语法和例子 3
7、317. 补充 331. 选择行 1.1. 简单的SELECT 语句SELECT 字段名1 AS 字段名1 解释 FROM table; 1.2. 处理NULL NVL函数可把NULL转换成其它类型的符号 编程技巧: NVL函数在多条件模糊查询的时候比较有用 NVL函数可返回多种数据类型:返回日期 NVL(start_date,2002-02-01) 返回字符串 NVL(title,no title返回数字 NVL(salary,1000) 1.3. 使用SQL*PLUS(1) SQL desc table; 显示表结构 select * from tab; 查看用户下所有的表 set pau
8、se on; 可以使大量结果集在用户按“Enter”(回车)后翻页 set pagesize 100; 设定SQL语句返回结果集一页的行数100, 默认值是14 set linesize 100; 设定SQL语句返回结果集一行的宽度100, 默认值是80 1.4. SQL*PLUS里规定字段的显示格式 规定数字的显示格式 column 字段名 format 99999999999;column 字段名 format 999,999,999,999;column 字段名 format a数字 word_wrapped;规定long字符的显示宽度 set long 200;规定字段名的显示内容 c
9、olumn 字段名 heading 字段名显示内容; set heading off; 查询时不显示字段名称 规定字段的对齐方向 column 字段名 justify left | right | center;清除字段的格式 column 字段名 clear;1.5. SQL*PLUS里规定字段的显示格式例子 column last_name heading Employee|Name format a15; column salary justify right format $99,999.99; column start_date format a10 null Not Hired说明
10、:如果start_date为null, 显示字符串2. 限制选择行 2.1. 按指定的规则排序 SELECT expr FROM table ORDER BY column, expr ASC | DESC ;默认的排序是ASC升序(由小到大) 还可以ORDER BY 字段名的位置1| 2 ASC| DESC;2.2. 用WHERE限制选择行(1) 比较操作符 = = = 与NULL比较不能用上面的比较操作符 ANY SOME ALL SQL操作符 BETWEEN AND IN LIKE IS NULL NOT BETWEEN AND NOT IN NOT LIKE IS NOT NULL 逻
11、辑操作符 AND OR NOT 2.3. 用WHERE限制选择行(2) 比较顺序(可以用括号改变它们的顺序) (1). = to_date() and日期字段= to_date();2.6. 不能用到索引的比较操作符 IS NULL IS NOT NULL LIKE 3. 单行函数 3.1. 数字函数 ABS 取绝对值 POWER 乘方 LN 10为底数取0 SQRT 平方根 EXP e的n次乘方 LOG(m,n) m为底数n取0 数学运算函数:ACOS ATAN ATAN2 COS COSH SIGN SIN SINH TAN TANH CEIL 大于或等于取整数 FLOOR 小于或等于取整
12、数 MOD 取余数 ROUND(n,m) 按m的位数取四舍五入值如果round(日期): 中午12以后将是明天的日期. round(sysdate,Y)是年的第一天 TRUNC(n,m) 按m的位数取小数点后的数值如果trunc(日期), 确省的是去掉时间 3.2. 字符函数 CHR 按数据库的字符集由数字返回字符 CONCAT(c1,c2) 把两个字符c1,c2组合成一个字符, 和 | 相同 REPLACE(c,s,r) 把字符c里出现s的字符替换成r, 返回新字符 SUBSTR(c,m,n) m大于0,字符c从前面m处开始取n位字符,m等于0和1一样, m小与0,字符c从后面m处开始取n位
13、字符 TRANSLATE(c,f1,t1) 字符c按f1到t1的规则转换成新的字符串 INITCAP 字符首字母大写,其它字符小写 LOWER 字符全部小写 UPPER 字符全部大写 LTRIM(c1,c2) 去掉字符c1左边出现的字符c2 RTRIM(c1,c2) TRIM(c1,c2) 去掉字符c1左右两边的字符c2 LPAD(c1,n,c2) 字符c1按制定的位数n显示不足的位数用c2字符串替换左边的空位 RPAD(c1,n,c2) 3.3. 日期函数 ADD_MONTHS(d,n) 日期值加n月 LAST_DAY 返回当月的最后一天的日期 MONTHS_BETWEEN(d1,d2) 两
14、个日期值间的月份,d1(select min(rowid) from table_name t2 where t1.email = t2.email group by email having count(email) 1);找到手机用户的服务区域: select a.handphoneno,nvl(c.name,null),a.totalscore from topscore a,chargeoperator cc,chargeoperatorinfo c where substr(a.handphoneno,1,7)=cc.hpnohead(+) and cc.chargetype=c.c
15、hargetype(+) order by a.totalscore desc;4.3. 数据表间的连接技巧 连接N个表, 需要N-1个连接操作 被连接的表最好建一个单字符的别名, 字段名前加上这个单字符的别名 BETWEEN . AND. 比用 = AND grant plustrace to &username;一般用户下运行/ORACLE_HOME/rdbms/admin/utlxplan.sql 产生plan_table set time on; 说明:打开时间显示 set autotrace on;打开自动分析统计,并显示SQL语句的运行结果 set autotrace traceo
16、nly;打开自动分析统计,不显示SQL语句的运行结果 接下来你就运行测试SQL语句,看到其分析统计结果了。一般来讲,我们的SQL语句应该避免大表的全表扫描。 set autotrace off;关闭自动分析统计 5. 集合函数 经常和group by一起使用 5.1. 集合函数列表 AVG (DISTINCT | ALL | N) 取平均值 COUNT (DISTINCT | ALL | N | expr | * ) 统计数量 MAX (DISTINCT | ALL | N) 取最大值 MIN (DISTINCT | ALL | N) 取最小值 SUM (DISTINCT | ALL | N)
17、 取合计值 STDDEV (DISTINCT | ALL | N) 取偏差值,如果组里选择的内容都相同,结果为0 VARIANCE (DISTINCT | ALL | N) 取平方偏差值 5.2. 使用集合函数的语法 SELECT column, group_function FROM table WHERE condition GROUP BY group_by_expression HAVING group_condition ORDER BY column;5.3. 使用count时的注意事项 SELECT COUNT(*) FROM table;SELECT COUNT(常量) FRO
18、M table;都是统计表中记录数量,如果没有PK后者要好一些 SELECT COUNT(all 字段名) FROM table;SELECT COUNT(字段名) FROM table;不会统计为NULL的字段的数量 SUM,AVG时都会忽略为NULL的字段 5.4. 用group by时的限制条件 SELECT字段名不能随意, 要包含在GROUP BY的字段里 GROUP BY后ORDER BY时不能用位置符号和别名 限制GROUP BY的显示结果, 用HAVING条件 5.5. 例子 select title,sum(salary) payroll from s_emp where ti
19、tle like VP% group by title having sum(salary)5000 order by sum(salary) desc;找出某表里字段重复的记录数, 并显示 select (duplicate field names) from table_name group by (list out fields) having count(*)1;5.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后把结果集排除在外 6. 子查询 6.1. 查询语句可以嵌套 SELECT FROM (SELECT FROM表名1, 表名2, WHERE 条件) WHERE 条件2;当查询条件是不确定的条件时 DML(insert, update,delete)语句里也可用子查询 HAVING里也可用子查询 6.3. 两个查询语句的结果可