组函数
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--设置默认值
);
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--设置默认值
);