oracle 学习笔记2

1.oracle 中rowid和rownum的区别

oracle 数据库中,每一行都有一个唯一行的标识符,ROWID,数据库内部用来存储行的物理位置。ROWID是一个18位数字,采用base-64编码。用desc table的时候,rowid不显示,所以rowid通常称为伪列。

rownum 通常返回每一行在结果集中的行号。

2.理解空值

数据库中空值,标识该列的值是未知的。

通常用IS NULL 来检查空值,区分空值和空的字符串,通常用函数NVL().

3.SQL中的like操作符

通常要匹配字符串中10% 中的‘%‘,则用 ESCAPE

例如: select name from promotions where name like ‘%\%%‘ ESCAPE ‘\‘;

4.BETWEEN 用来检索列值包含在指定区间内的行。包含区间的两个端点

例如: select  * from customers where customers_id between 1 and 3. (其中包含1和3.)

5.笛卡尔积

如果在多表中查询不指定表之前的连接关系,就会导致将一个表中的所有行都连接到另外一个表中的所有行上,这种情况就成为笛卡尔积。

例如:第一个表有50行数据,第一张表有100行数据,如果这两个表查询的时候,不使用关联条件,则就会查出来5000行。

6.表之间的链接条件

1)等连接  (=)

2)不等连接(<> ,  between,<,  >,  <=,   >=,  like , in)

3)内连接 只有当连接中的列包含满足连接条件的值时才会返回一行,如果某一行的连接条件中的一列是空值,那么这行就不会返回。

例如: select p.name,pt.name

frm products p  inner  join  product_types pt

on p.product_type_id = pt.product_type_id;

多表的内连接:

sql/86 的查询

select c.first_name ,c.last_name,p.name as product,pt.name as type

from customers c, purchases pr ,products p ,product_types pt

where c.customer_id = pr.customer_id

and p.product_id = pr.product_id

and p.product_type_id = pt.product_type_id

order by p.name;

或者也可以sql/92这样写:

select c.first_name ,c.last_name,p.name as product,pt.name as type

from customers c  inner join purchases pr

using (customer_id)

inner join products p

using (product_id )

inner join product_types pt

using (product_type_id)

order by p.name;

如果关联条件连接了2张表的多列,则可以这样处理:

select *

from table1 inner join table2

on table1.col1 = table2.col1

and table1.col2 = table2.col2;

或者:

select  * from table1 inner join table2

using (col1,col2);

4)外连接

左外连接:连接符号(+) 实际上在等号的右边,表示等号左边表中有空值的列都得检索出来

(+在等号右边,表示检索表products  p中product_type_id有空值的数据都检索出来。)

例如: select p.name,  pt.name

from products p, product_types pt

where p.product_type_id = pt.product_type_id(+)

右外连接: 连接符号(+)在等号的左边,表示等号右边的表中有空值的数据都检索出来。

外链接的限制:

不能等号两端都使用连接符号+

例如 : select p.name,  pt.name

from products p, product_types pt

where p.product_type_id(+) = pt.product_type_id(+) 错误使用

order by p.name;

不能同时使用外连接和IN 操作符

例如 : select p.name,  pt.name

from products p, product_types pt

where p.product_type_id(+) in (1,2,3,4)  错误使用

不能同时使用一个外连接条件和另外一个使用OR操作符的连接条件

例如 : select p.name,  pt.name

from products p, product_types pt

where p.product_type_id(+) = pt.product_type_id(+)

or p.product_type_id = 1;    错误使用

5)自连接

自连接是对同一张表的连接,要执行一个自连接,必须要使用不同的表的别名来标识在查询中对表的引用。自连接可以和外链接同时使用

例如:select w.last_name || ‘work as‘ || nvl(m.last_name ,‘the shareholders‘)

from employees w, employees m

where w.manager_id = m.manager_id(+)

order by w.last_name;

时间: 2024-11-06 18:07:04

oracle 学习笔记2的相关文章

Oracle 学习笔记 17 -- 异常处理(PL/SQL)

程序在执行过程中出现异常是正常的,在程序的编写过程中出现异常也是不可避免的.但是要有相应的异常处理的机 制,来保证程序的正常执行.PL/SQL程序执行过程中出现的错误,称为异常.一个优秀的程序都应该能够正确处理 各种出错的情况,并尽可能的从错误中恢复.PL/SQL提供了异常处理机制. 概念: 异常处理(exception)是用来处理正常执行过程中未预料的事件,程序块的异常处理定义的错误和自定义的错误, 由于PL/SQL程序块一旦产生异常而没有指出如何处理时,程序就会异常的终止. 有三种类型的错误

oracle学习笔记之用户管理-3

用户权限机制 1.不同用户表权限的赋予 grant select on scott.emp to software; ---当前登录用户为表所有者,则表名前不用指定所属用户 2.用software登录后 select * from scott.emp; ---software才有权限查询到scott的emp表 方案(schema) 当用户创建好后,如果该用户创建了一个数据对象(如表),此时dbms会创建一个对应的方案与改用户对应,并且该方案的名称和用户名称一致. system与scott都拥有自

【Oracle学习笔记】

内容主要包含: (1)三种循环及其简化 (2)游标的使用 (3)异常处理 (4)存储过程 (5)存储函数 (6)触发器 (7)其他pl/sql操作 ---------------loop循环定义变量-------------------- declare cursor c1 is select * from emp;# rec emp%rowtype;# i numeber:=1; # v_count number;begin# select count(*) into v_count from

oracle学习笔记(二)

设置归档模式(mount状态) ALTER database ARCHIVELOG; //关闭数据库 shutdown immediate //启动数据库到mount状态 startup mount alter database archivelog; //查看归档状态 archive log list; SQL> archive log list; 数据库日志模式 存档模式 自动存档 启用 存档终点 USE_DB_RECOVERY_FILE_DEST 最早的联机日志序列 1 下一个存档日志序列

oracle学习笔记之用户管理-2

案例:创建一个用户software,然后给分配权限,可以让software登录数据库.创建表.操作自己创建的表,回收角色,最后删除用户. 1.创建software用户,密码system create user software identified by system; 2.让software连接数据库,需要给其connect.resource权限 grant connect to software; grant resource to software; 3.使用software用户登录 co

oracle学习笔记 存储及raid技术概述

oracle学习笔记 存储及raid技术概述 本课以oracle数据库所运行的环境,讲一下存储和raid技术. 一)oralce生产环境里的结构 先说一下oracle所在的环境. 有一种结构: 两个服务器.两个光纤存储交换机.两个存储, 它们通过网线相互连接在一起. 每个服务器接两个交换机, 每个交换机连两个服务器同时连两个存储, 每个存储和两个交换机有连接. 这是oracle数据库相对比较典型的正规的运行环境. 每个服务器上都装Linux和oracle数据库软件, oracle数据库建在存储上

【我的Oracle学习笔记(二)】----- select语句补充

一.多表查询 多表查询是指从多个有关联的表中查询数据,其语法与单表查询类似.一般来说,多表查询的表要用连接联系起来,如果没连接,则查询结果是这多个查询表的笛卡尔积(注释1). 模拟查询雇员姓名和所在部门名称: select [雇员姓名],[部门名称] from [雇员表] a,scott,[部门表] b where a.[部门编号]=b.[部门编号]; 上例中,为每一个查询表指定了别名,便于SQL语句的书写. 模拟查询在”sales“部门工作的雇员其雇员姓名 select [雇员姓名] from

oracle学习笔记之用户管理-1

sys    system(管理员) scott(普通用户) sqlserver sa 前提:oracle 上,假如自己是管理员,当需要建立用户的时候,由自己操作: 1.创建用户(sys system用户) create user username identified by password; 注意:密码不能以数字开头 create user mmy identified by system; 创建的mmy用户,并不能通过conn立刻登录,需要进行下面一步 2.赋予用户相应的权限 grant

Oracle学习笔记三 SQL命令

SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)               下面是这四种SQL语言的详细笔记: Oracle学习笔记三 SQL命令(二):SQL操作语言类别 Oracle数据类型 创建表时,必须为各个列指定数据类型 以下是 Oracle 数据类型的类别: 字符数据类型 CHAR类型 当需要固定长度的字符串时,使用 CHAR 数据类型. CHAR 数据类型存储字母数字值. CH

Oracle学习笔记章(一)

Oracle学习笔记一 权限分为sysdba,nomal等,系统自带有两个用户,起始密码为空. 用户为:SYSTEM,SYS. 登录SYSTEM的时候要使用sysdba权限来登录,如果忘记了密码,则打开命令行 输入:1.echo %ORACLE_SID% 2.set ORACLE_SID = orcl(orcl为所要登录数据的实例,可以自己修改) 3.sqlpuls / as sysdba  (即可采用sysdba权限进入oracle系统) 4.alter user system identif