分类目录归档:ORACLE

子查询学习(2)

exists和not exists关键字

exists操作符检查在子查询中是否存在满足条件的行。exists只返回true或false。

exists和关联子查询:
1、如果在子查询中存在满足条件的行:
如果能找到一行,对于这个子查询来说,不继续查找,exists返回true。
继续下一个子查询。

2、如果在子查询中不存在满足条件的行:
如果没有一行满足子查询条件,子查询的查询结果为空,exists返回false。
继续下一个子查询。

因为exists只返回true或false,所以在子查询中select后面只要写成select 1就行了。
继续阅读子查询学习(2)

子查询学习

子查询规则(初级):

子查询可以写在WHERE子句、HAVING子句、FROM子句中。
子查询分为多行子查询和单行子查询。

如果能够保证返回的行数小于等于1行的,则是单行子查询。
使用单行比较操作符:=、>、>=、<、<=、<>。
否则是多行子查询。
使用多行比较符:IN、> ANY 、> ALL、< ANY、< ALL。

下面我们测试下子查询的效果,还是用之前的TEST_T表。表结构在http://www.live-in.org/archives/2114.html

子查询一般情况下返回一个列的值(单列子查询),也可以返回多个列的值(多列子查询),但要成对匹配。
单列子查询可以在DECODE和CASE语句,还有SELECT中除GROUP BY子句以外的所有子句中使用。

多列子查询例子:

select t1.id 序号, t1.no 班级, t1.s_name 学生名字, t1.score 分数 from test_t t1 where (t1.id,t1.score) in (select t2.id, t2.score from test_t t2);

这里子查询返回两个列,但外层查询也要同时匹配这两个列。
继续阅读子查询学习

group by子句跟多个字段分析

group by子句的作用是对列进行分组,那么如果后面有多个列,它是如何做的呢?下面做一个简单的分析。

以下是使用的SQL语句:

CREATE TABLE
TEST_T
(
ID VARCHAR2(50),
NO VARCHAR2(50),
T_NAME VARCHAR2(50),
S_NAME VARCHAR2(50),
SCORE VARCHAR2(50)
);

insert into TEST_T VALUES(1, 1, 'Peter', '张三', 60);
insert into TEST_T VALUES(2, 2, 'Mary', '李四', 99);
insert into TEST_T VALUES(3, 3, 'Tom', '王五', 76);
insert into TEST_T VALUES(4, 1, 'Peter', '小A', 59);
insert into TEST_T VALUES(5, 2, 'Mary', '小B', 60);
insert into TEST_T VALUES(6, 3, 'Tom', '小C', 99);
insert into TEST_T VALUES(7, 1, 'Peter', 'Zhang', 70);
insert into TEST_T VALUES(8, 2, 'Mary', 'Wang', 88);
insert into TEST_T VALUES(9, 3, 'Tom', 'Li', 90);

继续阅读group by子句跟多个字段分析

select语句执行顺序

SELECT的定义格式为:

SELECT[ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]…
FROM<表名或视图名>[,<表名或视图名>]…
[WHERE<条件表达式>]
[GROUP BY<列名1>][HAVING<条件表达式>]
[ORDER BY<列名2>][ASC|DESC]

0、先执行子查询。
1、from子句组装来自不同数据源的数据;
2、where子句基于指定的条件对记录行进行筛选;
3、group by子句将数据划分为多个分组;如果group by包含多个列,再分组;
4、使用聚集函数进行计算;对每个分组进行计算;
5、使用having子句筛选分组;
6、计算所有的表达式;
7、返回select选择的列;
8、使用order by对结果集进行排序。
继续阅读select语句执行顺序

CentOS6.5安装Oracle Express Edition

Oracle Express Edition是给个人学习、熟悉Oracle的简化版。

到官网下载软件包,要先注册一个帐号,下载完是一个压缩包,解压出oracle-xe-11.2.0-1.0.x86_64.rpm。Linux下只有64位版本。

网盘下载地址:http://pan.baidu.com/s/1ntJsDOt

1、安装依赖包

yum install libaio libaio-devel bc -y

2、安装Oracle Express Edition
使用root用户操作。

cd ~
wget http://download.oracle.com/otn/linux/oracle11g/xe/oracle-xe-11.2.0-1.0.x86_64.rpm.zip?AuthParam=1409379226_d26581af452e67b3a2b04fe09ee28749 -O oracle-xe-11.2.0-1.0.x86_64.rpm.zip
unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip
cd Disk1
rpm -ivh oracle-xe-11.2.0-1.0.x86_64.rpm

安装时会对系统进行检测,最好内存有1G,SWAP要求是内存的2倍。

[root@server01 Disk1]# rpm -ivh oracle-xe-11.2.0-1.0.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:oracle-xe              ########################################### [100%]
Executing post-install steps...

You must run '/etc/init.d/oracle-xe configure' as the root user to configure the database.


继续阅读CentOS6.5安装Oracle Express Edition