oracle数据库对象-视图

视图是数据库里的一个对象。视图是一个子查询,或者说就是一张表。视图里的表是虚表。
视图名称一般以vi或v$开头。

–为test_t表创建视图

create view vi_test_t as select id AAAA, no BBBB, t_name CCCC, s_name DDDD, score EEEE from test_t where score > 60;

–查询视图

select * from vi_test_t;

AAAA BBBB CCCC DDDD EEEE
2 2 Mary 李四 99
3 3 Tom 王五 76

。。。以下记录省略
继续阅读oracle数据库对象-视图

SQL union学习

union和union all都是将多个查询的结果集合并到一张表里。union缺省在合并结果集后消除重复项,union all指定在合并结果集后保留重复项。
union默认用第一个字段进行排序,当然也可以在最后一个结果集里用order by子句排序。

把TEST_T表重新改一下:

drop table test_t;

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

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);

继续阅读SQL union学习

子查询学习(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);

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

Linux rz和sz命令

rz,sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具。
优点就是不用再开一个sftp工具登录上去上传下载文件。

sz:将选定的文件发送(send)到本地机器
rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到Linux服务器

安装命令:

yum install lrzsz

从服务端发送文件到客户端:

sz filename

从客户端上传文件到服务端:

rz

在弹出的框中选择文件,上传文件的用户和组是当前登录的用户

SecureCRT设置默认路径:
Options -> Session Options -> Terminal -> Xmodem/Zmodem ->Directories

Xshell设置默认路径:
右键会话 -> 属性 -> ZMODEM -> 接收文件夹

PS:同事和我说SecureCRT可以方便的上传下载文件,而Xshell没有。我上网一查原来用的是同一个sz/rz工具,Xshell下没有菜单选择要输命令。

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子句跟多个字段分析

excel技巧

1、填充为同个值
在A1填入1,选中A1,把鼠标放到A1右下角,这时鼠标变成实心十字,最后双击鼠标左键,这一列都变成1了

2、按1 2 3 …顺序填充
在A1和A2分别填上1和2,选中A1和A2,把鼠标放到A2的右下角,这时鼠标变成实心十字,最后双击鼠标左键

3、删除重复项
选中一列,数据-删除重复项

4、在一列数值后面都加上逗号
1)假设数据在A列,在B1列输入=A1&”,”
2)鼠标放到右下角,变成实心十字后往下拉
或选中B1单元格,复制,选中和A列数据平行的单元格,粘贴
注:B1列不能是文本格式,文本格式不会引用列

对双引号的转义,用””,两个引号转义一个引号
=”{“”storecode””:”””&A2&”””,””business””:”””&B2&”””,””area””:”””&C2&”””,””address””:”””&D2&”””},”

5、excel截取字符串
MID函数:MID(text,start_num,num_chars)
text是包含要提取字符的文本串。
start_num是文本中要提取的第一个字符的位置。
num_chars是要提取的字符个数,从左边开始提取字符。
如要截取A2列某字符串从第21位开始的4位:mid(A2,21,4)

6、将txt文本文档的报表导入excel
数据-(获取外部数据)自文本-设置分隔符号-完成

7、excel中文本数字求和
复制需要求和的数字,在空格地方选择性粘贴,注意看选择性粘贴后表格左上角出现了一个倒三角的符号,里面选择“转换为数字”,再求和

8、数字格式转换为文本格式后,还是显示如:8.131E+14这样的数字,显示内容需要一个个双击才能变为文本,可以用数据分列功能来实现批量转换
1)选中要转换的单元格
2)数据-分列,原始数据类型(无所谓点下一步),分隔符号(无所谓点下一步),列数据格式(选文本!点完成)

9、找出两列的不同值
有一列A和一列C,C的列值是包含在A列值中,数量上A大于C。现在要找出A中哪些是C中没有的。
在E1列输入如下=IF(COUNTIF(C:C,A1)>0,”重复”,”多余”),往下拉即可。
countif函数表示计数A1在C列的数量,返回大于0表示存在,否则返回0。

10、vlookup函数
=VLOOKUP(E11,'[查询结果4.xls]SQL Results’!$B:$F,5,FALSE)
第一个参数:要查找的字段
第二个参数:查找范围(按列选!!不要框字段)
第三个参数:取值是第几列
第四个参数:true模糊查找,false精确查找

例子:要查A05301在E11,范围是 查询结果4.xls 文档的B列到F列(搜索范围),匹配到A05301的话取第5列的值即F列,精确查找。

vlookup只能匹配一个字段,如果要匹配多个字段:
1)增加一个辅助列,将两个字段拼接起来匹配,=A2&B2
2)使用if({1,0}}
=VLOOKUP(A2&B2,IF({1,0},’OKFEP_R_041367 (3)’!A:A&’OKFEP_R_041367 (3)’!B:B,’OKTMS_R_041367 (2)’!C:C),2,0)
=VLOOKUP(A2&B2,IF({1,0},’OKTMS_R_041367 (2)’!A:A&’OKTMS_R_041367 (2)’!B:B,’OKTMS_R_041367 (2)’!C:C),2,0)

11、分列功能
1)数字转文本,见8

2)文本转数字
分列 – 在弹出的对话框中直接单击“完成”按钮

12、删除空行
(只有为数字格式时),查找和选择 – 定位条件 – 选空值 – 确定
在空行上右键 – 删除 – 下方单元格上移,就会删除所有空行
PS:只有格式为数字时才有效,如果是文本会提示“找不到单元格”

13、excel中E+怎么变成全数字
1)先选中一列,设置单元格格式-选择文本
2)复制值进去