概括的内容包括:
- Oracle数据类型
- SQL建表和约束
- SQL对数据删改
- SQL查询
- Oracle伪例
1、首先说一下SQL的语句:
在Oracle数据开发中,客户端把SQL语句发送给服务器,服务器对SQL语句进行编译、执行,把执行的结果返回给客户端,Oracle SQL语句有一下命令组成:
数据定义语句(DDL):create(创建命令)、alter(修改命令)、drop(删除命令)等;
数据操作语言(DML):insert(插入命令)、update(跟新命令)、delete(删除命令)、select...from update(查询命令); ------数据操作之后需要commit提交才能在前端显示出信息
数据查询语言(DQL):基本查询语句、order by子句、group by分组语句;
事物控制语言(TCL):commit(提交命令)、savepoint(保存点命令)、rollback(回滚命令);
就我用过的数据库有:SQLServer、MySQL、Oracle,每个数据库都有各自独特的特点和特性。
2、 Oracle数据类型
Oracle数据库的核心是表,其他数据库需要手动建表,Oracle数据库不需要。Oracle中我们可以常用的几个数据类型:
类型 | 含义 |
char(length) | 存储固定长度的字符串,参数length指定长度,如果存储的长度小鱼length,我们可以使用空格,默认为1,最长不能超过2000字节。 |
varchar2(length) | 存储可变长度的字符串,length指定该字符串的最大长度,默认为1,最长不超过4000字符。 |
number(p,s) | 既可以存储浮点型,也可以存储整数,p表示数字最大位数(如果是小数包括整数部分和小数部分和小数点,p默认38位),s指小数位数。 |
date | 存储日期和时间,存储纪元、4位年、月、日、时、分、秒,存储时间 |
下面就是对number类型的实例:
格式 输入的数字 实例存储
number 1234.567 1234.567
number(6,2) 1234.567 123.46
number(4,2) 1234.567 输入的数字超过指定的精度,数据库不能存储
对于日期类型,我们可以使用sysdate内置函数可以获取当前的系统日期和时间,返回date类型,用systimestamp函数返回当前日期时间时区。
3、创建表和约束
Oracle创建表同SQLServer一样,使用create table命令来完成,创建约束则使用如下命令:
语法格式:alter table命令
-------------------------------------------------------
alter table 表名 add constraint 约束名 约束内容
-------------------------------------------------------
无论是创建表还是约束,和sqlServer基本相同,在Oracle中default是一个值,而SQLServer中的default是一个约束,因此Oracle的default设置可以在建表的时候创建. 注意在和专业人士谈论时:建模==建表!
案例1:创建一个学生信息infos表和约束
create table infos
(
stuid varchar2(7) not null, --学号 学号=‘s’+班号+2位序号
stuname varchar2(10) not null, --姓名
gender varchar2(2) not null, --性别
age number(2) not null, --年龄
seat number(2) not null, --座号
enrolldate date, --入学时间
stuaddress varchar2(50) default '地址不详', --住址
classno varchar2(4) not null --班号 班号=学期序号+班级序号
)
一、
alter table infos
add constraint pk_infos primary key(syuid)
二、
alter table infos
add constraint ck_infos_gender check(gender='男' or gender='女')
三
alter table infos
add constraint ck_infos_seat check(seat>=0 and seat<=50)
四、
alter table infos
add constraint ck_infos_age check(age>=0 and age<=100)
4、数据操作语言(DML)
用于对数据库的表中数据进行添加修改删除select for update操作。
*简单查询
语法格式:简单查询
-------------------------------------------------------
select *(列名表达式) from 表名 where 条件 order by 列名;
-------------------------------------------------------
语法解析:
一、*表示表中的所有列
二、列名可以选择若干个表中的列名,各个列表中间用逗号隔开
三、表达式可以是列名、函数、常数等组成的表达式
四、where子句是查询条件
五、order by 要求在查询的结果中排序,默认为升序。
语法格式:根据结果集创建表(将表所有数据给另一个表)
-------------------------------------------------------
create table 表2 as select * from 表1;
-------------------------------------------------------
语法格式:复制表结构(将表的字段给另一个表)
-------------------------------------------------------
create table 表2 as select * from 表1 where 1=2;
-------------------------------------------------------
语法格式:delete操作
-------------------------------------------------------
delete from 表名 where 条件
-------------------------------------------------------
**---------------------------***
truncate(DDL命令):将表中的所有数据一次性全部删除,数据不能恢复。
delete(DML命令):删除后可以通过日志文件恢复。
**---------------------------***
distinct消除重复行
将空的字段值改为指定文字:nvl(字段,'未知')
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
1 - 多表关联 内关联 2 select * from student_phone,phone 3 where student_phone.phone=phone.id 4 -- 1.内关联 (丢失不满足的记录条数) 5 select * from student_phone a' 6 inner join 7 phone b on a.phone=b.id 8 -- 9 insert into student_phone values (9,'小成',3); 10 commit 11 select * from phone 12 select * from student_phone 13 14 15 select a.stu_name,b.phone_name from student_phone a 16 inner join 17 phone b on a.phone=b.id 18 --测试 19 insert into phone values(3,'iphone8(美国总统专用)'); 20 commit 21 delete from phone where id=3 22 23 -- 2.左关联 (将不匹配其他的数据一起显示,不删除) 24 25 select a.stu_name,b.phone_name from student_phone a 26 left join 27 phone b on a.phone=b.id 28 29 -- 改进一下(空值处理)-----改别名:直接空格+中文(相当于省略as) 30 select a.stu_name,nvl(b.phone_name,'未知') from student_phone a 31 left join 32 phone b on a.phone=b.id
目前就写这些,休息一下,写随笔真累!