数据库的语句(oracle)一

oracle:

在数据库中,SQL语句本身是不区分大小写的,但是为了增加可读性,通常会将关键字与非关键字
按照大小写区分开来增加可读性
在SQL Developer中,需要连续执行多条SQL语句时,每条语句可以在结尾时用";"来分割多条SQL语句,
这样他们是可以同时执行多条舍得,但是";"不是SQL本身必须的东西!也可以选中要执行的某条SQL,
单独执行。
SELECT SYSDATE FROM dual;


1:number类型
ORACLE中所有的数字都是使用NUMBER类型,的NUMBER类型的长度定义中包括两部分:
长度及精度,其中长度包含精度。
sal NUMBER(6,2)
意思是有一个字段,总共6位数字,其中小树占两位,最大表示9999.99
若不指定精度,则表示一个整数


字符串类型
CHAR与VARCHAR2
CHAR:定长字符串,最大支持2000字节,无论实际数据多长,都会将数据补充若干空格,达到
该字段实际制定的长度.
优点:查询效果好,缺点:浪费磁盘空间
VARCHAR2:ORACLE提供的变长字符串类型,其他数据库只支持VARCHAR类型。最大支持4000字节,
数据多长就保存多长,用多少占多少,
优点:磁盘空间利用好.缺点:查询效率低.


日期类型
DATE:占用7个字节,用于存放一个日期数据,7个字节分别存储:世纪,年,月,日,时,分,秒
所以保存时间的精度最多到秒。秒以下的精度保存不了,想保存需要使用其他日期类型。


DDL语句(数据定义语言,这一类SQL语句用于增删改数据库对象)
创建表employee的语法:


CREATE TABLE employee_lb(
id NUMBER(4),
name VARCHAR2(20),
gender CHAR(1),
birth DATE,
salary NUMBER(6,2),
job VARCHAR2(20),
deptno NUMBER(2)
);
desc employee_lb;


DEFAULT关键字,可以在创建表的时候,为某个字段指定默认值。数据库中,无论字段的数据类型是
什么,默认值都是NULL。可以使用DEFAULT单独指定。
在数据库中,字符串字面量使用单引号括起来,并且字符串内容是区分大小写的!


NOT NULL约束
当表中某个字段使用NOT NULL修饰后,该字段在任何情况下值不能为空。


删除表employee
DROP TABLE employee_lb


CREATE TABLE employee_lb(
id NUMBER(4),
name VARCHAR2(20) NOT NULL,
gender CHAR(1) DEFAULT 'M',
birth DATE,
salary NUMBER(6,2),
comm NUMBER(6,2),
job VARCHAR2(30),
manager NUMBER(4),
deptno NUMBER(2)
);
desc employee_lb;


修改表
1:修改表名
RENAME old_name TO new_name


RENAME employee_lb TO myemp_lb ;


2:修改表结构
2.1:追加新字段
ALTER TABLE table_name ADD(
hired DATE 
)


ALTER TABLE myemp_lb ADD(
 hiredate DATE
 );
 DESC myemp_lb;
 
 向表中添加字段,只能被追加到表的最后,不能在现有表的字段之间插入新字段
 
 2.2;删除表中字段
 ALTER TABLE table_name DROP(col_name)
 例如
 ALTER TABLE myemp_lb
 DROP(hiredate)
 当表中有数据时,会将删除的字段在每条记录对应的值都删除,若表中数据量大时会耗时
 
 
 修改表中现有字段
 可以修改字段的类型,长度,默认值。
 建议在表中没有数据时进行,尽量不修改类型,若修改长度,尽量不要缩小
 
 ALTER TABLE table_name
 MODIFY (col_name TYPE [DEFAULT dev_
 
 
 将JOB字段添加默认值'CLERKk'
 ALTER TABLE myemp_lb
 MODIFY (job VARCHAR2(40) DEFAULT 'CLERK')
 
 
 
 DML:数据操作语言
 用于增删改表中数据的
 
                          1:添加数据
 INSERT INTO table_name
 [(col1,col2,...)]
 VALUES
 (val1,val2,...)
 
 
 INSERT INTO myemp_lb
 (id,name,salary,deptno)
 VALUES
 (1,'JACK',4000,20)
 SELECT*FROM myemp_lb




插入日期类型数据:
建议使用TO_DATE函数


INSERT INTO myemp_lb
(id,name,job,birth)
VALUES
(1003,'donna','MANAGER',
TO_DATE('2009-09-01','YYYY-MM-DD')
);






CREATE TABLE emp_lb(
empno NUMBER(4,0),
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4,0),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2,0)
);


CREATE TABLE dept_lb(
deptno NUMBER(2,0),
dname VARCHAR2(14),
loc VARCHAR2(13)
);
 
INSERT INTO emp_lb
VALUES
(7369,'SMITH','CHERK',7902,TO_DATE('1980-12-17','YYYY-MM-DD'),800,NULL,20);
 INSERT INTO emp_lb
 VALUES
(7499,'ALLEN','SALESMAN',7698,TO_DATE('1981-2-20','YYYY-MM-DD'),1600,300,30);
 INSERT INTO emp_lb
 VALUES
(7521,'WARD','SALESMAN',7698,TO_DATE('1981-2-22','YYYY-MM-DD'),1250,500,30);
INSERT INTO emp_lb
VALUES
(7566,'JONES','MANAGER'7839,TO_DATE('1981-4-2','YYYY-MM-DD'),2975,NULL,20);
INSERT INTO emp_lb
VALUES
(7654,'MARTIN','SALESMAN',7698,TO_DATE('1981-9-28','YYYY-MM-DD'),1250,1400,30);
INSERT INTO emp_lb
VALUES
(7698,'BLAKE','MANAGER',7839,TO_DATE('1981-5-1','YYYY-MM-DD'),2850,NULL,30);
INSERT INTO emp_lb
VALUES
(7782,'CLARK''MANAGER',7839,TO_DATE('1981-6-9','YYYY-MM-DD'),2450,NULL,10);
INSERT INTO emp_lb
VALUES
(7788,'SCOTT','ANALYST'7566,TO_DATE('1987-4-19','YYYY-MM-DD'),3000,NULL,20);
INSERT INTO emp_lb
VALUES
(7839,'KING','PRESIDENT',NULL,TO_DATE('1981-11-17','YYYY-MM-DD'),5000,NULL,10);
INSERT INTO emp_lb
VALUES
(7844,'TURNER','SALESMAN',7698,TO_DATE('1981-9-8','YYYY-MM-DD'),1500,0.00,30);
INSERT INTO emp_lb
VALUES
(7876,'ADAMS','CLERK',7788,TO_DATE('1987-5-23','YYYY-MM-DD'),1100,NULL,20);
INSERT INTO emp_lb
VALUES
(7900,'JAMES','CLERK',7698,TO_DATE('1981-12-3','YYYY-MM-DD'),950,NULL,30);
INSERT INTO emp_lb
VALUES
(7902,'FROD','ANALYST',7566,TO_DATE('1981-12-3','YYYY-MM-DD'),3000,NULL,20);
INSERT INTO emp_lb
VALUES
(7934,'MILLER','CLERK',7782,TO_DATE('1982-1-23','YYYY-MM-DD'),1300,NULL,10);


SELECT * FROM emp_lb


INSERT INTO dept_lb
VALUES
(10,'ACCOUNTING','NEW YORK');
INSERT INTO dept_lb
VALUES
(20,'RESEARCH','DALLAS');
INSERT INTO dept_lb
VALUES
(30,'SALES','CHICAGO');
INSERT INTO dept_lb
VALUES
(40,'OPERATTONS','BOSTON');




DML操作
                        2:修改表中数据
语法
UPDATE table_name
SET col1=new_val1,col2=new_val2...
[WHERE condition]


UPDATE myemp_lb
SET gender='F',salary=7000
WHERE name='ROSE'




UPDATE语句会修改表中记录中指定字段的值,UPDATE通常要使用WHERE子句来限定要修改的记录,
否则就是整张表每条记录都会被修改,若使用了WHERE,则只会修改满足WHERE条件的记录。
SELECT * FROM myemp_lb


                      3:删除表中数据
语法:
DELETE FROM table_name
[WHERE condintion]
同样的,若不添加where子句会将表中的所有数据删除,等同于清空表中操作。通常不会这样做
添加WHERE子句后,只会删除表中*满足WHERE条件的记录


DELETE FROM myemp_lb
WHERE id=1


SELECT * FROM myemp_lb


DELETE FROM myemp_lb
WHERE id=3


DELETE FROM myemp_lb
WHERE id=4
 SELECT * FROM myemp_lb


SELECT ename,sal,job,deptno
FROM emp_lb


SELECT ename
FROM emp_lb


SELECT
  CONCAT(CONCAT(ename,'的工资是:'),sal)
FROM
  emp_lb


使用"||"也可以连接字符串,通常使用它来代替CONCAT函数
SELECT ename||':'||sal
FROM emp_lb




LENGTH(char)函数
用于返回给定字符串的长度(字符量)
SELECT ename,LENGTH(ename)
FROM emp_lb


UPPER(char),LOWER(char),
INITCAP(char)
将字符串转换为全大写,全小写,首字母大写(其中可以使用空格分隔多个单词,
那么每个单词首字母都会大写).


DUAL:伪表,为了满足SELECT语法要求使用当我们查询的数据不来自任何一张表时,
可以使用伪表代替FROM子句中的内容,伪表仅仅会查出一条结果




SELECT UPPER('Heloworld'),
  LOWER('HELLOWORLD')
  INITCAP('HELLO WORLD')
  FROM dual
  SELECT * FROM emp_lb
  


WHERE ename=UPPER('jones')
SELECT * FROM emp_lb


TRIM,LTRIM,RTRIM
TRIM:去除给定字符串中两边重复的给定字符


LTRIM,RTRIM可以单独去除左边或者右边的字符
SELECT
  TRIM('e' FROM 'eeeeeeliteeeee')
FROM dual


SELECT
  LTRIM('eeeeliteee','e')
FROM dual


SELECT
  RTRIM('eeeelliteeee','e')
FROM dual




LPAD,RPAD补位函数
SELECT LPAD(sal,10,'s')
FROM emp_lb




SUBSTR(char,offer,len)
从给定字符串的给定位置开始,连续截取len个字符
offert可正可负,若是负数,则是从倒数字符开始截取
len必须是个>=0的数字,若截取的字符数量超过实际可以截取的字符数量时,则截取到字符串末尾。
在数据库中,下标从1开始!
SELECT
  SUBSTR('Thinking in java',-7,4)
FROM dual


SELECT
  SUBSTR('Thinking in java',7,4)
FROM dual


INSTR(CHAR1,CHAR2[,N,M,])
查看char2在char1中的位置
n:从char1的第几个字符开始查找(不写则为1)
m:查找第几次出现(不写则为1)
SELECT
  INSTR('thinking in java','in',4,2)
  FROM dual


数字函数
ROUNT(n,m)
对n进行四舍五入操作,保留小数点后m位,若m为0,则是保留到整数位,若为负数,
则是保留十位以上的数字
SELECT ROUND(45.678,2) FROM dual
SELECT ROUND(45.678,0) FROM dual
SELECT ROUND(45.678,-2) FROM dual


TRUNC函数,与ROUND的区别在于,仅保留指定位数,不做四舍五入操作
SELECT TRUNC(45.678,2) FROM dual
SELECT TRUNC(45.678,0) FROM dual
SELECT TRUNC(45.678,-1) FROM dual


MOD(m,n)求余数,若n为0,则直接返回
SELECT MOD(sal,1000) FROM emp_lb


CELL与FLOOR函数
用于对给定的小数向上取整数与向下取整数
SELECT CEIL(4.5),FLOOR(4.5)
FROM dual


日期相关的关键字
1:SYSDATE
SYSDATES实际上对应ORACLE内部的一个函数,返回的是一个DATE类型的当前系统时间的值
INSERT INTO student
VALUES
(1,'张三',SYSDATE)


2:SYSTIMESTAMP关键字与SYSDATE一样,只不过返回的是一个时间戳类型的当前系统时间的值




日期类型的数据是可以进行运算的,两个日期类型的值相减,差为相差的天数。
给日期的值加上一个数字,相当于累加了天


输入一个生日,查询到今天为止活了多少天?
SELECT
  SYSDATE-TO_DATE('1993-05-23','YYYY-MM-DD')
FROM dual


每个员工的入职时间
SELECT 
  SYSDATE-hiredate 
FROM emp_lb




TO_CHAR()可以将给定的DATE按照指定的日期格式转换为字符串
SELECT ename,TO_CHAR(hiredate,'YYYY-MM-DD')
FROM emp_lb




SELECT
  TO_CHAR(
  TO_DATE('98-05-30','RR-MM-DD'),'YYYY-MM-DD')
FROM dual


按照yyyy年mmm月dd日显示当前系统时间
SELECT
  TO_CHAR(
  SYSDATE,'YYYY"年"-MM"月"-DD"日"')
FROM dual




返回所在月的最后一天
SELECT LAST_DAY(SYSDATE) FROM dual
SELECT LAST_DAY('20-2月-09') FROM dual


计算职员入职20周年纪念日
SELECT ename,ADD_MONTHS(hiredate,20*12)
FROM emp_lb;


查看每个员工入职多少个月
SELECT ename,MONTHS_BETWEEN(SYSDATE,hiredate)
FROM emp_lb


查询下个周三是几号
SELECT
  NEXT_DAY(SYSDATE,4) as "NEXT_WEDN"
FROM dual
  
SELECT  
  LEAST(SYSDATE,TO_DATE('2008-10-10','YYYY-MM-DD')
)
FROM dual


1981年入职的都有谁?
SELECT ename,hiredate
FROM emp_lb
WHERE
EXTRACT(YEAR FROM hiredate)=1981




CREATE TABLE student_lb
(id NUMBER(4),name CHAR(20),gender CHAR(1));
INSERT INTO student_lb VALUES(1000,'李莫愁','F');
INSERT INTO student_lb VALUES(1001,'林平直',NULL);
INSERT INTO student_lb(id,name) VALUES(1002,'张无忌');


SELECT * FROM student_lb


当判断一个字段的值是否为NULL时,不能使用"="判断,而是使用IS NULL或者IS NOT NULL.
UPDATE student_lb
SET gender='M'
WHERE gender IS NULL
SELECT * FROM student_lb


NULL的运算
NULL与字符串连接,等于什么都没干。
NULL与数字运算,结果还是NULL




查看每个员工的收入情况
SELECT ename,sal,comm,sal+comm
FROM emp_lb




NVL(exp1,exp2)函数
若exp1为NULL,则函数返回exp2,否则就返回exp1的值
作用,建一个NULL值替换为一个非NULL值
SELECT
  ename,sal,comm,sal+NVL(comm,0)
FROM emp_lb


查看每个员工的奖金情况,若该员工有奖金,则表示“有奖金”,没有这显示“没有奖金”


NVL2(exp1,exp2,exp3)
若exp1的值不为NULL,则返回exp2,若为NULL则返回exp3
SELECT 
  ename,comm,
  NVL2(comm,'有奖金','没有奖金')
FROM emp_lb


实现NVL相同的功能:
SELECT
ename,sal,comm,NVL2(comm,sal+comm,sal)
FROM emp_lb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle数据库中,新建一个数据库需要经过以下步骤: 1. 创建数据库实例 创建实例的语句如下: ``` CREATE SPFILE FROM PFILE='<pfile路径>'; ``` 其中,`<pfile路径>`为PFILE文件的路径,如果没有则需要先创建一个PFILE文件。 2. 创建控制文件 创建控制文件的语句如下: ``` CREATE CONTROLFILE REUSE DATABASE '<数据库名>' NORESETLOGS NOARCHIVELOG MAXLOGFILES <最大日志文件数> MAXLOGMEMBERS <最大日志成员数> MAXDATAFILES <最大数据文件数> MAXINSTANCES <最大实例数> MAXLOGHISTORY <最大日志历史数> LOGFILE GROUP <组号> ('<日志文件路径1>', '<日志文件路径2>') SIZE <日志文件大小> BLOCKSIZE <日志块大小> DATAFILE '<数据文件路径1>' SIZE <数据文件大小> AUTOEXTEND ON NEXT <自动扩展大小> MAXSIZE <最大文件大小> BLOCKSIZE <数据块大小> CHARACTER SET <字符集> ; ``` 其中,`<数据库名>`为新建数据库的名称,`<最大日志文件数>`、`<最大日志成员数>`、`<最大数据文件数>`、`<最大实例数>`、`<最大日志历史数>`等参数可以根据实际情况自行设置。`<日志文件路径1>`、`<日志文件路径2>`、`<数据文件路径1>`等为实际的文件路径。 3. 创建联机日志文件 创建联机日志文件的语句如下: ``` ALTER DATABASE ADD LOGFILE GROUP <组号> ('<日志文件路径1>', '<日志文件路径2>') SIZE <日志文件大小> BLOCKSIZE <日志块大小>; ``` 其中,`<组号>`为新建日志文件所在的组号,`<日志文件路径1>`、`<日志文件路径2>`为实际的文件路径,`<日志文件大小>`为日志文件的大小,`<日志块大小>`为日志块的大小。 4. 创建表空间 创建表空间的语句如下: ``` CREATE TABLESPACE <表空间名> DATAFILE '<数据文件路径>' SIZE <数据文件大小> AUTOEXTEND ON NEXT <自动扩展大小> MAXSIZE <最大文件大小> BLOCKSIZE <数据块大小>; ``` 其中,`<表空间名>`为新建的表空间名称,`<数据文件路径>`为数据文件的路径,`<数据文件大小>`为数据文件的大小,`<自动扩展大小>`为数据文件自动扩展的大小,`<最大文件大小>`为数据文件的最大大小,`<数据块大小>`为数据块的大小。 5. 创建用户 创建用户的语句如下: ``` CREATE USER <用户名> IDENTIFIED BY <密码> DEFAULT TABLESPACE <表空间名>; ``` 其中,`<用户名>`为新建用户的名称,`<密码>`为新建用户的密码,`<表空间名>`为新建用户的默认表空间名称。 以上是新建Oracle数据库的主要语句,具体操作可以参考Oracle官方文档或相关书籍。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值