Upload
katia-regina-de-freitas
View
218
Download
0
Embed Size (px)
Citation preview
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.aspx8/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.aspx8/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