首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求oracle根本语法

2013-06-26 
求oracle基本语法最近安装oracle数据库,想快速入门,有sqlserver 开发基础,只要sql语句,不要文档之类,希望

求oracle基本语法
最近安装oracle数据库,想快速入门,有sqlserver 开发基础,只要sql语句,不要文档之类,
希望大家帮忙,谢谢
1,创建库
2,创建表 和表的相关约束(至少两个表,主外键必须要有)
3,sql 的增删查改
4,子查询(稍微复杂点)
5,表连接
6,创建视图,存储过程
7,常用的内置函数(实例)
还有其他的重要的,可以补充,并写相应的sql语句
再次说声谢谢 Oracle 数据库
[解决办法]


ANSI 92是ORACLE和MSSQL都必须遵循的,所以CRUD操作二者基本是一致的,
但差异在ORACLE的PL/SQL和MSSQL T-SQL的扩展。同时二者体系结构概念差异较大,
但其实有可能说的是同一个内容但二者表示方法不一致,比如在ORACLE的表空间
实际上相当于MSSQL的数据库DATABASE。
1. 创建库
MSSQL :
create database  DEMO
可以创建成功,但生成的MDF和LDF在MSSQL的默认安装目录中。。。

创建指定数据和事务日志文件的数据库

-- Get the SQL Server data path
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER

(physical_name)) - 1)
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);

-- execute the CREATE DATABASE statement 
EXECUTE ('CREATE DATABASE Sales
ON 
( NAME = Sales_dat,
    FILENAME = '''+ @data_path + 'saledat.mdf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
    FILENAME = '''+ @data_path + 'salelog.ldf'',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB )'
);
GO

ORACLE中:
必须指定完整参数,包括存储参数等, 例如

CREATE DATABASE sample
   CONTROLFILE REUSE 
   LOGFILE
      GROUP 1 ('diskx:log1.log', 'disky:log1.log') SIZE 50K, 
      GROUP 2 ('diskx:log2.log', 'disky:log2.log') SIZE 50K 
   MAXLOGFILES 5 
   MAXLOGHISTORY 100 
   MAXDATAFILES 10 
   MAXINSTANCES 2 
   ARCHIVELOG 
   CHARACTER SET AL32UTF8
   NATIONAL CHARACTER SET AL16UTF16
   DATAFILE  
      'disk1:df1.dbf' AUTOEXTEND ON,
      'disk2:df2.dbf' AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
   DEFAULT TEMPORARY TABLESPACE temp_ts
   UNDO TABLESPACE undo_ts 
   SET TIME_ZONE = '+02:00'; 


再慢慢贴,可写篇大文章了
[解决办法]
已转移到技术区


[解决办法]
这个、、若想完整回答您的问题、大概可以出一本书了
你的所有问题都可以在Oracle文档<<SQL Reference>>里面找到、建议阅读!

另外、受 @發糞塗牆 的邀请、友情出演MSSQL版、时间和能力有限、本次回答不代表本人观点、只代表CSDN观点求oracle根本语法

1,创建库

答:
  问这个问题时、您可能还带着MSSQL的思维哈、
  在Oracle世界里、库的概念是 Instance级别的
  不像MySQL或MSSQL、个人认为、比较偏向SCHEMA级别
  所以、在Oracle里面常常一个库就够了、这个库可支持单实例、多实例(也就是Oracle牛b的RAC)
  
  回到你的问题、如何创建?
  方式很多、这里列2种常用的:
  ① 直接调用工具:DBCA
  ② 手工建库、这也是Oracle OCM认证的第一个session必考内容、
     既然是手工、那就必须敲很多很长很臭很不好使的命令、一般人记不住哈、可查阅官网
     但你想要的是SQL语句、这个比较难、因为在Oracle里面、建库、不单纯就只有建库
     还必须包含其他配置、如监听器、pfile、密码文件、数据文件日志文件等目录规划.....等等
     比较粗糙的SQL实现可见:http://blog.csdn.net/linwaterbin/article/details/8185702
     

2,创建表 和表的相关约束(至少两个表,主外键必须要有)

答:
  这个和你所熟悉的MSSQL没有多大区别、常用的也多遵守SQL-99语法
  但如果你不想自己创建、没关系、Oracle也帮你预先配好了一个范例
  你要做的就是把hr这个用户解锁、
  下面简单例子:

hr@ora10g-node1> create table t1(a varchar2(5) primary key);

Table created.

hr@ora10g-node1> create table t2(k number primary key,a varchar2(5),constraint fk_t2 foreign key(a) references t1(a) on delete cascade initially deferred);

Table created.


3,sql 的增删查改

答:
  除了你所知道的MSSQL的语法外、你知道的、一般在Oracle里面都是可行的
  对于增删改查、Oracle也有自己的私有语法、下面对增删改查分别举个例子
  比如:
  层次查询:查询一个组织中最高的几个等级
select level,a.* from 
 s_emp a
  where level <=2 –查找前两个等级
 start with manager_id is null
 connect by prior employee_id=manager_id and department_id !=prior department_id;

  带条件的插入:
insert all
  --将查询结果s_id>20的插入,条件中指定的列必须与查询结果名字一致,如果有别名,请用别名
  when e_id>20
    then into emp_1
  --s_last_name为M开头的插入,可能插入的行与s_id有重复
  when e_last_name like 'M%'
    then into emp_2(employee_id,last_name)
  --如果指定else,则不满足上面条件的插入到emp_3,插入的行不会与上面两个重复
  else
    into emp_3(employee_id,last_name) values(e_id,e_last_name)
  select employee_id e_id,last_name e_last_name
    from employees

  对视图的UPDATE语句:
update (
select /*+use_hash(t1,t2)*/ t1.tname b1,t2.sname b2
from t1,t2 where t1.id=t2.id)
set b1=b2;


4,子查询(稍微复杂点)
   
   复杂不一定好、简单最美!有个原则叫 KISS 原则、Keep It Simple、Schwartz!
   当然了、复杂的话、可以参考 sql reference 那本书、要多复杂都有
   例如:
with
--查询销售部门员工的姓名
  saler_name as (
                 select department_id from departments  where department_name='SALES' order by department_id


                 )
select last_name,first_name
  from employees e
 where department_id in (select * from saler_name)
union all
select last_name,to_char(null)
  from employees



5,表连接

   这个和MSSQL应该也差别不大、常见的就:left join,right join和full join....等等
   只是在Oracle里面有个 + 号
   left out join和oracle的加号在右结果是相同。同理,right out join和加号在左是一样的
   比如:
hr@ORCL> select a.id,b.id from a,b where a.id=b.id(+);

        ID         ID
---------- ----------
         1          1
         2          2
         3

hr@ORCL> select a.id,b.id from a left outer join b on a.id=b.id;

        ID         ID
---------- ----------
         1          1
         2          2
         3


   除此之外、比较重要的我认为还有 3 个连接、这和优化器相关:nested loop join、 sort merge join和hash join 
   
  
6,创建视图,存储过程

   除了内联视图、物化视图、一致性视图等这些比较复杂的开外、简单的语句实现上都和MSSQL一样
   这个就不用在我多写了、
   
   至于存储过程、下面举个最最简单的例子
   例如:
   根据员工名修改员工工资
  create procedure sp_think(spname varchar2,newsal number)  --这边只要指定类型,无须大小
  is
  begin
  update emp set sal=newsal where ename=spname;
  end;
  /
  
  调用就直接 exec sp_think('SCOTT',5000);就行了、不过、对应用而言、更多的是java或者其他


7,常用的内置函数(实例)
   
   这里CSDN有个精华帖http://bbs.csdn.net/topics/310021870

另外、时间紧迫、老板来了、我上班了。。。。再次感谢 @發糞塗牆  给我这个机会、谢谢了

热点排行