[关闭]
@nextleaf 2018-09-04T11:54:29.000000Z 字数 6455 阅读 602

2018-09-04 工作日志

Java 工作日志 Oracle 数据库


Oracle数据类型

ORACLE基本数据类型可以按类型分为:
字符串类型、数字类型、日期类型、LOB类型、LONG RAW& RAW类型、ROWID & UROWID类型。
常用到的有 数值数据类型,日期和时间类型以及字符串类型。

number:

  1. create table tmp1(
  2. x number(4),
  3. y number(6)
  4. );
  5. create table tmp2(
  6. x number(5,1),
  7. y number(5,3),
  8. z number(5,2)
  9. );
  10. insert into tmp2 values(5.12,5.15,5.123);
  11. select * from tmp2;

日期和时间类型:包括DATE和TIMESTAMP

DATE用来存储日期和时间,取值范围是公元前4712年到公元9999年12月31日
修改日期的格式:如果用户想按照指定的格式输入时间,需要修改时间的默认格式。例如输入格式为年-月-日,修改的SQL语句如下:
alter session set nls_date_format='yyyy-mm-dd';
TIMESTAMP(时间戳):用来存储日期和时间,与DATE类型的区别是显示日期和时间时更精确。Date类型的时间精确到秒,而TIMESTAMP数据类型可以精确到小数秒

字符串类型:

包括CHAR,VARCHAR2,NVARCHAR2,NCHAR和LONG五种.
定长字符串在存储时长度是固定的,而变长字符串的存储长度根据实际插入的数据而定。
varchar2与varchar是可变长的字符串,char是固定长度的字符串。

重要的Oracle比较运算符

=,>=,<=,is null,is not null,in,not in,beween and,like <>或!= 指不等于

  1. create table tmp7(
  2. num number
  3. );
  4. inset into tmp7 values(64);
  5. selete * from tmp7;
  6. select num,num+10,num+5-3,num*3,num/6 from tmp7;
  7. -- 出生在1980-1990年之间的名
  8. select name from students where birthday between '1980' and '1990';
  9. -- 等价于上句
  10. select name from students where birthday>='1980' and birthday<='1990';
  11. -- 查询除了在(1980-1990)年段的学生
  12. select name from students where birthday not between '1980' and '1990';
  13. select name from students where age in(25,26);
  14. select name from students where age not in(25,26);
  15. -- 姓张的
  16. select name from students where name like '张%';
  17. select name from students where age=25 and name like '张%'

重要的Oracle逻辑运算符

not,and,or

1.NOT运算符

又称取反运算符,常常和IN,LIKE,BETWEEN...AND 和NULL等关键字一起使用

select name from student where age not in(25,26);

2.AND运算符

要求两边的表达式结果都为true,如果任何一方的返回结果为null或false,那么

逻辑运算的结果就为FALSE,也就是说记录不匹配WHERE子句的要求

select name from student where age=25 and name like '张%';

3.OR运算符

又称或运算符,也就是说只要左右两侧的布尔表达式任何一方为true,结果就为true.

select name from student where age=25 or name like '张%';

注:in操作符与or的用法功能相似。

Oracle——记录的插入

  1. create table person(
  2. id number(9) primary key,
  3. name varchar2(40) not null,
  4. age number(3) not null,
  5. info varchar2(50)
  6. );
  7. insert into person (id,name,age,info) values(1,'Tom',21,'lawyer');
  8. insert into person (age,name,id,info) values(11,'Marry',2,'dancer');
  9. select * from person;
  10. insert into person values(3,'Scott',23,'Musician');
  11. insert into person(id,name,age) values(4,'Tiger',35);

更新与删除数据

  1. -- 更新id=4的记录,将age改为15name改为LiMing
  2. update person set age=15,name='LiMing' where id=4;
  3. -- 更新age19-22记录,讲将info字段值都改为"student"
  4. update person set info='student' where age between 19 and 22;
  5. -- person表中,删除id=4的记录
  6. delete from person where id=4;

Oracle函数

Oracle函数包括:数学函数,字符串函数,日期和时间函数,条件判断函数,系统信息函数等

数学函数

  1. -- mod(x,y)求余
  2. select mod(31,8),mod(234,10) from dual;
  3. -- abs(求绝对值)
  4. -- 获取整数的函数CEIL(X)和FLOOR(X)
  5. -- 函数CEIL(X):返回不小于x的最小整数值。
  6. -- 函数FLOOR(X):返回不大于x的最大整数。
  7. select ceil(-3.35),ceil(3.35) from dual;
  8. select floor(-3.35),floor(3.35) from dual;
  9. -- (3).四舍五入函数ROUND(X),ROUND(X,Y)和TRUNC(X,Y)
  10. select round(-1.14),round(-1.54),round(1.14),round(1.54) from dual;
  11. select round(1.14,1),round(1.38,0),round(234.14,-1),round(252.33,-2) from dual;
  12. -- trunc函数,截取整数值
  13. SELECT TRUNCATE
  14. ( 1.31, 1 ),
  15. TRUNCATE ( 1.99, 1 ),
  16. TRUNCATE ( 1.99, 0 ),
  17. TRUNCATE ( 19.99,-1 )
  18. FROM
  19. DUAL;

Oracle字符串函数:

  1. -- Oracle字符串函数:
  2. SELECT LENGTH(`hello`),LENGTH(`asdfghjkl`) FROM DUAL;
  3. SELECT CONCAT(`学习`,`数据库`,`知识`) FROM DUAL;
  4. SELECT INSTR(`hello Oracle`,`e`) FROM DUAL;
  5. SELECT LOWER(`ASDFGHTFRD`) FROM DUAL;
  6. SELECT UPPER(`sdfghytrfdvbhjhygf`) FROM DUAL;
  7. -- 字符串转数字
  8. SELECT to_number('1999.123','9999.999')FROM DUAL;
  9. -- 首字母大写
  10. SELECT INITCAP(`dugf sdgfsh erhtwke rtkbvef oos`) FROM DUAL;
  11. -- 下标从1开始
  12. SELECT SUBSTR(`qasdfrdfr号drhgdnb`, 6 ,2),SUBSTR(`qasdfrdfr号drhgdnb`, 6 ,2)FROM DUAL;
  13. SELECT REPLACE(`aaaaaasdfSDaaa1aabbbbbbbbbbbcccccccccccccdddddddddddd`,`a`,`A`)
  14. SELECT
  15. LTRIM( `fsd` ),
  16. LTRIM( ` ergdfg erg` ),
  17. LTRIM( ` ` )
  18. FROM
  19. DUAL;
  20. SELECT
  21. RTRIM( ` fs d ` ),
  22. LTRIM( ` er gd fg erg ` ),
  23. LTRIM( ` ` )
  24. FROM
  25. DUAL;
  26. SELECT TRIM(BOTH `x` FROM `xyxbxyxyx`) FROM DUAL;
  27. --系统时间(Oraclesysdate不用括号)
  28. SELECT SYSDATE() FROM DUAL;
  29. SELECT to_char(SYSDATE(),`yyyy-MM-dd HH24:MI:SS`) FROM DUAL;
  30. SELECT systimestamp FROM DUAL;
  31. -- 提取部分
  32. SELECT EXTRACT(YEAR FROM SYSDATE()) FROM DUAL;
  33. -- 10.132
  34. SELECT to_char(10.13245,`99.999`) FROM DUAL;
  35. -- 转为ASCII
  36. SELECT ASCIISTR(`从入门到精通`) FROM DUAL;
  37. SELECT USER() FROM DUAL;
  38. mysql:SELECT USER FROM DUAL;

日期和时间函数

DATE和TIMESTAMP:

  1. create table tmp3(
  2. d date
  3. );
  4. insert into tmp3 values('12-5月-2010');
  5. select * from tmp3;
  6. select sysdate from dual;
  7. create table tmp4 (d date);
  8. -- 修改默认格式,以指定格式输入时间
  9. alter session set nls_date_format='yyyy-mm-dd';
  10. insert into tmp4 values('2012-08-08');
  11. selete * from tmp4;
  12. delete from tmp4;
  13. insert into tmp4 values(sysdate);
  14. insert into tmp4 values('2005-01-26 13:14:20','yyyy-MM-dd HH24:mi:ss');
  15. create table tmp5(
  16. ts timestamp
  17. );
  18. insert into tmp5 values(to_timestamp(' 17:03:00.9999','yyyy-MM-dd hh24:mi:ss:ff'));
  19. create tsbsle tmp6(
  20. ch char(4),
  21. vch varchar2(4)
  22. );
  23. insert into tmp6 values('qw','qw');
  24. select length(ch) from tmp6;
  25. select length(vch) from tmp6;

Oracle查询

  1. select * from fruits;
  2. select f_id,f_name from fruits;
  3. select f_name from fruits;
  4. -- 查询价格为10.2元的水果的名称
  5. select f_name,f_price from fruits where f_price=10.2;
  6. -- 查找名称为apple的水果的价格
  7. select f_name,f_price from fruits where f_name='apple';
  8. -- 查询价格小于10元的水果的名称
  9. select f_name,f_price from fruits where f_price<10;
  10. -- s_id101102的记录
  11. SELECT * FROM fruits WHERE s_id IN(101,102);
  12. -- s_id不为101102的记录
  13. SELECT * FROM fruits WHERE s_id NOT IN(101,102);
  14. -- 查询价格在2-10.2元之间的水果名称和价格
  15. SELECT f_name,f_price FROM fruits WHERE f_price BETWEEN 2 AND 10.2;
  16. -- 查询价格在2-10.2元之外的水果名称和价格
  17. SELECT f_name,f_price FROM fruits WHERE f_price NOT BETWEEN 2 AND 10.2;
  18. -- 查询所有以“b”字母开头的水果名称
  19. SELECT f_name FROM fruits WHERE f_name LIKE 'b%';
  20. -- 查询所有水果名称中包含“g”的记录
  21. SELECT * FROM fruits WHERE f_name LIKE '%g%';
  22. -- 查询名称以“b”开头,且以“y”结尾的水果名
  23. SELECT f_name FROM fruits WHERE f_name LIKE 'b%y';
  24. -- 查询名称以“y”结尾,且“y”前面只有4个字母的记录
  25. SELECT * FROM fruits WHERE f_name LIKE '____y';

水果表

  1. SET NAMES utf8mb4;
  2. SET FOREIGN_KEY_CHECKS = 0;
  3. -- ----------------------------
  4. -- Table structure for fruits
  5. -- ----------------------------
  6. DROP TABLE IF EXISTS `fruits`;
  7. CREATE TABLE `fruits` (
  8. `f_id` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  9. `s_id` int(6) NOT NULL,
  10. `f_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  11. `f_price` decimal(8, 2) NOT NULL
  12. ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
  13. -- ----------------------------
  14. -- Records of fruits
  15. -- ----------------------------
  16. INSERT INTO `fruits` VALUES ('a1', 101, 'apple', 5.20);
  17. INSERT INTO `fruits` VALUES ('b1', 101, 'blackberry', 10.20);
  18. INSERT INTO `fruits` VALUES ('bs1', 102, 'orange', 11.20);
  19. INSERT INTO `fruits` VALUES ('bs2', 105, 'melon', 8.20);
  20. INSERT INTO `fruits` VALUES ('t1', 102, 'banana', 10.30);
  21. INSERT INTO `fruits` VALUES ('t2', 102, 'grape', 5.30);
  22. INSERT INTO `fruits` VALUES ('o2', 103, 'coconut', 9.20);
  23. INSERT INTO `fruits` VALUES ('c0', 101, 'cherry', 3.20);
  24. INSERT INTO `fruits` VALUES ('a2', 103, 'apricot', 2.20);
  25. INSERT INTO `fruits` VALUES ('l2', 104, 'lemon', 6.40);
  26. INSERT INTO `fruits` VALUES ('b2', 104, 'berry', 7.60);
  27. INSERT INTO `fruits` VALUES ('m1', 106, 'mango', 15.60);
  28. INSERT INTO `fruits` VALUES ('m2', 105, 'xbabay', 2.60);
  29. INSERT INTO `fruits` VALUES ('t4', 107, 'xbababa', 3.60);
  30. INSERT INTO `fruits` VALUES ('m3', 105, 'xxtt', 11.60);
  31. INSERT INTO `fruits` VALUES ('b5', 107, 'xxxx', 3.60);
  32. SET FOREIGN_KEY_CHECKS = 1;
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注