黑马程序员c语言教程:Oracle概念_黑马程序员c语言教程

2020-02-28 其他范文 下载本文

黑马程序员c语言教程:Oracle概念由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“黑马程序员c语言教程”。

四、从多个表里选取数据记录 1.数据表间的连接 简单的连接语法: SELECT 字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 表名1.字段名 = 表名2.字段名 [ AND ……];SELECT 字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 表名1.字段名 = 表名2.字段名(+)[ AND ……];有(+)号的字段位置自动补空值 连接的分类: 等于的连接 = 不等于的连接!= BETWEEN … AND … IN 注意IN和OR不能一起用 8

J2EE @ zxw 外连接 有一个字段名(+), 没有满足的条件补空值 自连接 同一个表自己跟自己连接 例如找重复记录 2.数据表间的连接例子

删除table_name表里字段名email重复的记录: SQL>delete from table_name t1 where t1.rowid >(select min(rowid)from table_name t2 where t1.email = t2.email group by email having count(email)> 1);找到手机用户的服务区域: SQL> 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.chargetype(+)order by a.totalscore desc;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)取合计值 9

J2EE @ zxw STDDEV(DISTINCT | ALL | N)取偏差值,如果组里选择的内容都相同,结果为0 VARIANCE(DISTINCT | ALL | N)取平方偏差值 2.使用集合函数的语法

SELECT column, group_function FROM table WHERE condition GROUP BY group_by_expreion 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(不去掉重复记录)10

J2EE @ zxw 差集MINUS, 交集INTERSECT 4.子查询的注意事项

先执行括号里面的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字段标明它的逻辑位置, 并且只能 用ROWNUM80。

以下是经过分析后较好的两种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

《黑马程序员c语言教程:Oracle概念.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
黑马程序员c语言教程:Oracle概念
点击下载文档
相关专题 黑马程序员c语言教程 黑马 程序员 概念 黑马程序员c语言教程 黑马 程序员 概念
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文