Oracle基础-SQL92标准下的笛卡尔积、内连接(等值连接、非等值连接)、外连接和自连接

--创建表1
create table T_NUM
(
  id     VARCHAR2(10) not null,
  name   VARCHAR2(10),
  sex    NVARCHAR2(10),
  age    NUMBER(10),
  tgroup VARCHAR2(10)
)
--向表1插入数据
INSERT ALL
INTO T_NUM(ID,NAME,SEX,AGE,TGROUP) VALUES(1,'张三','男',20,1)
INTO T_NUM(ID,NAME,SEX,AGE,TGROUP) VALUES(2,'李四','男',21,1)
INTO T_NUM(ID,NAME,SEX,AGE,TGROUP) VALUES(3,'王五','男',24,2)
INTO T_NUM(ID,NAME,SEX,AGE,TGROUP) VALUES(4,'王二狗','男',30,3)
INTO T_NUM(ID,NAME,SEX,AGE,TGROUP) VALUES(5,'丽莎','女',20,4)
INTO T_NUM(ID,NAME,SEX,AGE,TGROUP) VALUES(6,'田鸡','男',32,4)
SELECT * FROM DUAL;
--提交
COMMIT;
--创建表2
create table T_GROUP
(
  GID    VARCHAR2(10) not null,
  GNAME   VARCHAR2(10)
)
--向表2插入数据
INSERT ALL
INTO T_GROUP(GID,GNAME) VALUES(1,'组一')
INTO T_GROUP(GID,GNAME) VALUES(2,'组二')
INTO T_GROUP(GID,GNAME) VALUES(3,'组三')
INTO T_GROUP(GID,GNAME) VALUES(4,'组四')
INTO T_GROUP(GID,GNAME) VALUES(5,'组五')
SELECT * FROM DUAL;
COMMIT;
--创建表3
create table T_AGE
(
  ANAME     VARCHAR2(10) not null,
  AMIN   number,
  AMAX    number
)
--向表3插入数据
INSERT ALL
INTO T_AGE(ANAME,AMIN,AMAX ) VALUES('小',1,20)
INTO T_AGE(ANAME,AMIN,AMAX ) VALUES('中',21,30)
INTO T_AGE(ANAME,AMIN,AMAX ) VALUES('大',31,40)
SELECT * FROM DUAL;
COMMIT;
--添加字段,更新字段内容
ALTER TABLE T_NUM ADD SUP VARCHAR2(10);
UPDATE T_NUM SET SUP='1' WHERE NAME='李四';
UPDATE T_NUM SET SUP='2' WHERE NAME='王五';
UPDATE T_NUM SET SUP='4' WHERE NAME='丽莎';
UPDATE T_NUM SET SUP='4' WHERE NAME='田鸡';
COMMIT;

笛卡尔积:说人话就是,A表有5条记录,B表右6条记录,笛卡尔积后的临时表中有5*6=30条记录,没有任何条件去约束。

SELECT * FROM T_NUM A,T_GROUP B; --笛卡尔积

内连接:表A和表B有关联的数据组合在一起,无关联的不会出现在查询结果集中。

等值连接:A表和B表,通过一个意义和内容都相等的字段关联起来。

SELECT * FROM T_NUM A,T_GROUP B WHERE A.TGROUP=B.GID; --等值连接

非等值连接:表A的一个字段中确定值在表B的两个字段的范围内。

SELECT * FROM T_NUM A,T_AGE B WHERE A.AGE BETWEEN B.AMIN AND B.AMAX; --非等值连接

外连接:比如表A和表B进行外连接,就需要有一张作为主表,另外一张则需要作为从表。主表中的内容全都在,从表只有相关联的在。表后面有"(+)"的就是从表。

SELECT * FROM T_NUM A,T_GROUP B WHERE A.TGROUP=B.GID(+); --外连接

自连接:表A通过表中相关联的两个字段连接自己

SELECT * FROM T_NUM A,T_NUM B WHERE A.SUP=B.ID; --自连接

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值