oracle sql基础

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: oracle sql基础

一、数据类型

1.字符:char,varchar2,long

 char:    固变       1~2000字节

 varchar2:可变长度   1~4000字节

 long:    可变长度   2GB长度(一般不用)

2.数值

 number:即是整数又是小数,默认整型

   number[(p[,s])]  ==p精度,s小数位

   number(5,2)  == 共5位,其中小数位2位

   --只要整型:number(5)

3.日期时间====>要转类型,像sql中用''是不行了。

 Date:存储日期、时间类型。

 日期转换函数:to_date('2016-02-02','yyyy-mm-dd')

   例:insert into tb_name(mydate)

       values(to_date('2016-02-02','yyyy-mm-dd hh:mi:ss'));

4.储存二进制数据,比如图片、视频、声音文件等

 4.1 Raw或Raw Long

 4.2 LOB (常用,就是所谓的大数据,最大4GB)

   Clob

   Blob:

   Bfile:

 记住,一般我们不把图片、视频等存在数据库中,只是把它们存放在硬盘地址保存到硬盘。

存在数据库里,要转换,资源消耗多。

二、数据定义语言DDL

create table  -- 创建表

alter table -- 修改表

truncate table -- 删除表(删除数据,保留结构)

drop table -- 删除表(删除结构和数据)

create表:

--创建表:

   create table tb_name

(
        sid number,
        sname varchar2(20),
        sex varchar2(4)
    )

--复制表:  

   select into 新表名 from 旧表 where 1=2

   create table tb_name

   as select * from emp;

--只复制表结构,不要数据

   create table tb_name

   as select * from emp where 1=2;

--去除重复的数据

   select distinct 列名 from emp;

三、数据操纵语言DML

insert -- 与sql server一致

delete -- 与sql server一致

update -- 与sql server一致

select -- 与sql有些不一样

insert增

--插入其它表中的记录(注意要先创建新表,然后再复制数据)

   insert into newtable

   select * from emp;

--将部门编号为20的员工插入到新表中

   insert into newtable

   select * from emp where deptno=20;

--使用union插入多条数据,要借用伪表

   insert into newtable

   select 1,'张三','男' from dual union

   select 2,'李四','女' from dual union

   select 3,'王五','男' from dual union

   select 4,'赵六','女' from dual;

delete删

--删除性别为男的

delete from tbs_0310 where ssex='男'

update改:

--给所有的人提薪10%

   update emp set sal=sal+sal*10%;

   update emp set sal=sal*1.1;

select查:

select * from  表名

四、事务控制语言TCL

commit -- 提交

rollback -- 回滚

savepoint -- 回滚的点

五、数据控制语言DCL

grant -- 授权

revoke -- 撤销授权

六、伪表dual与伪列rowid,rownum

1. 伪表:

   select 'a' from dual;

2. 伪列:

   select * from tb_name

   --如果结果集中出现三列,其实它有五列,还有两个列:rowidrownum

   --rowid:唯一标识符,这是系统给的,不是我们自己定义的

   --rownum:有点类似sql中的row_number()方法

   怎么查看?

   select t.*,rowid from tb_name t;

   select t.*.rownum from tb_name t;

   注意:在Oracle项目中,一般都使用rownum做分页

   这两个可以同时用吗?可以

   select t.*,rowid,rownum from tb_name t

   --求前两条记录(Oracle不支持top)

   select a.*,rownum from emp a

   where rownum<3

   --求第3、4条记录(注意:rownum只能作用于小于号)

   --解决办法:rownum是a表的伪列,把这伪列变成实列

   select * from

 

(
        select a.*,rownum rid from emp a
    ) t where rid>2 and rid<5

案例1:求薪水前5的人

--思路:薪水排序,再用上面的rownum?

select * from emp where rownum<6 order by sal desc;  (错)

先排序再取,上面代码是先取再排序

select * from emp order by sal desc where rownum<6;  (错)

正确的:

select t.*,rownum from

(
    select * from emp order by sal desc;
) t where rownum<6

案例2:求每个人的收入(薪水+奖金)

   select ename,sal,comm,sal+comm from emp;  (错)

   结果是sal列中和comm列中有值的都能算出收入,如果有个列是null值,则算不出收入。

   怎么办?

   用nvl()函数,作用与isnull(comm,0)一样

   select ename,sal,comm,sal+nvl(comm,0) from emp;

   注意:select t.*,rownum from emp t order by sal+nvl(comm,0) 的话是先对数据进行分号,再排,所以rownum会显示乱掉。

   nvl(exp1,exp2,exp3) --当exp1为null,返回exp2,否则返回exp3

   select ename,sal,comm,sal+nvl(comm,0,comm+100) from emp;

案例3:查询没有奖金的人

   select * from emp where comm=null;  

   (错,null不能用=号,就好比猪和人比,能比吗?种类都不一样)

   正确:select * from emp where comm is null;

四、SQL操作符

1.算术运算符  + - * /

---------------------------------------------------------------------

2.比较运算符  = != < > <= >= between..and  in like is null

---------------------------------------------------------------------

3.逻辑运算符  not and or

---------------------------------------------------------------------

4.集合运算符 union行合并,union all

---------------------------------------------------------------------

5.连接操作符 ||用来连接字符串

   SQL server语句:

   select sid,sname,sex+'生' from tb_name

   --看这案例,在SQL Server中这句话没问题

   在oracle中会报错:ORA-10722:无效数字

   在Sql Server中“+”既有算术作用,也有字符串拼接作用;

   但在Oracle中,“+”就只有算术作用。

   Oracle语句:

   select sid,sname,sex||'生' from tb_name

SQL操作符的优先级:算术 > 连接 > 比较 > not > and > or

 

5


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
20天前
|
SQL 监控 Oracle
Oracle SQL性能优化全面指南
在数据库管理领域,Oracle SQL性能优化是确保数据库高效运行和数据查询速度的关键
|
22天前
|
SQL 存储 Oracle
Oracle数据库SQL语句详解与应用指南
在数字化时代,数据库已成为各类企业和组织不可或缺的核心组件。Oracle数据库作为业界领先的数据库管理系统之一,广泛应用于各种业务场景。掌握Oracle数据库的SQL语句是数据库管理员、开发人员及运维人员的基本技能。本文将详细介绍Oracle数据库SQL语句的基本概念、语法、应用及最佳实践。一、Or
36 3
|
23天前
|
SQL Oracle 关系型数据库
Oracle SQL:了解执行计划和性能调优
Oracle SQL:了解执行计划和性能调优
36 1
|
4月前
|
SQL Oracle 关系型数据库
|
4月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
258 3
|
4月前
|
SQL 存储 Oracle
TDengine 3.3.2.0 发布:新增 UDT 及 Oracle、SQL Server 数据接入
**TDengine 3.3.2.0 发布摘要** - 开源与企业版均强化性能,提升WebSocket、stmt模式写入与查询效率,解决死锁,增强列显示。 - taos-explorer支持geometry和varbinary类型。 - 企业版引入UDT,允许自定义数据转换。 - 新增Oracle和SQL Server数据接入。 - 数据同步优化,支持压缩,提升元数据同步速度,错误信息细化,支持表名修改。 - 扩展跨平台支持,包括麒麟、Euler、Anolis OS等。
113 0
|
5月前
|
SQL Oracle 关系型数据库
一些非常有用的Oracle SQL
一些非常有用的Oracle SQL
42 4
|
SQL Oracle 关系型数据库
oracle用SQL Plus输入命令为什么只显示2
oracle用SQL Plus输入命令为什么只显示2
613 0
oracle用SQL Plus输入命令为什么只显示2
|
SQL Oracle 关系型数据库

推荐镜像

更多