Oracle基础知识笔记之一

1、建表
CREATE TABLE ##(
  ...
)


删表
DROP TABLE ##;;


CREATE TABLE a_students(
 name char(8)
 
);


CREATE TABLE  a_employee1(
    id NUMBER(4),
    name CHAR(8) DEFAULT 'M',
    age CHAR(1),
    salary NUMBER(8),
    department VARCHAR2(20)
);


2、加列
ALTER TABLE ##
ADD (。。。)


删列
ALTER TABLE ##
DROP (...)


ALTER TABLE a_employee3
ADD (hriedate DATE DEFAULT SYSDATE);


ALTER TABLE a_employee3
DROP (hriedate);


3、修改列
ALTER TABLE ##
MODIFY (...);




ALTER TABLE a_employee3
MODIFY (agee NUMBER(3) DEFAULT 0); // error 不能修改表中没有的列




4、插入数据
INSERT INTO VALUES(...);


INSERT INTO ##(...) VALUES(...);




INSERT INTO a_employee3
VALUES(1, 'AAA', 33, 'F', 22222, 'CLERK', TO_DATE('2009-11-11', 'YYYY-MM-DD'), TO_DATE('2009-3-4', 'YYYY-MM-DD'));


INSERT INTO a_employee3(name, age, hiredate
) VALUES('bbb', 21, TO_DATE('2009-8-31', 'YYYY-MM-DD'));


5、修改数据
UPDATE ##
SET ...
WHERE


UPDATE a_employee3
SET age = 22
WHERE salary = 22222;


UPDATE a_employee3
SET name = 'fff'
WHERE age = 22;




6、删除数据
DELETE FROM ##
WHERE ...


DELETE FROM a_employee3
WHERE id = 1;






TRUNCATE TABLE a_employee1;


DROP TABLE a_employee1;


7、查询
SELECT * FROM ##;
SELECT ... FROM ##;


8、||  等价于 +   CONCAT() 函数也有同样的功能
SELECT name||'"的工资是"'||salary
FROM a_employee3;


SELECT CONCAT(CONCAT(name, '"的工资是"'), salary)
FROM a_employee3;


9、SELECT 'hello'||'world'
FROM DUAL(虚表)


DUAL:虚表,没有这么一个表,只为了满足
        SELECT的语法要求。
我们常用虚表来测试表达式的结果。
在数据库中,我们想测试某个表达式的结果只能
使用SELECT语句来实现。


SELECT 'HELLO' FROM DUAL;
SELECT 'hello'||'world'
FROM DUAL;


10、LENGTH() 函数  若数据不为空, 则输出这个数据所占字节数
SELECT name, LENGTH(name), LENGTH(department), LENGTH(salary) FROM a_employee3;


11、 INITCAP()  函数 若数据不为空, 则把数据的首字母变成大字母
SELECT INITCAP(name), INITCAP(department) FROM a_employee3;


12、TRIM() 函数  参数中from前面只能是单一字符
若没有from以及前面的字符,则是去除空白
SELECT TRIM('e' from 'kkkedddeeellleliteeeeee')
FROM DUAL;


result: kkkedddeeelllelit


13、LTRIM(), RTRIM()
SELECT LTRIM('kkkedddeeellleliteeeeee','e')
FROM DUAL;


result:kkkedddeeellleliteeeeee


SELECT RTRIM('kkkedddeeellleliteeeeee','e')
FROM DUAL;


result:kkkedddeeelllelit
同样的,不指定第二个参数,默认是去除空白


14、
SELECT LPAD(name,20,'$')
FROM a_employee3;
作用:要求显示20个字符,若sal的值不足长度,则
补充若干个'$',以达到20个字符


result:$$$$$$$$$$$$Bbb     


SELECT RPAD('aaaaAAAAAA',5,'$')
FROM DUAL;


result:aaaaA


15、INSTR()
SELECT 
  INSTR('Doctor Who Who Who', 'Who',9,2) 
FROM DUAL;


result:16


16、SYSTIMESTAMP
SELECT SYSTIMESTAMP FROM DUAL;


result:19-1月 -17 05.51.26.878000000 下午 +08:00


17、  与date操作关系最大的就是两个转换函数:to_date(),to_char()
      to_date() 作用将字符类型按一定格式转化为日期类型:
      具体用法:to_date(''2004-11-27'',''yyyy-mm-dd''),前者为字符串,后者为转换日期格式,注意,前后两者要以一对应。
      如;to_date(''2004-11-27 13:34:43'', ''yyyy-mm-dd hh24:mi:ss'') 将得到具体的时间
      多种日期格式:
      YYYY:四位表示的年份 
      YYY,YY,Y:年份的最后三位、两位或一位,缺省为当前世纪 
      MM:01~12的月份编号 
      MONTH:九个字符表示的月份,右边用空格填补 
      MON:三位字符的月份缩写 
      WW:一年中的星期 
      D:星期中的第几天 
      DD:月份中的第几天 
      DDD:年所中的第几天 
      DAY:九个字符表示的天的全称,右边用空格补齐 
      HH,HH12:一天中的第几个小时,12进制表示法 
      HH24:一天中的第几个小时,取值为00~23 
      MI:一小时中的分钟 
      SS:一分钟中的秒 
      SSSS:从午夜开始过去的秒数
      to_char():将日期转按一定格式换成字符类型
      
      
SELECT 
  TO_DATE(
    '2008-08-12 22:45:33',
    'yyyy-mm-dd hh24:mi:ss'
  )
FROM 
  DUAL;
  
  result:12-8月 -08
  
  SELECT 
  TO_CHAR(
    sysdate,
   'yyyy"年"mm"月"dd"日" hh:mi:ss' 
  )
FROM dual;


result:2017年01月19日 06:06:35


18、两个日期可以进行减法操作,差为相差的天数。
SELECT sysdate-hiredate,name
FROM a_employee3;


init:ID NAME AGE GENDER SALARY DEPARTMENT HIREDATE HRIEDATE
Bbb     21 M          31-8月 -09 19-1月 -17
bbb     21 M          31-8月 -09 19-1月 -17
bbb     21 M          31-8月 -09 19-1月 -17
bbb     21 M          31-8月 -09 19-1月 -17
bbb     21 M          31-8月 -09 19-1月 -17
ggg     0  M 32444 clerk 19-1月 -17 19-1月 -17
ggg     0   M 32444 clerk 19-1月 -17 19-1月 -17


result:
2698.755393518518518518518518518518518519 Bbb     
2698.755393518518518518518518518518518519 bbb     
2698.755393518518518518518518518518518519 bbb     
2698.755393518518518518518518518518518519 bbb     
2698.755393518518518518518518518518518519 bbb     
0.0521990740740740740740740740740740740741 ggg     
0.0511689814814814814814814814814814814815 ggg     




19、MONTHS_BETWEEN()


SELECT name, 
  MONTHS_BETWEEN(SYSDATE, hiredate)
FROM a_employee3;


init:
init:ID NAME AGE GENDER SALARY DEPARTMENT HIREDATE HRIEDATE
Bbb     21 M          31-8月 -09 19-1月 -17
bbb     21 M          31-8月 -09 19-1月 -17
bbb     21 M          31-8月 -09 19-1月 -17
bbb     21 M          31-8月 -09 19-1月 -17
bbb     21 M          31-8月 -09 19-1月 -17
ggg     0  M 32444 clerk 19-1月 -17 19-1月 -17
ggg     0   M 32444 clerk 19-1月 -17 19-1月 -17


result:
Bbb     88.63737455197132616487455197132616487455
bbb     88.63737455197132616487455197132616487455
bbb     88.63737455197132616487455197132616487455
bbb     88.63737455197132616487455197132616487455
bbb     88.63737455197132616487455197132616487455
ggg     0
ggg     0


20、NEXT_DAY()
SELECT NEXT_DAY(SYSDATE,6)
FROM dual;


result:20-1月 -17
获取距离当前时间最近的周4,若给定的当前时间
恰巧是周4,则表示的是下周的周4


21、IS NOT NULL
SELECT * 
FROM a_employee3
WHERE salary IS NOT NULL;
任何值都不能等于null


22、NVL()  NVL函数的作用:将null替换为给定值
SELECT name,NVL(gender,'M')
FROM a_employee3;


result:
Bbb     M
bbb     M
bbb     M
bbb     M
bbb     M
ggg     M
ggg     M


SELECT name,salary,NVL(age,0)
FROM a_employee3;


result:
Bbb     21
bbb     21
bbb     21
bbb     21
bbb     21
ggg     32444 0
ggg     32444 0


23、
SELECT name,salary+NVL(salary,0)
FROM a_employee3;


result:
Bbb    
bbb    
bbb    
bbb    
bbb    
ggg     64888
ggg     64888


SELECT name,NVL2(salary,'有奖金','没奖金')
FROM a_employee3;


result:
Bbb     没奖金
bbb     没奖金
bbb     没奖金
bbb     没奖金
bbb     没奖金
ggg     有奖金
ggg     有奖金


COMMIT;


DROP TABLE students;


DESC a_employee1;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值