龙空技术网

数据库SQL连接查询一

懒羊羊是程序猿 504

前言:

现时姐妹们对“数据库sql连接查询”大致比较看重,大家都需要剖析一些“数据库sql连接查询”的相关资讯。那么小编在网络上收集了一些关于“数据库sql连接查询””的相关内容,希望小伙伴们能喜欢,大家快快来了解一下吧!

最近系统升级,在比对执行计划时发现不少效率低下的sql查询语句是因为使用连接不当导致的无法走到索引或不能很好的使用索引,于是就做了个链接查询的小结,希望能给大家做个参考。

sql

在关系型数据库中,存放在不同的表里的数据都存在一定的关联,相对于单表查询多表关联查询更加复杂,多表查询就不得不考虑连接和集合运算来实现。

表 CUST_BASE_INFO 数据:

CUST_BASE_INFO

表 CUST_OTHER_INFO 数据:

CUST_OTHER_INFO

1 内连接(inner join)

DB2里默认的连接方式是内连接(INNER JOIN):

内连接只显示连接表中符合连接条件和查询条件的数据行集,分为显式的和隐式的。(所谓的链接表就是数据库在做查询形成的中间表)。

语句1:隐式的内连接,没有inner join,形成的中间表为两个表的笛卡尔积。

SELECT * FROM LY.CUST_BASE_INFO a, LY.CUST_OTHER_INFO b ;

笛卡尔积4×5=20条数据:

隐式内连接

语句2:显示的内连接,一般称为内连接,有inner join,形成的中间表为两个表经过on条件过滤后的笛卡尔积。

SELECT * FROM LY.CUST_BASE_INFO a inner join LY.CUST_OTHER_INFO b ON a.CUST_NO=b.CUST_NO;

笛卡尔积3条数据:

显示内连接

2 交叉连接(cross join)

交叉连接(cross join):有两种,显式的和隐式的,不带on子句,返回的是两表的乘积,也叫笛卡尔积.

语句3:隐式的交叉连接,没有cross join。

SELECT * FROM LY.CUST_BASE_INFO a, LY.CUST_OTHER_INFO b WHERE a.CUST_NO='0001';

隐式交叉连接

语句4:显式的交叉连接,使用cross join。

SELECT * FROM LY.CUST_BASE_INFO CROSS JOIN LY.CUST_OTHER_INFO b on b.CUST_NO='0001';

显示交叉连接

后续内容(外连接)请点击右上角关注:数据库SQL连接查询二

示例用表建表脚本

--===========================-- Table1: CUST_BASE_INFO 客户基本资料表--===========================create table LY.CUST_BASE_INFO( CUST_NO CHAR(10) not null with default '', "NAME" CHAR(20) not null with default '', GENDER CHAR(1) not null with default '', NATION_CODE CHAR(3) not null with default '', CERT_TYPE INTEGER not null with default 0, CERT_NO CHAR(50) not null with default '', constraint P_KEY_1 primary key (CUST_NO))PARTITIONING KEY (CUST_NO) 		 IN TX_DATA_TBS INDEX IN TX_INDEX_TBS;comment on table LY.CUST_BASE_INFO is '客户基本资料';comment on column LY.CUST_BASE_INFO.CUST_NO is '客户号';comment on column LY.CUST_BASE_INFO."NAME" is '姓名';comment on column LY.CUST_BASE_INFO.GENDER is '性别';comment on column LY.CUST_BASE_INFO.NATION_CODE is '国籍代码';comment on column LY.CUST_BASE_INFO.CERT_TYPE is '证件类别';comment on column LY.CUST_BASE_INFO.CERT_NO is '证件号码';--===========================-- Table2: CUST_OTHER_INFO 客户其他信息--===========================create table LY.CUST_OTHER_INFO( CUST_NO CHAR(10) not null with default '', CERT_ADDR VARCHAR(80) not null with default '', MOBILE VARCHAR(30) not null with default '', EMAIL VARCHAR(60) not null with default '', PHONE VARCHAR(30) not null with default '', FAX VARCHAR(30) not null with default '', ADDR VARCHAR(80) not null with default '', constraint "P_Key_1" primary key (CUST_NO))PARTITIONING KEY (CUST_NO) 		 IN TX_DATA_TBS INDEX IN TX_INDEX_TBS;comment on table LY.CUST_OTHER_INFO is '客户其他资料';comment on column LY.CUST_OTHER_INFO.CUST_NO is '客户号';comment on column LY.CUST_OTHER_INFO.CERT_ADDR is '证件地址';comment on column LY.CUST_OTHER_INFO.MOBILE is '移动电话';comment on column LY.CUST_OTHER_INFO.EMAIL is '邮件地址';comment on column LY.CUST_OTHER_INFO.PHONE is '联系电话';comment on column LY.CUST_OTHER_INFO.FAX is '传真';comment on column LY.CUST_OTHER_INFO.ADDR is '联系地址';--数据脚本INSERT INTO LY.CUST_BASE_INFO VALUES ('0001','吴彦祖','1','0',1,'12081198803052461');INSERT INTO LY.CUST_BASE_INFO VALUES ('0002','王彦祖','2','0',1,'12081198803052462');INSERT INTO LY.CUST_BASE_INFO VALUES ('0003','李彦祖','1','0',1,'12081198803052463');INSERT INTO LY.CUST_BASE_INFO VALUES ('0004','孙彦祖','1','0',1,'12081198803052464');INSERT INTO LY.CUST_BASE_INFO VALUES ('0005','张彦祖','2','0',1,'12081198803052465');INSERT INTO LY.CUST_OTHER_INFO VALUES ('0001','中国台湾省','18501587891','yanzu.wu1@126.com','562321','4789651','中国台湾省');INSERT INTO LY.CUST_OTHER_INFO VALUES ('0002','中国台湾省','18501587892','yanzu.wu2@126.com','562322','4789652','中国台湾省');INSERT INTO LY.CUST_OTHER_INFO VALUES ('0003','中国台湾省','18501587893','yanzu.wu3@126.com','562323','4789653','中国台湾省');INSERT INTO LY.CUST_OTHER_INFO VALUES ('0006','中国台湾省','18501587896','yanzu.wu6@126.com','562326','4789656','中国台湾省');

标签: #数据库sql连接查询 #查询数据库连接数sql