Oracle入门知识

在客户端里PL/sql里面 记得用commint 回滚 所写得SQL语句才真的有效  如插入7千万个数据

没有执行commint 就等于没有 将数据真正的存入数据库服务器里面去 所以当其他前端链接上

该表,就会发现是一个空的集合

一: DDL(定义语句)create alter drop 不需要commint回滚

二:DML(操纵语句)insert update delete,select...for update(需要commint)

  同时插入多条 可以这样插入:

insert all 

into aaa values('123') 

into aaa values('456')

into aaa values('789') 

commint

===================

oracle 数据类型 char(固定长度的类型  如果数据不足 会以空格来代替)

Oracle 数据类型 varchar2 (不固定长度的类型,少于4000)

Oracle 数据类型 number (实数类型 默认就是38位)

 

 Oracle 有着自身的 自增 和别的数据库不一样 如果没有给下面的id 给值的话 它是没有默认为一的 而是报错

create table test1111(

   id number(10) primary key,

   username varchar2(100)

);
序列

create sequence myseq;

查询序列的下一个值

select myseq.nextval from dual

查询序列当前的值

select myseq.currval from dual

insert into test1111(id,username) values(myseq.nextval,'小明');

insert into test1111(id,username) values(myseq.nextval,'小芳');

=======================================================

左内连 可以像以前 Oracle一样的 关键字 左表 left join 右表 on 条件

如果想让人看不懂的话 可以直接这样

select 列名1,列名2,列名3,列名4,列名5 

from 表1 ,表2  (没有条件就是内关联,条数等于各个表的相乘结果数)

where 条件 (+)

这个(+)就是代表:如果有的话 就是 继续显示条件没有成立的 如果那样 所查询到的不匹配的字段就为空

如图所示 005

如果没有的话就不显示囖

==========================================================================

要求某个数量与单价的和的话就是 sum(列名*列名)as 定名 from 

日期的话 如果要以当天日期和数据库中的日期为条件的话就要这样

where to_char(doday,'yyyy-mm-dd')=to_char(sysdate,'yyyy-mm-dd')

前面的doday是数据库的字段日期:daday date

后面的是当前日期 sysdata

 一对多:

select * from user1

select * from dicts

-- 多对一(字典类应用)

 nvl(user_id,'未知学生'||ser_id) 意思就是如果查到就显示user_id,如果没有查到就显示未知学生加上user_id的两个字符

站在不通的维度看问题 使用   group by

group by xxx.id having 条件(group by 的匹配条件专属having,相当于where)

trunc是一种函数,功能和函数INT类似,是截取日期或数字,返回指定的值 如:

trunc(months_between(sysdate,birt_date)/12) age

就是这样可以算出 你的年龄大小 赋值给 age

case 判断:

 case

    when age<19 then '未成年人'

    when age<25 then '年青人'

     when age<60 then '中老年人'

    else '老人'

  end ageLevel

这样就可以判断出如果年龄的条件成立的就将对应的字符串赋值给 ageLevel

select sign(4-5.5) from dual 返回的表就是显示 -1

sign 根据参数值,0,正数,负数,分别返回0,1,-1

decode

如果参数值和里面的值相等 就会显示对应的字符串 不然就显示最后一个 

select * from t_ke where ke_name like'%数学%' 模糊查询字符串里出现数学的

查询语句 union all 查询语句 ;显示所有的,重复也会显示

 查询语句 union  查询语句 ;显示所有的,重复的话就显示一条

集合问题:in(在)   minus (或者) 

 创建索引 (占内存,高效率(直接在目录里面找))

create index 索引名 on 表名(列名(以哪个列为索引))

table式 的翻倍添加

如果 A为一张表单(里面呢有过几条数据的) 则可以这样添加 

insert into 表A(select id,各个列名 from 表A) 直接这样执行的话是有错的

如果一般情况id 都是设为主键的,这样是可以翻倍,但是会违反唯一约束

所以我们id 就用序列来代替:select myseq.nextval from tual

这样翻倍的添加 就可以了 我为了测试 就添加了130多万条记录 :

上面的这个查询 是查询总共条数的

原文地址:https://www.cnblogs.com/lxdlovelxj/p/10397570.html