楼主: intheangel
77617 83

[原创博文] PROC SQL 的一点小结   [推广有奖]

报纸
intheangel 学生认证  发表于 2014-5-3 17:45:44 |只看作者 |坛友微信交流群
(三)
最后再写一写关于建立table的问题吧,这个方面比较简单;
我把个人的理解写一下就好
create->insert->update->delete->alter
create 就是建立table
insert就是在table中添加行
update是在table中修改行
delete是在table中删除行
alter是修改列
主要就是这么一个过程

语法方面我就简单介绍一下,大家多用用应该就会很熟悉
create table as select variable from table1
是从table1中挑选变量到一个新的创建的table中

insert into table
set ...
这是往table中添加变量

insert into table
values (...)
这两种用法的结果基本是一样的
大家可以自己试一试

update table
set variable1=variable1*1.7
把表中的变量1放大1.7倍

delete from table where ...
将符合条件的行删除

alter主要有3种用法:add modify drop
add是添加列
alter table
add col num format=4.1 label='...'
建立了一个数字型的新列

modify 是改变列的格式
alter table
modify col format=comma15.1
修改了col列的格式

drop 删除列
alter table
drop col1
删除掉了col1列
已有 2 人评分经验 学术水平 热心指数 信用等级 收起 理由
heguima + 1 + 1 + 1 精彩帖子
crackman + 100 鼓励积极发帖讨论

总评分: 经验 + 100  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

我是一只瘦瘦的小猪~~~
╭︿︿︿╮
{/-◎◎-/}
( (oo) )
  ︶︶︶

使用道具

板凳
lookslike 发表于 2014-5-3 14:58:38 |只看作者 |坛友微信交流群
顶顶,谢谢分享。

使用道具

藤椅
congmu 发表于 2014-5-3 14:12:08 |只看作者 |坛友微信交流群
谢谢分享

使用道具

沙发
intheangel 学生认证  发表于 2014-5-3 13:43:47 |只看作者 |坛友微信交流群
(二)
根据我去ebay面试的经历来看,它们比较看重的其实就是left join 的用法,缺失sql里面合并的用法很多,用法也很灵活,大家可以好好看看书上的介绍来理解一下。
简单分下类,join主要分为inner join 以及outer join
理解起来可以看inner join 是把匹配的列都放在一起,而outer join 会把部分不匹配的也放进来,放哪些进来就要看你的语句了;
举个例子来看;
select variable1, variable2 from a, b;
这样出来的是什么呢,这是笛卡尔积,简单来说把variable1中的所有行和variable2中的所有行一一对应,比如说a1,a2,a3 三行,b里面是b1,b2,b3三行,
结果就是a1,b1,a1,b2,a1,b3,a2,b1....变成了3*3九行;
但是,你在后面加上on对条件进行限制,那么这就变成了inner join,也就是只有满足条件的才会被提取,比如说
select variable1, variable2 from a, b on a.variable1=b.variable2; 这样就相当于对笛卡尔积进行了一个筛选;

left join  select variable1, variable2 from a left join b on a.variable1=b.variable2; 这里出来的结果,a,variable1的结果都会有,  而variable2的匹配的才会出现;
right join 和上面刚好相反,只有b中的才会全部出现,a中的匹配的才会出现;
书中有图片来反映结果,我相信大家看了会更容易理解;


剩下的我说一下两个查询结果整合在一起;
union, except, intersect, outer union;
这四个合并方法都有两个选项可以使用 all 和 corr(corresponding)
all是把所有的结果都写出来,也就是说重复的不会合并,all不能与outer union合用;
corr 用在union, except, intersect三个中,只会输出合并的那一列,用在outer union 中,效果会比较好;
用书上的例子来说明一下吧;
table a;
x  y
1  one
2  two
2  two
3  three
table b;
x  z
1  one
2  two
4  four


1、union 会把两个查询结果合并在一起,相同的会合并,不同的就不会合并
select * from a
union
select * from b
结果:
x  y
1  one
2  two
3  three
4  four

all:
select * from a
union all
select * from b
结果:
x  y
1  one
2  two
2  two
3  three
1  one
2  two
4  four

corr:
select * from a
union corr
select * from b
结果:
x
1
2
3
4

except:只留下a中有b中没有的;
select * from a
except
select * from b
结果:
x  y
3  three

all:
select * from a
except all
select * from b
结果:
x  y
2  two
3  three

intersect:只要ab中都有的;
例子我就不写了,大家应该能联想到吧

outer union: 和union有点相似,但是大家看了结果就会发现,加了corr后,outer union是最像set 语句的;
proc sql;
select * from a
outer corr
select * from b;quit;
大家可以自己试试结果是什么;


另外有一点不知道大家注意到没有,前面三个可是没有区分变量的哦, x y 与x z 是默认相同的哦,所以这种用法不是很灵活,大家要小心使用。

已有 4 人评分经验 学术水平 热心指数 信用等级 收起 理由
李下蹊666 + 4 + 5 精彩帖子
feifeifeidm + 3 + 3 + 3 太棒了,看着非常简介易懂
heguima + 1 + 1 + 1 精彩帖子
crackman + 100 鼓励积极发帖讨论

总评分: 经验 + 100  学术水平 + 8  热心指数 + 9  信用等级 + 4   查看全部评分

我是一只瘦瘦的小猪~~~
╭︿︿︿╮
{/-◎◎-/}
( (oo) )
  ︶︶︶

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-29 13:28