CREATE TABLE employee_fanchuanqi(
id NUMBER(4),
name VARCHAR2(20),
gender CHAR(1),
birth DATE,
salary NUMBER(6,2),
job VARCHAR2(30),
deptno NUMBER(2)
);
DESC table_name:查看表结构
看到表的列的名字,以及对应的类型,长度等
DESC employee_fanchuanqi;
删除一张表的语法
DROP TABLE table_name
DROP TABLE employee_fanchuanqi
DEFAULT关键字
用于为给定的列(字段)设置默认值
CREATE TABLE employee(
id NUMBER(4),
name VARCHAR2(20) NOT NULL,
gender CHAR(1) DEFAULT 'M',
birth DATE,
salary NUMBER(6,2),
job VARCHAR2(30),
deptno NUMBER(2)
);
数据库中字段无论是什么类型,默认值都是NULL
若使用DEFAULT指定了默认值,则使用指定的。
NOT NULL约束
在创建表的时候可以为列添加非空约束,被约束的
列在插入数据时必须给值。此列不允许为空。
修改表名
RENAME old_name TO new_name
需要注意:新的表名不能是数据库中现有的表
RENAME employee_fanchuanqi
TO emp_fanchuanqi
修改表:
为表添加新的字段(列),总是在表的最后一列追加
ALTER TABLE emp_fanchuanqi
ADD (hiredate DATE DEFAULT sysdate);
sysdate是一个日期的值,表示当前系统时间。
从表中删除一列
ALTER TABLE emp_fanchuanqi
DROP (hiredate);
修改表中现有的列
ALTER TABLE emp_fanchuanqi
MODIFY (
job VARCHAR2(40) DEFAULT 'CLERK'
);
修改表字段时的注意事项:
1:尽量不修改字段类型。
2:字段长度尽量不要减少。
3:修改后的字段,只对新插入的数据产生影响,
修改字段前的所有数据不影响。
DML操作
向表中插入数据
INSERT INTO table_name
VALUES(1,'范传奇',22,'男',1500)
INSERT INTO
emp_fanchuanqi(id,name,salary)
VALUES(1,'boss',1500)
INSERT语句是向表中插入数据
INSERT语句指定的列对应的值会被插入到表中
没有列举的列会插入NULL,但是,若该列有设置
默认值(DEFAULT关键字设置的),那么就插入
设置的默认值。
若某列为NOT NULL,执行INSERT语句时又没有
指定该列,那么插入会抛出违反为空约束的异常
执行INSERT语句时,若没有指定插入任何列,那
么就是全列插入,注意,给的值顺序必须与表中
列的顺序完全一致,并且不能忽略任何一个列的
值
查询表数据
SELECT * FROM emp_fanchuanqi
INSERT INTO emp_fanchuanqi(id,name,salary)
VALUES(2,'tom',2500)
INSERT INTO emp_fanchuanqi(id,name,salary)
VALUES(3,'JERRY',3500)
事务控制:
COMMIT
用于提交事务。
ROLLBACK
用于回滚事务。那么本次事务中所有的增删改操作
全部失效。
TO_DATE()函数
TO_DATE('2009-09-01','YYYY-MM-DD')
INSERT INTO emp_fanchuanqi
(id,name,birth)
VALUES
(1,'jack',TO_DATE('1990-09-01','YYYY-MM-DD'))
修改表中的数据
UPDATE emp_fanchuanqi
SET job='MANAGER'
WHERE salary=8500;
注意:通常情况下,更改表时,要添加WHERE
来指定过滤条件,若不指定WHERE则是全表修改
通常不会这样做。
从表中删除数据
DELETE FROM emp_fanchuanqi
WHERE name='tom'
删除数据时更要注意,添加WHERE.否则是全表
删除。
TRUNCATE TABLE emp_fanchuanqi;
不能回滚(rullback)
字符串函数 拼接显示 ||
CONCAT()函数
select concat(ename,sal) from emp
select concat( concat(ename,','),sal) from emp
或者select ename ||','|| sal from emp
LENGTH函数 长度
SELECT ename,LENGTH(ename)
FROM emp
upper,lower,initcap
将字符串转换为全大写,全小写,以及首字母大写
伪表 dual(DUAL) 提供测试查询
SELECT
UPPER('helloworld'),
LOWER('helloworld'),
INITCAP('helloworld')
FROM emp
TRIM,LTRIM,RTRIM
去除当前字符串中两边的指定重复字符,LTRIM仅去除左侧的,RTRIM则去除右侧的
SELECT TRIM('e' from 'eeeeeliteeeeee')
FROM DUAL;
参数中from前面只能是单一字符
若没有from以及前面的字符,则是去除空白
SELECT LTRIM('eeeeliteeeee','e')
FROM DUAL;
SELECT RTRIM('eeeeliteeeee','e')
FROM DUAL;
同样的,不指定第二个参数,默认是去除空白
补位函数
AAAAAAAAAAAAAAAAAAAA
AA
显示20个字符,不够左边补若干空格
AAAAA
SELECT LPAD(sal,20,'$')
FROM emp
作用:要求显示20个字符,若sal的值不足长度,则
补充若干个'$',以达到20个字符
SELECT RPAD('aaaaAAAAAA',5,'$')
FROM DUAL
substr (char,m,n)截取字符串从m开始截取n个字符
数据库中下标都是从1开始,第三个参数不指定则是截取到末尾,
长度超过实际字符长度,也是截取到末尾
SELECT
INSTR('Doctor Who Who Who','Who'9,2)
FROM DUAL;
instr(char1,char2,n,m)函数查找char2在char1中的位置
n为从第几个字符开始,m为第几次出现,n,m不写默认都是1
数字函数
round(n,m)四舍五入 m小数点后保留几位
select round(55.3442,0) from dual
trunc(n,m)截取数字
select trunc(2255.3442,-2) from dual
mod(n,m)求余数
ceil(n)取大于或等于n的最小整数值
floor(n)取小于或等于n的最大整数值
系统当前时间戳
SELECT SYSTIMESTAMP FROM DUAL;
SELECT
TO_DATE(
'2008-08-12 22:45:33',
'yyyy-mm-dd hh24:mi:ss'
)
FROM
DUAL;
SELECT
TO_CHAR(
sysdate,
'yyyy"年"mm"月"dd"日" hh:mi:ss'
)
FROM dual;
在日期格式字符串中,出现的非关键字符或符号
的其他字符时,需要使用双引号。
两个日期可以进行减法操作,差为相差的天数。
SELECT sysdate-hiredate,ename
FROM emp_fanchuanqi
last_day() 返回月底最后一天
select last_day(sysdate) from emp
add_months(date,i)
对给定日期加上指定的月,若i为负数则是减去
查看每个员工入职二十周年日期
select ename,add_months(hiredate,12*20) from emp
计算两个日期之间相差的月,date1-date2
months_between(date1,date2)
select ename,months_between(sysdate,hiredate) from emp
next_day(date,i)返回date日期数据的下周几
1周日2周一 依次类推
select next_day(sysdate,4) from dual
least,greatest 求最小值与最大值,除了日期外,常用数字也可以比较大小