Documentos de Académico
Documentos de Profesional
Documentos de Cultura
... ...
... ...
SQL Uma
A Linguagem SQL
SQL - Structured Query Language. Foi definida por D. D. Chamberlin e outros, nos laboratrios de pesquisa da IBM em San Jose, California, em 1974. Teve seus fundamentos no modelo relacional de E. F. Codd, criado em 1970. 1970 Sua primeira verso recebeu o nome de SEQUEL - Structured English Query Language . rgos como ANSI e ISO adotaram a SQL como o padro oficial de linguagem em ambiente relacional. relacional O ANSI publicou as padronizaes SQL ANSI-89 e ANSI-92. ANSI-92 Existem vrios dialetos SQL que adotam o padro ANSI com extenses proprietrias de cada fabricante. Atravs de uma interface denominada ODBC, Open Database ODBC Connectivity possvel se converter a sintaxe SQL de um produto em outro.
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
script1
O arquivo de log automaticamente criado com o tamanho de 10 Mb (25% da soma de todos os arquivos de dados) e como MAXSIZE deste arquivo no foi especificado, ele crescer at o limite de espao do disco rgido.
SQL Uma
script2
SQL Uma
SQL Uma
SQL Uma
script4
Exemplo 5: Criar o banco de dados COMPRAS especificando o arquivo de dados sem o tamanho. CREATE DATABASE Compras ON ( NAME = Compras_dat, FILENAME = 'c:\mssql7\data\compras.mdf' )
script5
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
Exemplo 1: Eliminar o banco de dados TESTE. DROP DATABASE Teste GO sp_helpdb GO Exemplo 2: Eliminar os bancos de dados CLIENTES e VENDAS. DROP DATABASE Clientes, Vendas GO sp_helpdb GO
SQL Uma
Criando Tabelas
O nome de uma tabela em um banco de dados dever ser nico para cada proprietrio; Cada coluna dever ser criada atravs da especificao do seu nome, tipo e tamanho do dado que ir armazenar e, opcionalmente, valores padro e restries (constraints) impostas ao contedo; O nome de uma coluna dever ser nico dentro de cada tabela podendo, entretanto, existir colunas com o mesmo nome em tabelas diferentes. Uma tabela representa uma entidade do banco de dados onde cada linha equivale a uma ocorrncia e cada coluna equivale a um atributo dessa entidade. Um banco de dados no SQL Server pode ter: At 2 bilhes de tabelas, cada uma armazenando ate 1024 colunas; O comprimento mximo de cada coluna de 8000 bytes; O comprimento mximo de cada linha de 8092 bytes; Os tipos de dados texto e imagem permitem at 2 GB de tamanho.
SQL Uma
Criando Tabelas
Identificadores do SQL Server: Podem ter de 1 a 128 caracteres; O primeiro caractere deve ser uma letra ou @, #, _ (sublinhado): @ - utilizado para variveis locais; # - utilizado para objetos temporrios locais; ## - utilizado para objetos temporrios globais. Depois do primeiro caractere podem ser usados caracteres alfanumricos ou os smbolos #, $ e _ (sublinhado); Podem ser usados espaos em identificadores, mas para fazer referncia a esses objetos deve-se usar aspas duplas ou colchetes. Exemplo: Uma tabela identificada como Clientes Nacionais deve ser referenciada como Clientes Nacionais ou [Clientes Nacionais]. aconselhvel se usar colchetes para no confundir com strings.
SQL Uma
Criando Tabelas
Identificadores do SQL Server: 123Clientes @Clientes TblClientes Tbl@Clientes #TblClientes ##TblClientes Clientes Invlido. O identificador deve comear por letra. Vlido apenas para criar uma varivel. Vlido. Invlido. @ s pode ser usado como primeiro caractere de um identificador. Vlido para criar um objeto temporrio que estar disponvel apenas para o usurio que o criou. Vlido para criar um objeto temporrio que estar disponvel para todos os usurios.dos os usurios. Vlido.
SQL Uma
Criando Tabelas
Tipos de Dados: Categoria String varchar(n) binary(n) Binrio Tipo char(n) Comentrio Armazena strings de tamanho fixo de at 8000 caracteres. Armazena strings de tamanho varivel de at 8000 caracteres. Armazena valores binrios de tam. fixo.
varbinary(n Armazena valores binrios de tam. varivel ) int Armazena valores inteiros em 4 bytes no intervalo de 2.147.483.647. Armazena valores inteiros em 2 bytes no intervalo de 32.767. Armazena valores inteiros em 1 byte no intervalo de 0 a 255.
Inteiro
smallint tinyint
SQL Uma
Criando Tabelas
Tipos de Dados: Categoria Tipo Comentrio
decimal(n,d) Armazena nmeros decimais com n dgitos e d decimais. numeric(n,d) Armazena nmeros decimais com n dgitos e d decimais. real Armazena dado numrico de ponto flutuante e preciso simples (7 dgitos) intervalo: -3.40E + 38 a 3.40E + 38. Armazena dado numrico de ponto flutuante e preciso simples ou dupla. n entre 1 e 24 - 7 dgitos - 4 bytes n entre 25 e 53 - 15 dgitos 8 bytes intervalo: - 1.79E + 308 a 1.79E + 308.
Numrico
float(n)
SQL Uma
Criando Tabelas
Tipos de Dados: Categoria Tipo money Moeda smallmoney Comentrio Armazena valores monetrios com intervalo de 922.337.203.685.447,5808. Utiliza 8 bytes e 4 casas decimais. Armazena valores monetrios com intervalo de 214.748,3647. Utiliza 4 bytes e 4 casas decimais. Armazena em 8 bytes a data no intervalo de 1/1/1753 a 31/12/9999 e a hora com preciso de milissegundo.
Data e Hora
datetime
Armazena em 4 bytes a data no intervalo smalldatetime de 1/1/1900 a 6/6/2079 e a hora com preciso de minuto.
SQL Uma
Criando Tabelas
Tipos de Dados: Categoria Tipo timestamp Especial bit text image Comentrio Armazena em 8 bytes valores que so automaticamente incrementados. Armazena valores 0, 1 ou null. Strings de at 2.147.483.647 caracteres. Armazena dados de imagem com at 2.147.483.647 bytes.
SQL Uma
Criando Tabelas
Sintaxe:
CREATE TABLE [banco_de_dados.] proprietrio.] nome_da_tabela ( nome_da_coluna tipo_de_dados [(preciso[,escala)]] [NULL | NOT NULL] [IDENTITY [(origem, incremento )]] [<restries de coluna>] [,...n] ) | nome_da_coluna AS expresso_de_coluna_computada ) | <restries de tabela> )
SQL Uma
Criando Tabelas
restries de coluna [CONSTRAINT nome_da_constraint] PRIMARY KEY | UNIQUE | [FOREIGN KEY] REFERENCES tabela_ref [(coluna_ref)] | DEFAULT expresso_constante | CHECK (expresso_lgica) restries de tabela [CONSTRAINT nome_da_constraint] PRIMARY KEY | UNIQUE [(coluna[,...n])] | FOREIGN KEY [(coluna[,...n])] REFERENCES tabela_ref [(coluna_ref[,...n])] | CHECK (expresso_lgica) Copyright 2000 - Nilton Freire Santos SQL Uma
Criando Tabelas
Argumentos: table_name: especifica o nome da tabela a ser criada. Deve ser exclusivo em um banco de dados e pode possuir at 128 caracteres, exceto para as tabelas temporrias (iniciadas com #) que no podem exceder 116 caracteres. column_name: especifica o nome de uma coluna da tabela. Deve ser exclusivo em uma tabela. data_type: especifica o tipo de dado da coluna. NULL | NOT NULL: especifica se a coluna pode receber valores nulos. IDENTITY: indica que o contedo da coluna possui auto-incremento. A propriedade pode ser atribuda a colunas do tipo tinyint, smallint, int, decimal(n,0), numeric(n,0). A tabela s pode possuir uma coluna IDENTITY. origem: o valor inicial da coluna IDENTITY. origem incremento: o valor incremental a ser usado na coluna IDENTITY. incremento
SQL Uma
Criando Tabelas
Argumentos: CONSTRAINT: uma palavra chave opcional indicando o incio da definio de uma restrio PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK ou DEFAULT. constraint_name: o nome de uma restrio. Devem ser exclusivos dentro de um banco dados. PRIMARY KEY: indica que a coluna uma chave primria. UNIQUE: indica que a coluna uma chave candidata. FOREIGN KEY ... REFERENCES: indica que a coluna uma chave estrangeira de um relacionamento. ref_table: o nome da tabela qual a restrio FOREIGN KEY faz ref_table referncia no relacionamento. ref_column: uma coluna ou lista de colunas qual a restrio ref_column FOREIGN KEY faz referncia. A coluna referenciada dever possuir restrio de PRIMARY KEY ou UNIQUE.
SQL Uma
Criando Tabelas
Argumentos: DEFAULT: uma restrio que especifica que um valor padro ser DEFAULT atribudo para a coluna quando um valor no for fornecido explicitamente. constant_expresion: o valor padro atribudo para a coluna quando um valor no for fornecido explicitamente. Pode ser uma expresso, uma funo ou o valor nulo (NULL). CHECK: uma restrio que fora a integridade de domnio, limitando os possveis valores que podem ser introduzidos na coluna. logical expression: uma expresso lgica que retorna verdadeiro ou falso. Se a expresso retornar verdadeiro, o valor ser aceito, caso contrrio, ser rejeitado.
SQL Uma
Criando Tabelas
Constraints
So restries impostas aos campos da tabela para garantir a integridade do banco de dados atravs da filtragem dos valores a serem inseridos nas colunas. Primary Key Unique Foreign Key Check Default
SQL Uma
Criando Tabelas
Restrio PRIMARY KEY:
utilizada para definir a chave primria da tabela. Uma tabela pode conter apenas uma restrio PRIMARY KEY. Todas as colunas definidas em uma restrio PRIMARY KEY devem ser definidas como NOT NULL. Uma chave primria de uma tabela pode ser referenciada por uma chave estrangeira. Sintaxe: CONSTRAINT <nome da constraint> PRIMARY KEY Exemplo: Criar uma chave primria chamada PK_funcionrio.
SQL Uma
Criando Tabelas
Restrio UNIQUE: utilizada para definir uma chave candidata para a tabela. Uma tabela pode conter at 249 restries UNIQUE. As colunas definidas como UNIQUE devem ser NOT NULL. Uma chave candidata de uma tabela pode ser referenciada por uma chave estrangeira. Sintaxe: CONSTRAINT <nome da constraint> UNIQUE Exemplo: Criar uma chave candidata chamada UN_funcionrio para o campo CPF da tabela FUNCIONRIO.
CONSTRAINT UN_cpf_funcionrio UNIQUE Copyright 2000 - Nilton Freire Santos SQL Uma
Criando Tabelas
Restrio FOREGN KEY: utilizada para definir uma chave estrangeira para a tabela. Todo valor no nulo introduzidos na coluna de uma restrio FOREGN KEY devem existir na tabela referenciada. O nmero de colunas e tipos de dados das colunas especificadas em uma restrio FOREIGN KEY devem coincidir com as colunas da tabela referenciada. Uma tabela pode conter at 253 restries FOREIG KEY. Uma chave estrangeira de uma tabela deve referenciar apenas chaves primrias ou candidatas. Sintaxe: CONSTRAINT <nome da constraint> FOREIGN KEY REFERENCES <tabela referenciada [ <coluna> ]
SQL Uma
Criando Tabelas
Exemplo: Criar uma chave estrangeira chamada FK_cliente_pedido para o campo CPF da tabela PEDIDO para estabelecer um relacionamento entre as tabelas CLIENTE e PEDIDO.
SQL Uma
Criando Tabelas
Restrio DEFAULT:
utilizada para definir um valor padro para uma coluna de uma tabela. Possui prioridade sobre NULL. Uma coluna pode ter apenas uma restrio DEFAULT. Uma restrio DEFAULT no pode fazer referncia a uma outra coluna. O valor atribudo em uma restrio DEFAULT deve estar de acordo com o tipo de dado da coluna. Sintaxe: CONSTRAINT <nome da constraint> DEFAULT <valor> Exemplo: Criar um valor default igual a PB para o campo UF da tabela CLIENTE.
CONSTRAINT DF_uf_cliente DEFAULT PB Copyright 2000 - Nilton Freire Santos SQL Uma
Criando Tabelas
Restrio CHECK:
utilizada para definir restries de domnio para as colunas de uma tabela. Uma coluna pode possuir uma nica restrio CHECK. Uma tabela pode possuir mltiplas restries CHECK caso existam vrias condies para restrio. As condio pode conter vrias expresses lgicas combinadas com AND e OR. Sintaxe: CONSTRAINT <nome da constraint> CHECK <expresso> Exemplo: Definir que o campo CDIGO da tabela CLIENTE possua 5 dgitos.
CONSTRAINT CK_cdigo_cliente CHECK (LEN(cdigo) = 5) Copyright 2000 - Nilton Freire Santos SQL Uma
Modificando Tabelas
Sintaxe: ALTER TABLE <table_name> ALTER COLUMN (column_name data_type [(largura [,preciso)] [NULL | NOT NULL] [IDENTITY [(origem,incremento)]] | ADD (column_name data_type [(largura [,preciso)]] | DROP [CONSTRAINT] constraint_name | COLUMN column_name [<column_constraint>] ) column_constraint ::= CONSTRAINT constraint_name [ PRIMARY KEY ] | [ UNIQUE ] | [ FOREIGN KEY REFERENCES ref_table [(ref_column)] ] [ DEFAULT constant_expression FOR column_name ] [ CHECK logical_expression ]
SQL Uma
Manipulao de Dados
CONSULTA INCLUSO ALTERAO EXCLUSO SELECT INSERT UPDATE DELETE
SQL Uma
SQL Uma
Consulta Simples
Sintaxe: SELECT * FROM <tabela> Exemplo 1: Exibir todos os dados de todos os clientes. SELECT * FROM cliente Exemplo 2: Exibir todos os dados de todos os funcionrios. SELECT * FROM funcionrio Exemplo 3: Exibir todos os dados de todos os produtos. SELECT * FROM produto
SQL Uma
Selecionando Colunas
Sintaxe: SELECT <lista de colunas> FROM <tabela> Exemplo 1: Exibir cdigo, nome e telefone de todos os clientes. SELECT cdigo, nome, fone FROM cliente Exemplo 2: Exibir cdigo, nome, estado civil e data de nascimento de todos os funcionrios. SELECT cdigo, nome, estcivil, datanasc FROM funcionrio Exemplo 3: Exibir cdigo, nome, preo de custo e preo de venda de todos os produtos. SELECT cdigo, nome, custo, venda FROM produto
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
Ordenando os Resultados
Sintaxe: SELECT <lista de colunas> FROM <tabela> ORDER BY <coluna> [ASC] [DESC] Exemplo 1: Exibir cdigo, nome e telefone de todos os clientes, ordenados pelo nome do cliente em ordem ascendente. SELECT cdigo, nome, fone FROM cliente ORDER BY nome Exemplo 2: Exibir cdigo, nome, estado civil e data de nascimento de todos os funcionrios, ordenados pela data de nascimento em ordem descendente. SELECT cdigo, nome, estcivil, datanasc FROM funcionrio ORDER BY datanasc DESC
SQL Uma
Ordenando os Resultados
Exemplo 3: Exibir cdigo, nome, preo de custo, preo de venda e a diferena entre esses dois preos para todos os produtos, ordenados pela diferena de preo em ordem descendente. SELECT cdigo, nome, custo, venda, venda-custo Diferena FROM produto ORDER BY Diferena DESC Exemplo 4: Exibir cdigo, nome e tipo de todos os produtos existentes na empresa, ordenados pelo tipo em ordem ascendente e pelo nome do produto em ordem descendente. SELECT cdigo, nome, tipo FROM produto ORDER BY tipo, nome DESC
SQL Uma
Ordenando os Resultados
Exemplo 5: Exibir cdigo, nome, cidade, sexo e salrio de todos os funcionrios da empresa, ordenados por cidade e sexo em ordem ascendente e por salrio em ordem descendente. SELECT cdigo, nome, cidade, sexo, salrio FROM funcionrio ORDER BY cidade,sexo,salrio DESC Exemplo 6: Exibir cdigo, nome, descrio, tipo, preo de venda e quantidade em estoque de todos os produtos existentes na empresa, ordenados pelo tipo em ordem descendente e pelo preo de venda em ordem ascendente. SELECT cdigo, nome, descrio, tipo, venda, quantest FROM produto ORDER BY 4 DESC, 5
SQL Uma
Filtrando os Dados
Sintaxe: SELECT <lista de colunas> FROM <tabela> WHERE <coluna OPERADOR expresso) Exemplo 1: Exibir todos os dados dos funcionrios que nasceram a partir de 1960, ordenados pela data de nascimento em ordem ascendente. SELECT *, CONVERT(varchar,datanasc,103) Nascim FROM funcionrio WHERE datanasc > 31/12/1959 ORDER BY datanasc Exemplo 2: Exibir nome, descrio, preo de custo, preo de venda e quantidade em estoque dos produtos com preo de venda menor ou igual a R$ 30,00, ordenados pelo preo de venda em ordem descendente. SELECT nome, descrio, custo, venda, quantest FROM produto WHERE venda <= $30.00 ORDER BY venda DESC
SQL Uma
Operadores do WHERE
Operador = <>, != ,# LIKE Significado Igual. Campo e expresso devem possuir o mesmo valor. Diferente. Campo e expresso devem possuir valores diferentes. Campo com caracteres que correspondam aos da expresso. S atua em campos do tipo caracter e faz distino entre maisculos e minsculos. permitido o uso de mscaras: % (percentual) - substitui uma seqncia de caracteres. _ (sublinhado) - substitui um nico caracter. Maior que. Valor do campo maior que o valor da expresso. Maior ou igual a. Valor do campo maior ou igual ao da expresso Menor que. Valor do campo menor ou igual ao da expresso. Menor ou igual a.Valor do campo menor ou igual ao da expresso. O valor do campo deve ser igual a um dos valores da lista. Seleciona as linhas com o valor nulo para o campo especificado.
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
A clusula DISTINCT pode ser usada como parte do argumento para eliminar linhas repetidas antes de aplicar a funo.
SQL Uma
Contando os Registros
Exemplo 1: Exibir quantos clientes tm cadastro na empresa. SELECT COUNT(*) FROM cliente Exemplo 2: Exibir quantos pedidos foram enviados por via area. SELECT COUNT(*) FROM pedido WHERE via = A Exemplo 3: Exibir quantos funcionrio tm e_mail. SELECT COUNT(e_mail) FROM funcionrio ou SELECT COUNT(*) FROM funcionrio WHERE e_mail IS NOT NULL Exemplo 4: Exibir a quantas cidades a empresa atende. SELECT COUNT(DISTINCT cidade) FROM cliente Exemplo 5: Exibir quantos vendedores j atenderam pedido. SELECT COUNT(DISTINCT vendedor) FROM pedido
SQL Uma
Totalizando Colunas
Exemplo 1: Exibir a soma de todos os salrios da empresa. SELECT SUM(salrio) FROM funcionrio Exemplo 2: Exibir a soma de todos os salrios dos funcionrios dos setores Compras e Vendas (COV) e Marketing (MKT) com um aumento de 32%. SELECT salrio=SUM(salrio*1.32) FROM funcionrio WHERE setor IN(COV,RHM) Exemplo 3: Exibir o total pago pelo frete dos pedidos atendidos pelos funcionrios de cdigo 2, 6, 8 e 10 durante o ano de 1997. SELECT SUM(frete) FROM pedido WHERE vendedor IN (2,6,8,10) and YEAR(datapedid) = 1997
SQL Uma
Calculando Mdias
Exemplo 1: Exibir a mdia dos salrios da empresa. SELECT AVG(salrio) FROM funcionrio Exemplo 2: Exibir o preo mdio de venda dos produtos do tipo 1 SELECT AVG(venda) FROM produto WHERE tipo=1 Exemplo 3: Exibir a idade mdia das funcionrias dos setor COV. SELECT AVG(YEAR(GETDATE())-YEAR(datanasc)) Idade FROM funcionrio WHERE sexo=F and setor=COV Exemplo 4: Exibir a mdia de salrio dos funcionrios com salrio entre R$ 400,00 e R$ 800,00 que no sejam casados nem vivos. SELECT AVG(salrio) FROM funcionrio WHERE salrio BETWEEN $400.00 and $800.00 and estcivil NOT IN(C,V)
SQL Uma
SQL Uma
Sumarizando Informaes
Sintaxe: SELECT <lista de colunas> FROM <tabela> ORDER BY <lista de colunas> COMPUTE <lista de funes de agregao> BY <lista de colunas> Exemplo 1: Exibir o nome do funcionrio, a funo exercida, o sexo e o salrio de cada funcionrio, ordenados pela funo e sexo. Exibir tambm o total e a mdia de salrios desses funcionrios. SELECT funo,nome,sexo,salrio FROM funcionrio ORDER BY funo,sexo COMPUTE SUM(salrio), AVG(salrio)
SQL Uma
Sumarizando Informaes
Exemplo 2: Exibir o cdigo, o nome, do funcionrio, a funo exercida, o sexo e o salrio de cada funcionrio, ordenados pela funo e sexo. Exibir tambm o total e a mdia de salrios desses funcionrios por funo e por sexo. SELECT funo,nome,sexo,salrio FROM funcionrio ORDER BY funo,sexo COMPUTE SUM(salrio), AVG(salrio) BY funo,sexo Exemplo 3: Exibir o cdigo, o nome, o preo de custo, o de venda e o tipo de todos os produtos, ordenados pelo tipo. Exibir tambm o total e mdia dos preos de custo e venda desses produtos. SELECT cdigo, nome, custo, venda FROM produto ORDER BY tipo COMPUTE SUM(custo), AVG(custo),SUM(venda),AVG(venda)
SQL Uma
Sumarizando Informaes
Exemplo 4: Exibir o cdigo, o nome, o preo de custo, o de venda e o tipo de todos os produtos, ordenados pelo tipo. Exibir tambm o total e mdia dos preos de custo e venda desses produtos por tipo de produto. SELECT cdigo, nome, custo, venda, tipo FROM produto ORDER BY tipo COMPUTE SUM(custo), AVG(custo),SUM(venda),AVG(venda) BY tipo Exemplo 5: Exibir o cdigo, o nome, o cargo, o sexo e a cidade de todos os clientes que no possuam cargo de gerente. Exibir tambm a quantidade de clientes por sexo, de cada cidade. SELECT cdigo,nome,cargo,tipo,cidade FROM cliente WHERE cargo not LIKE Gerente% ORDER BY tipo,cidade COMPUTE count(cdigo) BY tipo, cidade
SQL Uma
Agrupando Informaes
Sintaxe: SELECT <lista de colunas> FROM <tabela> GROUP BY <coluna> HAVING <condio> Exemplo 1: Exibir a quantidade de homens e mulheres da empresa. SELECT sexo, COUNT(*) Quantidade FROM funcionrio GROUP BY sexo Exemplo 2: Exibir a quantidade de funcionrios e o total e salrios de cada setor da empresa. SELECT setor, COUNT(*) Funcionrios, SUM(salrio)Total FROM funcionrio GROUP BY setor Exemplo 3: Exibir a quantidade de pedidos de cada data. SELECT datapedid, COUNT(*) Pedidos FROM pedido GROUP BY datapedid
SQL Uma
Agrupando Informaes
Exemplo 4: Exibir a quantidade, o valor total e a mdia dos preos de custo e de venda dos produtos de cada tipo. SELECT tipo,COUNT(*) Quantidade, SUM(custo) Custo Tot, AVG(custo)Custo Med, SUM(venda)Venda Tot, AVG(venda) Venda Med FROM produto GROUP BY tipo Exemplo 5: Exibir os pedidos que tm mais do que 4 produtos. SELECT pedido,COUNT(produto) Quantidade FROM itens GROUP BY pedido HAVING COUNT(produto) > 4 Exemplo 6: Exibir a quantidade de pedidos realizados em cada ano, para os anos que tm mais de 200 pedidos. SELECT YEAR(datapedid), COUNT(*) FROM pedido GROUP BY YEAR(datapedid) HAVING COUNT(*) > 200
SQL Uma
Agrupando Informaes
Exemplo 7: Exibir o valor total de cada pedido (Valor total = quantidade * preo desconto), onde a soma seja maior do que R$ 1.000,00. SELECT pedido, SUM((preo*quant)-(preo*quant* desconto/100)) Valor Total FROM itens GROUP BY pedido HAVING SUM((preo*quant)(preo*quant*desconto/100)) > $1000.00 ORDER BY pedido Exemplo 8: Exibir para cada funo, a quantidade de homens e mulheres e o total de salrios por sexo, para as funes onde o total de salrios seja maior do que R$ 1.000,00. SELECT funo, sexo, COUNT(sexo) Funcionrio, SUM(salrio) Salrio total FROM funcionrio GROUP BY funo, sexo HAVING SUM(salrio) > $1000 ORDER BY funo, sexo
SQL Uma
Agrupando Informaes
Exemplo 9: Exibir a quantidade de itens e o valor total de venda dos produtos de cada tipo, para os tipos onde o valor total de venda seja superior a R$ 1.000,00, ordenados pelo tipo. SELECT tipo, COUNT(*) Quantidade, SUM(venda*quantest) Valor Total FROM produto GROUP BY tipo HAVING SUM(venda*quantest) > $1000.00 ORDER BY tipo Exemplo 10: Exibir a mdia de idade dos funcionrios de cada sexo em cada setor da empresa. Exibir apenas os setores onde essa mdia de idade seja superior a 40 anos SELECT setor, sexo, AVG(YEAR(GETDATE())-YEAR(datanasc)) Idade FROM funcionrio GROUP BY setor,sexo HAVING AVG(YEAR(GETDATE())-YEAR(datanasc)) > 40
SQL Uma
SQL Uma
SQL Uma
SQL Uma
CLIENTE
cdigo nome
PEDIDO
cdigo cliente
cliente.cdigo
pedido.cliente
SELECT pedido.cdigo, cliente.nome FROM pedido INNER JOIN cliente ON cliente.cdigo = pedido.cliente ORDER BY pedido.cdigo SELECT pedido.cdigo, cliente.nome FROM pedido, cliente WHERE cliente.cdigo = pedido.cliente
SQL Uma
SETOR
sigla nome
FUNCIONRIO
cdigo nome setor
setor.sigla
funcionrio.setor
SELECT f.cdigo,f.nome,s.cdigo,s.sigla,s.nome FROM funcionrio f JOIN setor s ON f.setor = s.sigla ORDER BY s.sigla,f.nome SELECT f.cdigo,f.nome,s.cdigo,s.sigla,s.nome FROM funcionrio f,setor s WHERE f.setor = s.cdigo ORDER BY s.sigla,f.nome
SQL Uma
SQL Uma
CLIENTE
cdigo nome
PEDIDO
cdigo via
FUNCIONRIO
cdigo nome
cliente.cdigo = pedido.cliente funcionrio.cdigo = pedido.vendedor SELECT p.cdigo Pedido,c.nome Cliente,f.nome Vendedor,p.via FROM pedido p JOIN cliente c ON p.cliente = c.cdigo JOIN funcionrio f ON p.vendedor = f.cdigo ORDER BY p.cdigo
SQL Uma
SQL Uma
SQL Uma
SQL Uma
FUNCIONRIO
cdigo nome setor
s1.superior = s2.sigla
SELECT s1.nome, s2.nome superior, f1.nome Chefe, f2.nome Chefe do Setor Sup. FROM setor s1 JOIN setor s2 ON s1.superior=s2.sigla JOIN funcionrio f1 ON f1.cdigo = s1.chefe JOIN funcionrio f2 ON f2.cdigo = s2.chefe
superior
SETOR
chefe
f.cdigo = s1.chefe
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
Incluindo Dados
O comando INSERT inclui um registro ao final de uma tabela, contendo os valores de campo especificados.
Sintaxe:
<tabela>
Especifica a tabela na qual o registro ser includo. Especifica os campos da tabela onde os valores sero inseridos. A lista de campos opcional dever ser usada para inserir valores em apenas alguns campos.
<lista de campos>
SQL Uma
Incluso Simples
Exemplo 1: Inserir o seguinte registro na tabela de cidades: cdigo: 91 - nome: Muria - uf: MG - pas: BRA INSERT cidade (cdigo, nome, uf, pas) VALUES (91,'Muria','MG','BRA') Exemplo 2: Inserir na tabela de setores o setor de Contabilidade, cuja sigla CON, o ramal 108, o setor superior Finanas (FIN) e o cdigo do chefe do setor 9. INSERT setor (sigla, nome, ramal, superior,chefe) VALUES ('COM','Contabilidade','108','FIN',9) Exemplo 3: Inserir o cliente Antonio Barbosa Leite, da Av. Rui Carneiro, 723 Joo Pessoa (cdigo 7). INSERT cliente (cdigo,nome,tipo,endereo,cidade) VALUES ('ANTBA','Antonio Barbosa Leite','F', 'Av. Rui Carneiro, 723',7)
SQL Uma
SQL Uma
SQL Uma
SQL Uma
Alterando Dados
O comando UPDATE altera os valores armazenados nos registros de uma tabela.
Sintaxe:
UPDATE <tabela> SET <coluna1 = valor1 [,coluna2 = valor2,..., coluna n = valor n]> [WHERE <condio>]
Argumentos:
Especifica a tabela na qual os registros sero alterados. Especifica as colunas alteradas e seus novos valores .
<tabela>
Especifica as condies que precisam ser satisfeitas pelos registros que sero atualizados com os novos valores.
SQL Uma
Alterao Simples
Exemplo 1: Criar uma coluna 'unidade' na tabela de produtos e colocar 'und' como contedo desta coluna para todos os registros. ALTER TABLE produto ADD unidade char(3) GO UPDATE produto SET unidade = 'und' Exemplo 2: Criar uma coluna 'novo salrio' na tabela de funcionrios e dar um aumento de 25% no salrio dos funcionrios casados e manter o salrio antigo para os demais funcionrios. ALTER TABLE funcionrio ADD novosalrio smallmoney GO UPDATE funcionrio SET novosalrio=salrio*1.25 WHERE estcivil = 'C' UPDATE funcionrio SET novosalrio=salrio WHERE estcivil != 'C'
SQL Uma
Alterao Simples
Exemplo 3: Aumentar o preo de venda em 32% e colocar o estoque mnimo em 10 para os produtos com quantidade em estoque menor que 10 unidades. UPDATE produto SET venda = venda*1.32, estmin=10 WHERE quantest < 10 Exemplo 4: Dar um aumento de 15% no salrio dos funcionrios homens, casados ou divorciados e que tenham nascido entre 01/01/50 e 31/12/70. Armazene os novos valores da coluna 'novosalrio'. UPDATE funcionrio SET novosalrio=salrio*1.15 WHERE sexo = 'M' and estcivil IN ('C','D') and datanasc BETWEEN '01/01/50' and '31/12/70'
SQL Uma
SQL Uma
Eliminando Dados
O comando DELETE elimina registros de uma tabela de acordo com as condies especificadas.
Sintaxe:
<tabela>
WHERE <condio>
Especifica as condies que precisam ser satisfeitas pelos registros que sero eliminados. Se esta clusula for omitida, todos os registros da tabela sero eliminados.
SQL Uma
Eliminao Simples
Exemplo 1: Excluir todos os clientes do tipo pessoa fsica que no possuam telefone DELETE FROM cliente WHERE tipo='F' and fone IS NULL Exemplo 2: Excluir todas as funcionrias casadas do setor 'MKT'. DELETE FROM funcionrio WHERE sexo = 'F' and estcivil = 'C' and setor = 'MKT' Exemplo 3: Excluir todos os produtos com quantidade em estoque maior que 100 ou preo de custo menor ou igual a R$ 10,00. DELETE FROM produto WHERE quantest > 100 or custo <= $10.00 Exemplo 4: Excluir todos os registros da tabela de tipos. DELETE FROM tipo
SQL Uma
SQL Uma
Stored Procedures
Uma stored procedure (procedimento armazenado) consiste em um programa SQL que armazenado no banco de dados. Uma stored procedure composta por comandos SQL, SQL variveis e comandos de fluxo lgico. lgico Uma stored procedure pode ser executada manualmente ou ser chamada por outros programas. programas Uma stored procedure executada no servidor e o seu plano de execuo fica em memria, agilizando os acessos seguintes. memria Uma stored procedure aceita parmetros de entrada e pode retornar diversos valores como parmetros de sada. sada Uma stored procedure pode chamar outra stored procedure. So diferentes de funes pois no retornam um valor no lugar de seu nome nem podem ser usadas em expresses.
SQL Uma
Stored Procedures
As stored procedures podem ser classificadas em: Stored Procedures definidas pelo usurio. System Stored Procedures: fazem parte do servidor e tm a Procedures finalidade de executar tarefas administrativas do SQL Server. Podem ser executadas de qualquer banco de dados e so armazenadas no banco de dados MASTER. Tm o nome comeando por sp_ e so agrupadas em diversas categorias. Uma stored procedure composta pelo seu nome,os parmetros e o corpo que contm os comandos Transact SQL. Os parmetros so responsveis por estabelecer a comunicao entre a procedure e o usurio do sistema. Um programa pode passar parmetros para uma stored procedure (entrada) e tambm receber parmetros como resultado (sada). Uma stored procedure pode ser utilizada por vrios programas.
SQL Uma
Stored Procedures
Quando uma stored procedure criada, os seguintes passos so executados: iniciada a compilao da stored procedure e as suas partes componentes so analisadas sintaticamente. os componentes que fazem referncia a outros objetos do banco de dados so verificados quanto sua existncia. o nome da stored procedure armazenado na tabela sysobjects e o seu cdigo salvo em syscoments. um desenho tcnico da stored procedure (plano de consulta) criado e salvo na tabela sysprocedures. quando uma stored procedure executada pela primeira vez, otimizada na forma de um plano de execuo, armazenado no cache de procedimento. Nas prximas execues ela ser lida diretamente do cache e executada.
SQL Uma
CREATE PROCEDURE spTeste @cliente char(5), @quant smallint OUTPUT AS SELECT @quant=count(*) FROM pedido WHERE cliente=@cliente RETURN
criada uma stored procedure chamada sp_teste com um parmetro de entrada (@cliente) e um parmetro de sada (@quant). O comando SELECT atribui ao parmetro de sada a quantidade de pedidos realizados pelo cliente cujo cdigo seja igual ao parmetro de entrada.
SQL Uma
SQL Uma
USE scp DECLARE @quant smallint EXECUTE spTeste ALFKI, @quant OUTPUT SELECT @quant [Quantidade]
O banco de dados SCP aberto e em seguida o parmetro de sada declarado. Em seguida o valor do parmetro de entrada passado para a stored procedure e o parmetro de sada definido. Por fim, o comando SELECT exibe o resultado da stored procedure.
SQL Uma
SQL Uma
SQL Uma
SQL Uma
SQL Uma
CREATE PROCEDURE spTeste @cliente char(5), @quant smallint OUTPUT WITH RECOMPILE AS SELECT @quant=count(*) FROM pedido WHERE cliente=@cliente Copyright 2000 - Nilton Freire Santos SQL Uma
DECLARE @quant smallint EXECUTE spTeste ALFKI, @quant OUTPUT WITH RECOMPILE SELECT @quant [Quantidade]
As stored procedures que fazem referncia a uma tabela podem ser foradas a serem recompiladas em tempo de execuo, atravs do comando EXEC sp_recompile <tabela>
SQL Uma
Stored Procedures
O texto utilizado no comando CREATE PROCEDURE pode ser obtido atravs da execuo da stored procedure sp_helptext, passando o nome da stored procedure como parmetro. Exemplo:
DROP PROCEDURE spPedidos Copyright 2000 - Nilton Freire Santos SQL Uma
Programao SQL
Um lote um conjunto de instrues SQL que so interpretadas juntas pelo SQL Server. A palavra-chave GO marca o fim de um lote. Se houver um erro de sintaxe em qualquer lugar do lote, o lote inteiro cancelado. cancelado As seguintes instrues CREATE podem ser associadas dentro de um mesmo lote: CREATE DATABASE, CREATE TABLE, CREATE INDEX As instrues CREATE abaixo no podem ser associadas com outras, dentro de um mesmo lote: CREATE RULE, CREATE TRIGGER, CREATE PROCEDURE, CREATE DEFAULT, CREATE VIEW. Um script um conjunto de um ou mais lotes.
SQL Uma
Variveis
So objetos que podem armazenar valores do tipo especificado na declarao da varivel. So declaradas com DECLARE, a atribuio do nome, do tipo e do tamanho da varivel. Quando uma varivel criada, o seu valor inicial NULL. O nome deve ser iniciado por @.
DECLARE @quant tinyint,@cidade1 varchar(20), @cidade2 varchar(20) SET @quant = 10 SELECT @cidade1 = Joo Pessoa SELECT @cidade2 = (SELECT nome FROM cidade WHERE cdigo=4) SELECT @quant, @cidade1, @cidade2 Copyright 2000 - Nilton Freire Santos SQL Uma
IF ... ELSE
Estrutura condicional que impe condies para a execuo de alguns comandos SQL especificados. Sintaxe:
SQL Uma
IF ... ELSE
Exemplo 1: Criar uma stored procedure para eliminar o produto cujo cdigo passado como parmetro se o seu tipo for igual a 4.
CREATE PROCEDURE spElimina @produto smallint AS IF 4 = (SELECT tipo FROM produto WHERE @produto = cdigo) DELETE FROM produto WHERE @produto=cdigo ELSE PRINT Produto no do tipo 4 EXECUTE spElimina 5 EXECUTE spElimina 6
O comando SELECT retorna o tipo do produto cujo cdigo seja igual ao valor fornecido pelo parmetro de entrada.
SQL Uma
IF ... ELSE
Exemplo 2: Criar uma stored procedure para eliminar o produto passado como parmetro se o seu tipo for igual a Laticnios.
CREATE PROCEDURE spElimina @produto smallint AS IF Laticnios = (SELECT t.nome FROM tipo t JOIN produto p ON t.cdigo =p.tipo WHERE p.cdigo = @produto ) BEGIN DELETE FROM produto WHERE @produto=cdigo PRINT Produto deletado! END ELSE PRINT Produto no do tipo Laticnios EXECUTE spElimina 1 EXECUTE spElimina 31 Copyright 2000 - Nilton Freire Santos SQL Uma
IF ... ELSE
Exemplo 3: Criar uma stored procedure que informe se o preo de venda de um determinado produto maior, menor ou igual mdia do preo de venda de todos os produtos da empresa.
CREATE PROCEDURE spPreo @produto smallint AS IF (SELECT venda FROM produto WHERE cdigo=@produto) < (SELECT AVG(venda) FROM produto) PRINT 'Preo menor que a mdia ELSE IF (SELECT venda FROM produto WHERE cdigo=@produto) > (SELECT AVG(venda) FROM produto) PRINT 'Preo maior que a mdia ELSE PRINT 'Preo igual a mdia' Copyright 2000 - Nilton Freire Santos SQL Uma
SQL Uma
WHILE
Estrutura de repetio que permite que um bloco de comandos SQL seja executado enquanto uma determinada condio for satisfeita. Sintaxe:
WHILE <condio> {comandos SQL} [BREAK {comandos SQL}] [CONTINUE {comandos SQL}]
A condio deve ser expressa por uma expresso lgica que retorna Verdadeiro ou Falso e pode conter um SELECT, que deve estar entre parnteses. BREAK causa a sada do loop. CONTINUE reinicia o loop.
SQL Uma
WHILE
Exemplo: Criar uma stored procedure para dar um aumento de salrio para os funcionrios da empresa, obedecendo as seguintes condies: a) os salrios s devero ser aumentados se a mdia salarial for inferior a um valor que ser fornecido como parmetro. b) esses salrios devero ser aumentados repetidas vezes at que o maior salrio pago na empresa no ultrapasse um valor que ser fornecido como parmetro. c) o percentual de aumento dos salrios tambm ser fornecido como parmetro.
SQL Uma
WHILE
CREATE PROCEDURE spAumento @media smallmoney, @maior smallmoney, @perc numeric(5,2) AS WHILE (SELECT AVG(salrio) FROM funcionrio) < @media BEGIN UPDATE funcionrio SET salrio=salrio*(1+@perc/100) IF (SELECT MAX(salrio) FROM funcionrio) >= @maior BREAK ELSE CONTINUE END SELECT AVG(salrio) [Mdia], MAX(salrio) [Maior salrio] FROM funcionrio Copyright 2000 - Nilton Freire Santos SQL Uma
Triggers
Um trigger um conjunto de comandos SQL que automaticaautomatica mente disparado quando um comando INSERT, UPDATE ou INSERT DELETE executado em uma tabela. Sua principal aplicao a criao de restries e consistncias de acesso ao banco de dados, como rotinas de segurana. Um trigger composto de trs partes: O nome, nico para cada banco de dados; nome A ao, como um comando INSERT, UPDATE ou DELETE; ao A execuo, execuo como um bloco de comandos SQL. Os triggers podem ser aninhados em at 16 nveis. nveis Os triggers no podem ser utilizados para tabelas temporrias ou vises. vises Quando uma tabela removida, os triggers associados a ela removida tambm sero. sero
SQL Uma
Triggers
Os triggers no tm parmetros e no podem ser explicitamente invocados. Eles so disparados quando os dados da tabela que est protegida pelo trigger so modificados. Os triggers sempre so considerados como parte de uma transao. Se falhar, os comandos sero revertidos (roll back). transao Quando um trigger executado, os resultados so retornados para a aplicao que o chamou. Um trigger pode executar comandos contidos em seu corpo ou acionar stored procedures e outros triggers. triggers No possvel criar um trigger para uma viso ou uma tabela temporria, mas um trigger pode fazer referncia a esses temporria objetos. Quando um trigger criado deve ser indicado se o valor da coluna referenciada antes ou depois da declarao do trigger.
SQL Uma
Triggers
Quando um trigger executado, o SQL Server cria duas tabelas temporrias que ficam residentes na memria e existem apenas enquanto o trigger estiver ativo. As duas tabelas contm a mesma estrutura da tabela de base onde o trigger foi criado. Essas duas tabelas recebem o nome de INSERTED e DELETED. DELETED Quando um comando INSERT executado, o registro criado ser copiado para a tabela de base e para a tabela INSERTED. INSERTED Quando um comando UPDATE executado, o registro original (registro antigo) armazenado na tabela DELETED e o registro modificado (registro atual) armazenado na tabela de base e na tabela INSERTED. INSERTED Quando um comando DELETE executado, o registro excludo armazenado na tabela DELETED. DELETED
SQL Uma
Triggers
GIS RE TR NS OI
INSERT
TABELA DE BASE TABELA INSERTED TABELA DE BASE TABELA INSERTED TABELA DELETED SQL Uma
O
ID ER O AD ER REGISTRO ELIMINADO LT
GIS RE TR
OA
UPDATE
REGISTRO ORIGINAL
DELETE
Triggers
Sintaxe:
CREATE TRIGGER TrQuantLinhas ON pas FOR INSERT, UPDATE, DELETE AS SELECT 'Quantidade de linhas afetadas =',@@rowcount
@@ rowcount uma varivel global do SQL Server que retorna o nmero de linhas afetadas por um comando SQL.
SQL Uma
Exemplos de Triggers
Para executar os exemplos a seguir, criar uma nova tabela NOTAFISCAL e outra ITENSNOTA para armazenar as notas fiscais dos produtos vendidos, de acordo com o diagrama abaixo:
PRODUTO
ITENS NOTA
NOTA
Tabela NOTAFISCAL: cdigo smallint, ch.prim. valornota smallmoney, nulo Tabela ITENSNOTA: produto smallint, no nulo, ch. estr. notafiscal smallint, no nulo, ch. estr. quantidade smallint, no nulo valoritem smallmoney, nulo chave primria = produto + notafiscal
SQL Uma
Exemplos de Triggers
USE scp GO CREATE TABLE notafiscal ( cdigo smallint PRIMARY KEY, valornota smallmoney DEFAULT 0 ) GO CREATE TABLE itensnota ( notafiscal smallint NOT NULL FOREIGN KEY REFERENCES notafiscal(cdigo), produto smallint NOT NULL FOREIGN KEY REFERENCES produto(cdigo), quantidade smallint NOT NULL CHECK(quantidade > 0), valoritem smallmoney NULL, PRIMARY KEY (notafiscal,produto)) GO Copyright 2000 - Nilton Freire Santos SQL Uma
Tabela NOTAFISCAL cdigo Tabela PRODUTO cdigo venda ... ... valornota
SQL Uma
CREATE TRIGGER TrExcluiNotaFiscal ON NotaFiscal FOR DELETE AS DELETE ItensNota WHERE NotaFiscal=(SELECT cdigo FROM deleted) Copyright 2000 - Nilton Freire Santos SQL Uma
Tabela NOTAFISCAL cdigo Tabela PRODUTO cdigo venda ... ... valornota
SQL Uma
SQL Uma
SQL Uma
Uma subquery de valor nico retorna apenas um valor e utiliza operadores relacionais (=, <>, >=, <=, !>, !<). WHERE A = (SELECT B...) - verdadeiro se A = B. operador de um nico valor Exemplo 1: Exibir o nome e o valor da gratificao das funes que tm a menor gratificao da empresa. SELECT nome, gratific FROM funo WHERE gratific = (SELECT MIN(gratific) FROM funo WHERE gratific <> 0) Exemplo 2: Exibir cdigo, nome, preo de venda e o preo mais caro pelo qual foi vendido cada produto da empresa. SELECT cdigo, nome,venda, (SELECT MAX(preo) FROM itens WHERE produto=p.cdigo) Vendido FROM produto p
SQL Uma