• Oracle 数据库常用sql语句及知识


    《Oracle 数据库》
    一、常用sql语句:
    1.连接系统管理员账号:conn system/system(安装时口令);
    2.创建新账号:create user Leo(账号名) identified by Leo(密码);
    3.给新账号授权:grant connect,resource to Leo;
    4.从某个账户收权:revoke resource from Leo; 
    5.连接新账号:conn Leo/Leo;
    6.显示当前客户:show user;
    7.查看表结构:desc s_emp(表名);
    8.无需密码以dba身份登陆:conn / as sysdba;  //为所欲为的方式,危险
    9.增删改查基本语法:
    增:insert into e_product(id,name,price) values(10001,'红米手机',599);
    删:delete from e_product where id = 10001;
    改:update e_product set name='小米电视',price = 2999 where id=10001;
    查:select id,name,price from e_product where id = 10001;
     
    二、数据库函数
     
    1.NVL(commission,0);这个函数可以将一个字段(例:commission)中的null值替换成0,以便于运算。例如计算提成的时候,有些员工没有提成。
    案例:列出每个员工的一年的总收入?(NVL)
    select (NVL(commission_pct,0)/100+1)*12*salary from s_emp;
     
    2.to_char(sysdate,'yy'):以自定义格式显示日期;
    案例:找出入职时间是 90年的所有员工信息?
    select first_name,start_date,to_char(start_date, 'yy')from s_emp where to_char(start_date, 'yy')=90;
     
    3.lower(字段)/upper(字段): 将某个字段的值变成全小写/全大写,以匹配未知大小写的字符;
    案例:当不知道‘Carmen’在数据库是大小写的时,找出‘Carmen’的工资?
    select first_name ,salary from s_emp where lower(first_name) = 'carmen';
     
    4.substr(attribute,indexFrom,length):截取属性值为字符串的部分字符,从indexFrom开始,截取长度为length。indexFrom为负表示倒数第几个。
    案例:列出每个员工名字(last_name)的最后两个字符?
    select id,substr(last_name, -2, 2) from s_emp;
     
    5.round(attribute,index): 求出某个属性的近似值, 四舍五入第index位。index为负数的时候表示小数点向左第几位,整数向右第几位。
    案例:列出员工的工资的近似值,精确到十位?
    select id,first_name, round(salary,-1) from s_emp; 
     
    6.trunc(attribute,index);求出某个属性的近似值,去掉index位及之后的零头。index为负数的时候表示小数点向左第几位,整数向右第几位。
    案例:列出员工工资的近似值,去掉100元以下的零头?
    select id,first_name,trunc(salary,-2) from s_emp;
     
    7.sysdate:获取当前系统时间。当前系统时间的格式收到本地化的严格影响,因此想要获取自己需要的格式必须通过tochar(sysdate,'yy-mm-dd hh:mi:ss')获得;
    案例:查出下一天、下一分钟、下一秒的时间
    select to_char(sysdate,'yy-mon-dd hh24:mi:ss') as now, to_char(sysdate+1,'yy-mon-dd hh24:mi:ss') as nextday, to_char(1/(24*60)+sysdate ,'yy-mon-dd hh24:mi:ss') as nextmin,to_char(1/(24*60*60)+sysdate,'yy-mon-dd hh24:mi:ss')as nextSec from dual;
     
    8.day:在日期中表示星期几。
    案例:求某(今)天是星期几
    select to_char(sysdate,'day') from dual;
     
    9.to_date('2015-11-09','yyyy-mm-dd'):将字符串格式的日期转换成日期。
     
    10.last_day(sysdate):获得给定日期的当月的最后一天的日期。
    9和10案例:找出今年的天数
    select  last_day(to_date('1215','mm/yy'))+1 - to_date('010115','dd/mm/yy') from dual;
     
    11.avg(attribute):某个字段值得平均数。
    案例:列出提成的平均值?
    select avg(commission_pct) from s_emp;
     
    12.count(attribute) : 某个字段记录的个数;
    案例:求出有提成的员工个数?
    select count(*) from s_emp where commission_pct is not null;
     
    13.group by :按照...分组。by后面可以跟多个字段,即按照多个字段分组。
    案例1:求出各部门的平均工资?(单个字段)
    select dept_id,avg(salary) from s_emp group by dept_id;
    案例2:求出各部门不同职位的平均工资?(多个字段)
    select dept_id,title,avg(salary) from s_emp group by dept_id,title;
     
    14.having:过滤掉分组以后不想要的结果。
    案例:求出各部门不同职位的平均工资且只显示平均工资高于2000的结果?
    select dept_id,title,avg(salary) from s_emp group by dept_id,title having avg(salary)>=2000;
     
    三、数据库关键字
     
    1.distinct :写在select中字段前面用于去重;
    案例:select distinct name from s_dept;
     
    2.between ... and ... : 某字段的值在一个闭区间【】之间;
    案例:select * from s_emp where salary between 1500 and 2000;
     
    3.in:某字段的值在一个枚举范围之中;
    案例:select first_name,salary,dept_id from s_emp where dept_id in(31,42,43);
     
    4.like:模糊匹配字符串,与_和%连用;
    案例:select * from s_emp where first_name like '_e%';
     
    5.escape:字符串中有些符号具有特殊含义,如下划线_表示模糊匹配中单个字符,但是如果仅想表示下划线则需要使用escape设置转义字符。
    案例:select table_name from dba_tables where table_name like'S@_%' escape '@';
     
    6. is null:获得某个字段的值是空的记录;
    案例:列出哪些员工没有提成?
    select id,first_name from s_emp where commission_pct is null;
     
    7.desc:按照某一字段降序排列,与order by连用。
    案例:按工资降序显示员工的信息?
    select * from s_emp order by salary desc;
     
    8.asc:按照某一字段升序排列,与order by 连用。
    案例:按提成升序显示员工的信息?
    select * from s_emp order by commission_pct asc;
    注意:null值按照“无穷大”位置排列;
     
    9.order by :排序。by后面可并列多个字段,优先级按照先后顺序。
    案例:先工资降序,再按提成升序显示员工?
    select * from s_emp order by salary desc,commission_pct asc;
     
     
    四、多表查询
    1.join...on...:将两个表连起来。on后面是两个表的关联条件。
    案例:列出员工名字和部门名字?
    方法1.select first_name||' '||last_name , name from s_emp e,s_dept d where e.dept_id = d.id ;
    方法2.select e.first_name||' '||e.last_name ,d.name from s_emp e join  s_dept d on e.dept_id = d.id;
    注释:Oracle中|| 表示加号,''表示字符串。
     
    2.三表关联查询(两种方法)
    案例:列出‘Carmen’在哪个地区上班?
    --方法一:(Oracle、sqlserver语法)
    select r.name  
    from s_emp e,s_region r,s_dept d
    where e.dept_id = d.id and d.region_id = r.id and e.first_name = 'Carmen';
    --方法二:(数据库通用语法)
    select r.name
    from s_emp e join s_dept d on e.dept_id = d.id join s_region r on d.region_id = r.id
    where e.first_name= 'Carmen';
     
    五、DDL数据定义语言
    1.创建表:
    CREATE TABLE E_CATEGORY 
    (
      ID NUMBER(12, 0) NOT NULL 
    , T_CATEGORY VARCHAR2(25) 
    , CONSTRAINT TABLE1_PK PRIMARY KEY 
      (
        ID 
      )
      ENABLE 
    );
     
    2.向表中插入数据
    INSERT INTO "SYSTEM"."E_CATEGORY" (ID, T_CATEGORY) VALUES ('1', '智能手机')
    INSERT INTO "SYSTEM"."E_CATEGORY" (ID, T_CATEGORY) VALUES ('2', '数码相机')
    INSERT INTO "SYSTEM"."E_CATEGORY" (ID, T_CATEGORY) VALUES ('3', '笔记本电脑')
    INSERT INTO "SYSTEM"."E_CATEGORY" (ID, T_CATEGORY) VALUES ('4', '衬衫')
    INSERT INTO "SYSTEM"."E_CATEGORY" (ID, T_CATEGORY) VALUES ('5', '外套')
    INSERT INTO "SYSTEM"."E_CATEGORY" (ID, T_CATEGORY) VALUES ('6', '休闲裤')
     
     
    3.修改表结构:添加一个字段;
    alter table e_category add bigcate varchar2(25);
     
    4.修改表结构:添加一个外键;
    alter table e_product add constraint fk_product_bigcate  foreign key(p_category) references e_bigcate(id);
     
    5.修改表结构:修改一个字段:
    alter table e_product modify  p_cdate timestamp(8);
     
    6.修改表结构:修改字段名;
    alter table e_product rename column p_name to name;
     
    7.修改表结构:删除外键:
    alter table e_product drop constraint fk_product_category;
    8.修改表结构:修改外键:
    思路:先删除后添加
     
    视图:
    create view 视图名 as select ...
     
     
    序列(sequence):
    min:max:increm://sequenc:currval:nextval;
     
    index:索引:1.加快检索速度 
     
    数据库的逻辑结构:数据库-表-段-区-块;
     
    锁:for update---行级锁  当关闭连接或提交的时候释放锁;
     
    面朝大海,春暖花开。
  • 相关阅读:
    【BZOJ2734】【HNOI2012】集合选数(状态压缩,动态规划)
    【Luogu1879】玉米田(状态压缩,动态规划)
    【BZOJ1911】【APIO2010】特别行动队(斜率优化,动态规划)
    蒟蒻关于斜率优化DP简单的总结
    【BZOJ1010】【HNOI2008】玩具装箱(斜率优化,动态规划)
    【BZOJ4196】【NOI2015】软件包管理器(树链剖分,线段树)
    【BZOJ1483】【HNOI2009】梦幻布丁(启发式合并,平衡树)
    【BZOJ1058】【ZJOI2007】报表统计(链表,堆,Splay)
    【BZOJ1012】【JSOI2008】最大数(线段树)
    【SHOI2012】魔法树(树链剖分,线段树)
  • 原文地址:https://www.cnblogs.com/HapLe0/p/6773948.html
Copyright © 2020-2023  润新知