oracle-2-sql数据操作和查询

主要内容:

》oracle 数据类型

》sql建表和约束

》sql对数九的增删改

》sql查询

》oracle伪例

1、oracle的数据类型

oracle数据库的核心是表,表中常见的数据类型有:

char(length):存储固定长度的字符串,length默认1,最长2000

varchar2(length):存储可变长度的字符串,length默认长度是1,最大4000

number(p,s)存储浮点数或者是整数,p表示的是最大位数(包含小数点),p默认是38,s表示小数位数

date:存储日期和时间

timestamp;存储日期的年月日,时分秒,以及秒后面刘伟,同时包含时区

clob ; 存储大的文本,比如非结构化的XML文档

BLOB 存储二进制对象,如图形,视频,声音等

下面对上面的部分数据类型举例:

(1)number

格式             输入的数字        实际的存储

number         2.3334    2.3334

number(5,2)4.223          4.22

number(5,2)     4.3333334  输入的数字超过了指定的精度,数据库不能存储

对于日期类型,可以使用sysdate的内置函数可以获取当前的系统日期和时间,返回date类型,用systimestamp函数可以返回当前日期、时间和时区

SQL> select sysdate,systimestamp from dual;

SYSDATE
---------
SYSTIMESTAMP
---------------------------------------------------------------------------
20-APR-16
20-APR-16 10.45.35.192191 AM +08:00

注:oracle在查询的时候当查询单行函数的时候,from 后面使用dual 表,dual表在系统中只有一行一列,该表在输出单行函数的时候是为了select语法的完整性而使用的。

2》创建表和约束

代码演示

SQL> create table yizheninfos
  2  (
  3  stuid varchar2(7) not null,
  4  stuname varchar2(10) not null,
  5  gender varchar2(2) not null,
  6  age number(2) not null,
  7  seat number(2) not null,
  8  enrolldate date,
  9  stuaddress varchar2(50) default ‘地址不详‘,
 10  classno varchar2(4) not null
 11  )
 12  /

Table created.

SQL> alter table yizheninfos add constraint PK_yizhen primary key(stuid)
  2  /

Table altered.----->这条sql语句的作用是创建一个主键约束,下面的其他sql语句的作用就是创建各种check 约束

SQL> alter table yizheninfos add constraint ck_yizhender check(gender = ‘男‘ or gender = ‘女‘)
  2  /

Table altered.

SQL> alter table yizheninfos add constraint ck_yizhent check(seat >= 0 and seat <= 50)
  2  /

Table altered.

SQL> alter table yizheninfos add constraint ck_yizhenssno check(classno > ‘1001‘ and classno <=‘1999‘ or
  2  (classno >=‘2001‘ and classno <=‘2999‘))
  3  /

Table altered.

SQL> alter table yizheninfos add constraints un_stuname unique(stuname)
  2  /

Table altered.----》这条sql语句的作用就是创建一个唯一约束,表示该列值是唯一的,列中的值不能重复。

代码解析:

在oracle中,“/” 代表的是执行缓存区中的语句,由于缓冲区中只存储一条刚刚保存过的语句,由于每条语句没有用分号结尾,只是保存在缓冲区,因此每条语句后面都有单独一行“/”

现在来举例展示一下外键的约束定义

SQL> create table scores
  2  (
  3  id number,                             ----》ID
  4  term varchar2(2),                   ----》学期为s1或s2
  5  stuid varchar2(7) not null,       ----》学号
  6  examno varchar2(7) not null,   ----》考号
  7  writtenscore number(4,1) not null,  ----》笔试成绩
  8  labscore number(4,1) not null         ----》机试成绩
  9  )
 10  /

Table created.

SQL> alter table scores
  2  add constraint ck_scores_term check(term = ‘s1‘ or term =‘s2‘)
  3  /

Table altered.

SQL> alter table scores
  2  add constraint fk_scores_yizheninfos_stuid foreign key(stuid) references yizheninfos(stuid)
  3  /

Table altered.---->这就是外键的约束定义

4.数据操作语言(DML)

DML用于对数据库的表中数据进行添加,修改,删除和select....for ,update等

》》4.1简单查询

数据查询是用select 命令从数据库的表中提取信息

select 列名  from  表名  where  条件  order by 列名

注:order by 要求在查询的结果中排序,默认是升序

》》4.2根据查询结果创建表

create table  表名  as  select 语句

代码演示

SQL> create table yizheninfosss as select * from yizheninfos ;

SQL> create table yizheninfossssss as select * from yizheninfos where 1=2;
第一条命令不存在认得的约束,并且把查询结果一起插入到新表中

第二条命令只是复制一个表结构,没有任何的数据(因为1=2的这个条件不成立)

》》4.3  数据的插入----insert

insert into 表名(列1,列2,列3......) values (值1,值2,值3.....)

语法解析:

(1)这里的列名是可以省略的,当省略列名的时候,默认是表中的所有列名,列名顺序为表定义中列的先后手顺序。

(2)这里的值的数量和顺序要和列名的数量和顺序一致,值的类型和列名的类型一致。

在 Oracle 中,日期是国际化的,不同的区域安装的数据库,默认的日期格式不同,

因此为了程序便于移植,日期的输入要使用 TO_DATE 函数对日期格式化后输入,采
用格式化字符串对日期进行格式化时,格式化字符串中字符不区分大小写,常见的
格式化字符如下:
1. yyyy 表示四位年份
2. mm 表示两位月份,比如 3 月表示为 03
3. dd 表示两位日期
4. hh24 表示小时从 0-23, hh12 也表示小时从 0-11。
5. mi 表示分钟
6. ss 表示秒
③ 在遇到存在默认值的列时,可以使用 default 值代替。
④ commit 是把用户操作(添加、删除、修改操作)提交,只有提交操作后,数据才
能真正更新到表中,否则其他用户无法查询到当前用户操作的结果。
在 Oracle 中,一个 INSERT 命令可以把一个结果集一次性插入到一张表中。使用的语句
是: INSERT INTO

比如说:

insert into info infos2 select * from yizheninfos;

这种情况,infos2和yizheninfos这两张表中的数据类型必须每一类的数据类型一致,这样就可以把yizheninfos表中的数据全部的插入到infos2这个表中

(这里也可以再后面的select 语句中添加条件,把符合一定条件的内同插入到infos2这个表中)

》》4.4更新数据

语法结构:

update  表名  set   列名1=值1,列名2=值2.....where  条件

这里执行完update,或者insert等之后需要执行commit 操作,具体原因参考:http://www.cnblogs.com/smail-bao/p/5431193.html

》》4.5 删除数据

删除数据的语法是:

delete  from 表名 where 条件

还有一条删除命令       truncate

truncate 命令可以把表中的所有数据一次性全部删除

语法结构:

truncate table   表名

truncate  和  delete  都可以把表中的数据全部删除,他们的区别是:

(1)truncate 是 DDL命令,删除的数据不可恢复,delete命令是DML命令,删除后的数据可以通过日志文件来恢复

(2)如果一个表中的数据记录了很多,truncate 相对delete命令速度快(确定没用的情况下,慎用,慎用。。。。。)

5.操作符

》》算术运算

》》关系运算

》》逻辑运算

》》5.1 算术运算

oracle 的算术运算只有+,—,*,/这四个,其中的除号“/”的结果是浮点数,其余的运算只能借助函数,比如说

MOD(x,y)返回的是x除以y的余数

》》5.2关系运算和逻辑运算

oracle 中where 字句经常见到关系运算和逻辑运算,常见的关系运算有:=   、 <   、 > 、 !=等

逻辑运算符有三个,and、or、not

》》5.3字符串连接操作符(||)

在oracle中,字符串的连接用   ||   表示

注:oracle中字符串可以用单引号,也可以用双引号,当别名中存在空格的时候,必须用双引号,在表名、列名是用双引号

6.高级查询

 》》6.1消除重复行

在查询中如果出现若干行相同的情况,那么可以使用distinct 消除重复行

语法:select distinct  stuname from EMP;

 》》6.2NULL操作

如果某一条记录上缺少数据值,就是控制(NULL值),空值不等于0或者空格,空值是指未赋值,未知或者是不可用的值,任何数据类型的列都可以包括

NULL值,除非该列被定义为非空或者是主键

条件查询的时候如果要查NULL值的则:....where name is null

 》》6.3 in操作

where条件查询的时候可以使用in操作来查询其列值在指定的列表中的行

比如说:

where  job  in  (‘salesman’,‘president‘,‘analyst‘)

同理,也可以使用    not in,用法一样

 》》6.4  between.....and....指定的范围

比如说

where  age >20 and age < 50

也可以使用:

where age between 20 and 50

》》6.5   like   模糊查询

模糊查询结合字符匹配来检索所需要的数据行,字符匹配可以使用通配符

% :  表示一个或者多个任意字符

_:     代表一个任意字符

注:匹配的字符串中,escape后面的“字符”作为转义字符。

比如说:

’%30\%%‘ escape ‘\‘    :指的就是包含%30的之歌字符串,“\”,表示的是转义字符,“\%”在字符串中表示一个字符“%”

’_s%‘:表示的是第二个字符为   s   的字符串

sql语句举例:

select  ENAME,JOB,SAL   from   yizheninfos   where  ENAME like ‘B%S‘

这就是找出ENAME 是以    B    开头的    S    结尾的所有ENAME,JOB,SALENAME,JOB,SAL信息

》》6.6 集合运算

注释:集合运算就是将两个或者多个结果集组合成为一个结果集,集合运算包括:

》intersect(交集):

》union all(并集):返回各个查询的所有记录,包括重复记录
》union(并集):返回各个查询的所有记录,不包括重复记录

》minus(补集):返回第一个查询检索出来的记录减去第二个查询检索出的记录之后剩余的记录

注:: 当使用集合操作的时候,要注意:查询所返回的列数以及列的类型必须匹配,列名可以
不同。

举例说明:

select depinfo from DEPT

minus(这里或者使用union,interset等等)

select depinfo from EMP

上面举例说的是并集

注:这里我们可以使用insert into .......select 把一个结果集插入到另一张表结构相同的表中,因为可以使用union把若干条查询记录一次性插入到一张表中

举例:

insert into yizheninfos

select 50,‘公关部‘,‘台湾‘ from dual

union

select 60,‘研发部‘,‘韩国‘ from dual

union

select 70,‘市场部‘,‘香港‘ from dual

/

》》6.7连接查询

oracle  中对两个表或者若干张表之间的外联接使用   (+)   表示

内联接(inner join)

案列:查询出员工工资大于30000的员工姓名,部门,工作,工资
,部门名称在dept表中,其他的信息在emp中,需要内联接才能完成

select e.ename,e.job,e.sal,d.dname

from emp e,dept d

where e.deptid=d.deptid

and e.sal>30000

使用内连接的代码如下所示:

select e.ename,e.job,e.sal,d.dname

from emp e INNER JOIN dept d ON e.deptid=d.deptid

where e.sal>3000

这里的INNER JOIN中,关键字INNER可以省略

案列:查询出每个部门下的员工姓名,工资案例分析:EMP表使用外键deptno引用Dept表中的deptno,在Dept表中如果有某些部门没有员工,那么用内联接,则没有员工的部门将无法显示,所以必须以Dept表为基准的外联接

select e.ENAME,e.JOB,e.SAL,d.DNAME

from EMP e.DEPT d

where e.DEPTNO(+)=d.DEPTNO

代码解析:这里的(+)表示的是Oracle专用的外联接符号,在条件中出现在左边就叫右外联接,出现在右边就叫做左外联接

上面的嗲吗也可以使用标准写法:

select e.ENAME,e.JOB,e.SAL,d.DNAME

FROM EMP e RIGHT OUTER JOIN DEPT d

ON e.DEPTNO=d.DEPTNO

关键字OUTER可以省略,和内连接差不多,推荐使用这种标准写法

本章学习总结:

? Oracle SQL 语句中有数据操纵语言( DML)、数据定义语言( DDL)、数据控制语言
( DCL)、事务控制语言( TCL)等等。
? DML 语句包括增删改查语句, DDL 语句包括数据库对象创建、修改和删除语句,数
据控制命令包括 GRANT、 REVOKE 等,事务控制命令有 COMMIT、 ROLLBACK 等。
? 数据库中建表常用的类型有:数字类型 number ( p,s),可变字符串 varchar2 ( length),
日期 date。
? Oracle 中 default 是一个值,在 Oracle 中不存在 default 约束。
? Oracle 的增删改语句与 SQL Server 基本一致,都是使用 INSERT、 UPDATE、 DELETE
完成。
? Oracle 高级查询中要注意: DISTINCT、 NULL、 IN、 BETWEEN…AND…。
? 集合操作有: UNION、 UNION ALL、 INTESECT、 MINUS。

时间: 2024-10-04 00:59:26

oracle-2-sql数据操作和查询的相关文章

[.NET] SQL数据总笔数查询

[.NET] SQL数据总笔数查询 程序下载 范例下载:点此下载 原始码下载:点此下载 NuGet封装:点此下载 数据查询 开发系统时,使用C#执行SQL查询指令,就可以从SQL数据库里查询所需数据. SELECT Id, Name FROM Users 数据总笔数查询 当数据量过多时,系统会需要采用分页的方式来分批取得数据,但在这之前需要先取得数据总笔数,来告知系统共有多少数据等待处理.这时可以改写原有的SQL查询指令,在其中加入COUNT(*),来计算查询结果的总笔数.(将查询指令改写为子查

SQL 数据操作(实验六)

SQL 数据操作 emp.dept 目标表结构及数据 INSERT 命令的使用与结果验证 2.1把一名新来雇员信息插入到EMP表中:雇员号:1011 姓名: 王晓明 入职日期:今天 insert into emp (empno,ename,hiedate) values('1011','王晓明',to_date(sysdate,'yyyy-mm-dd')); 2.2把一名雇员信息插入到EMP表中:雇员号:1012 姓名:孙宇 岗位:教辅 入职日期:2017-10-12 薪水:5400 部门:04

SQL关联操作(查询与更新)

    sql的除了关联查询,还可以关联更新删除等,有时可以一条sql搞定数据移植, 避免写存储过程时. 以下列举了sql的各种级联操作场景.        主表:部门表-dept(dept_id,dname,enum)       从表:员工表-emp (emp_id , ename , sal,dept_id)       //以下是oracle的sql语法  1,关联查询     场景:查询所有员工的部门名称                     2,关联更新     场景:更新部门表的

oracle之sql简单操作

基于上篇文章的环境下进行操作http://huangsir007.blog.51cto.com/6159353/1854392 oracle用户sys.system区别: sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限 system用户是管理操作员,权限也很大,具有sysoper角色,没有create database的权限 一般来说,对数据库维护,使用system用户登录就可以 sqlplus: Usage 2: sqlplus [ [<opt

MySQL、Oracle和SQL Server的分页查询语句

原文地址:http://www.cnblogs.com/ginponson/p/5746435.html 假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql.Oracle和SQL Server分页查询student表. 1.Mysql的分页查询 SELECT * FROM student LIMIT (PageNo - 1) * PageSize,PageSize; 理解:(Limit n,m)  =>从第n行开始取m条记录,n从0开始算. 2.Oracel的分页查询

高级数据操作--子查询

一.子查询——标量子查询 子查询的概念 思考: 如何得到php_student表中成绩最高的学生的记录? 1 select * from php_student order by score desc limit 1; 但是,存在一个逻辑问题,如果最高分有很多人,怎么办! 1 insert into php_student values 2 (null,'观世音','female',17,5000,'南海',100), 3 (null,'如来','male',17,6000,'西天',100);

高级数据操作--连接查询

一.连接查询——交叉连接 概念 表与表之间是有联系的! 所谓的连接查询,就是指将两张表或者多张表按照某个指定的条件,进行横向上的连接并显示! 所以,从结果上看,字段数增加了! 分类 根据连接查询的性质不同,又可以分成交叉连接.内连接.外连接和自然连接! 交叉连接关键字:cross join  交叉连接含义: 交叉连接是最容易理解的,就是指从一张表中的每一条记录分别去连接另外一张表的所有的记录,并且保存所有的记录,其中也包括两张表的所有的字段! 所以说,交叉连接的本质就是两张数据表做笛卡尔积! 笛

高级数据操作--联合查询

一.联合查询 1 -- 关键字: union 2 3 -- 语法 4 select 语句1 5 union[union 选项] 6 select 语句2 7 union[union 选项] 8 ...... 9 union[union 选项] 10 select 语句n; 所谓的联合查询,就是将多个查询语句的结果进行纵向上的拼接,也就是将select语句2的查询结果放在select语句1的后面!很显然,总的记录数增加了,但是字段的数量并没有增加! 既然是多个查询记录的拼接,所以联合查询有一个最基

mysql 数据操作 子查询 带比较运算符的子查询

带比较运算符的子查询 #比较运算符:=.!=.>.>=.<.<=.<> #查询大于所有人平均年龄的员工名与年龄 思路 先拿到所有人的平均年龄然后 再用另外一条sql语句 进行比较 拿所有员工的年龄 > 所有人的平均年龄 做比较 mysql> select name,age from employee where age >(select avg(age) from employee) ; +------+------+ | name | age | +