文章目录
一 背景
多个表连接查询,可以通过视图(这个查询经常用就有可能要用它)和join(一次性查询就用它)来做查询;下以主要是以join例子来说明!
Join是对多个数据库表的操作,写本文主要是对这三种连接方式的一个区别和总结。
数据库表连接需要有三点
1.连接哪些表;
2.连接条件;
3.连接哪些列;
连接条件用on来表示。
以下是T1表(左边表)
以下是T2表(右边表)
二 Inner join的用法
实际上就是两张表FILED1字段相等的等式连接,查询公共部分出来。
TYPES: BEGIN OF TY_ITEM ,
FILED1 TYPE ZJGL1-FILED1,
FILED2 TYPE ZJGL1-FILED2,
FILED3 TYPE ZJGL2-FILED3,
END OF TY_ITEM .
data item type STANDARD TABLE OF TY_ITEM.
SELECT T1~FILED1 T1~FILED2 T2~FILED3
FROM ZJGL1 AS t1
INNER JOIN ZJGL2 as T2 ON ( T1~FILED1 = T2~FILED1 )
INTO CORRESPONDING FIELDS OF TABLE item.
BREAK-POINT.
效果如下
三 left join (以左边的表为准取数,再来内连接 )
代码
TYPES: BEGIN OF TY_ITEM ,
FILED1 TYPE ZJGL1-FILED1,
FILED2 TYPE ZJGL1-FILED2,
FILED3 TYPE ZJGL2-FILED3,
END OF TY_ITEM .
data item type STANDARD TABLE OF TY_ITEM.
SELECT T1~FILED1 T1~FILED2 T2~FILED3
FROM ZJGL1 AS t1
LEFT OUTER JOIN ZJGL2 as T2 ON ( T1~FILED1 = T2~FILED1 )
INTO CORRESPONDING FIELDS OF TABLE item.
BREAK-POINT.
效果如下
四 right join(以右边的表为准取数,再来内连接)
TYPES: BEGIN OF TY_ITEM ,
FILED1 TYPE ZJGL1-FILED1,
FILED2 TYPE ZJGL1-FILED2,
FILED3 TYPE ZJGL2-FILED3,
END OF TY_ITEM .
data item type STANDARD TABLE OF TY_ITEM.
SELECT T2~FILED1 , T1~FILED2 ,T2~FILED3
FROM ZJGL1 AS t1
RIGHT OUTER JOIN ZJGL2 as T2 ON ( T1~FILED1 = T2~FILED1 )
INTO CORRESPONDING FIELDS OF TABLE @item.
BREAK-POINT.
五 for all entries in (以内表中某字段值为条件,从数据库中取数)
SELECT … INTO TABLE
FROM
WHERE = -
AND = -.
以下就是一个例子(内表与数据库表一起取值。)
IF IT_VBAK IS NOT INITIAL.
SELECT * FROM MAKT INTO IT_MAKT
FOR ALL ENTRIES IN IT_VBAK
WHERE MATNR = IT_VBAK-MATNR.
ENDIF.
六 总结
- 如果join的时候,发果查询的数据太多,一定有多对多,所以出现了更多的数据.
- When you write sql conditon. You must view it if the field is in index. If it is here. The speed is fast.
Demo
3 When you use for all entry in ,please add conditon(if interal is not initial)