上回,Select DISTINCT dept_id,title from s_emp,注意DISTINCT是作用于两列的组合。
Group Functions
分组函数
SELECT column,group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
AVG(DISTINCT|ALL|n)
COUNT(DISTINCT|ALL|expr|*)
MAX(DISTINCT|ALL|expr)
MIN(DISTINCT|ALL|expr)
SUM(DISTINCT|ALL|n)
SQL> select AVG(salary),MAX(salary),
2 MIN(salary),SUM(salary)
3 from s_emp
4 where UPPER(title) LIKE 'SALES%';
AVG(SALARY) MAX(SALARY) MIN(SALARY) SUM(SALARY)
----------- ----------- ----------- -----------
1463.75 1515 1400 5855
SQL> select count(*)
2 from s_emp
3 where dept_id=31
4 ;
COUNT(*)
----------
1
SQL> select count(commission_pct)
2 from s_emp
3 where dept_id = 31;
COUNT(COMMISSION_PCT)
---------------------
1
注意,count具体列,只统计非空数目。
1 select dept_id,Count(*) "Number"
2 from s_emp
3* group by dept_id
SQL> /
DEPT_ID Number
---------- ----------
31 1
32 1
33 1
34 1
35 1
41 2
42 2
43 2
44 2
45 3
8
不写Group by,只是一组,
加了Group by,多组。
出现在Select中,非组函数的值,必须出现加在Group by中。可以不Select某列,但是group by该列,但结果当然也没有这一列,只是按照它来分组显示其他组函数数据。
组函数的判断不能在Where子句中,必须是在Having中。
SELECT title,12*AVG(salary) "ANNUAL SALARY",COUNT(*) "NUMBER OF EMPLOYEES"
FROM s_emp
GROUP BY title
HAVING COUNT(*)>2;
第一步,分组
第二步,应用组函数
第三步,匹配Having子句的组函数
select title,sum(salary) PALALL
FROM s_emp
WHERE title NOT LIKE "VP%"
GROUP BY title
HAVING SUM(salary) > 5000
ORDER BY SUM(salary);
Subqueries 子查询
select last_name,title
from s_emp
where title=
(select title
from s_emp
where last_name='Smith');
select last_name,title,salary
from s_emp
where salary<
(select avg(salary)
from s_emp);
自查询有多值返回时,使用IN关键字
select last_name,first_name,title
from s_emp
where dept_id IN
(select id
from s_dept
where name = 'Finance' or region_id = 2);
子查询也可以出现在Having中
Select dept_id,AVG(salary)
from s_emp
group by dept_id
having avg(salary)>
(select avg(salary)
from s_emp
where dept_id=32);
子查询有效率问题,既能够用连接又能用子查询时,请使用连接,一次查询快!
设置变量
SQL> select id,last_name,salary
2 from s_emp
3 where dept_id=&department_number;
Enter value for department_number:
where title = '&job_title';
一般用于插入数据时,进行定义。
可以保存一个.sql文件,在文件的开头设定变量,在执行insert,但sqlplus中,只保存sql命令,不保存sqlplus命令,DEFINE和ACCEPT是sqlplus命令。
DEFINE did=105(CHAR) 都是字符型。
insert into lujl11
values (&did,'&address',&salary);
使用ACCEPT命令来进行变量定义,可以区分类型,和添加提示符
ACCEPT p_dname PROMPT 'Provide the department name'
ACCEPT p_salary NUMBER PROMPT 'Salary amoount:'
ACCEPT pswd CHAR PROMPT 'Password:' HIDE
UNDEFINE或者退出sqlplus,会清楚变量。
SET VERIFY ON
察看新旧值开关。
数据库建模
立项
----〉需求分析
----------------〉设计,设计细化
----------------------------------〉建表,测试(逻辑测试,需求满足否,物理测试,数据量承受力),优化
--------------------------------------------〉真实数据,产品。
实线---必然的联系
虚线---可能的联系
范式
第一范式 解决单值问题。
第二范式 解决依赖性。
第三范式 解决非传递性问题。
例子:一想就明白了
经过需求分析,整理出下列属性。
product#,order#,name,date,price,quantity,customer#,customer_name,customer_address(Province,city,address))
INF分析后
(product#,order#,name,date,price,quantity,customer#,customer_name,Province,City,Address)
2NF分析后
(product#,name,price)
(order#,date,customer#,customer_name,Province,City,Address)
(product#,order#,quantity)
3NF分析后
(product#,name,price)
(order#,date,customer#)
(product#,order#,quantitiy)
(customer#,customer_name,Province,City,Address)
今天安装FC3,费了些时间,为能够在自己机器上也跑上Redhat,安装了Fedora Core 3,http://fedora.linuxsir.org/main/
不错的网站,我就是照着装上的,以后就可以研究一下了。哈哈
posted on 2005-11-22 00:05
北国狼人的BloG 阅读(395)
评论(0) 编辑 收藏 所属分类:
达内学习总结