求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观点
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.
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 (
select /*+use_hash(t1,t2)*/ t1.tname b1,t2.sname b2
from t1,t2 where t1.id=t2.id)
set b1=b2;
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
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
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或者其他