第三天20160728
--TO_CHAR(N,F):将数字类型N根据模板F转换为字符类型的值。
SELECT TO_CHAR(2546.9974,'999999.99'),
TO_CHAR(2546.9874,'999'),
TO_CHAR(2546.9974,'000000.00'),
TO_CHAR(2546.9974,'999,999.00'),
TO_CHAR(2546.9974,'FM$999,999.00'),
TO_CHAR(2546.9974,'FML999,999.00')
FROM DUAL;
--TO_DATE(C,F):根据模板F将字符类型C转换为日期类型
SELECT TO_DATE('1999-1-1','YYYY-MM-DD')
FROM DUAL;
SELECT TO_DATE('2016-10-1','YYYY-MM-DD') - SYSDATE
FROM DUAL;
--TO_NUMBER(C,F):根据模板F将字符类型C转换为数字类型
SELECT TO_NUMBER('1,000.00','9,999.99')
FROM DUAL;
--通用的单行函数
--NVL():当第一个参数不为NULL,返回第一个参数。当第一个参数为NULL,返回第二个参数。两个参数的类型必须一致。
SELECT LAST_NAME,NVL(TO_CHAR(COMMISSION_PCT,'FM0.00'),'没有佣金')
FROM EMPLOYEES;
--当算术运算中出现NULL时,结果一定为NULL。
--查询employees表中所有员工的last_name,salary,commission_pct,年薪,年收入(年薪+年薪*佣金)
SELECT LAST_NAME,SALARY,COMMISSION_PCT,SALARY*12 AS 年薪,(SALARY*12) + (SALARY*12*NVL(COMMISSION_PCT,0)) AS 年收入
FROM EMPLOYEES;
--NVL2():当第一个参数不为NULL,返回第二个参数。当第一个参数为NULL,返回第三个参数。
SELECT LAST_NAME,NVL2(COMMISSION_PCT,'有佣金','没有佣金')
FROM EMPLOYEES;
--CASE表达式与DECODE()函数:分支选择
--查询employees表中所有员工的last_name,job_id,salary,新工资。当job_id为IT_PROG时,工资增加10%。当job_id为ST_CLERK时,工资增加15%。当job_id为SA_REP时,工资增加20%,其它job_id工资不变。
SELECT LAST_NAME,JOB_ID,SALARY,
CASE
WHEN JOB_ID='IT_PROG' THEN SALARY*1.10
WHEN JOB_ID='ST_CLERK' THEN SALARY*1.15
WHEN JOB_ID='SA_REP' THEN SALARY*1.20
ELSE SALARY
END AS 新工资
FROM EMPLOYEES;
--只能判断是否相等
SELECT LAST_NAME,JOB_ID,SALARY,
CASE JOB_ID
WHEN 'IT_PROG' THEN SALARY*1.10
WHEN 'ST_CLERK' THEN SALARY*1.15
WHEN 'SA_REP' THEN SALARY*1.20
ELSE SALARY
END AS 新工资
FROM EMPLOYEES;
--只能判断是否相等
SELECT LAST_NAME,JOB_ID,SALARY,
DECODE(
JOB_ID,
'IT_PROG',SALARY*1.10,
'ST_CLERK',SALARY*1.15,
'SA_REP',SALARY*1.20,
SALARY) AS 新工资
FROM EMPLOYEES;
--表
--创建表
CREATE TABLE 表名(
列名 数据类型[长度] [约束],
列名 数据类型[长度] [约束],
……
列名 数据类型[长度] [约束]
);
--Oracle常用的数据类型
/*
数字类型:NUMBER
1.整数:NUMBER(5),长度可以省略,如果省略长度默认为38位的数字。
2.浮点数:NUMBER(8,2),表示整个数字为8位,其中有两位小数。
字符类型:长度不能省略
1.CHAR:保存固定长度的字符串,当内容长度不够时,使用空格在内容的右面补齐长度。
2.VARCHAR2:保存可变长度的字符串,不会使用空格补齐长度。
日期类型:不能指定长度。
DATE:日期+时间
*/
CREATE TABLE STUDENTS(
STU_ID NUMBER(5),
STU_NAME VARCHAR2(10 CHAR),
STU_SEX CHAR(1 CHAR),
STU_BIRTHDAY DATE
);
--查看表结构:DESC 表名;
/*
数据操作
一、添加数据:INSERT INTO语句
1.向表中添加一行新的数据,并向新行中所有的列赋值。
格式:INSERT INTO 表名 VALUES(值,值,……);
例:INSERT INTO STUDENTS VALUES(1,'Tom','男',TO_DATE('1995-1-20','YYYY-MM-DD'));
2.向表中添加一行新的数据,并向新行中指定的列赋值。
格式:INSERT INTO 表名(列名,列名,……) VALUES(值,值,……);
例:INSERT INTO STUDENTS(STU_NAME,STU_ID,STU_SEX) VALUES('张三',2,'女');
3.将其它表中的数据复制到指定的表中
格式:INSERT INTO 表名[(列名,列名,……)] SELECT语句;
例:INSERT INTO STUDENTS(STU_ID,STU_NAME) SELECT EMPLOYEE_ID,LAST_NAME FROM EMPLOYEES;
二、修改数据:UPDATE语句
格式:UPDATE 表名 SET 列名=值[,列名=值,……] [WHERE 条件];
例:
UPDATE STUDENTS SET STU_BIRTHDAY=SYSDATE WHERE STU_ID=2;
UPDATE STUDENTS SET STU_SEX='男',STU_BIRTHDAY=TO_DATE('1990-2-14','YYYY-MM-DD') WHERE STU_ID=100;
UPDATE EMPLOYEES SET SALARY=SALARY+300 WHERE SALARY=2500;
三、删除数据:DELETE语句
格式:DELETE [FROM] 表名 [WHERE条件];
例:
DELETE FROM STUDENTS WHERE STU_BIRTHDAY IS NULL;
--删除STUDENTS表中STU_BIRTHDAY列中所有的数据。
UPDATE STUDENTS SET STU_BIRTHDAY=NULL;
*/
--约束
1.主键约束:PRIMARY KEY。主键不能为NULL,不能重复。通过主键可以在表中找到唯一的一行数据。
2.非空约束:NOT NULL。列不能为NULL。
3.检查约束:CHECK。向列中添加与修改数据时,检查值是否合法。
--数据库中不能出现同名的元素。
--删除表:DROP TABLE 表名;
DROP TABLE USERS;
CREATE TABLE USERS(
USER_ID NUMBER(6) PRIMARY KEY,
USER_NAME VARCHAR2(20) NOT NULL,
USER_AGE NUMBER(2) CHECK(USER_AGE BETWEEN 20 AND 50)
);
INSERT INTO USERS VALUES(1,'AA',19);