oracle基础知识三

组函数
avg min max sum count cos 


group by


having


select [distinct]  ....  [al]
from ... [al]
where ....设置查询条件   (不能使用组函数,不能使用列别名,但是能够使用表别名)
group by 对查询结果进行分组 (可以使用组函数,不能使用列别名)
having 对分组后的数据进一步筛选 (可以使用组函数)
order by  对最终的结果进行排序  [asc/desc]  (可以使用组函数、列别名)


子查询


manager_id


------子查询放在  where子句后
------必须要注意 子查询返回的结果是  单行(单一)的还多行(集合)
s_emp id


select first_name


from s_emp


where id in (
select manager_id from s_emp



使用子查询,查询出和Magee员工拥有相同职称的所有员工
select first_name,title


from s_emp


where title =(
select title
from s_emp
where last_name = 'Magee'
);
--------------子查询可以放在select 子句中,作为一个结果列来使用
--------------子查询的返回值,必须是单一的单行值
select first_name, (select first_name from s_emp where e.manager_id =id )
from s_emp e;


--------------子查询放在from 子句后
--------------这时 子查询的查询结果将作为一个视图表(结果集)来使用
select e.fname,m.first_name
from s_emp m,
(
select first_name fname,nvl(manager_id,'') mid
from s_emp
)e
where m.id(+) = e.mid;




子查询练习:


查询和Biri同部门的所有员工的title职称


SELECT last_name, title
FROM s_emp
WHERE dept_id = (
SELECT dept_id
FROM s_emp
WHERE last_name='Biri'
);


查询工资小于平均工资的所有员工




select first_name ,salary
from s_emp
where salary<(
select avg(salary) from s_emp
)


Customer{
id
name
orders(Collection)
}


Order{
id
productName
amount
total
customer
}




table


customer(
#id  
name
)
一对多
order(
id
productName
amount
total
#customer_id
)




权限
#权限id


用户权限
#(权限id
用户id)


用户
#用户id
-------------------------建表范式--------------------
1NF:
要求所建表中的所有的列都是单一属性,不可再分


客户订单表:不符合第一范式
  (product#,order#, name, date, price, quantity, customer#,   
customer_name, customer_address(Province,city,address))


1NF:
1)为表设置主键
2)列值全部都不可再分


2NF:
要求所建表中的非关键字段不能存在部分依赖候选关键字段

学生选课:

选课表:
学生id 课程id  学生姓名  课程名  成绩
候选关键字 非关键字


学生表:  学生id 学生姓名
课程表:  课程id  课程名  
选课表:  学生id,课程id,成绩


3NF:
要求所建表中的非关键字段,不能传递依赖候选关键字段


学生表:
学生id,学生姓名,院系,院系地址
解决:
学生表:
学生id,学生姓名,院系id
院系表:
院系id ,名称,地址


建表语法:


char
varchar
varchar2
number(p,s) p 表示长度,s表示精度  小数位
date 日期类型
timestampe
blob 字节大数据类型 4g
clob 字符大数据类型 4g


create table tableName(
字段  类型 约束
...
);


create table h_student(
id  number primary key,-- 不允许为空,并且唯一存在该表中
name varchar2(20),
age number check (age>20)
);




create table h_crouse(
id number primary key,
name varchar2(20) unique--允许为空, 不为空时该值在表中必须是唯一的
)


create table h_xuanke(
sid number ,
cid number ,
cj number(5,2),
primary key(sid,cid),---设置联合主键
foreign key(sid) references h_student(id),--关联的列必须是  关联表的主键
foreign key(cid) references h_crouse(id)
)


create table h_test(
id number,
startdate date default sysdate--设置默认值
);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值