Orcale(一)

Posted on 2018-10-24 17:44  eilinge  阅读(322)  评论(0编辑  收藏  举报

oracle数据库基本语句查询

ORacle-12560:TNS 协议配置器错误
    1.服务:1.监听服务未开启 2.服务器未开启 3.环境变量:Oracle_sid = orcl 4.regedit注册oracle_sid=orcl 5.cmd-->set oracle_sid = orcl
oracle网络配置文件路径:D:\app\Administrator\product\11.2.0\dbhome_3\NETWORK\ADMIN\SAMPLE
client配置文件路径:D:\app\Administrator\product\11.2.0\client_3
tnsping ip:测试数据库服务的命令
监听配置命令:
    1.lsnrctl start  启动监听
    2.lsnrctl stop   停止
    3.lsnrctl status 查看状态

oracle基本类型

字符串:
    1.char/nchar 固定长度
    2.varchar2/nvarchar2 可变长度
数字类型
    1.number(P,S) EG:123.89 number(3) -->124 四舍五入    123.89 number(6,1) -->123.9
        1.P-表示有效数字的位数,最多不能超过38个有效数字 
        2.S-使用范围-84~127 
            1.为正数时:从小数点到最低有效数字的位数 123.89 number(6,1)  -->123.9
            2.为负数时:从最大有效数字到小数点的位数 123.89 number(6,-2) -->100
    2.int 整型
日期类型
DATE 日期数据类型存储日期和时间信息

Oracle角色:

connect role    (连接角色)    :对其他用户的表访问 insert into,delete,update,select 还能创建表,视图,序列。不能查看用户名
resource role  (资源角色)        :创建:表 序列 索引 触发器 过程和簇
dba role             (数据库管理) :无限制的空间限额 和给其他用户授权

EG:eilin  select,delete to tmp1  角色的权限
        lin1   wcq159753?
        grant eilin,resource to lin   将角色的权限分给Lin用户
1.创建临时表空间
create temporary tablespace car_data
<br>tmpfile 
'C:\Users\102466\Desktop\Provite\car_data.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent managemet local;

2.创建数据表空间
create tablespace car_data
logging
datefile
'C:\Users\102466\Desktop\Provite\car_data.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extend management loacl;

3.创建用户并制定表空间
create user eilinge identified by 8888 default tablespace car_data; //用户名:eilinge 密码:8888

4.给刚刚创建的用户授权
grant connect,resource,dba to eilinge;

5.撤销用户权限
revoke create,resource from eilinge;

6.删除用户
drop user eilinge
7.创建表
create table car(
    carId number(20) not null primary key,
    carName varchar2(20),
    carType varchar2(20),
    carNum  varchar2(20),
    carAge  int   );
    
8.修改表
//修改表car,添加check约束
alter table 表名 add constraint check名 check(列名 约束);
alter table car  add constraint car_carAge check(carAge between 0 and 10);
//设置外键 alter table 表名 add constraint 外键名 foreign key(userId) references userN(userId);
//修改一个列的数据类型(一般限于修改长度,修改为不同类型时有很多限制) alter table 表名 modify(列名 数据类型);
alter table car modify(carid number(10));
//修改列名 alter table 表名 rename column 当前列名 to 新列名;
alter table car rename column carid to carcar;
//修改表名 alter table 当前表名 rename to 新表名;
alter table car rename to carcar;
//删除列 alter table 表名 drop column 列名;
alter table car drop column carname;
//添加列 alter table 表名 add(column1 datatype,column2);
alter table car add(car1 number(20),car2 number(20));

//外键约束
//约束用于规定表中的数据规则。如果存在违反约束的数据行为,行为会被约束终止
NOT NULL         非空约束        指定的列不允许为空值
UNIQUE                     唯一约束        指定的列中没有重复值
primary    key             主键约束        --非空 唯一,一个表只能有一个主键约束;
foreign key      外键约束        一个表中的列引用了其他表的列,是得存在依赖关系,可以指向引用自身的列
check                      条件约束C  指定该列是否满足某个条件
推荐的约束命名:约束类型_表名_列名
NN -- not NUll
UK -- unique key
PK -- Primary key   
Fk -- Foreign key
Ck -- check key
外键约束是用来维护从表和主表的引用完整性的,所以外键约束要涉及2个表:
    foreign key :在表级指定子表中的列
    references  : 标示在父表中的列
    on delete cascade : 当父表中的列被删除时,子表中相对应的列也被删除
    on delete set null: 子表中相应的列置空
9.创建userN表
里面有创建表和添加外键及主键
create table userN(
    userId number(20) not null primary key,                                        //添加主键
    licNum number(20),
    userName varchar2(10),
    sex varchar2(2),
    userAge int,
    userNative varchar2(10),
    userAddress varchar2(100),
    userNum number(13),
    carId number(20),
    constraint carId foreign key(carId) references car(carId);    //外键关联  constraint约束

10.插入数据的语句
insert into car values('20131101','宝马');

11.更新数据的语句
//修改某一数据。例如:将表salary中编号为11011的职工收入改为10000;
update salary set income=10000 where employeeid = 110001;
//修改某一列数据。例如:给每个职工增加收入100元
update salary set income = income+100;

12.查询
//查询car表里面车牌号为88888的车的信息
select * from car
where carnum = '88888';
//查询车牌号为88888并且carname为奔驰的车的所有信息(跨表查询)
select * from Usern
where carid = '88888' and carname='奔驰';
//查询车牌号为88888的车主的所有信息(跨表查询)
select * from Usern
where carid in (select carid from car where car.carnum='88888');
//查询车主的所有身份信息以及车信息(外连接)
select * from usern left join car on(car.carid=userN.carid);
//查询车牌号为88888的车主的所有身份信息以及车信息(外连接);
select * from usern left join car on(car.carid = userN.carid)
where carnum = '88888';
//查询车名为宝马的用户信息(子查询)
select * from usern where cauid in (select carid from car where carname='宝马');
//查询换过尾灯且加过导航的奔驰车信息(多表连接)
select * from car as c ,reparis as r ,variation as v where r.type='尾灯' and v.type='加导航' and c.carname='奔驰';
//查询各种类型的车的数量分别为多少(分组加计数)
select carname,count(*) 数量 from car group by carname;

12.视图和索引
什么是视图:
    1.视图是一种虚表
    2.视图建立在已有表的基础上,视图赖以建立的这些表称为基表
    3.向视图提供数据内容的语句为select语句,可以将视图理解为存储起来的select语句
    4.视图向用户提供基表数据的另一种表现形式
    5.视图没有存储真正的数据,真正的数据还是存储在基表中
    6.程序员虽然操作的是视图,但最终视图还是会转成操作基表
视图的作用
    1.限制数据访问
    2.简化复杂查询
    3.提供数据的相互独立
    4.同样的数据,可以有不同的显示方式
1.创建视图
create view temp as select carid,cartype from car;

什么是索引
    1.是一种快速查询表中内容的机制,类似于新华字典的目录
    2.运用在表中某个/些字段上,但存储时,独立于表之外
索引的特点
    1.索引一旦建立,Oracle管理系统会对其进行自动维护,而且由Oracle管理系统决定何时使用索引
    2.用户不用在查询语句中指定使用哪个索引
    3.在定义primary key 或unique约束后系统自动在相应的列上创建索引
    4.用户也能按自己的需求,对指定单个字段或多个字段,添加索引
2.创建索引
create index cartype on car(cartype)

13.order by
select column_name1,colum_name2
from table_name
order by column_name,column_name ASC | DESC--降序;

14.like
select * from websites
where name like '%S-'
%        --代替0个或多个字符
-     代替一个字符

15.函数 Aggregate
AVG()                平均值
COUNT()            行数
Fisrt()            第一个记录的值
last()            最后一个记录的值
max()                最大值
min()                最小值
sum()                总和


Scalar 函数
函数基于输入值,返回一个单一的值
UCASE()        将某个字段转换为大写
LCASE()        将某个字段转换为小写
MID()            从某个文本字段提取字符
LEN()            返回某个文本字段的长度
ROUND()        对某个数值字段进行指定小数位的四舍五入
NOW()            返回当前的系统日期和时间
format()  格式化某个字段的显示方式

16.HAVING
select column_name,
aggregate_function(column_name)
from table_name
where column_name operator value
group by column_name
Having aggregate_function(column_name)
operator;
 
EG:select websites.name,SUM(access_log.count) AS nums 
from Websites
INNER JOIN access_log
ON websites.id = access_log.site_id
WHERE website.alexa < 200
group by websites.name
HAVING SUM(access_log.count) > 200;

附录:

commit         提交,插入数据之后,需输入commit,才算插入成功
desc           查看表结构
delete         table table_name 删除表
varchar     允许存储空字符串
varchar2     和varchar功能一样,将空字符串改为NULL存储
distinct  除去重复值
revoke    撤销
grant     赋予

select table_name from user_tables; 查看某用户下的所有表名
user_tables 自己所有表
all_tables  全部表
dba_tables 

select * from sys.tmp //sys  声明对象
查看所有用户
select username from dba_users;
查询用户权限
select * from user_sys_privs;  无法显示用户对表的权限
system 角色
select * from user_role_privs;

sys         具有最高权限,可以对system创建的表进行操作和权限管理
system  无法对sys.temp进行操作