[数据库]数据库

1.数据库简介

1.1)DB和DBMS

数据库Database简称DB,是按照数据结构来组织、存储和管理数据的仓库
数据库管理系统Database Management System简称DBMS:管理数据库的软件

1.2)关系数据库简介

关系:描述两个元素间的关联或对应关系
使用关系模型把数据组织到二维数据表中
产品化:Oracle DB2 Sybase SQLServer MySQL

1.3)表的概念

一个关系数据库是由多个数据表组成,数据表是关系数据库的基本存储结构,表是二维的,行为记录,列为字段

2.主流关系型数据库

Oracle是甲骨文公司的数据库产品,是世界上第一个商品化的关系型数据库管理系统,采用标准SQL结构化查询语言
DB2是IBM公司的关系型数据库管理系统
Sybase是美国Sybase公司的关系型数据库系统
SQL Server是微软的产品

3.SQL概述

3.1)结构化查询语言

SQL(Structured Query Language):结构化查询语言
SQL是在关系数据库上执行数据操作、检索及维护所使用的标准语言,可以用来查询数据,操作数据,定义数据,控制数据
所有数据库都使用相同或者相似的语言
SQL可分为:
    -数据定义语言(DDL):Data Definition Language
    -数据操作语言(DML):Data Manipulation Language
    -事务控制语言(TCL):Transaction Control Language
    -数据查询语言(DQL):Data Query Language
    -数据控制语言(DCL):Data Control Language

3.2)DDL、DML、TCL、DQL、DCL

3.2.1)数据定义语言(DDL)
用于建议、修改、删除数据库对象,包括:
-CREATE:创建表或其他对象的结构
-ALTER:修改表或其他对象的结构
-DROP:删除表或其他对象的结构
-TRUNCATE:删除表数据,保留表结构
1".创建表 CREATE语句
    CREATE TABLE table_name(
        column_name datatype DEFAULT exp,....);
2".DESC语句-查询表的结构
    DESC table_name;
3".DEFAULT语句--给列指定默认值
4".NOT NULL--非空约束,用于确保字段值不为空
5".修改表名RENAME
    在建表后若希望修改表名,使用RENAME语句
    RENAME old_table_name TO new_table_name;
6".增加列--ALTER TABLE的ADD子句实现
    ALTER TABLE table_name 
    ADD(column_name datatype,...);
    列只能增加在最后,不能插入到现有的列中
7".删除列--ALTER TABLE的DROP子句删除不需要的列
    ALTER TABLE table_name DROP(column_name);
8".修改列--ALTER TABLE的MODIFY子句
    建表后,可改变表中列的数据类型、长度和默认值,修改仅对以后插入的数据有效,将长度由大改小,有可能u成功
    ALTER TABLE table_name 
    MODIFY(column_name datatype,...);
补充Oracle数据类型:
NUMBER(P,S)数字类型,p数字的总位数,s小数点后面的位数
CHAR(N)固定长度字符类型,n占用的字节数,最大长度2000字节
VARCHAR(N) VARCHAR2(N)变长字符类型,n最多占用字节数,最大长度4000字节
DATE日期时间的数据,长度7个字节,默认格式DD-MON-RR
3.2.2)数据操作语言(DML)
用于该表数据表中的数据,和事务相关,执行完后需要经过事务控制语句提交后才真正的将改变应用到数据库中,包括:
-INSERT:将数据插入到数据表中
-UPDATE:更新数据表中已存在的数据
-DELETE:删除数据表中的数据

1".INSERT语句--给数据表增加记录
    INSERT INTO table_name
    (column_name,column_name,...)
    VALUES(value,value,...);
若插入的列有日期字段,需考虑日期格式,默认格式:DD-MON-RR
可自定义日期格式,用TO_DATE函数转换为日期类型的数据
    TO_DATE('2016-08-14','YYYY-MM-DD')
2".UPDATE语句--更新表中的记录
    UPDATE table_name
    SET column_name = value,...
    [WHERE condition];
3".DELETE语句--删除表中的记录
    DELETE FROM table_name [WHERE condition];
    若没有where子句,则全表的数据都会被删除
4".TRUNCATE语句--删除表中数据
    TRUNCATE TABLE table_name;
    与delete区别:
    1':delete可以有条件删除,truncate将表数据全部删除
    2':delete是DML语句,可以回退,truncate是DDL语句,立即生效,无法回退
    3':如果删除全部表记录且数据量较大,delete语句效率低于truncate语句
3.2.3)事务控制语言(TCL)
用于维护数据一致性的语句,包括:
-COMMIT:提交,确认已经进行的数据改变
-ROLLBACK:回滚,取消已经进行的数据改变
-SAVEPOINT:保存点,使当前的事务可以回退到指定的保存点,便于取消部分改变。
3.2.4)数据查询语言(DQL)
用来查询所需要的数据
-SELECT语句
3.2.5)数据控制语言(DCL)
用于执行权限的授予和收回操作,包括:
-GRANT:授予,用于给用户或角色授予权限
-REVOKE:用于收回用户或角色已有的权限
-CREATE USER:创建用户

4.字符串操作

4.1)字符串类型

4.1.1)CHAR和VARCHAR2类型
    字符串数据类型,用来在表中存放字符串信息
    CHAR:存放定长字符,不满补空格
    VARCHAR2:存边长字符,存多少占用多少
    按字符的自然顺序排序
4.1.2)LONG和CLOB类型
    LONG:存变长字符串,最多达2GB的字符串数据
    CLON:存定长或变长字符串,最多达4GB的字符串数据

4.2)字符串函数

4.2.1)CONCAT和"||"
    CONCAT(a1,a2)将a1和a2两个字符串连接起来
    等价操作:连接操作符:"||"
    若a1和a2任何一个为NULL,相当于连接了一个空格
    CONCAT(a,b) a||b
4.2.2)LENGHT(char)字符串的长度
4.2.3)UPPER,LOWER和INITCAP大小写转换函数转换字符大小写
    UPPER(char):将字符转为大写形式
    LOWER(char):将字符转为小写形式
    INITCAP(char):将字符串中每个单词的首字符大写,其他小写,单词之间用空格
4.2.4)TRIM,LTRIM,RTRIM:截去子串
    TRIM(a FROM b):将a从b前后中截去
    LTRIM(a,b):将a从b的左侧截去
    RTRIM(a,b):将a从b的右侧截去
4.2.5)LPAD,RPAD:补位函数
    LPAD(a,n,b):左补位,在a的左端用b补足n位
    RPAD(a,n,b):右补位,在a的右端用b补足n位
4.2.6)SUBSTR(char,m,n)获取字符串的子串
    返回char中从m位开始取n个字符
    m=0,从首字符开始
    m为负数,从尾部开始
    若没有n,或n的长度超过char的长度,则取到字符串末尾为止
4.2.7)INSTR(a,b,n,m)返回字符串a中b的位置
    从n的位置开始检索,没有指定n则从第1个字符开始检索
    m用于指定子串的第m次出现次数,若不指定取值1
    若在a中没有找到b,返回0

5.数字操作

5.1)数字类型

NUMBER(P,S)
NUMBERIC(P,S)==>NUMBER(P,S)
DECIMAL(P,S)或DEC(P,S)==>NUMBER(P,S)
INTENGER或INT==>NUMBER(38)
SMALLINT==>NUMBER(38)
FLOAT(b)==>NUMBER
DOUBLE PRECISION==>NUMBER
REAL==>NUMBER

5.2)数值函数

5.2.1)ROUND(n,m):用于四舍五入
    m必为整数,m缺省,默认值为0
    m取正数,则四舍五入到小数点后第m位
    m取0值,则四舍五入到整数位
    m取负数,则四舍五入到小数点前第m位
5.2.2)TRUNC(n,m):用于截取
5.2.3)MOD(n,m):返回n除以m后的余数,m为0直接返回n
5.2.4)CEIL和FLOOR:最小整数,最大整数
    CEIL(n):天花板,求大于等于n的最小整数值
    FLOOR(n)地板,求小于等于n的最大整数值

6.日期操作

6.1)日期类型

DATE:7个字节,世纪、年、月、日、时、分、秒
TIMESTAMP:7或11个字节,世纪、年、月、日、时、分、秒、纳秒

6.2)日期关键字

SYSDATE:当前系统时间,精确到秒,DD-MON-RR
SYSTIMESTAMP:当前系统日期和时间,精确到毫秒

6.3)日期转换函数

TO_DATE(char,'YYYY-MM-DD HH24:MI:SS')
将字符串按照指定格式转换为日期类型
TO_DATE(char,'YYYY-MM-DD HH12:MI:SS')

TO_CHAR(date,'YYYY"年"MM"月"DD"日"')
将日期按照指定格式转换为字符串类型
TO_CHAR(char,'YYYY-MM-DD HH12:MI:SS')

6.4)日期常用函数

6.4.1)LAST_DAY(date)返回所在月的最后一天
6.4.2)ADD_MONTHS(date,i)返回date加上i个月后的日期值
        若i为小数,将截去整数后在参与运算
        若i为负数,则减去i个月后的日期值
6.4.3)MONTHS_BETWEEN(date1,date2)
        date1-date2日期值之间间隔了多少个月
6.4.4)NEXT_DAY(date,i)返回date日期数据的下一个周几
        1-7:周日-周六
        eg:select next_day(sysdate,4) 
           as "next_wedn" from dual;
6.4.5)LEAST,GREATEST
    LEAST(a,b,c...)参数中的最小值
    GREATEST(a,b,c,...)参数中的最大值
6.4.6)EXTRACT(date FROM datetime):从参数datetime中提取参数date指定的数据,比如提取年,月,日

7.空值NULL操作

7.1)NULL的操作

插入空值,insert into table_name values(1,null)
更新成空值,update emp 
         set gender=null where id = 100;
         更新空值,列没有非空约束的情况下才可操作
NULL条件查询 IS NULL ,IS NOT NULL

7.2)空值函数

NVL(a,b)将NULL转变为非NULL值
    若a为NULL,则取b
NVL2(a,b,c)将NULL转变为非NULL值
    判断a是否为NULL,若不是NULL取b,若是NULL,取c

你可能感兴趣的:(数据库,数据库,oracle)