Você está na página 1de 86

Curso Microsoft SQL Server 2000

Utilizando a Linguagem Transact SQL

SQL Server 2000

NDICE
1. 2. INTRODUO...................................................................................................................................4 CONHECENDO SQL SERVER ....................................................................................................5 2.1 FERRAMENTAS DO SQL SERVER..............................................................................................5 ENTERPRISE MANAGER ....................................................................................................................5 QUERY ANALYZER .............................................................................................................................6 SERVICE MANAGER ...........................................................................................................................6 PROFILER............................................................................................................................................7 CLIENT NETWORK UTILITY ..............................................................................................................7 SQL SERVER BOOKS ON-LINE .......................................................................................................8 3. 4. OS DATABASES DO SQL-SERVER...............................................................................................9 CRIAO DE UM DATABASE.....................................................................................................13

5. INSERT (INSERE REGISTRO) .........................................................................................................19 6. UPDATE (ALTERA VALOR DO REGISTRO) ...............................................................................20 7. DELETE (EXCLUSO DE REGISTROS)........................................................................................21 8. APRESENTANDO O SISTEMA INFONEW ....................................................................................22 8.1 OS OBJETIVOS GERAIS DO INFONEW SO: ..........................................................................22 PARTE 1 MANTER DADOS A RESPEITO DOS CLIENTES DA EMPRESA .....................................................22 PARTE 2 ANLISE DO CREDITO DO CLIENTE .........................................................................................23 PARTE 3 MANTER DADOS A RESPEITO DOS PRODUTOS A SERREM VENDIDOS ......................................23 PARTE 4 MANTER E GERENCIAR OS PEDIDOS DE COMPRA FEITOS PELOS CLIENTES .............................24 PARTE 5 MANTER DADOS A RESPEITO DOS FUNCIONRIOS ..................................................................24 8.2 DIAGRAMA COM RELACIONAMENTOS DO SISTEMA INFONEW ......................................25 9. SELECT (CONSULTA).......................................................................................................................26 9.1 ORDER BY (ORDEM DE RETORNO) ..................................................................................................27 9.2 ALIAS (APELIDO) .............................................................................................................................28 9.3 WHERE (RESTRIES) .....................................................................................................................29 9.4 BETWEEN (CONDIO COM UMA FAIXA DE VALORES)....................................................................30 9.5 LIKE (COMPARAO COM UMA PARTE DE UMA LITERAL).................................................................31 9.6 DISTINCT (VALORES NICOS)....................................................................................................32 10. FUNES DE AGRUPAMENTO....................................................................................................33 10.1 COUNT (CONTADOR DE REGISTROS) ..............................................................................................33 10.1.1 GROUP BY (Agrupamento de dados)......................................................................................34 10.2 SUM (SOMATRIA DE VALORES).....................................................................................................35 10.3 AVG (MDIA DE VALORES) ............................................................................................................36 10.4 MIN, MAX (MENOR E MAIOR VALOR) ............................................................................................37 11.HAVING (CONDIO DO AGRUPAMENTO) .............................................................................38

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 2 de 86

SQL Server 2000

12. JOIN (RELACIONAMENTO DE TABELAS)................................................................................39 12.1 INTRODUO A JOINS: ....................................................................................................................39 12.2 TIPOS DE JOINS............................................................................................................................39 12.2.1 Usando Inner Joins:.................................................................................................................39 12.2.2 Usando Outer Joins: ...............................................................................................................39 12.2.3. Usando Cross Joins: ...............................................................................................................40 12.3 COMBINAO DE MAIS DE 2 TABELAS..............................................................................................41 13. IN (CONDIO COM VALORES FIXOS) ....................................................................................42 14. SUBQUERIES (PESQUISA DENTRO DE UM COMANDO).......................................................43 15. CRIANDO VISES (VIEW) .............................................................................................................45 16. CRIANDO STORED PROCEDURE (PROCEDIMENTOS).........................................................47 16.1 STORED PROCEDURE (PARMETROS DE SADA): ............................................................................49 17. CRIANDO FUNCTION (UDF :FUNCES DEFINIDAS PELO O USURIO ) .........................55 17.1 DEFININDO UMA FUNCTION UDF:....................................................................................................56 17.2 TIPOS DE FUNCTION: .......................................................................................................................57 17.2.1. Funes Scalar valued:...........................................................................................................57 17.2.2. Funes Table Valued: ...........................................................................................................58 17.2.3. Funes Multi-Statement Table Valued:.................................................................................59 18. CRIANDO TRIGGERS (GATILHOS ) ...........................................................................................61 19. EXERCICIOS .....................................................................................................................................67 EXERCCIO 2 - MANIPULANDO DADOS DO SYSAMPLE......................................................................67 EXERCCIO 3 - MANIPULANDO DADOS DO SYSAMPLE......................................................................68 EXERCCIO 4 - MANIPULANDO DADOS DO SYSAMPLE......................................................................69 EXERCCIO 5 - MANIPULANDO DADOS DO SYSAMPLE......................................................................70 EXERCCIO 6- MANIPULANDO DADOS DO SYSAMPLE......................................................................71 EXERCCIO 7 VIEWS ...........................................................................................................................72 EXERCCIO 8 FUNCTIONS ..............................................................................................................73 EXERCCIO 9 - STORED PROCEDURE .............................................................................................74 EXERCCIO 11 TRIGGERS ...............................................................................................................75 MANUAL TCNICO...............................................................................................................................76 INSTALAO DO MICROSOFT SQL SERVER 2000 ......................................................................76 CONSIDERAES PRELIMINARES..................................................................................................76 REQUISITOS .........................................................................................................................................76 INSTALAO DO SQL SERVER 2000 ...............................................................................................76 CONSIDERAES FINAIS..................................................................................................................85 REFERNCIAS BIBLIOGRFICAS:...................................................................................................86

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 3 de 86

SQL Server 2000

1. INTRODUO
Veremos nesta apostila de forma simplificada os comandos de manipulao e consultas de dados, bem como suas clausulas, operadores e funes. Para isso estaremos utilizando o gerenciador de banco de dados Microsoft SQL Server 2000. O comando Transact-SQL uma linguagem estruturada para consultas, utilizada no banco de dados da Microsoft, o SQL Server 2000. Veja em seguida uma lista dos comandos Transact SQL. DCL Data Control Language Linguagem de Controle de Dados. GRANT Concede permisses. DENY Nega permisses. REVOKE Revoga a concesso ou a negao de permisso. DDL- Data Definition Language- Linguagem de Definio de dados. CREATE Cria objeto no sistema. ALTER Altera a estrutura dos objetos. DROP Elimina objetos do sistema. DML- Data Manipulation Language Linguagem de Manipulao de Dados. SELECT L dados de tabelas e views. INSERT Insere dados em tabelas. UPDATE Altera dados da tabela. DELETE Exclui dados das tabelas. BACKUP Realiza backup de dados. RESTORE Restaura dados de um backup BULK INSERT Realiza a incluso de grande quantidade de dados em uma tabela.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 4 de 86

SQL Server 2000

2. CONHECENDO SQL SERVER


2.1 FERRAMENTAS DO SQL SERVER
O SQL-Server possui diversas ferramentas para a criao e manuteno de banco de dados, para auxiliar o desenvolvimento de aplicaes. Essas ferramentas podem ser executadas a partir de um servidor NT ou superior, de uma estao Windows NT Workstation ou superior ou ate mesmo Windows 95 e / ou 98. ENTERPRISE MANAGER Atravs do SQL Enterprise Manager, podemos manipular os objetos criados em um banco de dados (tabelas, usurios, stored procedures, etc). Utilizamos esta ferramenta para ter acesso direto a estes objetos, podendo criar novos e alterar os j existentes. Os direitos do que cada usurios podem fazer com os objetos de um Banco de dados so atribudos pelo administrador do banco de dados. muito importante manter este controle para evitar que uma operao indevida danifique um banco de dados. Ele gerencia vrios servidores, permitindo executar qualquer tarefa relacionada ao SQL Server.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 5 de 86

SQL Server 2000

QUERY ANALYZER Permite administrar diretamente o SQL Server usando comandos Transact SQL. Os comandos SQL podem ser executados interativamente, ou podem ser executados de procedimentos armazenados (stored procedures) ou scripts.

SERVICE MANAGER Permite iniciar, pausar, desligar os servios do SQL Server.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 6 de 86

SQL Server 2000

PROFILER Permite monitorar toda a atividade do servidor e registrar essa atividade em arquivos de log, incluindo comandos SQL Server.

CLIENT NETWORK UTILITY Configura o software de acesso cliente numa estao.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 7 de 86

SQL Server 2000

SQL SERVER BOOKS ON-LINE Toda a documentao do SQL Server, para consultar on-line. Permite fazer pesquisas de texto na documentao. Para abrir o Books On-Line basta pressionar a tecla F1 quando o SQL Server 2000 estiver operando.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 8 de 86

SQL Server 2000

3. OS DATABASES DO SQL-SERVER
Uma vez instalado o SQL Server so criadas automaticamente quatro databases: a) master b) model c) tempdb d) msdb Depois, o poderemos criar e instalar nossos prprios bancos de dados livremente, os quais sero os bancos de dados de usurio. Embora ambos os tipos de bancos de dados (sistema e usurio) armazenem dados, o SQL Server utiliza os bancos de sistema para operar e gerenciar o sistema. O catlogo de sistema, por exemplo, consiste unicamente de tabelas armazenadas no banco de dados master. A figura a seguir ilustra os bancos de dados no SQL Server.
Bancos de dados do sistema model System tables System tables System tables System tables tempdb msdb

master

SAU02

SAU05

System tables

System tables

Bancos de dados de usurio

Vejamos a funo de cada um dos bancos de sistema.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 9 de 86

SQL Server 2000

MASTER
Controla os bancos de dados de usurios e a operao do SQL Server, por isso os dados armazenados em suas tabelas so crticos e deve-se sempre manter backup atualizado. Ocupa inicialmente cerca de 17 Mbytes, mantendo: a) contas de login; b) processos em andamento; c) mensagens de erro do sistema; d) databases armazenados no servidor; e) espao alocado a cada database; f) locks ativos; g) databases disponveis e dispositivos de dump; h) procedimentos de sistema, que so primariamente utilizados para administrao. O banco de dados master contm 13 tabelas de uso compartilhado com o sistema, conhecidas como Catlogo do Sistema ou Dicionrio de Dados, que so: 1. syscharsets - cdigos de pgina que estabelecem quais caracteres esto disponveis e sua ordem de classificao; 2. sysconfigures - variveis de ambiente configurveis; 3. syscurconfigs - variveis de ambiente configurveis; 4. sysdatabases - bancos existentes no servidor; 5. sysdevices - referncia fsica aos dispositivos e bancos do servidor; 6. syslanguages - entrada para as lnguas conhecidas pelo servidor; 7. syslocks - quais so os locks ativos; 8. syslogins - contas de usurios; 9. sysmessages - mensagens de erro do sistema; 10.sysprocesses - processos em andamento 11.sysremotelogins - contas de acesso remoto, para conexo entre dois servidores; 12.sysservers - servidores remotos; 13.sysusages - espao em disco disponibilizado para cada banco de dados (relaciona-se com sysdatabases e sysdevices).

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 10 de 86

SQL Server 2000

MODEL
Fornece um prottipo (template) para um novo banco de dados. Contm as tabelas de sistema que sero inseridas em cada banco de dados de usurio. As seguintes implementaes podem ser realizadas neste database: a) tipos definidos pelo usurio (user datatypes), regras (rules), padres (defaults), stored procedures; b) usurios que tero acesso a todos os bancos adicionados ao sistema (administradores); c) privilgios padro, notadamente aos usurios guest (guest accounts); O tamanho padro deste banco de 1 Mbyte, e sua estrutura bsica pode ser vista na figura a seguir; as 18 tabelas mostradas sero sempre criadas em novos bancos de dados.

sy s a lte rn a te s sy s lo g s sy su s e rs

s y sc o lu m n s s ys o b je cts s ys re fe re n c e s

sy s co m m e n ts sy sp ro ce d u re s s ys c o n stra in ts

s y sd e p e n d s sy sp ro te c ts s ys a rtic le s

s ys in d e xe s sy ss e g m e n ts

s ys ke y s sy s ty p e s

sy sp u b lica tio n s s ys s u b s crip tio n s

Este conjunto de 18 tabelas conhecido como Catlogo do Banco de Dados, e suas funes so as seguintes (note que todas possuem o prefixo sys): 1. sysalternates - possui uma linha para cada usurio mapeado para um banco de dados de usurio; 2. syscolumns - possui uma linha para cada coluna em uma tabela ou view, e para cada parmetro em uma stored procedure; 3. syscomments - possui uma ou mais linhas para cada view, regra (rule), padro (default), trigger e stored procedure que contenha uma declarao de definio; 4. sysdepends - uma linha para cada procedure, view, ou tabela que seja referenciada por uma procedure, view ou trigger; 5. sysindexes - uma linha para cada clustered index, nonclustered index, e tabela sem ndices, mais uma linha extra para cada tabela com informaes de textos ou imagens; 6. syskeys - uma linha para cada chave estrangeira (foreign), primria (primary) ou comum (common); 7. syslogs - armazena o transaction log; 8. sysobjects - uma linha para cada tabela (table), viso (view), stored procedure, regra (rule), trigger, padro (default), log e objeto temporrio (somente tempdb);

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 11 de 86

SQL Server 2000

9. sysprocedures - uma linha para cada viso (view), stored procedure, regra (rule), trigger, padro (default); 10.sysprotects - mantm as informaes de permisses de usurio; 11.syssegments - uma coluna para cada segmento; 12.systypes - uma linha para cada datatype definido pelo usurio ou fornecido pelo sistema; 13.sysusers - uma linha para cada usurio permitido no database; 14.sysreferences - uma linha para cada constraint de integridade referencial criada (PK-FK, Chave primria, chave estrangeira); 15.sysconstraints - informaes sobre cada constraint criada; As ltimas trs tabelas so usadas para manter informaes sobre replicao de dados. 16.sysarticles - contm a article information para cada artigo criado para replicao; 17.syspublications - contm uma linha para cada publicao criada; 18.syssubscriptions - contm uma linha para cada subscrio de um subscription server.

TEMPDB
Providencia um espao de armazenamento para tabelas e outras aes temporrias ou intermedirias, tais como resultados que envolvam a clusula GROUP BY, ORDER BY, DISTINCT e cursores (CURSORS). Possui as seguintes caractersticas: a) criado automaticamente no DEVICE MASTER (ateno, DEVICE e DATABASE so coisas diferentes); b) seu contedo apagado quando o usurio fecha a conexo, exceto para tabelas temporrias globais; c) quando o banco parado (stoped) seu contedo apagado completamente; d) seu tamanho padro de 2 Mbytes. e) pode ser colocado em memria RAM.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 12 de 86

SQL Server 2000

MSDB
Providencia suporte ao servio SQL Executive Service (o qual fornece servios de schedulle de tarefas, replicao, gerenciamento de alertas). Possui as seguintes tabelas de sistema: a) sysalerts - armazena informaes sobre todos os alertas definidos por usurios; b) sysoperators - informaes sobre os operadores; c) sysnotifications - relaciona quais operadores devem receber quais alertas; d) systasks - mantm informaes sobre todas as tarefas definidas por usurios; e) syshistory - informaes a respeito de quando um alerta e uma tarefa foram executados, se com sucesso ou falha, identificao do operador, data e hora da execuo; f) sysservermessages - mensagens relacionadas ao servidor. sobre as operaes

4. CRIAO DE UM DATABASE
Um database uma estrutura lgica dentro da qual so criados os sistemas de banco de dados. Os arquivos de dados ficam organizados em grupos de arquivos e o primeiro grupo criado automaticamente no momento da criao do database chama-se PRIMARY.

Criando um Banco de Dados com a utilizao do SQL Server Enterprise Manager

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 13 de 86

SQL Server 2000

Nome: o nome lgico do arquivo.

DataFile: E o arquivo fsico do Banco de Dados. Transaction Log: E o arquivo lgico do Banco de Dados. Filename: o nome fsico do arquivo. Deve ser especificado o seu diretrio de criao. Initial size: o tamanho inicial do arquivo. Filegrowth: o valor por meio do qual o arquivo aumenta de tamanho automaticamente. Maximum File Size: o tamanho mximo de o Arquivo Fsico e/ ou Lgico pode asumir Curso Microsoft SQL Server 2000
Autor: Nilson A. Borges 14 de 86

SQL Server 2000

Criao de um Banco de Dados com a Utilizao do SQL SERVER Query Analyzer


Exemplo: Criao de um Banco de Dados Chamado Bookselva

Create database Bookselva On primary ( name='BookSelvaBD', filename='c:\bookselva.mdf', size= 2 MB, maxsize= 10 MB, filegrowth= 1 MB ) log on ( name='bookselvalog', filename='c:\bookselva.ldf', size= 1 MB, maxsize= 4 MB, filegrowth= 1 MB )

CARACTERSTICA DE UM DATABASE
Nome: o nome lgico do arquivo. Filename: o nome fsico do arquivo. Deve ser especificado o seu diretrio de criao. Size: o tamanho limite que o arquivo pode alcanar. Filegrowth: o valor por meio do qual o arquivo aumenta de tamanho automaticamente.

Criao de Tabelas no Banco de Dados criado anteriormente com a utilizao do SQL SERVER Query Analyzer Confira abaixo alguns dos tipos de dados:
Char(n): quando o campo for do tipo alfanumrico e com tamanho fixo, o n quer dizer limitao, o valor mximo de caracteres; Varchar(n) : quando o campo for do tipo alfanumrico e com tamanho no fixo, o n quer dizer limitao, o valor mximo de caracteres; Int: quando o campo for numero com valor inteiro. Decimal (p,s): quando o campo for nmeros com valores decimais, o valor de p o numero de algarismos e o s valor dos algarismos decimais (algarismos aps a virgula). Money, smallmoney :quando o campo for valores monetrios. Money (8 bits) quando a quantidade de dinheiro muito (ex.: loteria), e smallmoney (4 bits) quando a quantidade de dinheiro pequena. Datetime e SmallDatetime:quando o campo for do tipo data ou hora. Curso Microsoft SQL Server 2000
Autor: Nilson A. Borges 15 de 86

SQL Server 2000

Bit :determina se o valor verdadeiro, falso ou nulo.

Nulabilidade
Nulabilidade: Significa se o campo declarado pode ser ou no nulo. Para fazer tal declarao necessrio definir o campo com a clausula: o Not null (no permite valor nulo,preenchimento obrigatrio do campo) o Null (permite valor nulo, preenchimento no obrigatrio do campo)

Constraints: Integridade
Primary Key(Chave Primria): Campo principal da tabela onde no permite dados repetidos no campo. Tornando assim, identificar unicamente cada registro da tabela.
Exemplo: Constraint PK_Cliente Primary Key (Cd_Cli)

Foreign Key(Chave Estrangeira): um campo cujos os dados aparecem necessariamente na chave primria de uma outra tabela, mecanismo principal para efetuarmos relacionamento entre tabelas.
Exemplo: Constraint FK_NotaFiscal Foreign Key(Cd_Cli) References Cliente(Cod_Cli)

Use bookselva Create table Cliente ( Cod_Cli int Nome_Cli varchar(40) End_Cli varchar(30) Bai_Cli varchar(20) Cid_Cli varchar(20) Uf_Cli char(3) Tel_Cli varchar(15) Constraint PK_Cliente Primary Key(Cod_Cli) )

not null, not null, not null, not null, not null, not null, null,

Create Table NotaFiscal Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 16 de 86

SQL Server 2000

( Num_Nota Cod_Cli Serie_Nota Emissao_Nota Vtot_Nota

int int varchar(10) smalldatetime SmallMoney

not null, not null, not null, null, not null,

Constraint PK_NotaFiscal Primary Key(Num_Nota), Constraint FK_Cliente Foreign Key(Cod_Cli) References cliente(Cod_Cli)
)

Criando um Diagrama
O Enterprise Manager permite que voc crie um diagrama das tabelas para verificar os relacionamentos das tabelas se houver relacionamento, Mas o diagrama s poder ser feito depois de ter criado as tabelas e seus relacionamentos. Para criar um Diagrama com o Enterprise Manager aberto, expanda seu database no exemplo o BookSelva, clique com o boto direito sobre o cone Diagram e escolha a opo New Database Diagram como mostra a figura abaixo:

Em seguida aparecer a primeira tela do Wizard para que voc crie seu diagrama:

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 17 de 86

SQL Server 2000

Clique no boto Avanar

Selecione as tabelas Cliente e Nota Fiscal e clique no boto Add> e seguida clique no boto Avanar

E para finalizar clique no boto Concluir

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 18 de 86

SQL Server 2000

5. INSERT (Insere registro)


Definio: O comando INSERT insere um novo registro em uma tabela Sintaxe: INSERT INTO <tabela> [<campos>] VALUES <valores> Exemplos: Adotando-se que a ordem dos campos da tabela cliente seja (Cod_Cli, Nome_Cli, End_Cli, Bai_Cli, Cid_Cli, Uf_Cli, Tel_Cli) temos: /*insere os valores (1,Nilson Borges, Av.Paulista,929, Cerqueira Csar, So Paulo, SP, 3285-0202) na tabela CLIENTES */

INSERT INTO CLIENTE VALUES (1,Nilson Borges, Av.Paulista,929, Cerqueira Csar, So Paulo, SP, 3285-0202) ou INSERT INTO CLIENTE (Cod_Cli, Nome_Cli, End_Cli, Bai_Cli, Cid_Cli, Uf_Cli, Tel_Cli)VALUES (1,Nilson Borges, Av.Paulista,929, Cerqueira Csar, So Paulo, SP, 3285-0202)
/*insere os valores (1,1,WEP2525,2004/08/12,250.89) na tabela NOTAFISCAL*/

INSERT INTO NOTAFISCAL VALUES (1, 1, WEP2525, 2004/08/12,250.89) ou INSERT INTO NOTAFISCAL (Num_Nota, Cod_Cli, Serie_Nota, Emissao_Nota, Vtot_Nota) VALUES (1, 1, WEP2525, 2004/08/12,250.89)

Exercicio
1) Insira 4 registros na tabela Cliente e 5 registros na tabela NotaFiscal

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 19 de 86

SQL Server 2000

6. UPDATE (Altera valor do registro)


Definio: O comando UPDATE altera campos de um ou vrios registros de uma tabela. Sintaxe: UPDATE <tabela> SET <campo> = <expresso> [WHERE <condio>]; Exemplos: /* atualiza o campo NOME_CLI para Juliana Costa do registro da tabela CLIENTE para o Cd_Cli igual a 1 */

UPDATE CLIENTE SET Nome_Cli = 'Juliana Costa' WHERE Cod_Cli = 1


/* atualiza o campo valor total para 125.75 do registros da tabela NOTAFISCAL onde o campo Emisso_nota for maior que 10/08/2004 */

UPDATE NOTAFISCAL SET Vtot_Nota = 125.75 WHERE Emissao_nota > 2004/08/10


/* atualiza o campo valor total da tabela NOTAFISCAL com um acrscimo de 12% em todos os campos onde a emisso for menor do que 20/08/2004

UPDATE NOTAFISCAL SET Vtot_Nota = Vtot_Nota*1.12 WHERE Emissao_nota < 2004/08/20

Operadores de Comparao
Operador = <> > >= < <= Descrio Igual a Diferente Maior que Maior ou igual a Menor que Menor ou igual a

Exerccio
1) Atualize o campo Cid_Cli da tabela Cliente para Santo Andr para os registros dos clientes do campo UF_Cli igual a SP. 2) Atualize o campo Cod_Cli da tabela NotaFiscal para 3 para os registros das Notas Fiscais com valor total abaixo de 130.00. 3) Atualiza o campo VTot_Nota com um desconto de 23% para o registros das Notas Fiscais com valor total diferente de 581.20

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 20 de 86

SQL Server 2000

7. DELETE (Excluso de registros)


Definio: O comando DELETE exclui um ou mais registros de uma tabela

Sintaxe: DELETE [FROM] <tabela> [WHERE <condio>];

Exemplo: /* exclui todos os registros da tabela NotaFiscal onde o campo Cod_Cli igual a 1 */

DELETE FROM NOTAFISCAL WHERE Cod_Cli = 1


/* exclui todos os registros da tabela CLIENTE onde o campo Nome_Cli igual a Joo Pedro*/

DELETE FROM CLIENTE WHERE Nome_Cli = Joo Pedro

Exerccios
1) Excluir todas as NotasFiscais onde a Data de Emisso superior a 15/08/2004 2) Excluir todas as NotasFiscais onde o valor total seja menor ou igual a 4520.21 3) Excluir todos os clientes onde moram no Estado de Minas Gerais. 4) Excluir todos os clientes onde moram na Cidade de So Roque. 5) Excluir todas as NotasFiscais que menos a do Cliente de Cdigo igual a 2.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 21 de 86

SQL Server 2000

8. APRESENTANDO O SISTEMA INFONEW


O objetivo deste sistema fictcio criar um ambiente OLTP para que vocs coloquem em prtica os tpicos que sero vistos nos prximos captulos desta apostila. O Sistema INFONEW deve gerenciar as operaes comerciais de uma suposta empresa.

8.1 Os objetivos gerais do INFONEW so:


Parte 1: Manter dados a respeito dos Clientes: Parte 2: Realizar anlise de crdito de cada Cliente Parte 3: Manter dados a respeito dos produtos a serem vendidos Parte 4: Manter e gerenciar os pedidos de compra feitos por esses clientes. Parte 5: Manter dados a respeito dos Funcionrios

Parte 1 Manter Dados a Respeito dos Clientes da Empresa


Manter dados a respeito dos clientes envolve armazenar todas as informaes a respeito de cada cliente para que ele possa ser encontrado facilmente num momento de necessidade. Nessa empresa, um cliente pode possuir vrios tipos de endereo, por exemplo, endereo residencial, de faturamento, de entrega, de cobrana, etc..., e o sistema tem que ser capaz de armazenar qualquer quantidade e qualquer tipo de endereo para cada cliente individualmente. Cada endereo deve ser o mais completo possvel, contendo alm do nome da rua, do bairro, nmero do prdio, o nome da cidade e do estado dessa cidade. necessrio saber tambm dados a respeito do cnjuge de cada cliente (se ele tiver um cnjuge), pois no clculo do crdito para cada clientes, a renda do cnjuge pode ser considerada. necessrio tambm que o sistema consiga armazenar qualquer quantidade de telefone que o cliente possa informar e qualquer quantidade de e-mails. Assim que um cliente cadastrado no sistema, deve ser atribudo a ele um tipo de cliente, ou seja, uma classificao de acordo com a sua renda mensal.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 22 de 86

SQL Server 2000

Parte 2 Anlise do Credito do Cliente


Inicialmente, quando um cliente cadastrado no sistema, atribudo a ele um tipo de cliente, ou seja, uma classificao de acordo com a sua renda. O clculo do limite de crdito deve ser uma aplicao que poder ser executada periodicamente, para todos os clientes de uma s vez ou para um cliente especifico. Esse clculo deve levar em considerao o tipo do cliente, a renda do cnjuge, a soma total de pedidos realizados no ano corrente e o atraso mdio nos pagamentos das parcelas. Esse valor que limita o crdito do cliente deve ser levado em considerao sempre antes de realizar uma venda para cada cliente.

Parte 3 Manter Dados a Respeito dos Produtos a Serrem Vendidos


Cada produto disponvel para venda deve ser classificado por um tipo para que seja possvel realizar totalizaes em estoque, produzindo dados gerenciais. Por exemplo, o sistema deve ser capaz de fornecer informaes como: Quantidade de cada produto vendida num determinado perodo. Quantidade de um determinado tipo de produto vendida em um determinado perodo. Tipo de produto vendido em cada regio de cada cidade. Tipo de produto vendido em cada regio de cada estado. Controle de quantidade em estoque de cada produto. Controle de quantidade em estoque de cada tipo de produto. Tipos de produto que so mais vendidos. Tipos de produto manos vendidos.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 23 de 86

SQL Server 2000

Parte 4 Manter e Gerenciar os Pedidos de Compra Feitos pelos Clientes


Cada pedido de compra pode ser pago vista ou ser parcelado. O sistema deve ser capaz de fornecer informaes a respeito de cada pedido de um determinado usurio. Essas informaes so: Data e valor do primeiro pedido do cliente. Parcelas em atraso de um pedido. Valor original de cada parcela. Valor de cada parcela com juros e multa. O sistema deve ser capaz de informar os produtos que cada cliente j comprou, e os produtos que cada um nunca comprou. A cada venda realizada o sistema deve ser capaz de calcular o valor total de cada pedido e dar baixa em estoque a cada produto vendido. O sistema deve aceitar devoluo de produtos comprados pelos clientes se o referido pedido estiver em aberto. E essa devoluo deve recolocar o produto em estoque e retirar o valor do pedido a ser pago pelo cliente.

Parte 5 Manter Dados a Respeito dos Funcionrios


O sistema deve ser capaz de armazenar dados a respeito dos funcionrios e dos dependentes que cada funcionrio possui. Cada funcionrio deve receber, alem de um salrio fixo, bnus mensais de acordo com os produtos que ele vender. O desempenho de cada funcionrio ser medido por pontos que ele recebe mensalmente. De acordo com essa pontuao, seu bnus pode ser acrescido de determinados valores. Todas as vezes que o salrio fixo de cada funcionrio for alterado, o sistema deve armazenar no histrico o salrio anterior, o atual e a data da alterao.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 24 de 86

SQL Server 2000

8.2 DIAGRAMA COM RELACIONAMENTOS DO SISTEMA INFONEW

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 25 de 86

SQL Server 2000

9. SELECT (Consulta)
Descrio: Este comando faz a seleo dos dados de uma ou mais tabelas.

Sintaxe: SELECT <campo> FROM <tabela> Exemplos:

SELECT COD_CLI, NOME_CLI,SEXO_CLI FROM CLIENTE SELECT COD_CLI, NUM_LANC, DATA_CREDCLI, CRED_CLI FROM CREDITO SELECT COD_PROD, NOME_PROD, VAL_UNITPROD FROM PRODUTO SELECT COD_FUNC, NOME_FUNC, SAL_FUNC FROM FUNCIONARIO
Para listar todos os campos da tabela, utilizamos o operador "*" (asterisco)

SELECT SELECT SELECT SELECT

* * * *

FROM FROM FROM FROM

CLIENTE CREDITO PRODUTO FUNCIONARIO

Exerccios
1)Escreva um comando que exiba todas as colunas e todas as linhas de dados da tabela TipoEnd. 2) Escreva um comando que exiba todas as colunas e todas as linhas de dados da tabela TipoProduto. 3) Escreva um comando que exiba todas as colunas e todas as linhas de dados da tabela TipoCli. 4) Escreva um comando que exiba todas as colunas e todas as linhas de dados da tabela Estado. 5) Escreva um comando que exiba a Sigla do Estado e o nome das Cidades que voc possui em cada Estado no seu sistema. 6) Escreva um comando que exiba o nome dos clientes do seu cadastro de clientes, a data de cadastro deste cliente no sistema, e o valor da renda que cada cliente possui. 7) Escreva um comando que exiba o nome de todos os funcionrios do seu cadastro de funcionrios, a data de cadastro, o sexo e o salrio de um dos funcionrios do seu sistema.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 26 de 86

SQL Server 2000

9.1 ORDER BY (Ordem de retorno)


Definio: A clusula ORDER BY determina a ordem de apresentao do resultado de uma pesquisa de forma ascendente ou descendente.

Sintaxe: SELECT <campo> FROM <tabela> [WHERE <condio>] ORDER BY <campo_ordenacao> [ASC/DESC] Exemplos: /* seleciona todos os registros da tabela CLIENTES ordenando o retorno pelo campo CODIGO em ordem ascendente */

SELECT * FROM CLIENTE ORDER BY COD_CLI ASC


/* seleciona todos os registros da tabela CLIENTES ordenando o retorno primeiro pelo campo CODIGO em ordem descendente e depois pelo campo NOME em ordem ascendente */

SELECT * FROM CLIENTES ORDER BY COD_CLI DESC, NOME_CLI ASC

Exerccios
1) Escreva um comando que exiba todas as colunas e todas as linhas de dados da tabela Cliente ordenado pelo nome em ordem decrescente . 2) Escreva um comando que exiba todas as colunas e todas as linhas de dados da tabela Produto ordenado pelo valor unitrio em ordem crescente 3) Escreva um comando que exiba todas as colunas e todas as linhas de dados da tabela Funcionrio ordenado pelo nome na ordem crescente e a renda em ordem decrescente.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 27 de 86

SQL Server 2000

9.2 ALIAS (Apelido)


Definio: Literal que identifica um campo, uma funo ou uma tabela

Sintaxe: SELECT (<campo> ou <funo>) <alias do retorno> FROM <tabela> <alias da tabela> Exemplos:

/* seleciona o valor do campo NOME da tabela CLIENTES */

SELECT NOME_CLI AS "NOME DO CLIENTE" FROM CLIENTE


Observe que a coluna Nome_Cli passou a chamar Nome do Cliente /* listar o cdigo do cliente, nome do cliente ,renda do CLIENTE e renda do CLIENTE com acrscimo de 37% */

SELECT COD_CLI,NOME_CLI,RENDA_CLI,RENDA_CLI*1.37 FROM CLIENTE


Observe que est mostrando uma coluna com nome (No column name) para no aparecer est coluna necessrio criar um alias para a coluna conforme cdigo abaixo.

SELECT COD_CLI,NOME_CLI,RENDA_CLI,RENDA_CLI*1.37 AS "RENDA COM AUMENTO" FROM CLIENTE

Exerccios
1) Escreva um comando que exiba o nome do cliente, o valor da sua renda e apresente esta mesma renda com acrscimo de 11%. 2) Escreva um comando que exiba o nmero do pedido, o valor do pedido e apresente tambm o valor do pedido com desconto de 23%. 3) Escreva um comando que exiba o Nome do funcionrio, o salrio e apresente tambm o salrio com desconto de 9% para todos os funcionrios que ganham mais do que 2500.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 28 de 86

SQL Server 2000

9.3 WHERE (Restries)


Descrio: Com esta clusula possvel fazermos restrio dos registros a serem manipulados, como veremos posteriormente ela tambm poder ser usados para outros comandos do SQL. Sintaxe: SELECT <campo> FROM <tabela> WHERE <condio> Exemplo: /*sero listados todos os registro da tabela CLIENTES onde o campo Cod_Cli for igual a 1 */

SELECT * FROM CLIENTE WHERE COD_CLI = 1


/*sero listados todos os registros da tabela PEDIDO onde o campo Data_Ped for superior a 01/02/2001 E cod_sta= 1*/

SELECT * FROM PEDIDO WHERE DATA_PED > 2001/02/01 AND COD_STA=1


/*sero listados todos os registros da tabela CLIENTE onde o campo Nome_Cli for igual Daniel Souza OU Clientes do sexo Feminino */

SELECT * FROM CLIENTE WHERE NOME_CLI = 'DANIEL SOUZA' OR SEXO_CLI=F Obs: No esquea que na clausula where utiliza-se os operadores de comparao: maior, menor, igual, diferente, maior ou igual e menor ou igual.

Exerccios
1) Escreva um comando que exiba todas as colunas e todas as linhas de dados da tabela Cliente onde o cdigo do cliente igual a 3 . 2) Escreva um comando que exiba todas as colunas e todas as linhas de dados da tabela Produto onde o valor unitrio do produto acima de 1500.00 3) Escreva um comando que exiba todas as colunas e todas as linhas de dados da tabela Pedido que o Funcionrio de cdigo 3 vendeu E com valor abaixo de 250.00. 4) Escreva um comando que exiba todas as colunas e todas as linhas de dados da tabela Funcionrio do sexo Feminino E que o salrio seja superior a 1800.00 5) Escreva um comando que exiba todas as colunas e todas as linhas da tabela Pedido onde no mostre os pedidos do cliente 2 E valor do pedido superior a 200 E na data inferior a 12/04/2002.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 29 de 86

SQL Server 2000

9.4 BETWEEN (Condio com uma faixa de valores)


Definio: O operador BETWEEN determina a faixa de valores aceito de uma pesquisa. Este comando substitui os operadores >= e <=.

Sintaxe: SELECT <campo> FROM <tabela> WHERE <campo> BETWEEN <valor_inicial> AND <valor_final> Exemplos: /* seleciona todos os registros da tabela CLIENTE onde o campo Cod_Cli estiver entre 1 e 5 */

SELECT * FROM CLIENTE WHERE COD_CLI BETWEEN 1 AND 5


/* seleciona todos os registros da tabela PEDIDO onde o campo Data_Ped estiver entre 10/10/2003 a 02/10/2004 */

SELECT * FROM PEDIDO WHERE DATA_PED BETWEEN 2004/10/02'

'2003/10/10'

AND

/*seleciona todos os registros da tabela PRODUTO onde o campo Val_UnitProd estiver entre 500 e 1000 */

SELECT * FROM PRODUTO WHERE VAL_UNITPROD BETWEEN 500 AND 1000

Exerccios
1) Escreva um comando que exiba todas as colunas e todas as linhas de dados da tabela Cidade com o cdigo entre 3 a 8. 2) Escreva um comando que exiba todas as colunas e todas as linhas dos clientes que possui renda entre 250 a 1250. 3) Escreva um comando que exiba todas as colunas e todas as linhas dos funcionrios que possui salrio entre 520,23 a 2544,45. 4) Escreva um comando que exiba todas as colunas e todas as linhas de dados da tabela Pedido no perodo entre 09/02/2002 a 02/09/2004. 5) Escreva um comando onde exiba todas as colunas e todas as linhas da tabela Produto com valores unitrios entre 435,9 a 875,23.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 30 de 86

SQL Server 2000

9.5 LIKE (Comparao com uma parte de uma literal)


Definio: O operador LIKE faz a comparao somente com uma parte de uma literal, desconsidera tudo que possa vir antes ou depois do valor passado. O caracter % significa qual parte a ser desconsiderada Sintaxe: SELECT <campo> FROM <tabela> WHERE <campo> LIKE <[%]parte_literal[%]> Exemplos: /* seleciona todos os registros da tabela CLIENTES onde o campo Nome_Cli terminar com a literal SOUZA */

SELECT * FROM CLIENTE WHERE NOME_CLI LIKE %SOUZA


/* seleciona todos os registros da tabela CLIENTE onde o campo Nome_Cli comear com a letra A */

SELECT * FROM CLIENTE WHERE NOME_CLI LIKE A%


/* seleciona todos os registros da tabela CLIENTE onde o campo Nome_Cli possuir a literal OLIVEIRA dentro do seu contedo */

SELECT * FROM %OLIVEIRA%

CLIENTE

WHERE

NOME_CLI

LIKE

Exerccios
1) Escreva um comando que exiba todas as colunas e todas as linhas de dados da tabela Cidade onde nome da cidade comea com a letra A. 2) Escreva um comando que exiba todas as colunas e todas as linhas dos Funcionrios onde possui o sobrenome GARCIA. 3) Escreva um comando onde exiba todas as colunas e todas as linhas da tabela Produto onde liste os produtos que terminam com a letra O.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 31 de 86

SQL Server 2000

9.6 DISTINCT (Valores nicos)


Definio: O operador DISTINCT elimina todas as replicaes, significando que somente dados distintos sero apresentados como resultado de uma pesquisa.

Sintaxe: SELECT DISTINCT <campo> FROM <tabela> [WHERE <condio>]

Exemplos: /* seleciona todos os valores do campo Cdigo do Cliente, valor do pedido da tabela PEDIDO sem repetio dos cdigos do cliente */

SELECT DISTINCT COD_CLI,VAL_PED FROM PEDIDO


/* seleciona todos os valores do campo data do pedido , valor do pedido, da tabela Pedido sem repetio da data do pedido*/

SELECT DISTINCT DATA_PED,VAL_PED FROM PEDIDO

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 32 de 86

SQL Server 2000

10. FUNES DE AGRUPAMENTO


COUNT (CONTAR) SUM (SOMAR) AVG (MDIA) MAX (MXIMO) MIN (MNIMO)

10.1 COUNT (Contador de registros)


Definio: A funo COUNT retorna a quantidade de registros correspondentes a uma pesquisa. Sintaxe: SELECT COUNT(*) FROM <tabela> [WHERE <condio>] Exemplos: /* seleciona a quantidade de registros da tabela Clientes */

SELECT COUNT(*) AS TOTAL CLIENTES FROM CLIENTE


/* seleciona a quantidade de registros da tabela pedidos onde o campo data_ped estiver entre 02/02/2000 a 03/08/2002 */

SELECT COUNT(*)AS QUANTIDADE PEDIDOS FROM PEDIDO WHERE DATA_PED BETWEEN 2000/02/02 AND 2002/08/03
/* seleciona a quantidade de telefones que cada cliente possui */ SELECT COD_CLI,COUNT(COD_CLI) AS TOTAL TELEFONE FROM FONE GROUP BY COD_CLI

Exerccios
1) Escreva um comando onde mostra quantas Cidades tem Cadastrado no Infonew. 2) Escreva um comando onde mostre quantos funcionrios do sexo Masculino. 3) Escreva um comando que apresente quantos clientes so casados. 4) Escreva um comando que exiba quantos e-mails cada cliente tem. 5) Escreva um comando que exiba a quantidade de dependentes que cada funcionrio tem 6) Escreva um comando que mostre quantos pedidos voc tem de cada status. .

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 33 de 86

SQL Server 2000

10.1.1 GROUP BY (Agrupamento de dados)

Definio: A clusula GROUP BY agrupa todas as linhas de retorno de uma pesquisa que possurem o valor de seus campos iguais.

Sintaxe : SELECT (<campo_agrupamento> e/ou <funcao_agrupamento>) FROM <tabela> [WHERE <condio>] GROUP BY <campo_agrupamento>

Exemplo: /* seleciona a quantidade de telefones que cada cliente possui agrupado por cliente */

SELECT COD_CLI,COUNT(COD_CLI) AS TOTAL TELEFONE FROM FONE GROUP BY COD_CLI


/* seleciona a quantidade de emails que cada cliente possui agrupado por cliente */

SELECT COD_CLI,COUNT(COD_CLI) FROM EMAIL GROUP BY COD_CLI

AS

TOTAL

EMAIL

/* seleciona a quantidade de parcelas que cada pedido possui agrupado pedido */

SELECT NUM_PED, COUNT(NUM_PED) AS QUANT.PARCELAS FROM PARCELA GROUP BY NUM_PED

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 34 de 86

SQL Server 2000

10.2 SUM (Somatria de valores)


Definio: A funo SUM faz a somatria dos valores de um campo.

Sintaxe: SELECT SUM(<campo>) FROM <tabela> [WHERE <condio>]

Exemplos: /* seleciona a somatria dos valores do campo Renda_Cli da tabela Clientes */

SELECT COD_CLI, SUM(RENDA_CLI) AS RENDA CLIENTE FROM CLIENTE


/* seleciona a somatria dos valores do campo Val_UnitProd da tabela PRODUTO*/

SELECT COD_PROD, SUM(VAL_UNITPROD)AS VALOR TOTAL PRODUTOS FROM PRODUTO GROUP BY COD_PROD

Exerccios
1) Escreva um comando onde mostre a soma de todos os salrios dos funcionrios agrupados por cdigo. 2) Escreva um comando onde mostre a soma de renda de todos os clientes do sexo Feminino. 3) Escreva um comando onde mostre a soma pedidos. Agrupar por cliente. dos valores onde cada cliente gastou em

4) Escreva um comando onde mostre a soma dos valores em produtos vendidos em cada item. Agrupar por produto. 5) Escreva um comando onde mostre a soma dos valores recebido de cada pedido de acordo com a tabela parcela. Agrupar por pedido. 6) Escreva um comando onde mostre a soma dos valores recebido de cada pedido de acordo com a tabela parcela onde as parcelas pagas e acima de 12/04/2002. Agrupar por pedido

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 35 de 86

SQL Server 2000

10.3 AVG (Mdia de valores)


Definio: A funo AVG faz a mdia dos valores de um campo.

Sintaxe: SELECT AVG(<campo>) FROM <tabela> [WHERE <condio>]

Exemplos: /* seleciona a mdia dos valores do campo Renda_Cli da tabela Clientes */

SELECT COD_CLI, AVG(RENDA_CLI) AS RENDA CLIENTE FROM CLIENTE GROUP BY COD_CLI


/* seleciona a mdia dos valores do campo Val_UnitProd da tabela PRODUTO*/

SELECT COD_PROD, AVG(VAL_UNITPROD)AS VALOR TOTAL PRODUTOS FROM PRODUTO GROUP BY COD_PROD

Exerccios
1) Escreva um comando onde mostre a mdia de todos os salrios dos funcionrios agrupados por cdigo. 2) Escreva um comando onde mostre a mdia de renda de todos os clientes do sexo Feminino. 3) Escreva um comando onde mostre a mdia dos valores onde cada cliente gastou em pedidos. Agrupar por cliente. 4) Escreva um comando onde mostre a mdia dos valores em produtos vendidos em cada item. Agrupar por produto. 5) Escreva um comando onde mostre a mdia dos valores recebido de cada pedido de acordo com a tabela parcela. Agrupar por pedido. 6) Escreva um comando onde mostre a mdia dos valores recebido de cada pedido de acordo com a tabela parcela onde as parcelas pagas e acima de 21/08/2003. Agrupar por pedido

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 36 de 86

SQL Server 2000

10.4 MIN, MAX (Menor e maior valor)


Definio: As funes MIN e MAX retornam respectivamente o menor e o maior valor encontrado para um campo.

Sintaxe: SELECT MIN(<campo>) FROM <tabela> [WHERE <condio>] SELECT MAX(<campo>) FROM <tabela> [WHERE <condio>]

Exemplos: /* seleciona o menor do valor do campo Renda_Cli da tabela Clientes */

SELECT CLIENTE

MIN(RENDA_CLI)

AS

MENOR

RENDA

FROM

/* seleciona o maior do valor do campo Val_UnitProd da tabela PRODUTO*/

SELECT MAX(VAL_UNITPROD) AS MAIOR PRODUTO PRODUTO

FROM

Exerccios
1) Escreva um comando onde mostre o maior salrio de todos os funcionrios.

2) Escreva um comando onde mostre a menor de renda dos clientes do sexo Feminino.

3) Escreva um comando onde mostre o maior valor onde cada cliente gastou em pedidos.

4) Escreva um comando onde mostre o menor valor em produtos vendidos em cada item.

5) Escreva um comando onde mostre o menor valor recebido de cada pedido de acordo com a tabela parcela. Agrupar por pedido

6) Escreva um comando onde mostre o maior valor recebido de cada pedido de acordo com a tabela parcela onde as parcelas pagas e acima de 21/08/2003. Agrupar por pedido

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 37 de 86

SQL Server 2000

11.HAVING (condio do agrupamento)


Definio: A clusula HAVING faz com que o resultado da pesquisa seja feito sob determinada condio. A condio HAVING est para a clusula GROUP BY da mesma forma que a clusula WHERE est para o comando SELECT

Sintaxe: SELECT (<campo> ou <funo>) FROM <tabela> [WHERE <condio1>] GROUP BY <campo> HAVING <condio2> Exemplos:

/* seleciona o campo Cdigo Funcionrio e a quantidade de registros da tabela Dependentes agrupados pelo campo Cod_Func onde o valor do campo Quantidade de Dependentes deve possuir mais de 1 ocorrncia */

SELECT COD_FUNC, COUNT(COD_FUNC) AS TOTAL FROM DEPENDENTE GROUP BY COD_FUNC HAVING COUNT(COD_FUNC) > 1

/* seleciona o campo RENDA, o menor e o maior valor do campo RENDA da tabela CLIENTE agrupados pelo campo CODIGO onde o valor do campo CODIGO deve possuir mdia superior a 450 */

SELECT COD_CLI, MIN(RENDA_CLI) AS MINIMO, MAX(RENDA_CLI) AS MXIMO FROM CLIENTE GROUP BY COD_CLI HAVING AVG(RENDA_CLI) > 450

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 38 de 86

SQL Server 2000

12. JOIN (Relacionamento de tabelas)


12.1 Introduo a Joins:
Um join uma operao que permite voc consultar duas ou mais tabelas para produzir um result set que incorpora linhas e colunas de cada tabela. Seu join ocorre em colunas das tabelas que so comuns em ambas s tabelas. Quando na execuo de um join de tabelas, o SQL Server compara os valores das colunas especificas, linha a linha e ele usa o resultado da comparao para combinar os valores qualificando para novas linhas. So quatro tipos de joins: inner joins, outer joins, cross joins e self joins.

12.2 TIPOS DE JOINS


Inner Join Outer Join Cross Join Self Join

12.2.1 Usando Inner Joins:


Inner joins combinam tabelas pela comparao em colunas que so comuns a ambas as tabelas. SQL Server retorna somente linhas que atendem as condies do join. Quando usar joins considere os seguintes fatos e diretrizes: Inner Joins so DEFAULT SQL Server. Voc pode abreviar a clausula INNER JOIN para JOIN. Especifique as colunas que voc gostaria de mostrar no seu result set pela incluso do qualified name da coluna na listas do select. Inclua a clausula Where para restringir as linhas que so retornadas no result set. No use um valor nulo como uma condio join porque valores nulos no so avaliados igualmente com um outro.

12.2.2 Usando Outer Joins:


Voc usa um outer join para ver linhas que normalmente no atendem a uma condio de join. Operador do Outer join um sinal de (*) antes ou depois da condio de igualdade, ou usando a palavra chave LEFT OUTER JOIN, RIGHT OUTER JOIN. Left ou Right outer joins, combinam linhas a partir de duas tabelas que atenda a uma condio de join, mais qualquer das linhas que no atendam ou da tabela do lado esquerdo ou da tabela do lado direito como especificado na clausula JOIN. Linhas que no atendem a condio join mostram null no result set.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 39 de 86

SQL Server 2000

Voc tambm pode usar full outer joins para mostrar toas s linhas nas tabelas join, indiferentemente das tabelas terem atendido quaisquer dos valores. Quando utilizar left ou right outer joins, considere os seguintes fatos ou diretrizes: SQL Server retorna somente linhas nicas quando voc usa left ou right outer joins. Use um left outer join para mostrar todas as linhas a partir da primeira tabela nomeada. Se voc inverter a ordem no qual as tabelas esto listadas na clausula FROM, a declarao produz o mesmo resultado como um right outer join. No use um valor nulo como condio de join porque valores nulos so avaliados igualmente com um outro. Voce pode abreviar o LEFT OUTER JOIN ou RIGHT OUTER JOIN como LEFT JOIN ou RIGHT JOIN. Voc pode usar outer joins entre duas tabelas somente.

12.2.3. Usando Cross Joins:


Cross join mostra combinao de todas as linhas das tabelas unidas. Nenhuma coluna comum ser necessria para fazer um cross join. Quando voc usa cross joins, SQL Server produz um produto cartesiano no qual o numero de linhas no resultado seja igual ao numero de segunda tabela. Por exemplo, se so 8 linhas na primeira tabela e 9 linhas na outra tabela SQL Server retorna um total de 72 linhas.

12.3 Exemplos de JOIN (Relacionamento de tabelas)


/* seleciona o campo CODIGO, NOME da tabela CLIENTE e o campo EMAIL DO CLIENTE da tabela EMAIL */

SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI, EMAIL.EMAIL_CLI FROM CLIENTE INNER JOIN EMAIL ON CLIENTE.COD_CLI =EMAIL.COD_CLI OU SELECT C.COD_CLI,C.NOME_CLI, E.EMAIL_CLI FROM CLIENTE C INNER JOIN EMAIL E ON C.COD_CLI =E.COD_CLI (Exemplos com a utilizao de alias)
/*Utilizando o exemplo anterior agora queremos listar todos os clientes possui ou no email, para fazer tal consulta necessrio a utilizao do comando OUTER JOIN */

SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI, EMAIL.EMAIL_CLI FROM CLIENTE LEFT OUTER JOIN EMAIL ON CLIENTE.COD_CLI = EMAIL.COD_CLI Curso Microsoft SQL Server 2000
Autor: Nilson A. Borges 40 de 86

SQL Server 2000

/*Utilizando o exemplo anterior agora queremos fazer todas as combinaes possveis de cliente com email, para fazer tal consulta necessrio a utilizao do comando CROSS JOIN */

SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI, EMAIL.EMAIL_CLI FROM CLIENTE CROSS JOIN EMAIL

12.3 Combinao de mais de 2 tabelas


/* seleciona o campo CODIGO, NOME da tabela CLIENTE NOME_RUA, NOME_BAIRRO da tabela ENDEREO e NOME_CID da tabela CIDADE */

SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI, ENDERECO.NOME_RUA,ENDERECO.NOME_BAIRRO, CIDADE.NOME_CID FROM CLIENTE INNER JOIN ENDERECO ON CLIENTE.COD_CLI =ENDERECO.COD_CLI INNER JOIN CIDADE ON CIDADE.COD_CID =ENDERECO.COD_CID OU SELECT CL.COD_CLI,CL.NOME_CLI,E.NOME_RUA, E.NOME_BAIRRO,CI.NOME_CID FROM CLIENTE CL JOIN ENDERECO E ON CL.COD_CLI =E.COD_CLI JOIN CIDADE CI ON CI.COD_CID =E.COD_CID

Exerccios
1) Escreva um comando o exibe o cdigo e nome do cliente da tabela Cliente e nmero do telefones dos clientes . 2) Escreva um comando o exibe o nome do funcionrio e o sexo da tabela Funcionrio e o nome dos dependentes, sexo e data de nascimento da tabela dependente. 3) Escreva um comando o exibe o cdigo e nome do cliente da tabela Cliente e nome do cnjuge da tabela Cnjuge. 4) Escreva um comando o exibe o cdigo do funcionrio e o nome do funcionrio da tabela Funcionrio e a pontuao de cada funcionrio da tabela pontuao. Exibir todos os funcionrios tendo pontuao ou no. 5) Escreva um comando onde mostre o nome do cliente, sexo do cliente da tabela CLIENTE, nmero do pedido da tabela PEDIDO e o status do pedido da tabela STATUSPEDIDO 6) Escreva um comando onde mostre o nome do cliente da tabela CLIENTE, nmero do pedido da tabela PEDIDO e o nome do funcionrio que atendeu este pedido da tabela FUNCIONARIO.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 41 de 86

SQL Server 2000

13. IN (Condio com valores fixos)


Definio: O operador IN determina os valores fixos aceitos de uma pesquisa.

Sintaxe: SELECT <campo> FROM <tabela> WHERE <campo> IN (<lista_de_valores>)

Exemplos: /* seleciona todos os registros da tabela CLIENTE onde o campo CODIGO for igual a 1 ou 2 ou 3 ou 4 */

SELECT * FROM CLIENTE WHERE COD_CLI IN (1,2,3,4)


/* seleciona todos os registros da tabela PEDIDO onde o campo NUMERO for igual a 45 ou 50 */

SELECT * FROM PEDIDO WHERE NUM_PED IN (45,50)


/* seleciona todos os registros da tabela TIPOCLI onde o campo CODIGO for igual a 1 ou 3 ou 5 ou 6*/

SELECT * FROM TIPOCLI WHERE COD_TIPOCLI IN (1, 3, 5, 6)


/* seleciona todos os registros da tabela TIPOCLI onde o campo NOME for igual a OURO

SELECT * FROM TIPOCLI WHERE NOME_TIPOCLI IN (OURO)

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 42 de 86

SQL Server 2000

14. SUBQUERIES (Pesquisa dentro de um comando)


Definio: O conceito de SUBQUERIES possibilita criar um consulta (comando SELECT) dentro de um outro comando(SELECT, INSERT, UPDATE, DELETE). Sintaxe: No existe uma sintaxe fixa, mas existem algumas restries: - deve estar sempre entre parnteses; - no pode ser usada na clusula ORDER BY; - a subquery no pode conter ORDER BY, COMPUTE ou SELECT INTO - a subquery no pode, em hiptese alguma, retornar mais de uma coluna no caso de comparao por valores ou listas; - a subquery deve usar a funo EXISTS se fizer um SELECT *; - no pode usar na lista de colunas do SELECT uma coluna do tipo IMAGE ou TEXT.

Exemplos: /* seleciona todos os registros da tabela CLIENTE onde o campo RENDA for maior ou igual ao maior valor da mdia do campo RENDA */

SELECT * FROM CLIENTE WHERE RENDA_CLI > = (SELECT FROM CLIENTE )

AVG(RENDA_CLI)

/* seleciona todos os registros da tabela PRODUTOS o campo VALOR UNITARIO maior do o menor valor do campo VALOR DO PEDIDO */

SELECT * FROM PRODUTO WHERE VAL_UNITPROD > (SELECT MIN(VAL_PED) FROM PEDIDO)
/* seleciona todos os registros da tabela CLIENTE onde exibe os clientes de no possuem telefone */

SELECT * FROM CLIENTE WHERE COD_CLI NOT IN (SELECT COD_CLI FROM FONE)

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 43 de 86

SQL Server 2000

/* seleciona todos os registros da tabela CLIENTE onde exibe os clientes que possuem email */

SELECT * FROM CLIENTE WHERE COD_CLI IN (SELECT COD_CLI FROM EMAIL)


/* seleciona todos os registros da tabela CLIENTE onde exibe os clientes que fizeram pedidos */

SELECT * FROM CLIENTE WHERE COD_CLI IN (SELECT COD_CLI FROM PEDIDO)


Alguns casos podem ser resolvidos tanto por SUBQUERIES como por JOINS, outros apenas por SUBQUERIES.

Exerccios
1) Escreva um comando que exiba todos os Funcionrios onde o salrio seja maior ou igual mdia dos Salrios. .

2) Escreva um comando que exiba os pedidos onde o valor_unitrio de cada pedido seja maior do que a mdia dos valores dos produtos cadastrados.

3) Escreva um comando que exiba todos os dados dos clientes solteiros.

4) Escreva um comando que apresente os dados de todos os clientes que no fizerem nenhum pedido.

5) Escreva um comando que apresente os dados de todos os clientes que possuem telefone.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 44 de 86

SQL Server 2000

15. CRIANDO VISES (VIEW)


As views nada mais so do que instrues SELECT j pr-definidas e armazenadas no banco. um objeto do SQL Server utilizado para dar nome a uma query. Este conceito pode parecer simples, e , mas pode-se resolver muitos problemas com as views. Uma view no um programa, portanto dentro dela voc s pode escrever o comando Select. Voc pode colocar dentro de uma view o comando select feito com as seguintes critrios: Consultas com unio (Join) Consultas com unio (Union) Consultas com Group By com funo de totalizao Consultas com subconsultas (Subquery) Consultas com Order By apenas com Top. Uma view no pode ter um select com order by sem a clausula Top. Uma view no recebe parmetros de entrada. Para criar uma view, utilizamos o comando CREATE VIEW. Sua sintaxe: Sintaxe: CREATE VIEW <view_name> AS <instruo_SELECT> Exemplos: /* Criar uma view que seleciona todos os registros da tabela CLIENTE onde o campo CODIGO for igual a 1 ou 2 ou 3 ou 4 */

CREATE VIEW V_CLIENTE AS SELECT * FROM CLIENTE WHERE COD_CLI IN (1,2,3,4)


Para testar a View digite somente o cdigo abaixo SELECT * FROM V_CLIENTE Suponha que necessitamos liberar o acesso aos dados da tabela Funcionrio, mas no podemos liberar o acesso aos dados da coluna Salrio (Sal_Func). Para solucionar esta questo, voc poderia criar uma View sobre essa tabela e liberar para o usurio acesso tabela apenas por meio da view:

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 45 de 86

SQL Server 2000

/* Criar uma view Funcionrio da situao relatada anteriormente */

CREATE VIEW V_FUNC AS SELECT COD_FUNC,NOME_FUNC, SEXO_FUNC,END_FUNC FROM FUNCIONARIO


Para testar a View digite somente o cdigo abaixo SELECT * FROM V_FUNC Outro ponto importante sobre as views: no podemos utilizar a clusula ORDER BY na definio da view. Como uma exceo: quando se utiliza TOP para limitar os registros: -- Isto uma definio vlida de uma view

CREATE VIEW V_PEDIDO AS SELECT TOP 50 NUM_PED,COD_CLI,DATA_PED FROM PEDIDO ORDER BY DATA_PED
Para testar a View digite somente o cdigo abaixo SELECT * FROM V_FUNC No podemos utilizar as clusulas COMPUTE, COMPUTE BY e INTO dentro de uma view

Exerccios
1) Crie uma view que apresenta o nome dos clientes, o salrio de cada um (totalizando com o salrio dos cnjuges daqueles que tiverem cnjuge) e o valor do ltimo crdito concedito a cada um.

2) Crie uma view apresente o nome de todos os produtos vendidos em cada pedido.

3) Crie uma view que apresente o nome dos funcionrios e o total de bnus de cada um.

4) Crie uma view que apresente os dados de todos os clientes que no fizerem nenhum pedido.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 46 de 86

SQL Server 2000

16. CRIANDO STORED PROCEDURE (PROCEDIMENTOS)


Stored Procedures: so conjuntos de instrues, armazenados em bancos de dados, que realizam operaes com os demais dados do banco. So teis em um programa por vrias razes, uma delas para se evitar a necessidade de ler os dados do banco, fazer as operaes neles e depois gravar novamente. Outra pela possibilidade que trazem de se balancear o processamento entre o servidor de banco de dados e o servidor da aplicao que acessa o banco. Possuem 2 tipos a respeito a execuo: dinmica e esttica. A utilizao da palavra dinmico na computao, em geral, representa algo mais desejvel do que sua contrapartida esttica. Como exemplo podemos comparar as funcionalidades de uma pgina web dinmica com uma pgina web esttica ou mesmo na resoluo dinmica de nomes (DNS) com uma resoluo esttica. Pois bem, nem sempre devemos preferir o que dinmico ao que esttico por vrios motivos. No que diz respeito aos bancos de dados, sempre que possvel devemos utilizar instrues estticas. As instrues estticas so aquelas que normalmente programamos em uma aplicao e que sero encaminhadas para o banco de dados por um mtodo de acesso. Elas podem ser estticas para o banco de dados e serem montadas dinamicamente na aplicao. Para explicar como funcionam os comandos dinmicos no SQL Server vou utilizar um exemplo. Suponham que, por alguma necessidade, precisamos fazer um SELECT em uma tabela atravs de uma Stored Procedure. Mas no sabemos em qual tabela devemos utilizar, ou seja, somente em tempo de execuo saberemos qual tabela devemos consultar. Nesta situao uma boa opo utilizar o recurso de execuo dinmica de instrues SQL. Esta execuo dinmica funcionar da seguinte forma: uma string deve ser montada com a instruo que desejamos executar. Esta string deve possuir uma instruo sintaticamente correta para o SQL Server e, tendo esta string montada, devemos executa-la em tempo de execuo. No nosso exemplo, vamos passar como parmetro de entrada de uma Stored Procedure no nome da tabela que desejamos consultar. Em seguida vamos concatenar o valor do parmetro com uma string e colocar a string completa dentro de uma varivel. Por fim, iremos executar esta instruo com o comando EXECUTE() do SQL Server. O cdigo desta Stored Procedure mostrado abaixo:

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 47 de 86

SQL Server 2000

/* Esta Procedure vai fazer um Select Dinmico em alguma Tabela */

CREATE PROCEDURE VARCHAR(50) AS BEGIN


/* Declarando a Varivel

ST_SQL_DINAMICO

@NOME_TABELA

que

conter

instruo

*/

DECLARE @INSTR_SQL VARCHAR(500)


/* Contatenando a instruo com o Nome da Tabela */

SET @INSTR_SQL = "SELECT * FROM " + @NOME_TABELA /* EXECUTANDO A INSTRUO DINAMICAMENTE */ EXECUTE(@INSTR_SQL) END
Para executar esta Stored Procedure basta indicar qual o nome da tabela:

EXEC ST_SQL_DINAMICO "Infonew.dbo.Cliente"


Muito bem, vimos como funciona a execuo dinmica de instrues do SQL Server. Mas quais so os pontos negativos da execuo dinmica? Em exemplos como o citado acima no h grandes problemas. O SQL Server s vai ter um pouco de trabalho para fazer o parser da instruo em tempo de execuo, compilar e colocar o plano de execuo no procedure cache a cada vez que esta Stored Procedure for executada. Se esta Stored Procedure for executada muitas vezes podemos contornar o problema acima utilizando a system Stored Procedure sp_executesql no lugar do EXECUTE(). Para mais informaes sobre a sp_executesql procurem na documentao oficial do SQL Server, o Books Online, que contm uma boa descrio de seus parmetros e alguns exemplos de uso. Outro inconveniente da execuo dinmica o retorno de dados. Se desejarmos fazer alguma manipulao nos dados retornados por uma execuo dinmica, devemos fazer uso de uma tabela temporria que ser preenchida com o retorno da execuo. Esta tabela temporria vai armazenar o ltimo resultado da(s) instruo(es) dinmica(s) e deve conter a mesma quantidade e tipos de dados das colunas que o resultado.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 48 de 86

SQL Server 2000

16.1 Stored Procedure (Parmetros de Sada):


Stored Procedure - Passagem de parmetros em SQL Server 2000, trago agora neste texto, uma forma prtica de como usar parmetros de sadas, que um recurso complementar ao trabalho com stored procedure. Lembrando que continuamos usando como exemplo o Microsoft SQL Server 2000, mas os conceitos bsicos podem ser aplicados em praticamente todos os bancos de dados relacionais do mercado.

Parmetros de sada
O uso de parmetros de sada em stored procedure possibilita que o engine do servidor de banco de dados utilize menos recursos de hardware para retornar e exibir os resultados de uma instruo SQL, possibilitando um aumento de performance em seu envio, processamento e sada. Vale lembrar tambm, que o uso de parmetros de sada, permite uma boa manipulao dos valores retornados.

O comando CREATE PROCEDURE (com o uso de OUTPUT)


Para especificar que um stored procedure ter uma varivel do tipo sada, use a forma normal de sintaxe para criao de stored procedure adicionando o flag OUTPUT no final da declarao de cada varivel, veja a sintaxe na Listagem 1: Create Procedure NOME_DA_PROCEDURE (@VARIVEL TIPO_DE_DADO OUTPUT) As Begin

** Instruo SQL desejada parmetro(varivel) ** end

atribuindo

um

valor

ao

Listagem 1. Sintaxe do comando CREATE PROCEDURE.


Executando uma procedure e recuperando seu valor de retorno. Para invocar a execuo de um stored procedure, usado a mesma sintaxe simples EXEC NOMEPROCEDURE, porm, a diferena est na necessidade em declararmos uma varivel com o mesmo tipo de dado do parmetro, e especificarmos que ela receber o valor retornado pelo parmetro de sada atravs da funo output.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 49 de 86

SQL Server 2000

Veja na Listagem 2, a sintaxe bsica para esse tipo de execuo: /*Declarao de variveis que receberam o resultado da procedure */

declare @VARIVEL tipo ...

/*execuo e atribuio do valor de retorno. */

exec NomeStoredProcedure @VARIVEL output

/* Manipulao do resultado. */

PRINT 'O valor : '+@VARIAVEL Listagem 2. Sintaxe de execuo de um stored procedure e recuperao do valor retornado atravs do uso da funo output.
Lembrando que voc pode aplicar todos os recursos de criao e execuo de stored procedure, como por exemplo, as funes: alter procedure, drop procedure, with encryption, etc.

Exemplos prticos:
Veja aqui, alguns exemplos prticos que mostram como criar stored procedure com parmetros de sada. Nota 01 Voc pode testar esses scripts em qualquer database, porm antes, necessrio criar e inserir dados na tabela de exemplo conforme a Listagem 3.

/*Criao da tabela que ser o objeto de nossos exemplos */ create table FUNCIONARIOS (CODIGO varchar(5), NOME varchar(80), FUNCAO int, DEPARTAMENTO int, SALARIO money CONSTRAINT PK_CODIGO PRIMARY KEY (CODIGO)) go

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 50 de 86

SQL Server 2000

/*Inseres para povoamento da tabela de FUNCIONARIOS */ insert into FUNCIONARIOS (CODIGO, NOME,FUNCAO,DEPARTAMENTO, SALARIO ) values('00001','OSCAR ALHO DA SILVA', '5','30', 2500) go insert into FUNCIONARIOS (CODIGO, NOME,FUNCAO,DEPARTAMENTO, SALARIO ) values('00002','JOO DA SILVA SAURO', '5','30', 3500) go insert into FUNCIONARIOS (CODIGO, NOME,FUNCAO,DEPARTAMENTO, SALARIO ) values('00003','MARIA DA BOA MORTE', '7','20',1500) go insert into FUNCIONARIOS (CODIGO, NOME,FUNCAO,DEPARTAMENTO, SALARIO ) values('00004','BENEVENUTO LOPES ARAUJO', '7','10',1500) go insert into FUNCIONARIOS (CODIGO, NOME,FUNCAO,DEPARTAMENTO, SALARIO ) values('00005','MATUZALEM ALVES', '5','30',1500)

Listagem 3. Script SQL para Criao e povoamento da tabela de testes(FUNCIONARIOS).


Exemplo 02 - Implementao de um procedure com um parmetro de sada /*Procedure simples para recuperar a soma dos salrios da tabela FUNCIONARIOS */

create procedure sp_BuscaSalario (@SOMA money OUTPUT) as begin select @SOMA=sum(SALARIO) from FUNCIONARIOS end

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 51 de 86

SQL Server 2000

/*Execuo do stored procedure */ /*Declarao de variveis que receberam o resultado do procedure */

declare @SALARIO_TOTAL money

/*execuo*/

exec sp_BuscaSalario @SALARIO_TOTAL output

/* Manipulao do resultado*/

PRINT 'Salrio total R$'+(CAST(@SALARIO_TOTAL AS varchar(20)))

Listagem 4. Recuperando o valor de uma soma de consulta.


Exemplo 03 - Recuperando um valor e aplicando uma estrutura de deciso /*Procedure simples para recuperar a soma dos salrios e aplicar uma estrutura de deciso*/ Create Procedure sp_BuscaSalario2 (@SOMA money OUTPUT) as begin select @SOMA=sum(SALARIO) from FUNCIONARIOS end

/*Execuo do procedure */ declare @SALARIO_TOTAL money exec sp_BuscaSalario2 @SALARIO_TOTAL output

if @SALARIO_TOTAL < 20000 begin print '***SALRIO BAIXO***** ' print 'Salrio total R$'+(CAST(@SALARIO_TOTAL AS varchar(20))) end else begin print '***SALRIO ALTO***** ' print 'Salrio total R$'+(CAST(@SALARIO_TOTAL AS varchar(20))) end

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 52 de 86

SQL Server 2000

Listagem 5. Parmetros e estrutura IF ..ELSE..


Exemplo 04 - Passando e Recuperando parmetros /*Procedure com passagem de parmetro como critrio de seleo para recuperar a soma dos salrios da tabela FUNCIONARIOS atravs de parmetro de sada*/

create procedure sp_BuscaSalario_porDepto (@DEPTO int, @SOMA money OUTPUT) as begin select @SOMA=sum(SALARIO) from FUNCIONARIOS where DEPARTAMENTO=@DEPTO end

/*Execuo do procedure */ /*Varivel de sada */

declare @SALARIO_TOTAL money

/*Varivel para passagem de parmetro*/

declare @DEPARTAMENTO int set @DEPARTAMENTO=30

/*execuo*/

exec sp_BuscaSalario_porDepto @DEPARTAMENTO, @SALARIO_TOTAL output PRINT 'Salrio total do departamento '+ cast(@DEPARTAMENTO as varchar)+ ' R$'+(CAST(@SALARIO_TOTAL AS varchar(20)))

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 53 de 86

SQL Server 2000

Listagem 6. Procedure com um parmetro de entrada, e outro de sada.


Nota 02 Caso voc esteja usando o SQL Query Analyzer, o resultado da execuo de seus stored procedure ser semelhante ao mostrado na Figura 01.

Figura 1: Resultado da execuo de um stored procedure atravs do SQL Query Analyzer

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 54 de 86

SQL Server 2000

17. CRIANDO FUNCTION (UDF :FUNCES DEFINIDAS PELO O USURIO )


FUNES DEFINIDAS PELO USURIO - UDF
Nas linguagens de programao as funes quebram grandes tarefas de processamento de dados em pequenas partes. Conjuntos complexos de funes podem ser divididos em pequenas unidades lgicas mais facilmente gerenciveis. Qualquer cdigo que deve executar uma tarefa lgica especfica, quando incorporado a uma funo, pode ser chamado de dentro de um programa sem a necessidade de repetir o cdigo responsvel por aquela tarefa vrias vezes. Uma funo definida pelo usurio (UDF) um mdulo de instrues Transact-SQL que pode ou no possuir argumentos e que retorna um resultado. Por exemplo, uma funo pode informar o valor de uma parcela mensal a partir de uma taxa de juros informada, calcular a distncia entre dois pontos, selecionar uma lista de empregados que pertencem a um departamento, etc. Uma UDF muito parecida com uma stored procedure, ou seja, possui instrues que controlam o fluxo do programa e a manipulao dos dados. Uma UDF difere de uma stored procedure nos seguintes aspectos:

No permite qualquer alterao no estado global da sesso, por exemplo, como a mudana do banco de dados. No permite a utilizao de parmetros com a clsula OUTPUT. No pode ser usada com a opo FOR XML para obteno do resultado. Portanto, a opo FOR XML pode ser utilizada apenas em stored procedures. Erros do Transact-SQL que causam o cancelamento da instruo, e ento continuam na prxima instruo de um mdulo (como em triggers e stored procedures) so tratados de modo diferente dentro de uma funo. Em uma funo, os erros encontrados em instrues Transact-SQL interrompem seu processamento.

Entretanto, se voc necessita de procedimentos que retornam resultados, uma UDF frequentemente a melhor escolha para uma aplicao SQL, pelo simples fato de poder ser chamada a partir de uma instruo SQL.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 55 de 86

SQL Server 2000

17.1 Definindo uma function UDF:


Antes de poder definir uma UDF, deve-se determinar suas caractersticas, tais como, seu nome, sua vinculao ou no aos objetos referenciados, o nmero e tipos de dados dos parmetros que ela ter, e finalmente, os tipos de valores retornados. Voc ento executa a instruo CREATE FUNCTION para criar a UDF. Caso aps definir a funo, voc venha a descobrir que qualquer uma das caractersticas no so apropriadas, voc poder usar a instruo ALTER FUNCTION para alterar as informaes utilizadas em sua definio. Voc no poder fazer uso da instruo ALTER FUNCTION para modificar o tipo de uma funo, ou seja, uma funo do tipo scalar valued para uma funo do tipo table valued ou vice-versa. Similarmente, voc no poder utilizar a instruo ALTER FUNCTION para modificar uma funo do tipo inline para uma funo multi-statement ou vice-versa. Entretanto, voc poder remover funes UDF com a instruo DROP FUNCTION. necessrio ter permisso sobre a instruo CREATE FUNCTION para criar, alerar ou excluir UDFs. Outros usurios, alm do criador da UDF, devem ter as permisses apropriadas antes de poder utiliz-la em instrues Transact-SQL. Para criar ou alterar tabelas com CHECK constraint, clusula DEFAULT ou uma computed column, que faam referncias a UDFs, o usurio deve ter a permisso de REFERENCES sobre a funo. As instrues vlidas em uma funo incluem:

A instruo DECLARE poder ser utilizada para definer as variveis e cursores que sero locais para a funo. As atribuies de valores para objetos locais da funo so permitidas com a utilizao da opo SET para variveis locais do tipo table e scalar. Operaes com cursores locais que so declarados, abertos, fechados e liberados dentro da funo. A instruo FETCH que retorna dados para o cliente no permitida. Apenas a instruo FETCH que atribui valores para variveis locais e que utilizam a clusula INTO so permitidas. So permitidas as instrues de controle de fluxo (tais como IF..ELSE, WHILE, RETURN, GOTO, BREAK, and CONTINUE). As instrues SELECT que contenham expresses que atribuam valores para variveis que so locais para a funo. As instrues UPDATE, INSERT, and DELETE que modificam variveis do tipo table que so locais para a funo. A instruo EXECUTE com chamadas para extended stored procedures.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 56 de 86

SQL Server 2000

As seguintes regras se aplicam quando uma UDF faz chamadas a uma extended stored procedure:

A extended stored procedure no pode retornar dados para o cliente. Se a stored procedure retorna dados, a execuo da funo chamadora falhar. A extended stored procedure pode se reconectar ao SQL Server; entretanto, a chamada a extended stored procedure deve fazer parte da mesma transao que a funo que a chamou As funes que chamam extended stored procedure so marcadas como funes nondeterministic. (Veja abaixo no tem determinismo da funo). A extended stored procedure executada no contexto de segurana da conta de usurio do Microsoft Windows sob a qual o SQL Server est rodando. O criador da stored procedure deve considerer isso quando atribuir direitos de EXECUTE para os usurios.

17.2 Tipos de Function:


O SQL Server 2000 implementa trs tipos de UDFs assim conhecidas:

Scalar valued functions Inline table valued functions Multi-statement table valued functions

17.2.1. Funes Scalar valued:


Uma funo definida pelo usurio do tipo scalar valued retorna um nico valor em resposta a cada uma das chamadas funo. Uma funo do tipo scalar valued se a clusula de retorno especifica um tipo de dado scalar do SQL Server. Funes do tipo Scalar valued podem ser definidas com a utilizao de mltiplas instrues Transact-SQL. Exemplo:

CREATE FUNCTION Volume (@Altura decimal (4,1), @Largura decimal (4,1), @Profund decimal (4,1)) RETURNS decimal (12,3) - tipo de dado de retorno. AS BEGIN RETURN (@Altura * @Largura * @Profund) END Curso Microsoft SQL Server 2000
Autor: Nilson A. Borges 57 de 86

SQL Server 2000

A clusula RETURNS, no exemplo anterior, especifica que um decimal scalar_data_type sera retornado pela funo. A clusula RETURNS pode ser qualquer um dos tipos de dados conhecidos como scalar_data_types do SQL Server exceto timestamp, text, ntext, or image. Para as funes do tipo scalar valued, utiliza-se a instruo RETURN com um argumento. O valor desse argumento retornado como o resultado da funo. O tipo de dado do argumento passado com a instruo RETURN deve poder ser implicitamente convertido para o tipo de dado do valor de retorno da funo. Nas chamadas s funes do tipo scalar, deve-se utilizar ou o formato de nome nome_do_usurio.nome_da_funo ou nome_do_banco_de_dados. nome_do_usurio.nome_da_funo Voc no pode usar o nome da funo isoladamente; essa restrio existe para diferenciar as chamadas s UDFs das chamadas s funes do SQL Server. Ns poderamos chamar a funo que definimos anteriormente da seguinte forma: Para testar a Function

Select dbo.Volume(12.2,10.6,10.0)

17.2.2. Funes Table Valued:


Para funes do tipo inline table valued, a cludula RETURNS seguida da palavra TABLE sem uma lista de colunas. As funes do tipo inline table valued retornam valores apresentados como se extrados de tabelas e so definidas com uma nica instruo SELECT em sua construo. As colunas, incluindo os tipos de dados retornados pela funo, so derivados da lista da instruo SELECT que define a funo. Exemplo:

CREATE FUNCTION fn_Clientes_na_Regiao (@Regiao nvarchar (30)) RETURNS TABLE AS RETURN ( SELECT CustomerID, CompanyName FROM Northwind.dbo.Customers WHERE Region = @Regiao )
A clusula RETURNS no exemplo acima apresenta apenas a palavra TABLE sem especificar qualquer lista de colunas desejadas. Note tambm que existe uma nica instruo RETURN que contm a instruo SELECT com a definio do corpo da funo.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 58 de 86

SQL Server 2000

Para testar a Function :

SELECT * FROM fn_Clientes_na_Regiao (N'WA')

17.2.3. Funes Multi-Statement Table Valued:


Se a clusula RETURNS especificar uma tabela com suas colunas e tipos de dados, a funo ser do tipo multi-statement table valued. Exemplo:

CREATE FUNCTION LargeOrderShippers (@FreightParm money) RETURNS @OrderShipperTab TABLE ( ShipperID int, ShipperName nvarchar (80), OrderID int, ShippedDate datetime, Freight money ) AS BEGIN INSERT @OrderShipperTab SELECT S.ShipperID, S.CompanyName, O.OrderID, O.ShippedDate, O.Freight FROM Shippers AS S INNER JOIN Orders AS O ON S.ShipperID = O.ShipVia WHERE O.Freight > @FreightParm RETURN END
A clusula RETURNS no exemplo acima define uma varivel local de retorno do tipo table chamada @OrderShipperTab, e tambm define a estrutura da tabela com a definio das colunas. As instrues no corpo da funo inserem linhas na varivel table local @OrderShipperTab para construir a tabela que ser o resultado retornado pela funo. Note que a instruo RETURN no tem argumento. O valor da varivel local do tipo table definida sera o valor retornado pela funo.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 59 de 86

SQL Server 2000

A seguir temos um exemplo de como chamar a funo do tipo multistatement table valued:

SELECT * FROM LargeOrderShippers ($500)


Opcionalmente, chamadas s funes do tipo table valued podero ser seguida de um alias para a tabela. Pode-se tambm utilizar um alias para se referir s colunas que so retornadas pela funo nas clusulas SELECT e WHERE.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 60 de 86

SQL Server 2000

18. CRIANDO TRIGGERS (GATILHOS )


Triggers so procedimentos que podem ser gravados em Transact SQL, Java, PL/SQL ou C. So executados (ou disparados) implicitamente quando uma tabela modificada, um objeto criado ou ocorrem algumas aes de usurio ou de sistema de banco de dados. As triggers so similares as stored procedures diferindo, apenas, na maneira como so chamadas. As Triggers so chamadas indiretamente pelos comandos INSERT, UPDATE ou DELETE executada implicitamente quando ocorre algum evento de trigger enquanto a stored procedure deve ser executado explicitamente. Uma trigger composta por quatro partes:

Momento Evento Tipo Corpo BEFORE (tabela) AFTER (tabela) INSTEAD OF (view)

O momento define quando uma trigger ir ser acionada. Pode ser:

BEFORE indica que os comandos PL/SQL do corpo da trigger sero executados ANTES dos dados da tabela serem alterados. Normalmente usamos BEFORE nos casos em que precisamos incializar variveis globais, validar regras de negcios, alterar o valor de flags ou para salvar o valor de uma coluna antes de alterarmos o valor delas. Exemplo:
/ * Escreva um trigger que realize a baixa em estoque a cada produto vendido em cada pedido * /

CREATE TRIGGER T_BaixaEstoque ON Itens BEFORE INSERT AS IF(SELECT Cod_Sta FROM Pedido INNER JOIN inserted ON Pedido.Num_Ped = Inserted.Num_Ped) = 1 --Se o Pedido estiver aberto UPDATE Produto SET Qtd_EstqProd = Qtd_EstqProd Inserted.Qtd_Vend FROM Produto INNER JOIN inserted ON Produto.Cod_Prod = Inserted.Cod_Prod ELSE Curso Microsoft SQL Server 2000
Autor: Nilson A. Borges 61 de 86

SQL Server 2000

BEGIN RAISERROR('Este pedido no est aberto Operao no Executada',16,1)


ROLLBACK TRANSACTION RETURN END

AFTER indica que os comando PL/SQL do corpo da trigger ser executado APS os dados da tabela serem alterados. Normalmente usamos AFTER para completar os dados de outras tabelas e para completar a atividade de outra trigger de momento BEFORE. Exemplo: CREATE TRIGGER T_BaixaEstoque ON Itens AFTER INSERT AS IF(SELECT Cod_Sta FROM Pedido INNER JOIN inserted ON Pedido.Num_Ped = Inserted.Num_Ped) = 1 --Se o Pedido estiver aberto UPDATE Produto SET Qtd_EstqProd = Qtd_EstqProd Inserted.Qtd_Vend FROM Produto INNER JOIN inserted ON Produto.Cod_Prod = Inserted.Cod_Prod ELSE BEGIN RAISERROR('Este pedido no est aberto Operao no Executada',16,1)
ROLLBACK TRANSACTION RETURN END

INSTEAD OF indica que a trigger ir ser executada no lugar da instruo que disparou a trigger. Literalmente, a instruo substituda pela trigger. Essa tcnica permite que faamos, por exemplo, alteraes em uma tabela atravs de uma view. usado nos casos em que a view no pode alterar uma tabela por no referenciar uma coluna com a constraint not null. Nesse caso a trigger pode atualizar a coluna que a view no tem acesso. Dois detalhes muito importantes sobre INSTEAD OF:

S funcionam com views sempre de linha. Ser considerado assim, mesmo que "FOR EACH ROW" for omitido.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 62 de 86

SQL Server 2000

Exemplo:
/* Escreva um trigger que no permita a alterao e a excluso de dados na tabela Estado * /.

CREATE TRIGGER T_Estado ON Estado INSTEAD OF UPDATE,DELETE AS RAISERROR('Operao no permitida nesta tabela',16,1)
O evento define qual a instruo DML que aciona a trigger. Informa qual instruo SQL ir disparar a trigger. Pode ser:

INSERT UPDATE DELETE

Quando o evento for um UPDATE podemos informar quais colunas que, ao serem alteradas, iro disparar a trigger. O mesmo NO ocorre com INSERT e DELETE porque essas instrues sempre afetam a linha por inteiro.

Exemplo: CREATE OR REPLACE TRIGGER novo_func AFTER INSERT ON emp . . . END


O evento pode conter uma, duas ou todas as trs operaes DML em uma nica linha de comando.

Exemplo: CREATE OR REPLACE TRIGGER novo_func BEFORE INSERT OR UPDATE OR DELETE ON emp . . . END

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 63 de 86

SQL Server 2000

O tipo define quantas vezes uma trigger ser executa. A trigger pode ser executada uma vez para a instruo que a disparou ou ser disparada para cada linha afetada pela instruo que disparou a trigger. Pode ser: - Instruo (STATEMENT) - Linha (ROW) Quando a trigger for do tipo instruo ela ser disparada uma vez para cada evento de trigger, mesmo que nenhuma linha tenha sido afetada. So teis para aquelas trigger que eventualmente no alteram dados ou para situaes onde o que queremos uma resposta da trigger, por exemplo, em uma restrio complexa de negcio. Por DEFAULT toda trigger deste tipo.

Exemplo: CREATE OR REPLACE TRIGGER novo_func BEFORE INSERT OR UPDATE OR DELETE ON emp FOR EACH STATEMENT . . . END
Quando a trigger for do tipo linha, a trigger ser executada toda vez que a tabela for afetada pelo evento da trigger. Se nenhuma linha for afetada a trigger no ser executada. So muito teis quando a ao da trigger depende dos dados afetados pelo evento da trigger.

Exemplo: CREATE OR REPLACE TRIGGER novo_func BEFORE INSERT OR UPDATE OR DELETE ON emp FOR EACH ROW . . . END
O corpo define a ao que uma trigger ir executar quando acionada. O corpo de uma trigger composto por um bloco PL/SQL, a chamada de uma PROCEDURE ou por um procedimento JAVA. Por definio, o tamanho de uma trigger no pode ultrapassar 32K. Como, normalmente, precisamos trabalhar com os valores antes e depois da alterao dos dados, a trigger permite que faamos referencia aos valores antes da alterao (OLD) e aps a alterao (NEW). O nome de uma trigger deve ser nico dentro de um mesmo esquema, e sua sintaxe bsica :

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 64 de 86

SQL Server 2000

CREATE [OR REPLACE] TRIGGER [schema.] nome_da_trigger [BEFORE|AFTER] [DELETE|OR INSERT|OR UPDATE[OF coluna]] ON [schema.] nome_da_tabela_ou_da_view [REFERENCING [OLD [AS] OLD] [NEW [AS] NEW] [FOR EACH ROW] [WHEN [condio]] BLOCO PL/SQL Onde:
a) Nome_da_trigger o nome da trigger; b) Nome_da_tabela_ou_da_view indica a tabela ou view associada com a trigger; Corpo_da_trigger a ao que a trigger ir executar.

c) Inicia por DECLARE ou BEGIN e termina por END. Tambm pode conter a chamada de um procedimento. d) O uso do nome da coluna na clusula UPDATE pode aumentar a performance porque a trigger s ser disparada quando aquela coluna especificada na clusula for alterada. Agora que sabemos como criar uma trigger veremos um exemplo completo: Primeiro vamos criar uma tabela para gravar um registro de todos os usurios que se conectaram ao banco:

CREATE TABLE vigia (marca VARCHAR2(100)); CREATE OR REPLACE TRIGGER marca_logon AFTER LOGON ON DATABASE BEGIN INSERT INTO sys.vigia VALUES (USER || ' entrou no sistema em ' || TO_CHAR(sysdate, 'DD-MM-YYYY HH24:MI:SS')); COMMIT; END
Pronto, temos nossa primeira trigger. Ela registra o nome do usurio e a que horas ele entrou. Esse exemplo foi retirado diretamente da documentao Oracle. No nosso exemplo fazemos referencia a um evento do sistema ao invs de referenciarmos uma tabela.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 65 de 86

SQL Server 2000

Outros eventos do sistema so:

AFTER SERVERERROR AFTER LOGON BEFORE LOGOFF AFTER STARTUP BEFORE SHUTDOWN

Voc pode criar triggers usando os eventos acima para DATABASE e SCHEMA. As duas excees so SHUTDOWN e STARTUP que s se aplicam a DATABASE.

Exemplo: CREATE OR REPLACE TRIGGER marca_logoff BEFORE LOGOFF ON SCHEMA BEGIN INSERT INTO sys.vigia VALUES (USER || ' saiu do sistema em ' || TO_CHAR(sysdate, 'DD-MM-YYYY HH24:MI:SS')); COMMIT; END;
Eventualmente podemos ter algum tipo de erro em nossa trigger. Para verificar quais so os erros de compilao que temos na trigger basta usar o comando SHOW ERRORS TRIGGER nome_da_trigger. Caso voc queira ver os erros de compilao da ltima trigger que voc compilou pode escrever apenas SHOW ERRORS ou SHO ERR. Ao executarmos esse comando ele mostrar a linha onde est o erro. Ateno: caso a linha onde est o erro se estenda por mais de uma linha, este comando indicar o incio da linha. Vamos criar uma trigger com erro para servir como exemplo:

CREATE OR REPLACE TRIGGER marca_logon AFTER LOGON ON DATABASE BEGIN INSERT INTO sys.vigia VALUES (USER || ' entrou no sistema em ' || TO_CHAR(sysdate, 'DD-MM-YYYY HH24:MI:SS)); COMMIT; END;
/

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 66 de 86

SQL Server 2000

19. EXERCICIOS
EXERCCIO 2 - Manipulando Dados do SYSAMPLE
Neste exerccio, voc vai pr em prtica os conceitos bsicos da linguagem Transact-SQL, utilizando comandos que executam as quatro operaes com dados: SELECT INSERT UPDATE DELETE Neste exerccio voc vai trabalhar com leitura dos dados.

1. Escreva um comando que exiba todas as colunas e todas as linhas de dados da tabela TipoEnd. 2. Escreva um comando que exiba todas as colunas e todas as linhas de dados da tabela TipoProd. 3. Escreva um comando que exiba todas as colunas e todas as linhas de dados da tabela TipoCli. 4. Escreva um comando que exiba todas as colunas e todas as linhas de dados da tabela Estado. 5. Escreva um comando que exiba a sigla do estado e o nome das cidades que voc possui em cada estado no seu sistema. 6. Escreva um comando que exiba o nome dos clientes do seu cadastro de clientes, a data de cadastro desse cliente no sistema e o valor da renda que cada cliente possui. 7. Escreva um comando que exiba o nome de todos os funcionrios do seu cadastro de funcionrios, a data de nascimento, o sexo e o salrio de um dos funcionrios do seu sistema. 8. Escreva um comando que exiba todos os dados da tabela Histrico do funcionrio de cdigo 1. 9. Escreva um comando que exiba o nome, o tipo, a quantidade e o valor unitrio dos produtos em estoque. 10. Escreva um comando que exiba o nome do cliente, o valor da sua renda e apresente tambm essa mesma renda com um acrscimo de 10%, para todos os clientes do seu database. 11. Escreva um comando que exiba o nome do cliente, o valor da sua renda e apresente tambm essa mesma renda com um acrscimo de 10%, apenas para os clientes com renda inferior a 1000.00. 12. Escreva um comando que aplique 20% de aumento salarial para todos os funcionrios do sexo feminino e que ganhem um salrio inferior a 1000.00. 13. Escreva um comando que aplique um aumento de 10% ao valor dos produtos do tipo 1. 14. Escreva um comando que aplique um aumento de 5% ao valor dos produtos do tipo 2. 15. Escreva um comando que aplique uma reduo de 20% ao valor dos produtos do tipo 3. 16. Escreva um comando que elimina todos os itens vendidos no pedido 10.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 67 de 86

SQL Server 2000

EXERCCIO 3 - Manipulando Dados do SYSAMPLE


1. Escreva um comando que exiba todas as colunas e todas as linhas de dados da tabela

TipoEnd, ordenando os dados de forma crescente pela coluna Nome_Tipo. 2. Escreva um comando que apresente os dados dos clientes ordenados de forma

decrescente pela coluna Nome_Cli. 3. Escreva um comando que apresente quantos clientes so casados e quantos clientes

so solteiros. 4. 5. 6. Escreve um comando que exiba quantos e-mails cada cliente tem. Escreva um comando que exiba quantos clientes voc tem de cada tipo. Escreva um comando que exiba a quantidade de parcelas de que composto cada

pedido. 7. tem. 8. 9. 10. 11. 12. 13. Escreva um comando que mostre quantos produtos voc tem de cada tipo. Escreva um comando que mostre o quanto cada cliente gastou em pedidos. Escreva um comando que mostre quantos clientes voc tem em cada cidade. Escreva um comando que mostre quantas cidades voc tem em cada estado. Escreva um comando que exiba o total de bnus que cada funcionrio recebeu. Escreva um comando que mostre o total de salrios pagos para os funcionrios do Escreva um comando que exiba a quantidade de dependentes que cada funcionrio

sexo masculino e para os do sexo feminino. 14. 15. 16. 17. 18. Escreva um comando que mostre quantos pedidos voc tem de cada status. Escreva um comando que exiba a quantidade de endereos que cada cliente tem. Escreva um comando que exiba o total de pontos que cada funcionrio fez por ms. Escreva um comando que mostre quantos pedidos cada funcionrio atendeu. Escreva um comando que mostre quantos pedidos de cada cliente cada funcionrio

atendeu. 19. Escreva um comando que mostre o total de salrios pagos aos funcionrios.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 68 de 86

SQL Server 2000

EXERCCIO 4 - Manipulando Dados do SYSAMPLE


1. 2. 3. 4. e-mails. 5. Escreva um comando que apresente os dados de todos os clientes que no fizeram Escreva um comando que apresente todos os dados dos clientes solteiros. Escreva um comando que apresente os dados do cliente que tem o salrio mais alto. Escreva um comando que apresente os dados dos clientes que no tm telefone. Escreva um comando que apresente os dados dos clientes que no tm telefone nem

nenhum pedido. 6. pedido. 7. Escreva um comando que apresente os dados dos clientes que fizeram pedidos que Escreva um comando que apresente os dados dos clientes que fizeram pelo menos um

foram atendidos pelo funcionrio de cdigo 1. 8. 9. Escreva um comando que apresente todos os pedidos que foram pagos vista. Escreva um comando que apresente os dados dos clientes que fizeram pedidos

atendidos pelos funcionrios que no tm dependentes. 10. Escreva um comando que mostre os dados dos clientes que tm o maior crdito.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 69 de 86

SQL Server 2000

EXERCCIO 5 - Manipulando Dados do SYSAMPLE (Juno de Tabelas Join )


1. Escreve um comando que exiba o e-mails cada cliente , apresentando o nome de cada cliente. 2. Escreva um comando que exiba os clientes voc tem de cada tipo, apresentando o

nome de cada tipo. 3. Escreva um comando que mostre o nmero, a data e o valor total de cada pedido,

mostrando tambm o nome de cada cliente que fez o pedido e o nome de cada funcionrio que atendeu cada pedido. 4. Escreva um comando que apresente o nome de cada cliente e o nome do cnjuge

daqueles que forem casados. 5. Escreva um comando que apresente os dados dos cliente, os e-mails de cada um e os

telefones de cada um. 6. Escreva um comando que mostre os nomes dos clientes, os endereos com o nome de

cada cidade e o nome de cada estado de cada endereo que cada cliente tem. 7. Escreva um comando que mostre o nome de cada funcionrio e o nome de cada

dependente de que cada funcionrio que tem dependentes. 8. 9. Escreva um comando que apresente o nome dos funcionrios e o histrico de cada um. Escreva um comando que mostre o nome de cada cliente, o nmero, data e valor total de

cada pedido que cada cliente fez e o valor de cada parcela de cada pedido.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 70 de 86

SQL Server 2000

EXERCCIO 6- Manipulando Dados do SYSAMPLE (Juno de Tabelas Join com funes de agrupamento)
1. Escreva um comando que exiba a quantidade de parcelas que compem cada pedido, exibindo todos os dados dos pedidos. 2. Escreva um comando que exiba a quantidade de dependentes que cada funcionrio tem, mostrando o nome de cada funcionrio. 3. Escreva um comando que mostre quantos produtos voc tem de cada tipo, mostrando o nome do tipo. 4. Escreva um comando que mostre o quanto cada cliente gastou em pedidos, mostrando o nome do cliente. 5. Escreva um comando que mostre quantos clientes voc tem em cada cidade, mostrando o nome de cada cidade. 6. Escreva um comando que mostre quantas cidades voc tem em cada estado, mostrando o nome do estado. 7. Escreva um comando que exiba o total de bnus que cada funcionrio recebeu, mostrando o nome de cada funcionrio. 8. Escreva um comando que exiba a quantidade de endereos que cada cliente tem, mostrando o nome de cada cliente. 9. Escreva um comando que exiba o total de pontos que cada funcionrio fez por ms, mostrando o nome do funcionrio.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 71 de 86

SQL Server 2000

EXERCCIO 7 Views

1. Crie uma view que apresente o nome dos clientes, o salrio de cada um (totalizado com o salrio dos cnjuges - daqueles que tiverem cnjuge) e o valor do ltimo crdito concedido a cada um. 2. Crie uma view que apresente o nome de todos os produtos vendidos em cada pedido. 3. Crie uma view que apresente o nome dos funcionrios e o total de bnus de cada um. 4. Crie uma view que apresente o nome de cada cliente, o nmero do pedido, data do pedido, valor do pedido. 5. Crie uma view que apresente o nome de cada funcionrio e o nome de cada dependente de cada funcionrio que tem dependentes.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 72 de 86

SQL Server 2000

EXERCCIO 8 FUNCTIONS

1. Escreva uma funo que receba o cdigo do cliente como parmetro e retorne a renda salarial desse cliente, incluindo na sua renda o salrio do seu cnjuge se ele for casado. 2. Escreva uma funo que retorne a renda salarial de todos os cliente, incluindo na renda de cada um o salrio do seu cnjuge daqueles que so casados. 3. Escreva uma funo que retorne o cdigo do cliente como parmetro e o valor do ltimo pedido que esse cliente fez. 4. Escreva uma funo que retorne todos os dados do funcionrio cujo cdigo deve ser recebido como parmetro. 5. Escreva uma funo de receba o nmero de um pedido como parmetro, retorne o cdigo do funcionrio que atendeu este pedido e o valor e data de vencimento de cada parcela desse pedido.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 73 de 86

SQL Server 2000

EXERCCIO 9 - STORED PROCEDURE

1. Escreva uma procedure que receba o cdigo do cliente e um valor percentual como parmetro e aplique este percentual de desconto no ltimo pedido que esse cliente fez. 2. Escreva uma procedure que receba o cdigo do cliente e um valor percentual como parmetro e aplique este percentual de desconto no ltimo pedido que esse cliente fez se o valor deste pedido representar menos de 10% da renda salarial deste cliente (considerando o salrio do cnjuge na renda). 3. Escreva uma procedure que receba o nmero de pedido como parmetro e calcule o valor total deste pedido, gravando esse total para o referido pedido. 4. Faa uma procedure que aplique um aumento salarial (cujo valor deve ser recebido como parmetro) para os funcionrios que tiverem menos de dois dependentes. 5. Escreva uma procedure que receba um valor percentual como parmetro e aplique um desconto no ltimo pedido ainda no pago de cada cliente do estado de So Paulo. 6. Escreva uma procedure que receba um valor percentual como parmetro, e aplique este valor percentual com relao ao salrio de cada funcionrio para cada um que tenha tido uma pontuao acima de 8.0 no ms corrente. 7. Escreva uma procedure que receba como parmetro o nmero do pedido e um nmero que represente a quantidade de parcelas em que este pedido ser dividido. A procedure deve obter o valor total deste pedido, calcular o valor de cada parcela e gravar cada parcela na tabela Parcelas. Se a quantidade de parcelas ultrapassar 3, acrescente 10% ao valor total do pedido, divida-o na quantidade de parcelas recebida como parmetro e grave-as na tabela Parcelas. Se a quantidade de parcelas for 1, retorne a mensagem: pedido vista e interrompa o processamento. No deixe que o nmero de parcelas ultrapasse o 10. Se ultrapassar, retorne a mensagem: Quantidade de parcelas invlida.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 74 de 86

SQL Server 2000

EXERCCIO 11 TRIGGERS

1. Escreva um trigger que realize a baixa em estoque a cada produto vendido em cada pedido. 2. Escreva um trigger que realize a devoluo em estoque de cada produto retirado (devolvido) de cada pedido. 3. Escreva um trigger que realize a atualizao em estoque de cada produto trocado em um pedido. 4. Escreva um trigger que no permita a alterao de dados na tabela TipoEnd e a sua excluso. 5. Escreva um trigger que no permita a alterao de dados na tabela Estado e a sua excluso. 6. Escreva um trigger que no permita a alterao de dados na tabela TipoProd e a sua excluso. 7. Escreva um trigger que no permita a alterao de dados na tabela TipoCli e a sua excluso.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 75 de 86

SQL Server 2000

MANUAL TCNICO Instalao do Microsoft SQL Server 2000

CONSIDERAES PRELIMINARES Este manual descreve a instalao do SQL 2000 Server.

REQUISITOS

Requisito Memria Processador HD*

Mnimo 128 MB Celeron 800 Mhz 3 GB

Recomendvel 256 MB Celeron 900 Mhz 5 GB

Obs.: Os requisitos mnimos de instalao referem-se ao particionamento do disco, feito por meio da instalao do Windows Server 2003. De acordo com o tamanho da base de dados da Unidade, a utilizao da configurao mnima pode ocasionar travamento do computador.

INSTALAO DO SQL SERVER 2000 Coloque o CD do SQL 2000 Server no drive. Caso o autorun no seja executado, acesse o CD pelo Windows Explorer ou pelo boto START, opo RUN... e execute o arquivo autorun.exe. Ser exibida uma caixa de mensagem, como a demonstrada na figura abaixo, informando que o SQL Server 2000, quando instalado sem o Service Pack 2, no suportado pelo Windows Server 2003. No se assuste! Para contornar essa situao, a Franqueadora disponibiliza, junto com o kit do WebGesto, o CD de instalao do Service Pack 3a, que ser tratado mais adiante.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 76 de 86

SQL Server 2000

Em seguida, selecione a opo SQL Server 2000 Componentes, clicando sobre ela.

Na tela seguinte, selecione a opo Install Database Server.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 77 de 86

SQL Server 2000

Aguarde at que o programa de instalao seja carregado.

Na janela Welcome, clique sobre o boto Next >.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 78 de 86

SQL Server 2000

Na janela Computer Name, selecione a opo Local Computer e clique sobre o boto Next >.

Na janela Installation Selection, selecione a opo Create a new instance of SQL Server, or Install Client Tools e clique sobre o boto Next >.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 79 de 86

SQL Server 2000

Na janela User Information, digite o nome do usurio e o nome da empresa nos campos Name e Company. Em seguida, clique sobre o boto Next >.

Na janela Software License Agreement, ser exibido o contrato de licena. Leia-o com ateno e, em seguida, clique sobre o boto Yes.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 80 de 86

SQL Server 2000

Com isso, surgir a janela Installation Definition. Nela, selecione a opo Server and Client Tools e clique sobre o boto Next >.

Na janela Instance Name, selecione a opo Default e clique sobre o boto Next >.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 81 de 86

SQL Server 2000

Na janela Setup Type, selecione o tipo de instalao Typical. Mude o path de instalao nas opes Program Files e Data Files para E:, mantendo as pastas-padro e clique sobre o boto Next >.

Na janela Services Accounts, selecione a opo Use the same account for each service. Auto start SQL Server Service. Feito isso, no quadro Service Settings, selecione a opo Use the Local System account e clique sobre o boto Next >.

Na janela Authentication Mode, selecione a opo Mixed Mod (Windows Authention and SQL Server Authentication). Feito isto, digite a senha desejada e clique sobre o boto Next >.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 82 de 86

SQL Server 2000

Na janela Start Copying Files, apenas leia o texto e, em seguida, clique sobre o boto Next >.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 83 de 86

SQL Server 2000

Na janela Choose Licensing Mode, selecione a opo Per Seat for, digite o nmero 10 na caixa Devices e clique sobre o boto Continue.

Aps ter informado todos os dados necessrios para o programa de instalao, a cpia dos arquivos ser iniciada.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 84 de 86

SQL Server 2000

Ao trmino da instalao, clique sobre o boto Finish

CONSIDERAES FINAIS
Esta apostila foi confeccionada para o treinamento de SQL Server 2000 no Centro Universitrio Fundao Santo Andr. Em caso de dvida mandar e-mail para nilson.dba@uol.com.br, no esquea de citar as mensagens de erro.

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 85 de 86

SQL Server 2000

REFERNCIAS BIBLIOGRFICAS:
Leo, Renata de Oliveira SQL 2000 SERVER: Estrutura e Implementao de sistemas de Banco de Dados So Paulo , Editora Erica, 2002 Gunderloy,Mike e Jorden,Joseph L. Dominando o SQL SERVER 2000: A Bblia So Paulo , Editora Makron Books, 2001

Curso Microsoft SQL Server 2000


Autor: Nilson A. Borges 86 de 86

Você também pode gostar