Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

download Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

of 119

Transcript of Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    1/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    1

    Parceiro Certificao

    Table of Contents

    1. Introduo .............................................................................................................................................. 4

    1.1. Origem .................................................................................................................................... 4

    2. Sobre SQL...................... ..................... ...................... ...................... ...................... ..................... .............. 5

    3. Viso Geral de um Banco de Dados Relacional.......................................................................... 6

    3.1. Criando DATABASE (SQL Server Management Studio)..................... ..................... 7

    3.2. Attach Database ................................................................................................................ 10

    3.3. Deattach Database ........................................................................................................... 10

    3.4. Apagando um DATABASE ............................................................................................... 11

    4. Modelo Relacional ...............................................................................................................................11

    4.1. Tabelas (ou relaes, ou entidades).......................................................................... 11

    4.2. Registros (ou tuplas) ...................................................................................................... 13

    4.3. Colunas (ou atributos).................................................................................................... 13

    4.4. Entidades e Chave Primria .......................................................................................... 144.4.1. Chave primria(PK - Primary Key):.................... ...................... ...................... .... 154.4.2. Chave Estrangeira: (FK - Foreign Key)............................................................. 154.4.3. Chave Primria Composta ..................................................................................... 16

    5. A Linguagem SQL (Structure Query Language) .......................................................................17

    5.1. DDL (Data Definition Language)................................................................................. 17

    5.2. DML (Data Manipulation Language)........................................................................... 17

    5.3. DCL (Data Control Language) ...................................................................................... 18

    5.4. Transactions Control........................................................................................................ 18

    5.5. Tipos de Campos .................................................................................................................. 185.5.1. Numrico Exato ............................................................................................................. 185.5.2. Bit .................................................................................................................................... 195.5.3. Decimais ......................................................................................................................... 195.5.4. Monetrio ........................................................................................................................ 205.5.5. Numrico Aproximado .................................................................................................. 205.5.6. Data e Hora .................................................................................................................... 215.5.7. Seqncia de caracteres .............................................................................................. 215.5.8. Seqncia Binria.......................................................................................................... 225.5.9. Outros tipos de dados .................................................................................................. 22

    5.6. Criando uma Tabela ......................................................................................................... 24

    5.7. Clausula INTO .................................................................................................................... 29

    5.8. Excluso de Tabelas......................................................................................................... 30

    5.9. ALTER TABLE ...................................................................................................................... 30

    5.10. Restrio de Integridade .......................................................................................... 33

    UNIQUE .................................................................................................................................................. 34

    PRIMARY KEY ........................................................................................................................................ 34

    FOREIGN KEY ........................................................................................................................................ 34

    DEFAULT ................................................................................................................................................ 34

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    2/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    2

    Parceiro Certificao

    6. INDICES ..................................................................................................................................................35

    Criao de ndices ................................................................................................................................ 35

    6.1. Index_option ...................................................................................................................... 37

    6.2. Excluso de ndices ......................................................................................................... 40

    7. CONSULTA EM SQL ..............................................................................................................................42

    7.1. SELECT .................................................................................................................................. 427.1.1. Clausula SELECT........................................................................................................ 427.1.2. Clusula INTO ................................................................................................................ 447.1.3. Clusula FROM.............................................................................................................. 457.1.4. Exercicio Complementar Left, Right e Join............................................................... 497.1.5. Clusula WHERE ............................................................................................................ 497.1.6. Clusula GROUP BY....................................................................................................... 507.1.7. Clusula HAVING.......................................................................................................... 53Operador UNION ............................................................................................................................. 547.1.8. Clusula ORDER BY....................................................................................................... 567.1.9. Clusula COMPUTE....................................................................................................... 60

    7.2. SUBQUERYS .......................................................................................................................... 61

    8. VISOES EM SQL ....................................................................................................................................63

    CREATE VIEW / DROP .......................................................................................................................... 638.1.1. Criao de View ............................................................................................................. 638.1.2. Excluso de View........................................................................................................... 64

    8. MODIFICAO DE DADOS ................................................................................................................65

    8.1. INSERT ................................................................................................................................. 65

    8.2. UPDATE .................................................................................................................................. 68

    8.3. DELETE ................................................................................................................................... 71

    CONTROLE DE FLUXO SCRIPTS ..............................................................................................................73

    VARIAVEIS ............................................................................................................................................. 73

    8.2. BEGIN END ......................................................................................................................... 73

    8.3. GOTO ...................................................................................................................................... 75

    8.4. IF ELSE ............................................................................................................................... 75

    8.5. WHILE - BREAK CONTINUE ............................................................................................. 77

    8.6. WAITFOR ................................................................................................................................ 78

    8.7. CURSOR ................................................................................................................................. 798.7.1. Declarao de Cursor ................................................................................................... 798.7.2. Abertura de Cursor ....................................................................................................... 828.7.3. Obter dados do Cursor ................................................................................................. 828.7.4. Verificar retorno do comando FETCH......................................................................... 848.7.5. Fechamento de Cursor ................................................................................................. 848.7.6. Encerrar Cursor ............................................................................................................. 85

    9. TRIGGER .................................................................................................................................................87

    9.1. CREATE TRIGGER ................................................................................................................. 87

    9.2. DROP TRIGGER ..................................................................................................................... 90

    10. PROCEDURE ...........................................................................................................................................91

    10.1. CREATE PROC .................................................................................................................. 9110.2. DROP PROCEDURE .......................................................................................................... 93

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    3/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    3

    Parceiro Certificao

    11. FUNCTION ..............................................................................................................................................94

    11.1. CREATE FUNCTION...................................................................................................... 94

    11.2. DROP FUNCTION.......................................................................................................... 97

    12. CONTROLE DE TRANSAO ..............................................................................................................98

    12.1. BEGIN TRANSACTION..................................................................................................... 98

    12.2. COMMIT TRANSACTION ................................................................................................. 98

    12.3. SAVE TRANSACTION....................................................................................................... 99

    12.4. ROLLBACK TRANSACTION ........................................................................................... 100

    13. FUNES DO SQL..................... ...................... ...................... ...................... ...................... ................. 102

    13.1. CASE ................................................................................................................................ 102

    13.2. CAST e CONVERT........................................................................................................ 104

    13.3. COALESCE ...................................................................................................................... 108

    13.4. ISDATE ............................................................................................................................ 108

    13.5. ISNUMERIC .................................................................................................................... 109

    13.6. NEWID ............................................................................................................................. 109

    13.7. NULLIF............................................................................................................................. 109

    13.8. @@ROWCOUNT ............................................................................................................. 110

    13.9. @@TRANCOUNT ............................................................................................................ 110

    13.10. Funes de Date e Hora............................................................................................... 111

    13.10.1. DATEADD ................................................................................................................ 111

    13.10.2. DATEDIFF ............................................................................................................ 11213.10.3. DATENAME .............................................................................................................. 11213.10.4. DATEPART ............................................................................................................... 11313.10.5. DAY .......................................................................................................................... 11313.10.6. GETDATE ................................................................................................................. 11413.10.7. GETUTCDATE.......................................................................................................... 11413.10.8. MONTH .................................................................................................................... 11413.10.9. YEAR ........................................................................................................................ 115

    13.11. Funes Matemticas ................................................................................................... 116

    13.12. Funes de String ......................................................................................................... 118

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    4/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    4

    Parceiro Certificao

    1. Introduo

    Um banco de dados como um arquivo eletrnico, ou seja, tem a mesmafuno que qualquer outro arquivo armazenar registros. A nica diferena queno banco de dados os registros so armazenados eletronicamente.

    De forma mais detalhada, um Banco de Dados Relacional um conceitoabstrato que define maneiras de armazenar, manipular e recuperar dadosestruturados unicamente na forma de tabelas, construindo um banco de dados.

    Um Banco de Dados Relacional um banco de dados que segue o ModeloRelacional.

    1.1. Origem

    O termo tambm aplicvel aos prprios dados, quando organizados dessaforma, ou a um Sistema Gerenciador de Banco de Dados Relacional (SGBDR) doingls Relational database management system (RDBMS) um programa decomputador que implementa a abstrao.

    O modelo relacional para gerncia de bancos de dados (SGBD) um modelode dados baseado em lgica e na teoria de conjuntos.

    Banco de Dados Relacional um conceito abstrato que define maneiras de

    armazenar, manipular e recuperar dados sendo historicamente ele o sucessor domodelo hierrquico e do modelo em rede. Um Banco de Dados Relacional umbanco de dados que segue o Modelo Relacional.

    O modelo relacional para gerncia de bancos de dados (SGBD) um modelode dados baseado em lgica e na teoria de conjuntos. Lembram-se?

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    5/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    5

    Parceiro Certificao

    Estas arquiteturas antigas so at hoje utilizadas em alguns data centers comalto volume de dados, onde a migrao inviabilizada pelo custo que elademandaria

    O modelo relacional foi inventado pelo Dr. Codd e subsequentemente mantidoe aprimorado por Chris Datee Hugh Darwen como um modelo geral de dados. NoTerceiro Manifesto (1995) eles mostraram como o modelo relacional pode serestendido com caractersticas de orientao a objeto sem comprometer os seusprincpios fundamentais.

    O modelo relacional permite ao projetista criar um modelo lgico consistenteda informao a ser armazenada. Este modelo lgico pode ser refinado atravs deum processo de normalizao. Um banco de dados construdo puramente baseadono modelo relacional estar inteiramente normalizado. O plano de acesso, outrasimplementaes e detalhes de operao so tratados pelo sistema DBMS, e nodevem ser refletidos no modelo lgico. Isto se contrape prtica comum paraDBMSs SQL nos quais o ajuste de desempenho frequentemente requer mudanasno modelo lgico.

    2. Sobre SQL

    Para termos acesso aos registros armazenados ou mesmo cadastrar novosregistros, precisamos de um sistema que gerencie o banco de dados. Este sistemagerenciador de banco de dados que torna possveis as operaes com o contedodo arquivo, como Traga-me este arquivo, Atualize este registro.

    Existem vrios tipos de sistemas de gerenciamento de banco de dados (SGBDou DBMS), representando diversas abordagens relativas s tarefas de acesso sinformaes contidas no banco de dados, preservao da integridade dos dados,acompanhamento dos usurios e manuteno da segurana. Para o nosso estudo,porm, podemos classificar todos os sistemas em dois tipos: relacionais e norelacionais, embora seja visvel o predomnio da abordagem relacional nos novos

    sistemas do mercado, inclusive o Sistema Protheus utiliza-se de ambos.Em um sistema relacional, os dados so armazenados e representados

    exclusivamente em tabelas. Em nenhum momento faz-se necessrio recorrer aoutras estruturas, como rvores hierrquicas, para ter acesso aos dados.

    A linguagem SQL o nome a sigla de Structured Query Language(Linguagem de Query Estruturada) uma linguagem para gerenciar um sistemade banco de dados relacional. No s uma linguagem, como tambm tem sidoto utilizada que pode ser considerada um padro. Consiste de uma srie dedeclaraes, adotadas de comum acordo, que nos permitem realizar diversasoperaes.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    6/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    6

    Parceiro Certificao

    Temos que usar a expresso comum acordo porque, embora uma SQL

    padro tenha sido criada pelo Instituto de Padres Nacionais Americanos(ANSI), todas as implementaes particulares da SQL personalizam a linguagem devrias formas. Tais implementaes complementam a linguagem padro com novostipos de declaraes ou expresses e muitas vezes adaptam as declaraespadronizadas s necessidades especficas.

    3. Viso Geral de um Banco de Dados Relacional

    Sistemas relacionais caracterizam um grande avano no armazenamento e nogerenciamento de grandes quantidades de dados. A principal razo para isso que,em um sistema relacional, pode-se reduzir bastante o armazenamento de dados

    redundantes. Na verdade, idealmente falando, em um sistema projetado segundoos princpios tericos da abordagem relacional, a redundncia no deve existir.Nenhum relacionamento entre dois itens de dados (uma pessoa possui umendereo, por exemplo) deve aparecer mais de uma vez em cada um banco dedados.

    Na prtica, os sistemas apenas se aproximam deste ideal, por vrias razes, epodemos dizer que normalmente contm alguns dados repetidos em vrios lugares.Mas mesmo em um sistema relacional que apenas se aproxime da situao ideal,minimizar a redundncia dos dados acarreta dois benefcios bsicos:

    primeiro lugar, os dados podem ser reorganizados e combinados de formamais facilmente em novos relacionamentos; no ficam presos aosrelacionamentos em que foram armazenados.

    segundo lugar, a atualizao torna-se muito mais fcil, pois poucos itensde dados tm que ser atualizados, o que reduz a incidncia de erros.

    Todos os dados de um sistema relacional so armazenados e exibidos em tabelas.Programas de planilhas e sistemas de banco de dados no relacionais tambmusam tabelas, portanto no uma caracterstica exclusiva dos sistemasrelacionais. Mas h algo que distingue a forma como os sistemas relacionais usam

    tabelas. Esta distino deriva-se da definio e da utilizao do banco de dadossegundo certos princpios tericos da abordagem relacional. Mais adiante iremosabordar tais princpios.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    7/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    7

    Parceiro Certificao

    3.1.Criando DATABASE (SQL Server Management Studio)

    Aqui descreve-se como criar um banco de dados usando o SQL ServerManagement Studio.

    Para criar um banco de dados

    1. No Pesquisador de Objetos, conecte-se a uma instncia do Mecanismo de

    Banco de Dados do SQL Server e expanda essa instncia.

    2.

    Clique com o boto direito do mouse em Bancos de Dados, depois cliqueem Novo Banco de Dados.

    3. Em Novo Banco de Dados, digite um nome de banco de dados.

    4. Para criar o banco de dados aceitando todos os valores padro, clique em

    OK; do contrrio, passe para as etapas opcionais a seguir.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    8/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    8

    Parceiro Certificao

    5. Para alterar o nome do proprietrio, clique em () para selecionar outro

    proprietrio.

    6. Para alterar os valores padro dos arquivos de log de dados primrios e de

    transao, na grade Arquivos de Banco de Dadosclique na clula

    apropriada e digite o novo valor.

    Dica:

    Para organizar de uma maneira lgica, coloque os seus arquivos de dados dentro da pasta doprotheus_data. Se preferir crie uma pasta, por exemplo: database_sql ou somente dentro da pasta

    data.(Vide figura acima)

    7. Para alterar o agrupamento do banco de dados, selecione a pgina Opes

    e depois marque um agrupamento na lista.

    8. Para alterar o modelo de recuperao, selecione a pgina Opese marque

    um modelo de recuperao na lista.

    9. Para alterar opes de banco de dados, selecione a pgina Opese depois

    modifique as opes de banco de dados.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    9/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    9

    Parceiro Certificao

    10.Para adicionar um novo grupo de arquivos, clique na pgina Grupos de

    Arquivos. Clique em Adicionare, em seguida, digite os valores para o

    grupo de arquivos.

    11.Para adicionar uma propriedade estendida ao banco de dados, selecione a

    pgina Propriedades Estendidas.

    a.

    Na coluna Nome, digite um nome para a propriedade estendida.b. Na coluna Valor, digite o texto da propriedade estendida. Por

    exemplo, uma ou mais instrues que descrevem o banco de dados.

    12.Para criar o banco de dados, clique em OK.

    Dica:

    select* fromsys.databases -- database existentesselect* fromsys.database_files -arquivos do database(mdf e log)select* fromsys.data_spaces - espaos de dadosselect* fromsys.filegroups - exibe o grupo de arquivos

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    10/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    10

    Parceiro Certificao

    3.2.Attach Database

    Supondo que deseje acoplar um determinado database externo, utilize-sedo seguinte comando.

    Exemplo:

    sp_attach_dbaula,"c:\rodrigosantos\ADVPL\attach\aula.mdf"go

    Dica:

    Geral: Esta dica vale tanto para o attach quanto para deattach

    1 - Abra uma conexo distinta no servidor

    2 - Aps o comando acima, d um refresh no seu database.

    3.3.Deattach Database

    Supondo que deseje acoplar um determinado database externo, utilize-sedo seguinte comando.

    Exemplo:

    sp_detach_db aulago

    Dica:

    Geral: Esta dica vale tanto para o attach quanto para deattach

    No poder estar com conexo aberta e tampouco estar dentro do database que se desejadar um deattach.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    11/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    11

    Parceiro Certificao

    3.4.Apagando um DATABASE

    Dica:

    TENHA SEMPRE UM BACKUP ATUALIZADO DO(S) SEU(S) DATABASE !!!

    Para excluir um database voc no poder estar dentro dele ou possuir qualquerligao a ele no momento.

    Sintaxe: DROP DATABASE

    Cuidado:

    TENHA CERTEZA que deseja REALMENTE exclui-lo.

    dropdatabasemy_advpl_db

    4. Modelo Relacional

    A arquitetura de um banco de dados relacional pode ser descrita de maneirainformal ou formal. Na descrio informal estamos preocupados com aspectosprticos da utilizao e usamos os termos tabela, linha e coluna. Na descrioformal estamos preocupados com a semntica formal do modelo e usamos termoscomo relao(tabela), tupla(linhas) e atributo(coluna).

    4.1.Tabelas (ou relaes, ou entidades)

    Todos os dados de um banco de dados relacional (BDR) so armazenados emtabelas. Uma tabela uma simples estrutura de linhas e colunas. Em uma tabela,cada linha contm um mesmo conjunto de colunas. Em um banco de dados podemexistir uma ou centenas de tabelas, sendo que o limite pode ser imposto tanto pelaferramenta de software utilizada, quanto pelos recursos de hardware disponveis no

    equipamento.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    12/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    12

    Parceiro Certificao

    Exemplo de Tabela:

    As tabelas associam-se entre si atravs de regras de relacionamentos, estasregras consistem em associar um ou vrios atributo de uma tabela com um ouvrios atributos de outra tabela.

    Exemplo de MER (Modelo de Entidade e Relacionamento):

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    13/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    13

    Parceiro Certificao

    Exemplo:

    A tabela de cliente SA1990 relaciona-se com a Pedido de VendaSC5990. Atravs deste relacionamento esta ltima tabela fornece alista de pedidos efetuados pelo cliente.

    Modelo terico usado para representar conceitualmente um BD, Idealizadopor Codd (1970). Baseado numa estrutura de dados simples chamada relao. omodelo mais amplamente usado, principalmente em apliaes convencionais de BD.

    4.2.Registros (ou tuplas)

    Cada linha formada por uma lista ordenada de colunas representa umregistro, ou tupla. Os registros no precisam conter informaes em todas ascolunas, podendo assumir valores nulos quando assim se fizer necessrio.

    Resumidamente, um registro uma instncia de uma tabela, ou entidade.

    Exemplo:

    O cliente CRISTIANE uma instncia (registro) da tabela deCliente(SA1990).

    4.3.Colunas (ou atributos)

    As colunas de uma tabela so tambm chamadas de Atributos. Ao conjuntode valores que um atributo pode assumir chama-se domnio. Por exemplo: em umcampo do tipo numrico, sero somente armazenados nmeros.

    Exemplo:

    Na tabela exemplo SA1990 temos as Colunas ou Atributos A1_COD, A1_NOME, A1_END,assim por diante. A funo das colunas verticais de uma tabela: conter informaes sobre osatributos das entidades a que se refere a tabela.

    Cada linha horizontal da tabela SA1990 contm as informaes sobre todos os atributosreferentes a um determinado Cliente. Portanto, enquanto a coluna A1_NOME exibe os nomes detodos os clientes da tabela e a coluna A1_END o sexo de todos os clientes e assim por diante emrelao s outras colunas, a linha em que aparece o nome CRISTIANE contm informaes apenasreferentes aos atributos do cliente chamado CRISTIANE.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    14/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    14

    Parceiro Certificao

    Mais adiante introduziremos um novo conceito relacional: o de chave

    primria.

    4.4.Entidades e Chave Primria

    No mundo real, voc teria inmeras razes para querer tratar cada CLIENTEindividualmente: se voc no consider-los separadamente, no poder designar ospedidos adequadamente, elaborar as faturas, notas, pedidos corretamente, e assimpor diante. Pelas mesmas razes, voc ter que ter os clientes tambmindividualizados no banco de dados. Em termos prticos, isto significa que as linhasda tabela devem ser diferenciadas. Se voc no puder diferenciar a linha deCRISTIANE de CARMEN LUCIA, o banco de dados no lhe dar condies para

    designar os pedidos, compras, etc adequadamente.

    Para que uma linha possa se distinguir das outras, tem que ser de algumaforma diferente, ou seja, tem que ter uma caracterstica que a identifique. Em umsistema relacional, esta caracterstica identificadora no pode ser identificadorexterno, como a posio que a linha ocupa em relao s outras; tem que ser umdos prprios componentes da linha. Como a linha s consiste de itens de dados,temos que tentar localizar dentre os dados da linha aquele que poder identific-launivocamente.

    Em outras palavras, temos que procurar por uma coluna (ou grupo de

    colunas) que apresente um contedo diferente em cada linha dados que soduplicados em duas linhas. Esta caracterstica ento servir para identificar a linhada mesma forma que usamos um nome para identificar uma pessoa.

    Volte tabela SA1990. Observe que nem todos os atributos, ou colunas, soigualmente suficientes para identificar as linhas. Por exemplo, no basta saberapenas o municipio de um cliente que voc queira identificar se este atributo compartilhado por metade dos seus clientes. Da mesma forma, se soubermos oestado(UF) de um cliente teremos um grupo mais reduzido mas no conseguiremoslocalizar um cliente em particular. O problema que as colunas municipio eestado(UF) contm valores duplicados. Quando duas linhas contm o mesmo valor

    no atributo, ento este atributo no pode ser usado para distinguir as linhas entresi.

    Concluindo, a nica coluna que pode servir de atributo identificador a colunaA1_NOME como teoricamente no contm valores duplicados, as informaes nelacontidas so por si s suficientes para distinguir a linha de um hspede na tabela.

    Descrevemos, na realidade, uma diferena entre os dois tipos de colunas. Oprimeiro tipo est baseado em um atributo que identifique univocamente ou definauma linha. O segundo tipo baseia-se em atributos descritivos que forneceminformaes, mas no so suficientes para identificar uma linha ou entidade.

    A coluna (ou grupo de colunas) baseada em um atributo identificador de umalinha chamada de Chave ou Chave Primria. A chave de uma tabela lhe permite

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    15/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    15

    Parceiro Certificao

    identificar as linhas individualmente, definindo tambm as entidades s quais a

    tabela se refere.

    Um banco de dados relacional todas as tabelas tem que ter uma chaveprimria que identifique cada linha.

    As tabelas relacionam-se umas as outras atravs de chaves. Uma chave umconjunto de um ou mais atributos que determinam a unicidade de cada registro.

    A unicidade dos registros, determinada por sua chave, tambm fundamentalpara a criao dos ndices.

    Temos dois tipos de chaves:

    4.4.1.Chave primria(PK - Primary Key):

    a chave que identifica cada registro dando-lhe unicidade. A chave primrianunca se repetir. No Protheus a chave nica sempre o R_E_C_N_O_, no qualfalaremos sobre este atributo adiante.

    Exemplo:

    Por exemplo, se um banco de dados tem como chave R_E_C_N_O_, sempre

    que acontecer uma insero de dados o sistema de gerenciamento de banco dedados ir fazer uma consulta para identificar se o registro j no se encontragravado na tabela. Neste caso, um novo registro no ser criado, resultando estaoperao apenas da alterao do registro existente.

    4.4.2.Chave Estrangeira: (FK - Foreign Key)

    a chave formada atravs de um relacionamento com a chave primria deoutra tabela. Define um relacionamento entre as tabelas e pode ocorrer repetidasvezes. Caso a chave primria seja composta na origem, a chave estrangeiratambm o ser.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    16/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    16

    Parceiro Certificao

    4.4.3.Chave Primria Composta

    A chave primria pode consistir de mais de uma coluna, as vezes nopodemos distinguir as linhas uma das outras usando apenas uma coluna, mais simmais de uma. O Protheus trabalha com o R_E_C_N_O_ como chave nica eprimria, no entanto, no se aplica este conceito.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    17/119

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    18/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    18

    Parceiro Certificao

    5.3.DCL (Data Control Language)

    DCL(Linguagem de Controle de Dados) o conjunto de comandos que fazemo cadastramento de usurios e determina seu nvel de privilgio para os objetos dobanco de dados. Os principais comandos so: GRANT, REVOKE.

    5.4.Transactions Control

    A SQL inclui comandos para especificao do incio e fim das transaes.Diversas implementaes permitem o trancamento explcito de dados para ocontrole de concorrncia. (COMMIT, ROLLBACK, SAVEPOINT).

    5.5.Tipos de Campos

    Abaixo segue os tipos de campos disponveis no SQL e suas variaes etamanho:

    5.5.1.Numrico Exato

    Inteiros

    bigint

    Inteiros entre -2^63 (-9223372036854775808) e 2^63-1(9223372036854775807).

    Utiliza 8 bytes.

    int

    Inteiros entre -2^31 (-2.147.483.648) e 2^31 - 1 (2.147.483.647).

    Utiliza 4 bytes.

    smallint

    Inteiros entre -2^15 (-32.768) e 2^15 - 1 (32.767).

    Utiliza 2 bytes.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    19/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    19

    Parceiro Certificao

    tinyint

    Inteiros entre 0 e 255.

    Utiliza 1 bytes.

    5.5.2.Bit

    bit

    Inteiro com valores 1 ou 0.

    Se a tabela tiver de 1 at 8 colunas do tipo bit sero guardas em 1 byte, de9 at 16 em 2 byte e assim por diante.

    5.5.3.Decimais

    decimal(p,e) / numeric(p,e)

    Numrico com preciso fixa entre -10^38 +1 e 10^38 1. Onde p apreciso e e a escala, ou seja, quantos dgitos da direita para esquerdasero decimais.

    A quantidade de bytes depende da Preciso.

    PrecisoTamanho

    (bytes)

    1 9 5

    10 19 9

    20 28 13

    29 38 17

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    20/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    20

    Parceiro Certificao

    5.5.4.Monetrio

    money

    Valor monetrio entre -2^63 (-922.337.203.685.477,5808) e 2^63 - 1(+922.337.203.685.477,5807), com 4 casas decimais.

    Utiliza 8 bytes.

    smallmoney

    Valor monetrio entre 214.748,3648 e +214.748,3647, com 4 casasdecimais.

    Utiliza 4 bytes.

    5.5.5.Numrico Aproximado

    float(n)

    Nmero com preciso flutuante entre 1,79E + 308 e 1,79E + 308.

    Onde n numero de bits que ser utilizado para guardar a mantissa donmero flutuante na notificao cientifica e assim indica a preciso e otamanho.

    nPreciso Tamanho (bytes)

    1 24 7 dgitos 4

    24 53 15 dgitos 8

    real

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    21/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    21

    Parceiro Certificao

    Nmero com preciso flutuante entre 3,40E + 38 e 3,40E + 38. sinnimo

    do float(24)

    5.5.6.Data e Hora

    datetime

    Data e Hora entre 1 de Janeiro de 1753 e 31 de Dezembro de 9999, compreciso de 3.33 milissegundos.

    Utiliza 8 bytes, os primeiros 4 bytes para guardar um numero inteiro de diasantes ou depois da data base 1 de Janeiro 1900 e os outros 4 bytesrepresenta o tempo no dia indicando quantos milissegundos depois da meia-noite.

    smalldatetime

    Data e Hora entre 1 de Janeiro de 1900 e 6 de Junho de 2079, com precisode 1 minuto.

    Utiliza 4 bytes, os primeiros 2 bytes para guardar um numero inteiro de diasdepois da data base 1 de Janeiro 1900 e os outros 2 bytes representa otempo no dia indicando quantos segundos depois da meia-noite.

    5.5.7.Seqncia de caracteres

    char(n) / nchar(n)

    Tamanho fixo de caracteres com o mximo de 8000 caracteres ou 4000 paraUnicode (nchar).

    O tamanho do campo char de 1 byte para cada n e nchar 2 bytes para cada n.

    varchar(n) / nvarchar(n)

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    22/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    22

    Parceiro Certificao

    Tamanho varivel de caracteres com o mximo de 8000 caracteres ou 4000

    para Unicode (nvarchar).

    O tamanho do campo varchar de 1 byte para cada n e nvarchar 2 bytespara cada n. Porm o tamanho varia, conforme o tamanho do dadoarmazenado.

    text / ntext

    Tamanho varivel de caracteres com o mximo de 2^31 - 1(2.147.483.647) caracteres ou 2^30 - 1 (1,073,741,823) para

    Unicode(ntext).O tamanho pode ser de at 2.147.483.647 bytes depende dos dados armazenado.

    5.5.8.Seqncia Binria

    binary

    Tamanho fixo com o mximo de 8000 bytes.

    varbinary

    Tamanho varivel com o mximo de 8000 bytes.

    image

    Tamanho varivel de dados binrios de at 2^31 - 1 (2.147.483.647) bytes.

    5.5.9.Outros tipos de dados

    cursorReferencia um cursor.

    sql_variantUm tipo de dados que armazena valores de vrios tipos suportados peloServidor SQL, menos text, ntext, timestamp, e sql_variant. Tamanho de at

    8016 bytes.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    23/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    23

    Parceiro Certificao

    table

    um tipo de dado especial que guarda uma tabela em memria para umprocesso posterior.

    timestamp um tipo de dados automaticamente gerados que mostra nmeros binriosque so garantidos no terem iguais dentro de um banco de dados. tipicamente usado como um mecanismo para estampar verso em linhas deuma tabela.

    Utiliza 8 bytes.

    uniqueidentifier

    um tipo de dado que armazena valores binrios de 16 byte que operamcomo identificadores nicos globais (GUIDs). UM GUID um nmero binriosem igual nenhum outro computador no mundo gerar uma duplicatadaquele valor de GUID. O uso principal para um GUID para nomear umidentificador nico dentro de uma rede onde existem vrios computadores.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    24/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    24

    Parceiro Certificao

    5.6.Criando uma Tabela

    Usamos a declarao CREATE TABLEpara criar uma tabela.

    CREATE TABLE[ database_name.[owner].|owner.] table_name( { [ column_definition

    | column_name AS computed_column_expression ][ table_constraint ] }

    )

    column_definition

    column_name data_type [[DEFAULT Constant_expression]|[IDENTITY[(seed,increment)]]

    ][ROWGUIDCOL][column_constraint][...n]

    column_constraint

    CONSTRAINT constraint_name{ [NULL|NOT NULL]

    | [{PRIMARY KEY|UNIQUE}[CLUSTERED|NONCLUSTERED]]| [[FOREIGN KEY] REFERENCES ref_table[(ref_column)]

    [ON DELETE{CASCADE|NO ACTION}][ON UPDATE{CASCADE|NO ACTION}]| CHECK( logical_expression )

    }

    table_constraint

    CONSTRAINT constraint_name{ [{PRIMARY KEY|UNIQUE}[CLUSTERED|NONCLUSTERED]

    {(column[ASC|DESC][ ,...n ] )}]|FOREIGN KEY[(column[,...n])]REFERENCES ref_table[(ref_column[,...n])][ON DELETE {CASCADE|NO ACTION}][ON UPDATE {CASCADE|NO ACTION}]|CHECK ( search_conditions )

    }Argumentos

    database_name

    Nome do Database que ser criada a tabela, se for omitido esse parmetroser criado no Database corrente.

    Owner

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    25/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    25

    Parceiro Certificao

    o nome do usurio que ser dono da tabela, se omitido o prprio dbo ser

    o dono.

    table_name

    o nome da nova tabela. O nome da tabela poder ter 128 caracteres,exceto tabelas temporrias, aquelas que tem o sinal # no prefixo do nome, queaceitam no mximo 116 caracteres.

    column_name

    o nome da coluna na tabela. Devem ser nicos por tabela.

    computed_column_expression

    a expresso que define o valor de uma coluna calculada. A colunacalculada virtual, no gravada na base de dados. calculada usando outrascolunas da mesma tabela, no so permitidas subquerys.

    data_type

    Especifica o tipo de dado da coluna.

    DEFAULT

    Especifica o valor padro da coluna quando a mesma no estiver sendoreferenciada em um INSERT.

    constant_expression

    E uma constante, null ou funo de sistema que ser usado como valorDEFAULT.

    IDENTITY

    Indica que a nova coluna uma coluna identity. Quando uma nova linha adicionada tabela, o SGBD prov um nico e incremental valor para a coluna.Somente uma coluna identity pode ser criada por tabela.

    seed

    o primeiro valor usado ao carregar a tabela.

    increment

    o valor que ser usado para incrementar a coluna identity.

    ROWGUIDCOL

    Indica que a coluna ser um identificador nico global. Somente uma colunaROWGUIDCOL poder ser criada por tabela. A propriedade ROWGUIDCOL no

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    26/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    26

    Parceiro Certificao

    obriga que os valores sejam nicos na coluna. Tambm no gera automaticamente

    valores nas novas linhas inseridas na tabela. Para gerar valores nicos utilize afuno NEWID no INSERT ou coloque a funo no DEFAULT da coluna.

    collation_name

    Especifica a collation da coluna. O collation_name aplicvel somente emcolunas tipo char, varchar, text, nchar, nvarchar e ntext. Se no for especificadoser usado a collation padro do database.

    CONSTRAINT

    uma palavra chave utilizada para indicar o comeo de uma definio dePRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY ou CHECK. Constraints sopropriedades especiais para garantir a integridade dos dados e elas podem criarndices nas tabelas.

    constraint_name

    o nome da constraint. Esse nome so nicos dentro do database.

    NULL | NOT NULL

    Esta palavra chave indica se sero aceitos valore nulos ou no nas colunas.

    NULL no estritamente uma constraint, porm pode ser especificado da mesmamaneira que NOT NULL.

    PRIMARY KEY

    uma constraint que indica que a coluna ou colunas so identificadoresnicos das linhas na tabela. Somente uma PRIMARY KEY pode ser criada por tabela.Ela cria automaticamente um ndice com os campos da PRIMARY KEY

    UNIQUE

    uma constraint que garante que a coluna ou colunas ter um valor nicona tabela impedindo duplicidade. A tabela poder ter vrias constraints UNIQUE.Ela cria automaticamente um ndice com os campos da UNIQUE

    CLUSTERED | NONCLUSTERED

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    27/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    27

    Parceiro Certificao

    So palavras chaves que indica se os ndices da PRIMARY KEY ou UNIQUE

    sero criados com clustered ou nonclustered. O padro da PRIMARY KEY CLUSTERED e da UNIQUE NONCLUSTERED. S pode ser criado um nico ndiceCLUSTERED na tabela.

    FOREIGN KEY...REFERENCES

    a constraint que garante a integridade dos dados de uma coluna oucolunas referenciando uma outra tabela. A constraints FOREIGN KEY requer que osvalores existam nas colunas das tabela referenciada. A constraints FOREIGN KEYsomente pode referenciar colunas que so constraints PRIMARY KEY e UNIQUE oucolunas referenciadas em um ndice nico.

    ref_table

    o nome da tabela referenciada na constraint FOREIGN KEY.

    (ref_column[,...n])

    a coluna ou lista de colunas da tabela referenciada pela constraintFOREIGN KEY.

    ON DELETE {CASCADE | NO ACTION}

    Especifica a ao que ser tomada para a linha da tabela criada, se estalinha referencia de um relacionamento onde a linha referenciada na tabela pai forapagada. O padro NO ACTION.

    Se for especificado CASCADE, quando for excluda uma linha na tabela pai,as linhas das tabelas que fizerem referencia a est sero excludas tambm. Se forespecificado NO ACTION ento o SGBD devolver um erro para a aplicao queenviou o comando e desfazer a operao.

    ON UPDATE {CASCADE | NO ACTION}

    Especifica a ao que ser tomada para a linha da tabela criada, se esta

    linha referencia de um relacionamento onde a linha referenciada na tabela pai foralterada. O padro NO ACTION.

    Se for especificado CASCADE, quando for alterada uma linha na tabela pai,as linhas das tabelas que fizerem referencia a est sero alteradas tambm. Se forespecificado NO ACTION ento o SGBD devolver um erro para a aplicao queenviou o comando e desfazer a operao.

    CHECK

    a constraint que garante a integridade de domnio, limitando os valores

    possveis que podem ser includos ou alterados nas colunas.logical_expression

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    28/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    28

    Parceiro Certificao

    uma expresso lgica que retorna Verdadeiro ou Falso (TRUE / FALSE).

    column

    a coluna ou lista de colunas, em parnteses, usadas na definio daconstraint.

    [ASC | DESC]

    Especifica a ordem que as colunas da constraint sero ordenadas, o padro ASC.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    29/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    29

    Parceiro Certificao

    Exemplo:

    -- Setando database corretouseaulago

    -- Criando tabela empregadoscreatetabletb_empregados(id_empregado intIDENTITY(1,1)NOTNULL,nome varchar(50) notnullCONSTRAINT[PK__tb_empregados] PRIMARYKEYCLUSTERED(

    [id_empregado] ASC)WITH(IGNORE_DUP_KEY =OFF)ON[PRIMARY])ON[PRIMARY]

    go

    -- Criando tabela de pagamentoscreatetabletb_pagamentos(id_pagamento intnotnull,id_empregado intnotnull,valor decimal(10,2)default10)go

    -- Criando tabela de Descontoscreatetabletb_descontos(id_desconto intnotnull,id_empregado intnotnull,valor decimal(10,2) notnull)

    5.7.Clausula INTO

    Existe uma outra forma de criar tabelas, atravs da clausula INTO no SELECT.Com esse comando podem ser criadas tabelas permanentes ou temporrias #com o resultado de uma query. A Sintaxe a seguinte:

    INTO table_name

    Nome da nova tabela. Se colocar o sinal #, antes do nome indica que atabela temporria. Tabelas temporrias so como as tabelas permanentes e temas mesmas caractersticas, o que as difere o fato de que a tabela temporria elas visvel dentro da mesma instancia e quando a instancia fechada, ela excluda.

    Exemplo:

    -- Setando database corretouseaulago

    -- Inserindo na Temporriaselect*INTO#minha_tmp fromSA1990

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    30/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    30

    Parceiro Certificao

    go

    -- Verificando a inseroselect*from#minha_tmpgo

    5.8.Excluso de Tabelas

    Para excluir uma tabela utilizado o comando DROP TABLE. Abaixo a sintaxedo comando

    DROP TABLE

    CUIDADO !!!

    TENHA CERTEZA que deseja REALMENTE exclui-la.

    droptable#minha_tmp

    5.9.ALTER TABLE

    Modifica uma definio de tabela para alterar, adicionar ou excluir colunas econstraints ou habilitar e desabilitar constraints e triggers.

    Sintaxe

    ALTER TABLE table{ [ ALTER COLUMN column_name {new_data_type[(precision[,scale])]

    [NULL|NOT NULL]|{ADD|DROP} ROWGUIDCOL }]

    | ADD {[column_definition]|column_name AS computed_column_expression}[ ,...n ]

    | [WITH CHECK|WITH NOCHECK] ADD {table_constraint}[ ,...n ]

    | DROP {[CONSTRAINT] constraint_name | COLUMN column}[ ,...n ]

    | {CHECK|NOCHECK} CONSTRAINT {ALL|constraint_name [ ,...n ]}| {ENABLE|DISABLE} TRIGGER {ALL|trigger_name [ ,...n ]}

    }Argumentos

    Os argumento de definies de campos de constraints do comando ALTERTABLE so semelhantes aos do CREATE TABLE.

    Abaixo seguem os argumentos especficos do ALTER TABLE.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    31/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    31

    Parceiro Certificao

    ALTER COLUMN

    Especifica que uma determinada coluna ser alterada.As seguintes colunas no podem ser alteradas.Coluna do tipo text, image, ntext ou timestamp.A coluna ROWGUIDCOL da tabela.Uma coluna calculada ou usada em uma calculada.Usada em um ndice, a menos que seja uma coluna varchar, nvarchar ouvarbinary onde o tipo no ser alterado, e o novo tamanho seja igual oumaior que o antigo.Usada em uma constraint PRIMARY KEY ou [FOREIGN KEY] REFERENCES.Usada em uma constraint CHECK ou UNIQUE, exceto quando alterado

    somente o tamanho do campo que tenha tamanho varivel.Associado a um DEFAULT, exceto quando alterado tamanho, preciso eescada da coluna se o tipo da coluna no for alterado.

    Algumas alteraes de tipo de dados podem causar alterao no prpriodado armazenado nessa coluna

    column_name

    Nome da coluna que ser adicionada, alterada ou excluda da tabela.

    new_data_type

    o novo tipo de dado da tabela.O critrio para o novo tipo de dado so:

    O tipo anterior de dado deve ser conversvel para o novo tipoimplicitamente.O novo tipo no pode ser timestamp.E a coluna alterada for do tipo identity, o novo tipo deve suportar apropriedade identity.

    The current setting for SET ARITHABORT is ignored. ALTER TABLE operates

    as if the ARITHABORT option is ON.

    [{ADD|DROP} ROWGUIDCOL]

    Especifica que a propriedade ROWGUIDCOL ser adicionada ou excluida dacoluna especificada.

    ADDEspecifica que ser adicionada uma ou mais colunas na tabela

    WITH CHECK | WITH NOCHECK

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    32/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    32

    Parceiro Certificao

    Especifica se os dados sero validados com a nova ou re-habilitada

    constraint CHECK ou FOREIGN KEY.

    WITH CHECK e WITH NOCHECK no pode ser usado para constraintsPRIMARY KEY e UNIQUE.

    DROP { [CONSTRAINT] constraint_name | COLUMN column_name }

    Especifica que uma constraint ou coluna ser removida da tabela. Podem serlistadas multiplas colunas e constraints. Colunas utilizadas em Indices,constraints do tipo CHECK, FOREIGN KEY, UNIQUE ou PRIMARY KEY e

    assiociadas a uma definio de DEFAULT no podero ser removidas.

    { CHECK | NOCHECK} CONSTRAINT

    Especifica que uma constraint ser habilitada ou desabilitada. Esta opos pode ser usada com constraints tipo FOREIGN KEY e CHECK.

    ALLEspecifica que todas as constraints sero habilitadas ou desabitadas.

    {ENABLE | DISABLE} TRIGGEREspecifica que a TRIGGER referenciada ser habilitada ou desabilitada.

    ALLEspecifica que todas as Triggers sero habilitadas ou desabitadas.

    trigger_nameEspecifica o nome da Trigger que ser habilitada ou desabilitada.

    Cuidado:

    TENHA CERTEZA que deseja REALMENTE Alterar.

    Exemplo:

    -- Setando database corretouseaulago

    -- verifica se tabela existe no databaseIFOBJECT_ID('dbo.tb_teste','U')ISNOTNULL

    DROPTABLEdbo.tb_teste;GO

    -- Cria uma tabela com duas colunas e um indice unico.CREATETABLEdbo.tb_teste (col_a varchar(5)UNIQUENOTNULL,col_b decimal

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    33/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    33

    Parceiro Certificao

    (4,2));GO

    INSERTINTOdbo.tb_teste VALUES('Test',99.99);GO

    --Verifica os dados correntesSELECT*FROMdbo.tb_teste

    -- Verifica o tamanho da coluna atualSELECTname,TYPE_NAME(system_type_id),max_length,precision,scaleFROMsys.columnsWHEREobject_id=OBJECT_ID(N'dbo.tb_teste');GO

    -- Aumenta o tamanho da coluna aALTERTABLEdbo.tb_teste ALTERCOLUMNcol_a varchar(25);GO

    -- Aumenta o scale and precision of the decimal column.ALTERTABLEdbo.tb_teste ALTERCOLUMNcol_b decimal(10,4);GO

    -- Insert a new row.INSERTINTOdbo.tb_teste VALUES('AfterReSize',99999.9999);GO

    -- Verifica os dados atualizadosSELECT*FROMdbo.tb_teste

    ALTERTABLEdbo.tb_teste ADDcol_c varchar(20)

    -- Verifica o tamanho das colunas atuaisSELECTname,TYPE_NAME(system_type_id),max_length,precision,scale

    FROMsys.columnsWHEREobject_id=OBJECT_ID(N'dbo.tb_teste');

    -- Insert a new row.INSERTINTOdbo.tb_teste VALUES('AfterReSize1',99999.9999,'profrodrigo');GO

    -- Verifica os dados atualizadosSELECT*FROMdbo.tb_teste

    -- LimpandoIFOBJECT_ID('dbo.tb_teste','U')ISNOTNULL

    DROPTABLEdbo.tb_teste;GO

    5.10. Restrio de Integridade

    As restries de integridade servem para garantir as regras inerentes aosistema que est sendo implementado, prevenindo a entrada de informaesinvlidas pelos usurios desse sistema. Para isso, o Sistema de Banco de Dadosdeve possibilitar a definio de regras de integridade a fim de evitar ainconsistncia dos dados que nele sero armazenados. Essas regras so chamadasde CONSTRAINT.

    NOT NULL

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    34/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    34

    Parceiro Certificao

    Essa constraint evita que valores nulos sejam inseridos nas tabelas.

    CHECK

    Com esta clausula possvel limitar a entrada de dados a um domnio comoexemplo podemos citar o campo sexo de uma tabela, esta campo s aceita M(Masculino) ou F (Feminino), portanto criando uma constraint CHECK possvellimitar os valores para esses dois.

    UNIQUE

    A constrait UNIQUE obrigam a singularidade dos valores em uma lista decolunas. No permitida duas linhas de uma tabela terem os mesmo valores

    no nulos com uma constraint UNIQUE.

    PRIMARY KEY

    Uma PRIMARY KEY identifica unicamente uma linhas na tabela atraves deuma ou mais colunas. Colunas utilizadas na PRIMARY KEY no aceita valoresnulos.

    FOREIGN KEY

    Esta constraint utilizada para criar relacionamento entre tabelas, como porexemplo Tabela de Cabealho de Pedidos e Itens de pedidos, com essaconstraint no possvel incluir um item de pedido se ter o cabealho de

    pedido.

    DEFAULT

    Default no uma constraint, porm tambm utilizado para garantirIntegridade. Valor Default utilizado quando inserido uma linha na tabela e ocampo no mensionado na tabela e tambm como inicializador padro de umcampo.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    35/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    35

    Parceiro Certificao

    6. INDICES

    ndices so utilizados pelo SGBD para otimizar a busca de dados na tabela.Quando um campo indexado e utilizado em uma clausula WHERE, o SGBDconsegue buscar mais rpido os dados, pois no precisa varrer a tabela e sim ondice e o ndice alem de estar ordenado, ele menor em volume de dados.

    Criao de ndices

    CREATE INDEX

    A sintaxe a seguinte:

    CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED] INDEXindex_nameON {table|view} (column[ASC|DESC][ ,...n ])

    Argumentos

    UNIQUE

    Criar um ndice do tipo nico, ou seja, no permite que os dados das colunasdo indice sejam iguais em mais de uma linha da tabela.

    Se tentar criar um ndice nico em uma tabela que tenha dados duplicadosnas colunas, o SGBD ir gerar um erro na aplicao e ser cancelado. Doisvalores nulos so considerados duplicidade para ndice nico.

    Quando a clausula IGNORE_DUP_KEY utilizada somente as linhas queviolam o ndice nico sero desprezada nos casos de incluso de dados natabela.

    CLUSTERED

    Cria um objeto onde a ordem fsica das linhas a mesma da ordem

    indexada das linhas, e o ultimo nvel do ndice contem os dados atuais daslinhas.

    Uma view com ndice clustered chamada de Indexed view. Antes de criarqualquer ndice em uma view devesse criar um ndice nico Clustered.

    NONCLUSTERED

    Cria um objeto que especifica a ordem lgica de uma tabela. Com um ndicenonclustered, a ordem fsica das linhas independente da ordem indexada.O ultimo nvel de um ndice nonclustered contem as linhas do ndice. Cadalinha de ndice contm um valor de chave e um ou mais endereo de linhasapontando para um valor. Se a tabela no contm um ndice clustered, o

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    36/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    36

    Parceiro Certificao

    endereo da linha o endereo da linha no disco. Se a tabela tem um ndice

    clustered, o endereo da linha a chave do ndice clustered para a linha.

    Cada tabela pode ter muitos at 249 ndice nonclustered (independente damaneira que so criados: implicitamente com a constraint PRIMARY KEY eUNIQUE ou explicitamente com CREATE INDEX). Cada ndice pode proveracesso a um dado em diferentes ordens.

    index_name

    o nome do ndice, o nome deve ser nico para cada tabela, porm dentro

    do database pode ter ndices com o mesmo nome para tabelas diferentes.table a tabela onde esto as colunas que deseja indexar.

    view o nome da view que se deseja indexar

    column a coluna ou colunas para as quais o ndice se aplica. Especifique duas oumais colunas para criar um ndice composto com valores combinados dascolunas. Liste as colunas entre parntese na ordem de prioridade de

    ordenao.

    Colunas do tipo ntext, text ou image no podem ser especificadas emum ndice.

    ndices compostos so usados quando duas ou mais colunas so sempreprocuradas em conjunto ou se muitas querys referenciam somente ascolunas do ndice. At 16 colunas podem ser combinadas em um nicondice composto. O tamanho mximo dos dados combinados das colunasque compe o ndices de 900 bytes.

    [ASC | DESC]

    Determina se a ordem da coluna em particular ser ascendente oudescendente. O Padro ASC.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    37/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    37

    Parceiro Certificao

    6.1.Index_option

    Especifica um conjunto de opes que podem ser aplicadas a um ndice quefaz parte de uma definio de restrio criada comALTER TABLE.

    Sintaxe

    {

    PAD_INDEX = { ON | OFF }| FILLFACTOR = fillfactor| IGNORE_DUP_KEY = { ON | OFF }| STATISTICS_NORECOMPUTE = { ON | OFF }| ALLOW_ROW_LOCKS = { ON | OFF }| ALLOW_PAGE_LOCKS = { ON | OFF }| SORT_IN_TEMPDB = { ON | OFF }| ONLINE = { ON | OFF }| MAXDOP = max_degree_of_parallelism| DATA_COMPRESSION = { NONE |ROW | PAGE}

    [ ON PARTITIONS ( { | }[ , ...n ] ) ]

    }

    ::= TO

    ::={

    SORT_IN_TEMPDB = { ON | OFF }| MAXDOP = max_degree_of_parallelism| DATA_COMPRESSION = {NONE | ROW | PAGE } }

    }Argumentos

    PAD_INDEX ={ ON | OFF }

    Especifica o preenchimento do ndice. O padro OFF.

    ON

    A porcentagem de espao livre especificada por FILLFACTOR aplicada s pginas de nvel intermedirio do ndice.

    OFF ou fillfactorno est especificado

    As pginas de nvel de intermedirio so preenchidas at prximo de

    sua capacidade, deixando espao suficiente para pelo menos uma linha do

    http://msdn.microsoft.com/pt-br/library/ms190273.aspxhttp://msdn.microsoft.com/pt-br/library/ms190273.aspxhttp://msdn.microsoft.com/pt-br/library/ms190273.aspxhttp://msdn.microsoft.com/pt-br/library/ms190273.aspx
  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    38/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    38

    Parceiro Certificao

    tamanho mximo que o ndice pode ter, dado o conjunto de chaves em

    pginas intermedirias.

    FILLFACTOR =fillfactor

    Especifica uma porcentagem que indica quanto Mecanismo de Bancode Dados deve preencher o nvel folha de cada pgina de ndice durante acriao ou alterao do ndice. O valor especificado deve ser um valor inteiroentre 1 e 100. O padro 0.

    IGNORE_DUP_KEY ={ ON | OFF }

    Especifica a resposta de erro quando uma operao de inserotentar inserir valores de chave duplicados em um ndice exclusivo. A opoIGNORE_DUP_KEY aplica-se apenas a operaes de insero depois que ondice criado ou recriado. A opo no tem nenhum efeito ao executarCREATE INDEX,ALTER INDEXouUPDATE.O padro OFF.

    ON

    Uma mensagem de aviso ocorrer quando valores de chave duplicadaforem inseridos em um ndice exclusivo. Haver falha somente nas linhas

    que violarem a restrio de exclusividade.

    OFF

    Ocorrer uma mensagem de erro quando os valores da chaveduplicada forem inseridos em um ndice exclusivo. Toda a operao INSERTser revertida.

    IGNORE_DUP_KEY no pode ser definido como ON para ndicescriados em uma exibio, ndices no exclusivos, ndices XML, ndicesespaciais e ndices filtrados.

    Para exibir IGNORE_DUP_KEY, usesys.indexes.

    Na sintaxe compatvel com verses anteriores, WITHIGNORE_DUP_KEY equivalente a WITH IGNORE_DUP_KEY = ON.

    STATISTICS_NORECOMPUTE ={ ON | OFF }

    Especifica se as estatsticas so recalculadas. O padro OFF.

    ON

    Estatsticas desatualizadas no so recalculadas automaticamente.

    http://msdn.microsoft.com/pt-br/library/ms188783.aspxhttp://msdn.microsoft.com/pt-br/library/ms188783.aspxhttp://msdn.microsoft.com/pt-br/library/ms188388.aspxhttp://msdn.microsoft.com/pt-br/library/ms188388.aspxhttp://msdn.microsoft.com/pt-br/library/ms188388.aspxhttp://msdn.microsoft.com/pt-br/library/ms177523.aspxhttp://msdn.microsoft.com/pt-br/library/ms177523.aspxhttp://msdn.microsoft.com/pt-br/library/ms177523.aspxhttp://msdn.microsoft.com/pt-br/library/ms173760.aspxhttp://msdn.microsoft.com/pt-br/library/ms173760.aspxhttp://msdn.microsoft.com/pt-br/library/ms173760.aspxhttp://msdn.microsoft.com/pt-br/library/ms173760.aspxhttp://msdn.microsoft.com/pt-br/library/ms177523.aspxhttp://msdn.microsoft.com/pt-br/library/ms188388.aspxhttp://msdn.microsoft.com/pt-br/library/ms188783.aspx
  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    39/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    39

    Parceiro Certificao

    OFF

    A atualizao automtica de estatsticas est habilitada.

    ALLOW_ROW_LOCKS ={ ON | OFF }

    Especifica se bloqueios de linha so permitidos. O padro ON.

    ON

    Bloqueios de linha so permitidos ao acessar o ndice. O Mecanismode Banco de Dados determina quando os bloqueios de linha so usados.

    OFF

    Bloqueios de linha no so usados.

    ALLOW_PAGE_LOCKS ={ ON | OFF }

    Especifica se bloqueios de pgina so permitidos. O padro ON.

    ON

    Bloqueios de pgina so permitidos ao acessar o ndice. O Mecanismode Banco de Dados determina quando os bloqueios de pgina so usados.

    OFF

    Bloqueios de pgina no so usados.

    SORT_IN_TEMPDB ={ ON | OFF }

    Especifica se os resultados de classificao devem ser armazenadosem tempdb. O padro OFF.

    ON

    Os resultados de classificao intermedirios usados para criar ondice so armazenados em tempdb. Isso pode reduzir o tempo necessriopara criar um ndice se tempdbestiver em um conjunto de discos diferentedo banco de dados de usurio. Entretanto, isso aumenta a quantidade deespao em disco usado durante a criao do ndice.

    OFF

    Os resultados de classificao intermedirios so armazenados nomesmo banco de dados que o ndice.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    40/119

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    41/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    41

    Parceiro Certificao

    table | view

    o nome da tabela ou da Indexed View que contem o ndice que se querexcluir.

    index o nome do indice que deseja excluir.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    42/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    42

    Parceiro Certificao

    7. CONSULTA EM SQL

    Para recuperar dados armazenados em um banco de dados, so utilizadas querys.Uma query um comando, especificamente SELECT, que contem os campos, astabelas e as condies de busca onde, por meio dessa, o SGBD devolva as linhas. possvel agrupar dados, sumarizar os dados retornados em uma query.

    7.1.SELECT

    O SELECT o comando utilizado para recuperar os dados armazenados nobanco de dados. Sua sintaxe extensa e por isso dividida em blocos.

    7.1.1.Clausula SELECT

    Especifica as colunas a ser devolvidas pela query.

    Sintaxe

    SELECT [ ALL | DISTINCT ][ TOP n[ PERCENT ] [ WITH TIES ] ]< select_list >

    select_list

    { * | { table_name| view_name| table_alias }.*

    | { column_name| expression | IDENTITYCOL | ROWGUIDCOL }[ [ AS ] column_alias ]

    | column_alias = expression }[ ,...n ]

    Argumentos

    ALLEspecifica que as linhas duplicadas podem aparecer no resultado da

    query.

    Dica:

    ALL um argumento default, portanto no precisa ser declarado.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    43/119

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    44/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    44

    Parceiro Certificao

    column_name

    o nome da coluna que deseja retornar. As colunas devem ser especificadascom as tabela ou views que as contm, porque se existir em duas tabelascolunas com o mesmo nome causar erro na query, para isso devera sercolocada o nome da tabela ou seu alias na antes do nome da coluna (tabela.coluna ).

    expression um nome de coluna, constante, funo, qualquer combinao de coluna,constantes, e funes conectadas por um operador(s), ou uma subquery.

    IDENTITYCOLRetorna a coluna identity da tabela especificada na clausula FROM.

    ROWGUIDCOLRetorna a coluna com identificador global nico da tabela especificada naclausula FROM.

    column_alias

    um nome alternativo para substituir o nome da coluna no resultado daquery.

    Podem ser usados column_alias na clusula ORDER BY. Porm, no pode serusado em um WHERE, GROUP BY, ou HAVING.

    7.1.2.Clusula INTO

    Cria uma nova tabela e inclui as linhas resultantes da query.

    Sintaxe

    [INTO new_table]

    Exemplo:

    useaulagoSelect*INTO#my_table_tmp FROMSA1990 --Inserindo na Tabela #my_table_tmpgoSelect*from#my_table_tmpgo

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    45/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    45

    Parceiro Certificao

    Argumentos

    new_table

    Especifica o nome de uma nova tabela, baseado nas colunas informadas naquery. O formato da nova tabela determinado avaliando as expresses nalista do SELECT.

    As colunas so criadas na ordem especificada no SELECT. Cada coluna nanova tabela tem mesmo nome, e contedo conforme o resultado da query,as colunas resultantes de uma expresso computada no sero campos

    calculados e sim contero o resultado da formula.7.1.3.Clusula FROM

    Especifica a(s) tabela(s) de qual sero retornadas as linhas. A clusula FROM obrigatria a menos que o SELECT contenha somente constantes, variveis, eexpresses aritmticas. (nenhuma coluna).

    Sintaxe

    [ FROM { < table_source > } [ ,...n] ]

    table_source

    table_name [[AS] table_alias] [WITH([,...n ])]| view_name [[AS] table_alias]| rowset_function [[AS] table_alias]| OPENXML| derived_table [AS] table_alias [(column_alias[,...n ])]|

    joined_table

    ON | CROSS JOIN |

    join_type

    [INNER|{{LEFT|RIGHT|FULL}[OUTER]}] JOIN

    Argumentos

    Especifica tabelas, views, tabelas derivadas(subqueries), e unir tabelas para

    a declarao SELECT.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    46/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    46

    Parceiro Certificao

    table_name [ [ AS ] table_alias ]

    Especifica o nome de uma tabela e um pseudnimo (alias) opcional.

    view_name [ [ AS ] table_alias ]

    Especifica o nome de uma view, e um pseudnimo opcional.

    rowset_function [ [ AS ] table_alias ]

    o nome de uma funo que retorna tabela e um pseudnimo opcional.

    WITH ( < table_hint > [ ,...n ] )Especifica um ou mais argumentos de tabela.

    derived_table [ [ AS ] table_alias ]

    uma subquery que retorna suas linhas como se fosse um tabela atravs deoutro SELECT.

    column_alias um pseudnimo opcional para substituir o nome das colunas da subquery.

    o resultado de da juno de duas ou mais tabelas

    Especifica o tipo de operao de unio.

    INNER

    Especifica que sero retornadas todas as linhas das tabelas utilizadas najuno, descartando as linhas que no correspondem a condio da clausulaON.

    Essa clausula padro se no for especificada nenhuma.

    LEFT [ OUTER ]

    Especifica que todas as linhas da tabela da esquerda sero retornadas esomente as linhas da tabela da direita que satisfazem a condio da clausulaON sero retornadas, as linhas que no existirem na tabela da direita seroretornada com o valor NULL em seus campos.

    Exemplo:

    useaulagoSelectA1.A1_COD,A1.A1_LOJA,A1.A1_NREDUZ,C5.C5_FILIAL,C5.C5_NUMfromSC5990 C5LeftJoinSA1990 A1 ONA1.A1_COD =C5.C5_CLIENTE-- Retornara somente os itens que possuirem Pedidos de Venda(SC5)

    Retorno:

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    47/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    47

    Parceiro Certificao

    RIGHT

    Especifica que todas as linhas da tabela da direita sero retornadas esomente as linhas da tabela da esquerda que satisfazem a condio daclausula ON sero retornadas, as linhas que no existirem na tabela daesquerda sero retornada com o valor NULL em seus campos.

    Exemplo:

    useaulagoSelectA1.A1_COD,A1.A1_LOJA,A1.A1_NREDUZ,C5.C5_FILIAL,C5.C5_NUMfromSC5990 C5RightJoinSA1990 A1 ONA1.A1_COD =C5.C5_CLIENTE-- Neste caso, retornara TODOS os CLIENTES indepente de possuirem Pedidos deVenda(SC5)

    Retorno:

    FULL [ OUTER ]

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    48/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    48

    Parceiro Certificao

    Especifica que todas as linhas de ambas tabelas sero retornadasemparelhadas conforme a condio do ON e as que no satisfazem essacondio sero retornadas emparelhadas a valores NULL

    JOIN (INNER JOIN)

    Indica que devera ser se juntadas s tabelas ou views especificadas.

    Exemplo:

    useaula

    goSelectA1.A1_COD,A1.A1_LOJA,A1.A1_NREDUZ,C5.C5_FILIAL,C5.C5_NUMfromSC5990 C5JoinSA1990 A1 ONA1.A1_COD =C5.C5_CLIENTE-- Retornara somente os itens que possuirem Pedidos de Venda(SC5)

    Retorno:

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    49/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    49

    Parceiro Certificao

    ON < search_condition >

    Especifica a condio no qual a unio baseada. A condio pode serqualquer expresso que retorne um valor lgico. Porm na maioria dasvezes utilizado expresses que comparem contedos de campos de ambastabelas, podendo utilizar clausula AND caso hajam mais de um campo emcomum entre as tabelas.

    Exemplo:

    SelectC5.C5_NUM,A1.A1_NOME,A1.A1_COD,B1.B1_DESC,C5.C5_EMISSAOFromSC6990 C6

    JoinSC5990 C5 ONC5.C5_NUM =C6.C6_NUM ANDC5.C5_FILIAL =C6.C6_FILIALJoinSA1990 A1 ONC5.C5_CLIENTE =A1.A1_CODJoinSB1990 B1 ONC6.C6_PRODUTO =B1.B1_COD ANDB1.B1_FILIAL =C6.C6_FILIAL

    CROSS JOIN

    Especifica o cruzamento de linhas de duas tabelas. O resultado da Queryser todas as linhas da primeira tabela emparelhada com cada linha dasegunda tabela a quantidade de linhas retornada ser o produto daquantidade que existem em ambas as tabelas.

    Exemplo:

    useaulagoSelectA1.A1_COD,A1.A1_LOJA,A1.A1_NREDUZ,C5.C5_FILIAL,C5.C5_NUMfromSC5990 C5CrossJoinSA1990 A1

    7.1.4.Exercicio Complementar Left, Right e Join

    Exemplo:

    useaulagoSelectA1.A1_COD,A1.A1_LOJA,A1.A1_NREDUZ,C5.C5_FILIAL,C5.C5_NUMfromSC5990 C5CrossJoinSA1990 A1

    7.1.5.Clusula WHERE

    Especifica uma condio de procura para restringir as linhas devolvidas.

    Sintaxe

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    50/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    50

    Parceiro Certificao

    [ WHERE < search_condition > ]

    Argumentos

    Restringe as linhas devolvidas no resultado atravs de expresses lgicas.No h nenhum limite de expresses que podem ser includos em umacondio de procura.

    Exemplo:

    UseaulagoSelectC5.C5_NUM,A1.A1_NOME,A1.A1_COD,B1.B1_DESC,C5.C5_EMISSAOFromSC6990 C6JoinSC5990 C5 ONC5.C5_NUM =C6.C6_NUM ANDC5.C5_FILIAL =C6.C6_FILIALJoinSA1990 A1 ONC5.C5_CLIENTE =A1.A1_CODJoinSB1990 B1 ONC6.C6_PRODUTO =B1.B1_COD ANDB1.B1_FILIAL =C6.C6_FILIALWhereC6.D_E_L_E_T_ =''AND C6.C6_FILIAL =01And C5.C5_NUM IN('000005','000019')

    7.1.6.Clusula GROUP BY

    Especifica os grupos nos quais as linhas sero colocadas e, se so includasfunes de totalizao na clusula SELECT, calcula um valor sumrio porcada grupo. Quando GROUP BY especificado, qualquer coluna em qualquerexpresso que no seja de totalizao que estiverem no SELECT dever serincluda na lista do GROUP BY.

    Sintaxe

    [GROUP BY [ALL] group_by_expression [,...n][WITH{CUBE|ROLLUP}]]

    Argumentos

    ALLInclui todos os grupos no resultado, at mesmo os que no tem linhas quesatisfaam a condio do WHERE. Quando ALL especificado, so devolvidosvalores NULL nas colunas sumrias de grupos que no satisfaam a condiode procura. Voc no pode especificar ALL com o CUBE ou operadores deROLLUP.

    group_by_expression

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    51/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    51

    Parceiro Certificao

    uma expresso na qual o agrupamento executado. Ela conter os

    campos pelo qual sero montados os grupos, poder conter colunas ouexpresses no totalizadora que se referem a colunas. Alias de campos nopodem ser colocados nessa clausula.

    Exemplo:

    Useaulago

    SELECTSUM(D2_QUANT)QTDE,D2_UM,D2_ITEMFROMSD2990GROUPBYD2_UM,D2_ITEM

    CUBE

    Com essa clausula especificada alm das linhas habituais trazidas peloGROUP BY, so introduzidas linhas sumrias no resultado. Com isso alm datotalizao por grupo tambm mostrado um total por subgrupos e um totalgeral.

    Exemplo:

    Use aulaGo

    -- CUBE TODOS OS TOTAIS POSSIVEISSELECTE1_CLIENTE,E1_LOJA,SUM(E1_VALOR)VAL,SUM(E1_SALDO)SLDFROM SE1990 SE1WHERESE1.D_E_L_E_T_ =''GROUPBYE1_CLIENTE,E1_LOJA WITHCUBE

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    52/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    52

    Parceiro Certificao

    Ateno:

    Como ele retorna os valores totalizados, ou seja, mais de um recordset ento este recursoat o momento no suportado pelo Protheus.

    ROLLUP

    Com essa clausula especificada alm das linhas habituais trazidas peloGROUP BY, so introduzidas linhas sumrias no resultado. Porm serototalizadas os grupos e subgrupos na ordem que aparecem as colunas noGROUP BY.

    Exemplo:

    Use aulaGo-- ROLLUP - TOTALIZA DA EQ. PARA A DIREITASELECTE1_CLIENTE,E1_LOJA,E1_TIPO,SUM(E1_VALOR)VAL,SUM(E1_SALDO)SLDFROM SE1990 SE1WHERESE1.D_E_L_E_T_ =''GROUPBYE1_CLIENTE,E1_LOJA,E1_TIPO WITHROLLUP --TOTAL GERAL

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    53/119

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    54/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    54

    Parceiro Certificao

    Especifica uma condio de busca para um grupo ou um totalizador. HAVING

    normalmente usado com a clusula GROUP BY. Quando GROUP BY no usado o HAVING se comporta como a clusula WHERE.

    Sintaxe

    [ HAVING < search_condition > ]

    Argumentos

    Especifica a condio de busca para o grupo ou o totalizador se encontrar.Quando HAVING usado com GROUP BY ALL, a clusula HAVING anula ALL.

    Exemplo:

    use aulago

    --HAVING RECEBE TODAS AS LINHAS DEPOIS FILTRASELECTE1_CLIENTE,SUM(E1_VALOR)VAL,SUM(E1_SALDO)SLDFROM SE1990 SE1WHERESE1.D_E_L_E_T_ =''GROUPBYE1_CLIENTEHAVINGSUM(E1_VALOR)>2000

    Ateno:

    Como ele retorna os valores totalizados, ou seja, mais de um recordset ento este recursoat o momento no suportado pelo Protheus.

    Operador UNION

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    55/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    55

    Parceiro Certificao

    Associa os resultados de duas ou mais querys em um nico resultado que

    consiste em todas as linhas que pertencem a todas as querys. diferente deusar JOIN que combina as colunas de duas ou mais tabelas.

    Para utilizar o operador UNION o nmero e a ordem das colunas devem seridnticas em todas as querys e os tipos de dados devem ser compatveis.

    Sintaxe

    {|()}UNION [ALL]

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    56/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    56

    Parceiro Certificao

    Devolve todas as linhas no resultado, inclusive duplicadas. Se no for

    especificado, sero removidas as linhas duplicadas.

    Exemplo:

    useaulago

    SELECTC6_PRODUTO,SUM(C6_QTDVEN)ASQTDVENFROMSC6990WHERED_E_L_E_T_ =''GROUPBYC6_PRODUTO--COLOCAR 1 LINHA COM TOTAL GERALUNIONALLSELECTC6_PRODUTO ='TOTAL',SUM(C6_QTDVEN)FROMSC6990WHERED_E_L_E_T_ =''

    7.1.8.Clusula ORDER BY

    Especifica a ordem do resultado da query. A clusula ORDER BY nula emviews, funes, tabelas derivadas, e subqueries, a menos que TOP sejaespecificado.

    Sintaxe

    [ORDER BY {order_by_expression [ASC|DESC]} [,...n]]

    Argumentos

    order_by_expression

    Especifica uma coluna para utilizar na ordenao. A coluna pode serespecificada pelo nome, alias, uma expresso, ou um inteiro no negativoque representa a posio da coluna na lista do SELECT.

    A clusula ORDER BY pode incluir itens que no aparecem na lista doSELECT. Porm, se for especificado SELECT DISTINCT, ou se o SELECTcontm o operador UNION, as colunas de ordenao tm que aparecer nalista do SELECT.

    Alm disso, quando a declarao SELECT inclui o operador UNION, deveraser usado os nomes ou alias do primeiro SELECT.

    Exemplo:

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    57/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    57

    Parceiro Certificao

    useaulago

    SELECTA1.A1_COD,A1.A1_NOME,A1.A1_END,A1.A1_MUNFROMSA1990 A1ORDERBYA1.A1_NOME

    ASC (Default)Especifica que os dados sero ordenados de forma ascendente, do menor para omaior.

    Exemplo:

    useaulago

    SELECTA1.A1_COD,A1.A1_NOME,A1.A1_END,A1.A1_MUNFROMSA1990 A1ORDERBYA1.A1_NOME ASC

    DESCEspecifica que os dados sero ordenados de forma descendente, do maior para omenor.

    Os valores NULL so considerados como os valores mais baixos possveis.

    Exemplo:

    useaulago

    SELECTA1.A1_COD,A1.A1_NOME,A1.A1_END,A1.A1_MUNFROMSA1990 A1ORDERBYA1.A1_NOME DESC

    Para reforar os conceitos de Left, Right e Join, segue um exemplo complementar:

    Exemplo Complementar:

    useaulago

    createtableempregadosrodrigo(codigo_empregado int,nome varchar(50))createtablepagamentosrodrigo(codigo_pagto int,codigo_empregado int,valor decimal(10,2)

    )createtabledescontosrodrigo(codigo_desconto int,

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    58/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    58

    Parceiro Certificao

    codigo_empregado int,valor decimal(10,2))

    insertintoempregadosrodrigo(codigo_empregado,nome)values(1,'Rodrigo')insertintoempregadosrodrigo(codigo_empregado,nome)values(2,'Daniella')insertintoempregadosrodrigo(codigo_empregado,nome)values(3,'Maria Luiza')insertintoempregadosrodrigo(codigo_empregado,nome)values(4,'Walter')insertintoempregadosrodrigo(codigo_empregado,nome)values(5,'Cris')insertintopagamentosrodrigo(codigo_empregado,valor)values(1,100)insertintopagamentosrodrigo(codigo_empregado,valor)values(1,200)insertintopagamentosrodrigo(codigo_empregado,valor)values(3,300)insertintopagamentosrodrigo(codigo_empregado,valor)values(5,400)insertintopagamentosrodrigo(codigo_empregado,valor)values(5,500)insertintodescontosrodrigo(codigo_empregado,valor)values(1,50)insertintodescontosrodrigo(codigo_empregado,valor)values(2,20)insertintodescontosrodrigo(codigo_empregado,valor)values(5,30)

    selecte.nome,p.valor aspagamentofromempregadosrodrigo ase INNERJOINpagamentosrodrigo aspONe.codigo_empregado =p.codigo_empregado

    selecte.nome,p.valor aspagamento,d.valor asdescontofromempregadosrodrigo aseINNERJOINpagamentosrodrigo asp ONe.codigo_empregado =p.codigo_empregadoINNERJOINdescontosrodrigo asd ONe.codigo_empregado =d.codigo_empregado

    selecte.nome,p.valor pg,d.valor dcfromempregadosrodrigo eJOINpagamentosrodrigo p ONe.codigo_empregado =p.codigo_empregadoJOINdescontosrodrigo d ONe.codigo_empregado =d.codigo_empregado

    selecte.nome,p.valor pg,d.valor dc

    fromempregadosrodrigo e,pagamentosrodrigo p,descontosrodrigo d

    wheree.codigo_empregado =p.codigo_empregadoand e.codigo_empregado =d.codigo_empregado

    selecte.nome,p.valor aspgfromempregadosrodrigo eLEFTJOINpagamentosrodrigo p ONe.codigo_empregado =p.codigo_empregado

    selecte.nome,p.valor aspgfromempregadosrodrigo eLEFTJOINpagamentosrodrigo p ONe.codigo_empregado =p.codigo_empregado

    selecte.nome,p.valor aspagamento,d.valor asdescontofromempregadosrodrigo aseLEFTJOINpagamentosrodrigo asp ONe.codigo_empregado =p.codigo_empregado

    LEFTJOINdescontosrodrigo asd ONe.codigo_empregado =d.codigo_empregado

    selecte.nome,p.valor pgfrompagamentosrodrigo pLEFTJOINempregadosrodrigo e ONp.codigo_empregado =e.codigo_empregado

    --traz todos os empregados independente se tenham pagamentos ou noselecte.nome,p.valor pgfromempregadosrodrigo eLEFTjoINpagamentosrodrigo p ONe.codigo_empregado =p.codigo_empregado

    --trazer todos os empregados independente se tiveram desconto ou noselecte.nome,d.valor pgfromempregadosrodrigo eLEFTjoINdescontosrodrigo d ONe.codigo_empregado =d.codigo_empregado

    --trazer somente os empregados que tiveram descontosselecte.nome,d.valor pgfrom descontosrodrigo d

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    59/119

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    60/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    60

    Parceiro Certificao

    7.1.9.Clusula COMPUTE

    Esta clusula gera totais que aparecem como colunas sumrias ao final doresultado da query. Quando usado com BY, o COMPUTE gera quebras esubtotais no resultado. Voc pode especificar COMPUTE BY e COMPUTE namesma query.

    Sintaxe

    [COMPUTE

    {{AVG|COUNT|MAX|MIN|STDEV|STDEVP|VAR|VARP|SUM}(expression)}

    [,...n][BY expression [,...n]]

    ]

    Argumentos

    AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM

    Especifica a totalizao a ser executada.

    AVG Mdia dos valores na expresso numrica.

    COUNT Nmero de linhas selecionadas.

    MAX Valor maior na expresso.

    MIN Valor menor na expresso.

    STDEV Desvio Padro para todos os valores na expresso. (Estatstica)STDEVP Desvio Padro para a populao para todos os valores na

    expresso. (Estatstica)

    SUM Total dos valores na expresso numrica.

    VAR Varincia para todos os valores na expresso. (Estatstica)

    VARP Varincia para a populao para todos os valores na expresso.(Estatstica)

    Estas funes ignoram valores nulos.

  • 8/11/2019 Apostila SQL Prof MSC Rodrigo Santos - 27-11-2009 v4.pdf

    61/119

    CURSO SQL PROTHEUS 10Verso 1.011/2009Todos direitos reservados

    61

    Parceiro Certificao

    ( expression )

    Uma expresso, como o nome de uma coluna na qual o clculo serexecutado. A expresso tem que aparecer na lista do SELECT e deve serespecificada exatamente igual. Alias de campo no pode ser usado dentro daexpresso.

    BY expression

    Gera quebra e subtotais no resultado. A expresso uma cpia exata deuma expresso do ORDER BY associado. Podem ser especificadas varias

    expresses conforme aparecem no ORDER BY, porm na mesma ordem.Essas expresses fazem com que o resultado de um grupo seja quebrado esubgrupos e aplica a funo de totalizao em cada nvel de agrupamento.

    Exemplo:

    Useaulago

    --COMPUTE BYSELECTE1_CLIENTE,E1_VALOR,E1_SALDO

    FROM SE1990 SE1WHERESE1.D_E_L_E_T_ =''ORDERBYE1_CLIENTE,E1_LOJACOMPUTESUM(E1_VALOR),COUNT(E1_CLIENTE)byE1_CLIENTE

    7.2.SUBQUERYS

    Subquerys so querys executadas dentro de outra query, ou seja, cria-seum select e utiliza o seu resultado como se fosse uma tabela que pode serreferenciado no FROM ou JOINS ou como um nico resultado em uma coluna.

  • 8/11/2019 Apost