Oracle ——————建表、select、视图

--建表
  --  关键字 : create
  --  用法 :   
  /* 
  create table table_name 
  (
         lie1_name  数据类型  是否为空,
          lie2_name  数据类型  是否为空,
           lie3_name  数据类型  是否为空,
           ……………………………………
  );
  
  */
create table infos
(
      stuid varchar2(7) not null ,
      
      stuname varchar2(10) not null ,
     
      gender varchar2(2) not null ,
      
      age number(2) not null ,
      
      seat number(2) not null ,
      
      enrolldate date ,
      
      studress varchar2(50) ,
      
      classno varchar2(4) not null
) ;

-- 添加约束

--添加主键
alter table infos add constraint pk_infos primary key(stuid) ;

--check 约束
        -- 性别只能是男或女
        --作用: 条件限制
alter table infos add constraint ck_infos_gendertest check(gender='' or gender='') ;

--唯一约束
      --作用:使该列内容不重复
alter table infos add constraint un_stuname unique(stuname) ;

--日期格式转换
select to_char(sbirthday , 'yyyy-mm-dd hh24:mi:ss') from student ;

--查询系统时间
select sysdate from dual ;

       -- dual 伪列 ,只有一行一列数据
       
--绝对值函数
               --abs() 括号内是数值型或可以隐形转换成数值型
select abs(122),abs(-123),abs(0) from dual ;

--数据添加

                    -- insert into 表名 valus
insert into student(sno,sname,ssex) values ('122','小明','') ;

       --添加日期   
       --需要类型转换     to_date
insert into student values(to_date('1990/2/3','yyyy/mm/dd')) ;


--提交事务

commit ;

--回滚事务

rollback ;

--数据的复制

         -- insert into 新的表名 select * from 要复制的表名 ;
         
--查询数据去除重复
                   --distinct
                   --select distinct 列名 from 表名 ;
                   -- * 代表所有字段信息
                   -- != 或 <> 表示不等于
                   --|| 表示拼接
         
--修改表
                       --update 表名 set 条件或添加内容
update student set sclass = '666' where sname='小明' ;                      

update student set sclass = '666' where sclass is null ;


--删除表
               --delete 
delete student where sname = '小明' ;

--快速清空一个表
                  --truncate 
--truncate table 表名 ;              
                      
--排序

           --order by asc/desc  正序/倒序  
           --放于where条件后
     

--分组
           --group by 列名


--查询位于两个数值之间的记录
           --两种方法
           
           select degree from score where  degree >70 and degree < 85 ;
           --between 后面必须是小的数值
           select degree from score where degree between 70 and 85 ;          
     
--查询 位于66,77,88 中的成绩

select degree from score where degree=66 or degree=77 or degree=88 ;

select degree from score where degree in (66,77,88) ;         


/*         
    排序用法  order by

             asc 正序,默认 ,可不加
      
              desc 降序 ;
      
               语法: order by 字段名1 asc/desc ,字段名2 asc/desc ...
      
                 字段在前的优先级高,  先按字段1排序,再按字段2排序      
                 
                 有条件限制语句的话,放在where语句后面

*/


--               去除查询数据中的重复记录
--distinct
--用法
--select distinct lie_name from  biao_name ;
--实例
select distinct depart from teacher ;


--     查询两个数据之间

--     比较运算     例:
select * from score where degree > 60 and degree < 80 ; 

--    关键字:between 小值 and 大值  。 例:
select * from score where degree between 60 and 80 ;


--     内置函数

--     聚合函数   返回单个值
---    记录条数(列名内容不为空,一般统计主键列)

select count(*) from student where sclass = '95031';

--     成绩求和

select sum(degree) 总成绩 from score ;

--     平均成绩

select avg(degree) 平均值 from score ;

--     最高分

select max(degree) 最高分 from score ;

--     最低分

select min(degree) 最低分 from score ;

--     伪列
                   --       rownum  内置列
select * from score where rownum = 1 ;  

--查询每门课的平均成绩大于80的
               --   先cno 分组,在 内置函数
select cno , avg(degree),count(cno) from score group by  cno having avg(degree) > 80 ;

select * from (select cno , avg(degree) a,count(cno) from score group by  cno )  where a> 80 ;


--纵向查询
--两个表之间查询的列数要相同,对应列数的数据类型要相同

select sname,ssex,sbirthday from student 
union 
select tname,tsex,tbirthday from teacher ;


--模糊查询

       --查询姓王的学生信息
select * from student where sname like '王%' ;
       --% 代表任意个数的字符
       --  一个下划线代表一个字符 _


-- 内置函数

                   --下限值
                   
                   select floor(123.12) from dual ;
                   
                   --上限值 
                   
                   select ceil(123.12) from dual ;
                    
                   --四舍五入
                   
                   select round(123.89) from dual ;
                   
                          --保留位数四舍五入
                          
                          select round125.456,2from dual ;
                          
                   --直接舍掉
                                 --作用: 格式化数据,统一格式
                   
                   select trunc(123.456) from dual ;
                          --并不会四舍五入
                   select trunc(123.456,2) from dual ;
                   
                   --绝对值
                   
                   select ABS(-23) from dual ;
                   
                   --求余数 ,求模
                   
                   select mod(78,69) from dual ;
                   
                   --计算字符串长度
                   
                   select tname,length(tname) from teacher ;
                   
                   --去空格
                          --去前后空格
                   select trim(' a b cf  ') from dual ;
                          --去前空格 ltrim
                          select ltrim(' sdf ') from dual ;
                          --去后空格 rtrim
                          select rtrim(' sdf ') from dual ;
                          
                   --查找替换
                   
                   select replace(' s df g  ',' ') from dual ;
                   
                   select sname,replace(sname,'','') from student ;
                   
                   --查找字符串(空格也算一个),从1开始,找不到返回0
                   
                   select instr('sd  wef','w') from dual ;
                   
                   --截取字符串
                                     --3 第几位开始截取
                                     --5 截取长度
                   select substr('sdfga fgh',3,5) from dual ; 
                   
                   select sname,substr(sname,1,1) || '同学' from student ;
                   
                   --null值处理
                   
                   select nvl(degree,0) from score ;
                   
                   select nvl2(degree,55,0) from score ;
                   
                   select t.*,decode(ssex,'','1','','2') from student t ;
                   
                   --返回当前用户登录名
                   
                   select user from dual ;
                  


---取得序列的当前值
select sq_test.nextval from dual ;

select sq_test.currval from dual ;

insert into weadafa values(sq_test.nextval,'王五') ;
commit ;
select * from weadafa ;

--视图

create or replace view v_score as
  select t.*,s.sname,c.cname
    from score t,student s,course c where t.sno=s.sno and t.cno=c.cno ;

 

posted @ 2016-10-18 09:34  丶疏影横斜  阅读(1265)  评论(0编辑  收藏  举报