oracle知识点总结(一)

8.7
数据库:数据的仓库
以前存放数据:内存、文件
内存: int num = 10; 问题:临时
文件:解析/操作起来麻烦
-》 永久存放,方便解析/管理->数据库

主流的关系型数据库:
oracle:产品免费,服务收费,强大稳定性、安全性
mysql:MySQL AB开源,

oracle版本:oracle8i/9i :internet
oracle10g/11g :grid , 网络计算,提高访问速度,避免舍近求远的问题
oracle12c :cloud,,云计算
各个版本对学习没有影响

数据库服务器:将数据库部署在服务器上
oracle服务器:

要是没有自带表格的话,可以用下面这些代码进行建表
---------- Oracle自带的练习用表的建表语句文件:
DROP USER SCOTT CASCADE;
DROP USER ADAMS CASCADE;
DROP USER JONES CASCADE;
DROP USER CLARK CASCADE;
DROP USER BLAKE CASCADE;
GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO SCOTT IDENTIFIED BY tiger;
DROP PUBLIC SYNONYM PARTS;
CONNECT SCOTT/tiger
CREATE TABLE DEPT(
DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14),
LOC VARCHAR2(13) );
INSERT INTO DEPT VALUES (10,‘ACCOUNTING’,‘NEW YORK’);
INSERT INTO DEPT VALUES (20,‘RESEARCH’,‘DALLAS’);
INSERT INTO DEPT VALUES (30,‘SALES’,‘CHICAGO’);
INSERT INTO DEPT VALUES (40,‘OPERATIONS’,‘BOSTON’);
CREATE TABLE EMP(
EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT );
INSERT INTO EMP VALUES (7369,‘SMITH’,‘CLERK’,7902,to_date(‘17-12-1980’,‘dd-mm-yyyy’),800,NULL,20);
INSERT INTO EMP VALUES (7499,‘ALLEN’,‘SALESMAN’,7698,to_date(‘20-2-1981’,‘dd-mm-yyyy’),1600,300,30);
INSERT INTO EMP VALUES (7521,‘WARD’,‘SALESMAN’,7698,to_date(‘22-2-1981’,‘dd-mm-yyyy’),1250,500,30);
INSERT INTO EMP VALUES (7566,‘JONES’,‘MANAGER’,7839,to_date(‘2-4-1981’,‘dd-mm-yyyy’),2975,NULL,20);
INSERT INTO EMP VALUES (7654,‘MARTIN’,‘SALESMAN’,7698,to_date(‘28-9-1981’,‘dd-mm-yyyy’),1250,1400,30);
INSERT INTO EMP VALUES (7698,‘BLAKE’,‘MANAGER’,7839,to_date(‘1-5-1981’,‘dd-mm-yyyy’),2850,NULL,30);
INSERT INTO EMP VALUES (7782,‘CLARK’,‘MANAGER’,7839,to_date(‘9-6-1981’,‘dd-mm-yyyy’),2450,NULL,10);
INSERT INTO EMP VALUES (7788,‘SCOTT’,‘ANALYST’,7566,to_date(‘13-JUL-87’,‘dd-mm-rr’)-85,3000,NULL,20);
INSERT INTO EMP VALUES (7839,‘KING’,‘PRESIDENT’,NULL,to_date(‘17-11-1981’,‘dd-mm-yyyy’),5000,NULL,10);
INSERT INTO EMP VALUES (7844,‘TURNER’,‘SALESMAN’,7698,to_date(‘8-9-1981’,‘dd-mm-yyyy’),1500,0,30);
INSERT INTO EMP VALUES (7876,‘ADAMS’,‘CLERK’,7788,to_date(‘13-JUL-87’, ‘dd-mm-rr’)-51,1100,NULL,20);
INSERT INTO EMP VALUES (7900,‘JAMES’,‘CLERK’,7698,to_date(‘3-12-1981’,‘dd-mm-yyyy’),950,NULL,30);
INSERT INTO EMP VALUES (7902,‘FORD’,‘ANALYST’,7566,to_date(‘3-12-1981’,‘dd-mm-yyyy’),3000,NULL,20);
INSERT INTO EMP VALUES (7934,‘MILLER’,‘CLERK’,7782,to_date(‘23-1-1982’,‘dd-mm-yyyy’),1300,NULL,10);
CREATE TABLE BONUS(
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
SAL NUMBER,
COMM NUMBER );
CREATE TABLE SALGRADE(
GRADE NUMBER,
LOSAL NUMBER,
HISAL NUMBER );
INSERT INTO SALGRADE VALUES (1,700,1200);
INSERT INTO SALGRADE VALUES (2,1201,1400);
INSERT INTO SALGRADE VALUES (3,1401,2000);
INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);
COMMIT;
EXIT

修改oracle默认的日期格式
默认:DD-MON-RR
修改:
alter session set NLS_DATE_FORMAT = ‘yyyy-mm-dd’
alter session set NLS_DATE_FORMAT = ‘DD-MON-RR’


范围查询:数字/日期
between 从小到大
小<= and <=大

模糊查询:
like 配合通配符使用:_ :一个字符
% :任意个字符(%前是以开头 %后是以结尾 %%中间的是包含的)desc table_name 可以查询表的结构
select field_name,… from … 可以查询字段的值
select * from all_tables where table_name like ‘%’
select * from all_tab_columns where table_name=’??’
ename like …
数字 日期:like

姓名中第二个字母是M的员工信息:
select * from emp where ename like ‘M’;
姓名中包含M的员工信息:
select * from emp where ename like ‘%M%’;
姓名长度大于6的员工信息: >6 >=7
select * from emp where ename like '
______%’;ptno
姓名中包含下划线的:
zhang_san
select * from emp where ename like ‘%_%’ escape ‘’

not in 不能出现null 如果出现了null,结果为null
select * from emp where deptno in (10,20,30,null);
select * from emp where deptno not in (10,20,30,null);
select*from emp where deptno !=20 and deptno !=

order by 字段名 |表达式| 序号
asc 升序
desc 降序
select *from emp order by sal; 默认升序
select *from emp order by sal desc; 降序
select empno,ename,sal from emp order by sal desc;
host cls :清屏

排序时 null是最大的

多列排序
sal. hirdate

函数:
单行函数:一次操作一行 例如:字符函数,数值函数,日期函数,转换函数,通用函数
多行函数:一次操作多行

字符函数:lower : 使变小写 upper:使变大写 initcap:只有首字母大写

dual:单行单列 ->单行

select substr(‘hello world’,3,3) from dual; :从1开始数

length字符数/lengthb字节数
英文/数字
如果中文/符号
utf-8编码格式下:一个汉字/符号 占3个字节
gbk:一个汉字/符号 占2个字节
查看当前系统的编码格式:
select * from nls_database_parameters;
查看LL字节数
select instr(‘helloworld’,‘ll’) from dual;

lpad:左填充
rpad:右填充
trim:去掉任意字符 select trim(’ hello world ‘)from dual;
replace:替换 select replace (‘hello’,‘l’,’*’) from dual;

数值函数:
round(数字,n位数): 四舍五入
trunc(数字,n位数):舍尾,保留n位小数
mod():求余

SQL> select round(67.183,2)一,round(67.183,1)二,round(67.183,0)三,round(67.183,-1)四,round(67.183,-2) from dual;

    一          二            三          四        ROUND(67.183,-2)

 67.18       67.2         67         70              100

SQL> select trunc(67.183,2)一,trunc(67.183,1)二,trunc(67.183,0)三,trunc(67.183,-1)四,trunc(67.183,-2) from dual;

    一           二             三         四         TRUNC(67.183,-2)

 67.18       67.1         67         60                0

SQL> select mod(123,3) from dual;

MOD(123,3)

     0

SQL> select mod(13,3) from dual;

MOD(13,3)

     1

日期:
sysdate:当前时间
格式化:件日期转化成字符形式
日期可以加减
1.日期±数字 单位是天
2.日期-日期:select ename,(sysdate-hiredate) from emp;
to_char(sysdate,‘yyyy-mm-dd’)from dual

SQL> select to_char(sysdate,‘yyyy-mm-dd’)from dual;

TO_CHAR(SY

2020-08-10
加上一天
SQL> select sysdate+1 from dual;

SYSDATE+1

11-8月 -20
减去一天
SQL> select sysdate-1 from dual;

SYSDATE-1

09-8月 -20

months_between(日期1,日期2) : 日期1-日期2

add_months(日期,月数)
SQL> select add_months(sysdate,12) from dual;

ADD_MONTHS(SYS

10-8月 -21
当月最大天数是几天 last_day
SQL> select last_day(sysdate) from dual;

LAST_DAY(SYSDA

31-8月 -20

下一个星期几是哪一天
SQL> select next_day(sysdate,‘星期一’) from dual;

NEXT_DAY(SYSDA

17-8月 -20

对某天在当前月/年数四舍五入

SQL> select round(sysdate,‘month’),round(sysdate,‘year’)from dual;

ROUND(SYSDATE, ROUND(SYSDATE,


01-8月 -20 01-1月 -21

通用函数:

a.nv1/nv12
b.

SQL> select nullif(‘abc’,‘abcxxxxxxx’) from dual;

NUL

abc

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值