在Oracle数据库内有一种特殊的表Dual。Dual表是Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select中。Dual表由Oracle连同数据字典一同创建,所有的用户都可以用名称DUAL访问该表。这个表里只有一列DUMMY,该列定义为VARCHAR2(1)类型,有一行值X。从DUAL表选择数据常被用来通过SELECT语句计算常数表达式,由于DUAL只有一行数据,所以常数只返回一次。
1、检查系统时间
select SYSDATE FROM dual;
2、利用dual查1+1的结果
SELECT 1+1 from dual;
3、创建新表EMP4
CREATE TABLE emp4(
id NUMBER(4),
name VARCHAR2(20),
gender CHAR(1),
birth DATE,
salary NUMBER(6,2),
job VARCHAR2(30),
deptno NUMBER(2)
)
4、--设置默认值。在数据库中,无论字段是什么类型,默认值都是null,但是可以在创建表的时候通过default关键字未指定的列单独设置默认值,在数据库中,字符串单引号表示字面量这一点与JAVA不同notnull 约束指定的字段可以确保不允许为
创建EMP2表,观察与EMP4不同的地方
CREATE TABLE emp2(
id NUMBER(4),
name VARCHAR2(20) NOT NULL,
gender CHAR(1) DEFAULT 'M',
birth DATE,
salaty Number(6,12),
deptno number(2)
)
5、修改表名 RENAME EMP2 TO EMP1;
6、--2 修改表结构 添加新字段向表中添加新的字段,只能在当前表的末尾追加。可以同时追加多个列,只需要 使用逗号隔开即可与创建表声明的时的语法一样。注意:orale与MYSQL的不同之处
ALTER TABLE EMP2 ADD (
hiredate DATE DEFAULT SYSDATE;
)
7、删除表中的现有字段 ALTER TABLE EMP1 DROP (HIREDATE);
8、 修改表中现有的字段 可以修改字段的类型、长度、默认值、非空约束
ALTER TABLE EMP2 MODIFY (
NAME VARCHAR2 (40) DEFAULT 'ZHANGSHAN';
)
9、 DML 语句 用于修改表中数据分为增删改
9.1.插入数据
INSERT INTO EMP (ID, NAME, JOB, SALARY)
VALUES
(1, 'luban', 'ADC', 500);
10、修改表中现有数据,将鲁班的工资修改为20
UPDATE EMP
SET SALARY = 20
WHERE
NAME = 'luban';
11、修改表的数据,通常指定where 过滤条件,这样只会满足条件的记录修改,若不指定where条件则是全表数据修改
--删除表现有数据。将鲁班删除
DELETE from EMP WHERE NAME='luban';
12、删除表中的数据同样需要指定的where条件否则就是清空表操作
SELECT *FROM EMP;
SELECT null+12 FROM dual;
13、字符串拼接 SELECT 'sad'||'ret' from dual;
14、select 语句 DQL、select 语句是用来查询数据的语句查询EMP指定的字段的值
SELECT NAME ,JOB,DEPTNO FROM EMP;
15、DQL必须包含的部分是select子句与FROM字句。select用来确定查询的,可以使用的字段有表的字段,函数。from 子句用来确定查询的表。查看员工的年薪
SELECT NAME,SALARY*12 FROM EMP;
16、字符串函数,连接字符串
SELECT "CONCAT"(NAME,SALARY) FROM EMP;
17、连接字符串还有一个简单的方法:“||”
SELECT NAME || ':' ||Salary FROM EMP;
18、"LENGTH"(ch)函数 ,获取字符长度
select NAME,"LENGTH"(NAME) FROM EMP;
19、"UPPER"(ch)/""LOWER"(ch)/"INITCAP"(ch)将字符转为大写、小写、首字符大写
--DUYAL:伪表,当前的内容与任何一张表中的数据无关是,可以查询伪表。
将大写字母转换为小写
SELECT LOWER('HELLOWORLD') FROM DUAL;
将小写转换为大写
SELECT UPPER ('hellooworld') from dual;
将字符串的第一个字母大写
SELECT INITCAP('HELLO WORLD') FROM DUAL;
20、--SELECT 语句 DQL -SELECT 语句是用来查询数据的DQL语句
--查询EMP指定字段的值
SELECT NAME,JOB,DEPTNO FROM EMP
21、DQL必须包含的部分是select子句与FROM子句,select用来确定查询的字段可以使用的字段有表的字段,函数,表达式from子句用来确定查询的表SELECT中使用表达式查看每个员工的年薪
SELECT NAME,SALARY*12 FROM EMP
22、字符串函数,连接字符串
SELECT CONCAT(NAME, SALARY) FROM EMP
23、
SELECT CONCAT(CONCAT(NAME,':'),SALARY) FROM EMP
24、连接字符串还有一种简单的方式:“||”
SELECT NAME || ':' || SALARY FROM EMP
25、LENGTH(ch)函数,获取字符长度
SELECT NAME,LENGTH(NAME) FROM EMP
26、TRIM/"LTRIM"(ch)/"RTRIM"(ch)去除字符串两边的指定字符
从符合条件前后都存在e,中间取得字符串
SELECT TRIM('e' FROM 'eseltese')
FROM dual;
从se后截取得到字符串
SELECT LTRIM('eseselitsese','se')
FROM dual;
27、LPAD/RPAD补位函数要求显示指定内容指定位数,若不满足则补充若干指定字符以达到显示的长度
SELECT NAME,RPAD(SALARY,6,'$')
FROM EMP;
28、--SUBSTR截取字符串。截取给定字符串,从指定位置开始截取指定个字符。在数据库中,下标从1开始计算
在题中从第四个字符之后开始,取得四个字符
SELECT SUBSTR('Thinking in java',4,4) FROM dual;
29、"INSTR"(ch1, ch2[n,m]),查找ch2在ch1中的位置,n为从指定位置开始查找,可以不写,m为第几次出现,可以不写n,m不写默认值为1
SELECT INSTR('Thinking in java','in',4,2)
FROM dual;
30、
SELECT NAME,SALARY,DEPTNO
FROM EMP
WHERE SUBSTR(NAME,1,1)='l'
31、--数字函数1."ROUND"(n, [m]),对n进行四舍五入,保留到小数点后m位,m可以不写,不写默认为0 保留到整数位1位 10 位。
SELECT ROUND(45.678,2) FROM dual;
SELECT ROUND(45.678,0) FROM dual;
SELECT ROUND(45.678,-1)FROM dual;
32、2."TRUNC"(n1 n2)函数,与ROUND用法一致只是不再进行四舍五入,而是直接截取
SELECT TRUNC(45.678, 2) FROM dual;
SELECT TRUNC(45.678, 0) FROM dual;
SELECT TRUNC(45.678, -1) FROM dual;
33、"MOD"(n1, n2)函数是求余
SELECT NAME,SALARY,MOD(SALARY, 1000)
FROM EMP;
34、CElL() 和 FLOOR()向上取整与向下取整
1、celL向上取整
SELECT CEIL(45.678) FROM dual;
2、FLOOR向下取整
SELECT FLOOR(45.678) FROM dual;
35、日期类型 DATE:7个字节。保存世纪、年月日时分秒
--TIMESTAMP:时间戳,比DATE多4个字节,可以
--保存秒以下的精度,前7个字节与DATE一致
--SYSDATE:对应一个内置函数,返回一个表示
--当前系统时间的DATE类型值
--SYSTIMESTAMP :同样的,返回的是表示当前系统
--时间的时间戳类型的值
SELECT SYSDATE FROM DUAL;
SELECT SYSTIMESTAMP FROM DUAL;
36、--"TO_DATE"(ch, fmt)按照给定的日期格式将字符串转换为DATE类型
SELECT TO_DATE('1998-11-01 23:22:11',
'YYYY-MM-DD HH24:MI:SS')
FROM DUAL;
37、在日期格式字符串中,凡不是英文,符号和数字的其他字符都要用双引号括起来
SELECT TO_DATE('1998年11月01日 23:22:11',
'YYYY"年"MM"月"DD"日" HH24:MI:SS')
FROM DUAL;
38、DATE是可以比较大小的,越晚的越大,查看1989年以后出生的员工
SELECT NAME,BIRTH FROM EMP
WHERE BIRTH > TO_DATE
('1989-01-01','YYYY-MM-DD');
39、DATE之间可以做加减法,差值为相差的天数查看每个员工至今活了多少天?
SELECT NAME,TRUNC(SYSDATE - BIRTH)
FROM EMP
40、89年到现在多少天了?
SELECT TRUNC(SYSDATE - TO_DATE('1998-01-01','YYYY-MM-DD'))
FROM DUAL;