Você está na página 1de 7

166569770.

doc

SELECT
Comando SELECT..............................................................................................................................2 1. SELECT * FROM dbtab..........................................................................................................2 Adies :...............................................................................................................................................2 1a) ... WHERE Condition............................................................................................................2 1b) ORDER BY f1fn..........................................................................................................2 1c) ... UP TO n ROWS.................................................................................................................3 2) SELECT * FROM dbtab INTO TABEL itab..........................................................................3 2a) WHERE..................................................................................................................................3 2b) ORDER BY............................................................................................................................3 2c) UP TO n ROWS.....................................................................................................................3 3) SELECT * FROM dbtab APPENDING TABLE itab.............................................................3 3a) WHERE..................................................................................................................................3 3b) ORDER BY............................................................................................................................3 3c) UP TO n ROWS.....................................................................................................................3 4) SELECT SINGLE * FROM dbtab WHERE f1 = g1 AND AND fn +................................3 5) SELECT * FROM dbtab APPENDING CORRESPONDING FILEDS OF TABLE itab.....4 6) SELECT * FROM dbtab FOR ALL ENTRIES in itab WHERE.............................................4 TIPOS DE SELECT EXISTENTES E MAIS UTILIZADOS.........................................................5 1- SELECT * FROM ... <tabela>.................................................................................................5 2- SELECT * FROM <tabela> WHERE <campo> EQ <contedo>...........................................5 3- SELECT * FROM <tabela> WHERE <table field> BETWEEN <field1> AND <field2>.. . .5 4- SELECT * FROM <tabela> WHERE <table field> LIKE _R$......................................5 5- SELECT * FROM <tabela> WHERE <table field> IN ( , .)...................................5 6- SELECT * FROM <tabela> WHERE <table field> IN <internal table>................................5 7- SELECT * FROM <tabela> ORDER BY <field1> <field2> PRIM ARY KEY................5 8- SELECT * FROM <tabela> BYPASSING BUFFER.............................................................5 9- SELECT * FROM <tabela> APPENDING TABLE <internal table>.....................................6 10- SELECT * FROM <tabela> INTO TABLE <internal table>................................................6 11- SELECT INTO CORRESPONDING FIELDS OF TABLE <internal table>..................6 12- SELECT * APPENDING COREESPONDING FIELDS OF TABLE <internal table>. .....6 13- SELECT SINGLE * FROM <tabela> WHERE <campo> EQ <contedo>..........................6 14- SELECT <a1> <a2> ... INTO ( <f1>, <f2>, ) FROM <tabela> WHERE ...........6 15- SELECT MAX (campo)........................................................................................................6 16- SELECT * FROM SFLIGHT WHERE PRICE IN ITAB.....................................................7 17- SELECT * FROM (<tabela>) INTO <work area>................................................................7 18- SELECT * FROM <tabela> FOR ALL ENTRIES IN <tabela interna> ..............................7 19- SELECT carrid MIN( price ) MAX( price ) INTO (carid, minimum, maximum) ..............7

Pg.: 1/7

166569770.doc

Comando SELECT O comando select usado para acessar e selecionar dados de tabelas internas do SAP. Por existirem diversas variaes do mesmo comando, fundamental que o programador saiba o mecanismo de funcionamento de cada uma delas pois s assim poder dar ao programa uma performance satisfatria. Variaes:

1.

SELECT * FROM dbtab.


ENDSELECT.

Seleciona dados de uma tabela SAP num processo de loop que comea no select e termina no endselect. A cada passagem pelo loop temos um elemento lido e selecionado. necessrio que se coloque aps o ENDESELCT uma condio de checagem de dados selecionados: If sy-subrc ne 0. Write: Nenhum dado foi selecionado. Endif. Se sy-subrc = 0 : pelo menos um dado foi selecionado Se sy-subrc = 4 : nenhum dados foi lido Exemplo: SELECT * FROM BSEG. ENDSELECT. If sy-subrc ne 0. Write: No tem dado na tabela BSEG. Endif. Adies :

1a)

... WHERE Condition

Seleciona apenas os dados que satisfazem a condio especificada. Exemplo: SELECT * FROM T001 WHERE BUKRS EQ 0001. ENDSELECT.

1b)

ORDER BY f1fn
ORDER BY PRIMARY KEY

Organiza os dados em ordem ascendente de acordo com os campos especificados (f1fn). Exemplo: SELECT * FORM T001 ORDER BY MSGNR DESCENDING ARBGB ASCENDING.
Pg.: 2/7

166569770.doc

ENDSELECT.

1c)

... UP TO n ROWS.

Seleciona um nmero mximo de dados. Exemplo: SELECT * UP TO 100 ROWS FROM T001 WHERE... ENDSELECT.

2)

SELECT * FROM dbtab INTO TABEL itab.

Os dados so selecionados e colocados na tabela interna itab de uma s vez. No h mais o processo de loop e portanto no h mais ENDSELECT. Os dados novos da tabela interna so gravados por cima dos antigos. importante ressaltar que o * pode ser substitudo pelos nomes dos campos da tabela, agilizando assim o processo e melhorando a performance. Exemplo: SELECT * FROM T001 INTO TABLE TAUX. Adies:

2a) 2b) 2c) 3)

WHERE ORDER BY UP TO n ROWS SELECT * FROM dbtab APPENDING TABLE itab.

Mesmo processo do item 2, s que os dados novos so inseridos sem apagar os antigos. Exemplo: SELECT * FORM T100 APPENDING TABLE TAUX . Adies:

3a) 3b) 3c) 4)

WHERE ORDER BY UP TO n ROWS SELECT SINGLE * FROM dbtab WHERE f1 = g1 AND AND fn +

Seleciona apenas um nico dado que satisfaas condies do where. OBS.: Neste caso todas as chaves (ndices da tabela) devem ser satisfeitos. Exemplo:

Pg.: 3/7

166569770.doc

SELECT SINGLE * FORM T100 WHERE BUKRS = 02.

5)

SELECT * FROM dbtab APPENDING CORRESPONDING FILEDS OF TABLE itab.

Mecanismo semelhante ao item 2, e deve ser usado quando a sintaxe do item 2 no puder ser usada. H diferenas de performance. Exemplo: SELECT * FORM T100 APPENDING CORRESPONDING FIELDS OF TABLE TAUX . Onde TAUX recebeu a estrutura da tabela T100 (commando INCLUDE STRUCTURE).

6)

SELECT * FROM dbtab FOR ALL ENTRIES in itab WHERE...

Usado quando selecionamos dados de uma tabela e precisamos de dados de outra tabela para compor as condies do where. Exemplo: SELECT * FORM BSEG FOR ALL ENTRIES IN T_BKPF WHERE BUKRS = T_BKPF-BUKRS AND BELNR = T_BKPF-BELNR . Onde T_BKPF uma tabela interna que recebeu a tabela BKPF. Este tipo de comando utilizado entre tabelas internas.

Pg.: 4/7

166569770.doc

TIPOS DE SELECT EXISTENTES E MAIS UTILIZADOS

1-

SELECT * FROM ... <tabela>

Quando no se impe nenhum tipo de restrio, ocorre uma varredura seqencial dos registros da tabela. Quando se utiliza grandes tabelas, isso obviamente afeta o runtime. Performance: Select * seleciona todas as colunas de uma tabela. melhor sempre especificar as colunas, pois em caso de tabelas com muitas colunas, prejudicar a performance.

2-

SELECT * FROM <tabela> WHERE <campo> EQ <contedo>.

L todos os registros da tabela especificada onde o campo igual ao contedo especificado. Performance: Select * Where seleciona todas as colunas de uma tabela de acordo com a condio de where. melhor sempre especificar as colunas, pois em caso de tabelas com muitas colunas, prejudicar a performance.

3-

SELECT * FROM <tabela> WHERE <table field> BETWEEN <field1> AND <field2>.
field1 = 100 e field2 = 500. pega inclusive 100 e 500. Voc trabalha com o

Exemplo: range.

4_= R %

SELECT * FROM <tabela> WHERE <table field> LIKE _R$.


a primeira letra no imprta o que vir. a segunda dever ser R (eu defini) no importa a seqncia de caracteres que vir

5-

SELECT * FROM <tabela> WHERE <table field> IN ( , .).


select * from <table> where campo1 in (123,1000) podem ser valores ou como perguntar se campo1 123 ou 1000.

Exemplo: literais.

6-

SELECT * FROM <tabela> WHERE <table field> IN <internal table>.

Exemplo: DATA: begin of ITAB occurs 10, Sign(1), options(2), low like sflight-price, high like sflight-proce, End of ITAB. * Ranges: ITAB for sflight-table Move: I to itab-sign, bt to itab-option, 500 to itab-low, 1000 to itab-high. Append itab. Move: I to itab-sign, bt to itab-option, 440 to itab-low. Append itab.

7-

SELECT * FROM <tabela> ORDER BY <field1> <field2> PRIM ARY KEY.

Obs.: Classifica a tabela interna numa rea auxiliar, sem afetar a tabela original. Evitar o uso de sorts dentro de um select. Consome mais tempo que descarregar os dados em uma tabela interna e classific-los.

8-

SELECT * FROM <tabela> BYPASSING BUFFER.

Usado para ler diretamente da tabela original e no do buffer.


Pg.: 5/7

166569770.doc

OBS.: Select single * sempre com chave completa especificada. Particularmente do ABAP/4 Select * - procurar evitar. Informar as colunas que sero necessrias, apenas. Uso do comando extract (insert header, details) para relatrios.

9-

SELECT * FROM <tabela> APPENDING TABLE <internal table>.

L os registros e os Inclui no sobrepe em uma tabela interna.

10-

SELECT * FROM <tabela> INTO TABLE <internal table>.

A estrutura da tabela interna deve corresponder estrutura da tabela que est sendo acessada. O sistema l os registros em conjunto, no individualmente atravs de um LOOP e ir gravando os registros, uma a um.

11-

SELECT INTO CORRESPONDING FIELDS OF TABLE <internal table>.

Neste caso a estrutura da tabela interna no precisa corresponder estrutura da tabela que est sendo acessada. Movimentar os registros para as colunas definidas na tabela interna que possuam nome igual ao da tabela acessada. Obs.: Corresponding ou appending no exisgem o endselect.

12-

SELECT * APPENDING COREESPONDING FIELDS OF TABLE <internal table>.

L e grava (no sobrepe) os dados em uma tabela interna que possua nomes idnticos aos nomes da tabela que est sendo lida.

13-

SELECT SINGLE * FROM <tabela> WHERE <campo> EQ <contedo>.

Toda vez que se usa select single * a chave primria completa deve ser especificada. Se a chave especificada no qualificada, voc receber uma mensagem de warning e a performance ficar prejudicada. No caso de haver a necessidade de acessar um nico registro via select, as opes so: Select * ... seguido do comando EXIT ou select * ... UP TO 1 ROW. Neste caso no necessrio especificar a chave completa.

14-

SELECT <a1> <a2> ... INTO ( <f1>, <f2>, ) FROM <tabela> WHERE .

L as colunas especificadas (a1, a2). Aps INTO devero ser especificadas as reas de trabalho auxiliares (f1, f2). O nmero de colunas lidas dever ser igual ao nmero de work-aeras especificadas.

15-

SELECT MAX (campo)


MIN (campo) AVG (campo) COUNT (*) FROM <tabela> INTO (... , , , ) WHERE .

AVG e SUM somente para campos numricos. No se usa endselect. Mais rpido fazer uma rotina a mo que utilizar esse comando.
Pg.: 6/7

166569770.doc

1617-

SELECT * FROM SFLIGHT WHERE PRICE IN ITAB. SELECT * FROM (<tabela>) INTO <work area>.

Exemplo: Data: begin of WA, Line(1000, end of WA. Parameters: tabname(10) default SPFLI. *** especificando o nome da tabela em tempo dinamicamente no comando select sempre consome mais tempo de CPU que especificando estatiamente no programa. Select * from (tabname) into WA. Write: . Endselect.

18-

SELECT * FROM <tabela> FOR ALL ENTRIES IN <tabela interna>

WHERE campo1 = contedo AND WHERE campo2 = contedo . Defino uma tabela interna. Alimento os campos desta tabela interna. (move e append). No meu select campo1 e campo2 sero os campos definidos e ealimentados na tabela interna.

19-

SELECT carrid MIN( price ) MAX( price ) INTO (carid, minimum, maximum)

FROM sflight GROUP BY carrid. Todos os campos que eu quero que apaream na minha lista eu preciso especificar aps a clusula GROUP BY. (carrid, maximum e minimum so campos auxiliares. Se o nome do databease no conhecido at o runtime, no se pode especificar a clusula GROUP BY.

Pg.: 7/7

Você também pode gostar