You are on page 1of 28

Apostila de Tecnologia de Linguagem de Banco de Dados 2

SGBD e SQL ANSI


Prof Edson Martin Feitosa Prof Rafael Fernando de Moraes Moreno

ndice
SISTEMAS GERENCIADORES DE BANCO DE DADOS....................................................................................... 3 INTRODUO ...................................................................................................................................................... 3 CARACTERSTICAS DE UM SGBD ............................................................................................................................. 3 O MODELO RELACIONAL........................................................................................................................................ 4 CONCEITOS BSICOS DOS BANCOS DE DADOS RELACIONAIS........................................................................................... 4 REGRAS DE INTEGRIDADE ...................................................................................................................................... 8 OUTRAS REGRAS DE INTEGRIDADE ........................................................................................................................... 9 TABELAS BSICAS A SEREM UTILIZADAS NO CURSO .................................................................................................... 10 SQL (STRUCTURED QUERY LANGUAGE) ...................................................................................................... 12 INTRODUO .................................................................................................................................................... 12 PRINCIPAIS OPERADORES..................................................................................................................................... 13 TIPOS DE DADOS SQL SERVER ............................................................................................................................ 14 COMANDOS DML SQL ...................................................................................................................................... 16 Comando SELECT ...................................................................................................................................... 17 Comando INSERT ...................................................................................................................................... 21 Comando DELETE ..................................................................................................................................... 22 Comando UPDATE .................................................................................................................................... 22 FUNES DE AGREGAO.................................................................................................................................... 23 COMANDOS DDL .............................................................................................................................................. 24 Comando CREATE TABLE .......................................................................................................................... 24 Comando ALTER TABLE ............................................................................................................................ 25 Comando DROP TABLE ............................................................................................................................. 26 Comando CREATE VIEW ........................................................................................................................... 26 Comando DROP VIEW .............................................................................................................................. 27 REFERNCIAS.............................................................................................................................................. 28

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

Sistemas Gerenciadores de Banco de Dados


Introduo
Este material cobre o assunto Banco de Dados, detalhando principalmente a parte referente manipulao de dados atravs de programas especiais criados para administrar informaes. Devido a uma srie de fatores, existe certa confuso quanto ao correto significado da expresso Banco de Dados, o que torna interessante fixar inicialmente dois conceitos bsicos: Banco de Dados um conjunto de informaes armazenadas a respeito de um tema ou finalidade especfica (como controle de folha de pagamento, pedidos ou movimento de contascorrente em uma instituio financeira). D-se o nome de Sistema Gerenciador de Banco de Dados (SGBD) ao conjunto de programas responsvel pela definio, administrao e utilizao de um banco de dados, proporcionando um ambiente para o acesso de uma comunidade de usurios s informaes armazenadas nos seus diversos arquivos. Temos ento que o termo Banco de Dados refere-se informao em si mesma, enquanto que Sistema Gerenciador de Banco de Dados um software que cuida dessa informao.

Caractersticas de um SGBD
Ao utilizar-se um SGBD esto implcitos certos objetivos fundamentais, como a integrao das atividades gerenciais e operacionais da organizao, a obteno de maior segurana em termos do armazenamento dos dados, a facilitao da tarefa de desenvolvimento de sistemas, a melhor adequao da base de dados realidade do dia a dia, etc. Para que tudo isso seja possvel, necessrio que o SGBD obedea a alguns princpios bsicos que resumimos a seguir: 1) Independncia de dados: o principal objetivo de um SGBD. Consiste na capacidade detornar as caractersticas fsicas dos dados (como localizao, estrutura, tamanho, etc.) transparentes para a aplicao. Com isso, os programas aplicativos passam a ter apenas uma viso lgica da base de dados, que no influenciada por eventuais modificaes na forma de armazenamento dos dados. Significa tambm que devem existir trs sublinguagens incorporadas ao banco de dados: uma Linguagem de Definio de Dados (DDL), uma Linguagem de Manipulao de Dados (DML) e uma Linguagem de Controle de Dados (DCL). 2) Compartilhamento de dados: deve ser possvel que, num determinado momento, mais de um usurio possa acessar os dados armazenados pelo SGBD. 3) Garantia de integridade de dados: apesar de permitir que os dados sejam compartilhados, o SGBD deve oferecer servios que evitem que atualizaes concorrentes tornem a base de dados inconsistente. 4) Garantia de segurana de dados: o SGBD deve oferecer meios que resguardem a base de dados nos casos de falha de programa, equipamento ou sinistros. Tambm deve ser possvel que alteraes indevidas feitas durante a operao dos aplicativos pelos usurios

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

sejam desfeitas sem prejuzo da coerncia dos dados. Considera-se igualmente como um item de segurana a ser proporcionado pelo software gerenciador, o controle dos nveis de acesso dos usurios aos dados do sistema. 5) Relacionamento entre os dados: a implementao dos diversos relacionamentos previstos na base de dados deve ser controlada automaticamente pelo SGBD, externamente aplicao. 6) Controle da redundncia de dados: devem ser proporcionados meios para que seja possvel o controle da repetio de dados pelos diversos arquivos administrados pelo SGBD. Isso conseguido por meio da centralizao da definio dos dados um Dicionrio de Dados ou Catlogo, que serve como base para a operao do SGBD.

Evidentemente, tais princpios existem interligados entre si, sendo que o descuido com relao a um deles geralmente apresenta reflexos sobre todos (ou quase todos) os demais.

O modelo relacional
Os SGBDs mais utilizados hoje em dia foram concebidos com base em um modelo matemtico derivado da Teoria dos Conjuntos e que teve um grande desenvolvimento a partir da dcada de 70. Esse modelo chamado Modelo Relacional e os SGBD que suportam tais conceitos so chamados de Sistemas Gerenciadores de Bancos de Dados Relacionais (SGBDR). So exemplos de SGBDR: MS-Access, MySQL, ZIM, MS-SQL Server, Oracle, Sybase, Informix, CA-Ingres, IBM-DB2, Borland-Interbase, etc. Alm dos gerenciadores relacionais, existem tambm SGBDs ditos hierrquicos (praticamente em desuso), de modelo de rede (considerados ultrapassados) e orientados a objetos (uma tecnologia emergente, mas ainda em maturao). Dessa forma, quando neste material for mencionado o termo SGBD est subentendido que se refere a um produto que implementa os conceitos do modelo relacional. Mais especificamente, estaremos trabalhando com o SGBDR SQL Server 2005 ou superior, um dos principais produtos para bancos de dados disponveis no mercado atualmente.

Conceitos bsicos dos bancos de dados relacionais


Em um ambiente de banco de dados relacional utilizamos alguns conceitos muito importantes, imprescindveis para a correta implantao e operao de qualquer sistema de banco de dados. Alguns desses novos termos originaram-se diretamente da Teoria de Conjuntos, outros so decorrentes da utilizao de elos lgicos para implementar os relacionamentos entre os dados armazenados no banco de dados. A seguir, uma rpida viso desses conceitos: Tabela: A estrutura que armazena os dados referentes a cada uma das ocorrncias de uma entidade uma tabela. Ao projetarmos um Banco de Dados relacional a partir de um Modelo Entidade / Relacionamento criamos uma tabela para cada entidade ou relacionamento com campos. Podemos dizer que uma tabela a materializao (para o SGBD) de uma entidade ou relacionamento com campos. As tabelas so tambm chamadas de relaes (no sentido proposto pela Teoria dos Conjuntos). Uma tabela composta por colunas e linhas, conforme mostra o exemplo a seguir.

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

Linha: Uma ocorrncia em particular de dados em uma tabela ocupa uma linha dessa tabela. Em determinadas literaturas as linhas das tabelas podem tambm ser chamadas de registros ou de tuplas. No exemplo anterior, os dados de um empregado ocupam uma linha na tabela Funcionario. Como existem 10 empregados nessa tabela, ela possui 10 linhas (ou tuplas, ou registros). Coluna: Cada tipo de informao armazenada em uma tabela uma coluna. Dois sinnimos de uso corrente para coluna so as palavras campo e atributo. Toda coluna de uma tabela deve possuir um nome pelo qual ser referenciada sempre que necessrio. Ao criarmos uma tabela definimos, para cada uma de suas colunas, o seu nome e tambm o seu tipo (numrico, alfabtico, data, etc). Por exemplo, NmFunc e DtAdm so colunas (ou campos) da tabela Funcionario. Essa tabela possui um total de 6 campos em sua estrutura. Domnio: Sempre que identificamos uma coluna de uma tabela, temos tambm uma idia de qual o tipo de informao que ela poder vir a conter. Por exemplo, se reconhecemos Sexo como sendo uma coluna de uma tabela qualquer, sabemos de antemo que a informao ali contida ser, sempre, "Masculino" ou "Feminino". De forma semelhante, se uma coluna for Estado, com certeza seu contedo ser a sigla ou o nome de um dos Estados do Brasil. Chamamos a essa faixa de valores que uma coluna pode conter de domnio dessa coluna. Assim, para o atributo DiadoMes, o domnio ser o conjunto de nmeros entre 1 e 31; o domnio de uma coluna Salario ser o conjunto de nmeros entre 0 e o teto salarial estipulado pela empresa, e assim por diante.

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

Exemplo de domnio

Chave primria: Um dos princpios do modelo relacional diz que uma linha de uma tabela deve sempre poder ser referenciada de forma nica. O atributo diferenciador (que no se repete) entre as linhas de uma tabela chamado de chave primria, que no caso da tabela Funcionario, por exemplo, poderia ser a coluna NrMatric, j que essa informao no se repete para dois funcionrios distintos. Muitas vezes, porm, uma tabela no possui, entre suas colunas, uma que por si s seja suficiente para identificar univocamente uma linha. Nesses casos deve sempre ser possvel que a combinao de dois ou mais colunas tenha a capacidade de se constituir numa chave primria. Chamamos a essas chaves primrias formadas pela combinao de vrios atributos de chaves primrias compostas. Chave estrangeira: Os relacionamentos entre tabelas so implementados no modelo relacional atravs de atributos de relacionamento. Essa tcnica consiste na distribuio de alguns atributos-chave pelas tabelas que representam as entidades envolvidas no relacionamento, de forma que seja possvel a associao lgica entre as linhas das tabelas com base na comparao de suas chaves. Na prtica uma chave estrangeira uma coluna (ou combinao de colunas) que indica um valor que deve existir como chave primria numa outra tabela (chamada de tabela pai). No caso da tabela Funcionrio existem duas chaves estrangeiras: as colunas CdCargo e CdDepto que referenciam, respectivamente, as tabelas de Cargos e de Departamentos.

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

Exemplo de chave primria e estrangeira

Nulo: Representa um valor desconhecido para um dado. No devemos confundir o conceito de nulo com espaos em branco ou o nmero zero, por exemplo, que so valores conhecidos. Nulo a ausncia de informao. Uma coluna de preenchimento obrigatrio numa tabela deve possuir todos os seus valores no-nulos. Se, por exemplo, uma linha da tabela Funcionrio contiver um nulo na coluna DtAdm, significa que a data de admisso do funcionrio correspondente quela linha desconhecida.

Exemplo de nulo

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

Regras de Integridade
O modelo relacional, ao definir os conceitos de Tabela, Coluna, Nulo, Domnio, Chave Primria e Chave Estrangeira, deixa implcitas algumas regras bsicas para a manuteno da consistncia da base de dados. Elas so chamadas de Regras de Integridade e tratam dos cuidados que analistas, projetistas e programadores devem observar ao implementar as rotinas de Incluso, Alterao e Excluso de dados nos objetos. Consideramos que existem dois principais tipos de integridade a serem mantidas numa base de dados relacional adequadamente projetada: a Integridade de Entidade e a Integridade Referencial. Integridade de Entidade (ou de Identidade ou Existencial): Refere-se s chaves primrias e busca garantir que toda e qualquer linha de uma tabela deve poder ser acessada com base apenas no contedo de sua chave primria. Regra bsica: "Nenhum atributo que faa parte de uma chave primria pode ter valor nulo." Isso significa que os contedos de todos os atributos que constituem uma chave primria devem ser conhecidos. Um contedo nulo representa uma informao desconhecida ou, em outras palavras, a ausncia da informao. Adicionalmente lembramos que, por definio, no se deve permitir que numa mesma tabela existam duas ocorrncias com chaves primrias iguais. Integridade Referencial: Diz respeito s chaves estrangeiras e visa manter a integridade dos relacionamentos previstos na base de dados. Na definio dos cuidados referentes a esse tipo de integridade, utilizaremos dois conceitos novos: Tabela-Pai (Parent Table): aquela onde o atributo de relacionamento desempenha o papel de chave primria. Tabela-Filho (Dependent Table): tabela onde o atributo de relacionamento desempenha o papel de chave estrangeira. Regra bsica: "O contedo de uma chave estrangeira deve, necessariamente, ser igual ao de uma ocorrncia da Tabela-Pai ou ento ser nulo." O primeiro caso mencionado pela regra significa que a ocorrncia da Tabela-Filho possui uma correspondente na Tabela-Pai. J o segundo caso representa a ausncia da correspondncia: para aquela ocorrncia em particular, no existe o relacionamento. As conseqncias da Integridade Referencial refletem-se nas consistncias necessrias ao se proceder s operaes de Incluso, Alterao e Excluso de dados nas Tabelas Pai e Filho. isso o que mostra o quadro a seguir.

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

Outras regras de integridade


Alm das regras de integridade de entidade e referencial, um banco de dados relacional pode suportar um conjunto adicional de regras (ou restries) cuja finalidade especificar aspectos prprios de cada coluna e respectivo domnio, complementando com isso a definio de suas caractersticas lgicas. As principais restries de integridade complementares tratam sobre a obrigatoriedade e unicidade de valores e sobre conjuntos de valores permitido. Obrigatoriedade: indica se deve ou no ser permitida a existncia de nulos numa coluna. Colunas que no aceitam nulos so ento de preenchimento obrigatrio. Unicidade: indica se deve ser permitido ou no que uma coluna possua valores idnticos em duas ou mais linhas. Uma coluna que no pode possuir valores repetidos uma coluna de valores nicos. Verificao de valores especficos: indica explicitamente qual o conjunto de valores permitidos para uma coluna. Por exemplo, para a coluna Sexo da tabela de alunos, os valores permitidos so { M, F}.

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

Tabelas bsicas a serem utilizadas no curso


Para ilustrar os conceitos e recursos a serem trabalhados durante o curso, utilizaremos um conjunto de 4 tabelas bastante simples que implementam um pequeno controle de uma locadora. As estruturas e os relacionamentos dessas tabelas so exibidos a seguir.

Nas demonstraes vamos supor que cada tabela possui um pequeno nmero de linhas. O contedo inicial assumido para cada tabela o seguinte:

Tabela FILME
COD_FILME 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 FILME 300 Mquina Mortfera A Mexicana A Verdade Nua e Crua A vida bela Austrlia Ultimato Bourn Constantine Os Irmos Grimm Os Doze Macacos Amadeus As Torres Gmeas Platoon O Advogado do Diabo Beowulf Bolt o super co Apertem o cinto o piloto sumiu Doze demais Uma noite no museu COD_CATEGORIA 1 1 2 2 2 3 3 4 4 4 5 5 1 6 7 7 9 9 9 DIRETOR Richard Donner Richard Donner Burr Steers Robert Luketic Roberto Benigni Baz Luhrmann Paul Greengrass Francis Lawrence Terry Gilliam Terry Gilliam Milos Forman Oliver Stone Oliver Stone Taylor Hackford Robert Zemeckis Byron Howard Jim Abrahams Shawn Levy Shawn Levy VALOR_LOCACAO 3,5 3,6 2 4 3,5 4 3,5 2,5 3,5 2,5 10 2,5 5,5 1,5 1 1,5 3,6 9,2 2,5 RESERVADA n n s n s s n s n n n s s s n s s s n

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

10

Tabela CLIENTES
COD_CLIENTE 1 2 3 4 5 6 7 8 9 10 RG 321346530 421346111 324857670 112345553 945848768 676548499 321349999 335466531 112233445 222222222 NOME Edson Martin Feitosa Rafael Fernando de Moraes Moreno Joo da Silva Maria Chiquinha Rafael Nunes Sales Daniela Martin Feitosa Renata Cristina Joaquim Ferreira de Souza Junior Ladislau Ferreira Vanessa Oliveira ENDERECO Rua Orlando Alvarenga, 1 Rua Francisco de Souza, 123 Rua Mario Quintana, 13 Rua Padre Luiz, 55 Rua Orlando Alvarenga, 4 Rua Guilherme Oliveria, 1 Rua Orlando Alvarenga, 1 Rua Outubro Vermelho, 65 Rua Orlando Alvarenga, 12345 Rua das Flores, 1 BAIRRO Jd. Vera Cruz Jd. Nova Esperana Av. Bartolomeu Jd. Vera Cruz Jd. Vera Cruz Jd. Vera das Acssicas Jd. Vera Cruz Jd. Santa Roslia Jd. Vera Cruz Jd. do Sol CIDADE Sorocaba So Roque Sorocaba Sorocaba Sorocaba Votorantim Sorocaba Votorantim Sorocaba Votorantim ESTADO SP SP SP SP SP SP SP SP SP SP TELEFONE 32125809 32274567 32134098 23336684 32124609 32132109 32125809 11125809 32144409 32122222 EMAIL edson.feitosa@ig.com.br rafael@terra.com.br joao@uol.com.br maria@ig.com.br rafael.sales@terra.com.br daniela.martin@gmail.com renata@gmail joaquim_junior@ig.com.br ladislau@terra.com.br vanessa@ig.com.br DATANASCIMENTO 1982-11-30 00:00:00.000 1985-04-01 00:00:00.000 1992-12-05 00:00:00.000 1982-11-30 00:00:00.000 1985-04-01 00:00:00.000 1986-12-26 00:00:00.000 1970-09-01 00:00:00.000 1980-04-08 00:00:00.000 1988-01-03 00:00:00.000 1998-08-08 00:00:00.000 sexo M M M F M F F M M F

Tabela LOCACOES
COD_LOCACAO 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 COD_CLIENTE 1 1 1 1 1 2 3 3 4 5 6 6 7 7 7 7 7 7 8 9 9 10 COD_FILME 1 6 8 2 13 5 3 19 17 5 7 9 16 1 5 8 11 12 9 3 6 10 DATA_RETIRADA 2010-03-20 19:05:43.887 2010-03-20 19:05:43.887 2010-03-20 19:05:43.887 2010-03-15 00:00:00.000 2010-03-15 00:00:00.000 2010-03-20 19:05:43.887 2010-03-18 19:05:43.887 2010-03-18 19:05:43.887 2010-03-01 19:05:43.887 2010-03-03 19:05:43.887 2010-03-03 19:05:43.887 2010-03-03 19:05:43.887 2010-03-13 19:05:43.887 2010-03-13 19:05:43.887 2010-03-14 19:05:43.887 2010-03-14 19:05:43.887 2010-03-14 19:05:43.887 2010-03-15 19:05:43.887 2010-03-20 19:05:43.887 2010-03-21 19:05:43.887 2010-03-21 19:05:43.887 2010-02-20 19:05:43.887 DATA_DEVOLUCAO 2010-03-23 00:00:00.000 2010-03-23 00:00:00.000 2010-03-23 00:00:00.000 2010-03-17 00:00:00.000 2010-03-17 00:00:00.000 2010-03-21 00:00:00.000 2010-03-20 00:00:00.000 2010-03-20 00:00:00.000 2010-03-03 00:00:00.000 2010-03-05 00:00:00.000 2010-03-04 00:00:00.000 2010-03-04 00:00:00.000 2010-03-15 00:00:00.000 2010-03-15 00:00:00.000 2010-03-16 00:00:00.000 2010-03-16 00:00:00.000 2010-03-16 00:00:00.000 2010-03-17 00:00:00.000 2010-03-21 00:00:00.000 2010-03-22 00:00:00.000 2010-03-22 00:00:00.000 2010-02-21 00:00:00.000

Tabela CATEGORIA
COD_CATEGORIA NOME_CATEGORIA 1 Ao 2 Romance 3 Aventura 4 Fico 5 Drama 6 Terror 7 Desenho 8 Policial 9 Comdia

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

11

SQL (Structured Query Language)


Introduo
Desenvolvida inicialmente nos laboratrios da IBM na primeira metade dos anos 70, a SQL uma linguagem de acesso a bancos de dados. Baseia-se nos princpios lanados por E. F. Codd, tendo sido projetada para viabilizar a construo de um produto relacional pela IBM. Apesar dessa origem, constitui-se hoje num padro internacional para os SGBDRs, com especificaes formalizadas pela ANSI (o ltimo padro publicado de 1992, chamado SQL-92) e adotadas em maior ou menor grau por vrios fornecedores de bancos de dados, tendo sido implementada inclusive por produtos no exatamente relacionais. Em suas definies, a SQL padro prev um reduzido conjunto de comandos, que podem ser classificados em 3 grupos: Data Manipulation Language (DML): permite consultar, adicionar, alterar e excluir informaes do banco de dados. Dentro da sintaxe de cada comando so permitidas algumas clusulas adicionais que viabilizam operaes relacionais tais como seleo, juno, unio, etc e a utilizao de algumas funes de uso mais comum, como de clculo de mdia, soma, contagem de registros e determinao de mximo e mnimo entre valores. Data Definition Language (DDL): permite criar e gerenciar a estrutura do banco de dados, como por exemplo, criar ou eliminar tabelas e ndices. possvel tambm a especificao de alguns itens de segurana adicionais, como por exemplo, a definio de quais informaes obrigatria dentro de uma dada tabela, que procedimentos devem ser associados a uma operao em particular sobre o banco de dados, etc. Data Control Language (DCL): permite definir as contas dos usurios autorizados a acessar o banco de dados, bem como impor restries de uso a esses usurios. Uma viso um pouco mais detalhada dos principais comandos de cada grupo ser vista mais adiante neste material. Tecnicamente seria mais correto caracterizar a SQL padro como uma sublinguagem, j que no proporciona comandos ou declaraes prprios para o controle de repeties (loopings), de desvios (condicionais e incondicionais) ou de seqncias. Assim, no possvel a construo de aplicaes com um mnimo de complexidade utilizando apenas a SQL padro. Por esse motivo os principais gerenciadores do mercado desenvolveram extenses prprias (no padronizadas) SQL de maneira a permitir a construo de rotinas para o SGBD. So exemplos dessas extenses a PL/SQL (Oracle) e Transact SQL (MS-SQL Server) entre outras. Existem duas formas bsicas em que a SQL utilizada: a interativa (ou dinmica) feita em nvel de linha de comando, com os comandos sendo processados por um mdulo interpretador, e a embutida ("embedded SQL"), onde o programa codificado numa linguagem mais genrica (como o Cobol, C, Pascal ou PL/1) e faz chamadas a declaraes SQL em algumas situaes. Dizemos nesse ltimo caso que a SQL est associada com uma linguagem "host" ou "hospedeira". Mais recentemente, a difuso da SQL ganhou um significativo impulso com o advento da tecnologia Cliente / Servidor, tendo consolidado-se como o elemento chave na conexo entre SGBDs de fornecedores diferentes. importante ressaltar que existem diferenas entre as implementaes da sintaxe dos comandos conforme o fabricante, mas essas diferenas

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

12

geralmente so secundrias e existe sempre uma sintaxe mnima que suportada por todos os produtos.

Principais operadores

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

13

Tipos de dados SQL SERVER


Os tipos de dados permitidos para a definio das colunas das tabelas que pretendemos criar variam conforme o SGBD a ser utilizado. Como vamos utilizar em nossos exemplos o SGBD SQL Server 2005, veremos inicialmente os seus tipos de dados, que aparecem descritos no quadro a seguir. Tipo de dado Binary Bit Char Datetime Decimal Descrio Contm at 8.000 bytes de dados binrios de tamanho fixa. Tamanho fixo significa que o campo ir sempre utilizar o espao que voc definiu. Cria um campo true/false (verdadeiro/falso). Este tipo de dado armazena apenas os valores de 0 e 1 e no pode conter valores nulos. Contm at 8.000 bytes de uma string de tamanho fixo. Use este campo para dados this que iro sempre ser do mesmo tamanho. Armazena a data e hora com preciso de milissegundos em 8 bytes. Contm dados numricos com um inteiro esquerda do ponto decimal e uma parte fracionria a direita. Este campo ir ter um nmero varivel de bytes, baseado na escala e preciso que voc especificar. Escala o nmero mximo de dgitos direita do ponto decimal e preciso o nmero total de dgitos em ambos os lados do the ponto decimal. Um tipo de dados numrico aproximado para armazenamento de longos nmeros em ponto-flutuante, com a preciso de at 15 dgitos em 8 bytes. O SQL Server feralmente arredonda esses nmeros para cima. Contm at 2.147.483.647 bytes (aproximadamente 2Gbytes) de dados binrios e costuma ser utilizado para armazenar grandes quantidades de dados como imagens ou arquivos de som. Campos definidos com este tipo de dado no podem ser indexadas, pesquisadas, agrupadas ou ordenadas. Armazena um dado numrico preciso para todo nmero armazenado em 4 bytes. Pode conter nmeros de -2^1031 a 2^1031. Contm dados monetrios definidos com preciso de 4 dgitos. Ele representado como um inteiro de preciso dupla e consome 8 bytes de armazenamento. Valores podem estar entre -992.337.293.685.477,5808 e 922.337.203.685.447,5807. Contm at 4.000 caracteres Unicode. Tipo de dado de largura fixa, sendo armazenado no dobro de bytes (caracteres Unicode precisam de 2 bytes por caracter). Armazena caracteres Unicode at 1.073.741.823 posies, armazenados no dobro dos bytes declarados (caracteres Unicode precisam de 2 bytes por caracter). Veja Decimal. Contm at 4.000 caracteres Unicode. Tipo de dado de largura varivel, sendo armazenado no dobro de bytes (caracteres Unicode precisam de 2 bytes por caracter).

Float

Image

Int Money

Nchar

Ntext

Numeric Nvarchar

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

14

Real Smalldatetime Smallint

Similar ao tipo de dado float, usando apenas 4 bytes de armazenamento com preciso de at 7 dgitos. Campo data menos preciso, que armazena data e hora em preciso de minutos, utilizando 4 bytes. Armazena dados numricos preciso at a quantidade de nmeros armazenados em 2 bytes. Menor que o int, ele pode conter nmeros de 32.768 at 32.767. Contm dados monetrios decimais precisos at o 4 dgito. Usa 4 bytes de armazenamento e pode conter valores de -214.748,3648 at 214.748,3647. Contm uma string de caracteres no-Unicode com tamanho de at 2.147.483.647 caracteres. Similiar ao campo memo encontrado em outros bancos de dados, este tipo de dado armazena grandes quantidades de texto em pginas de 2kb. Colunas definidas com este tipo de dado no podem ser indexadas, pesquisadas, agrupadas ou ordenadas. Um valor binrio automaticamente atualizado cada vez que uma tabela com uma coluna deste tipo alterada. Ele usa 8 bytes de armazenamento e nico dentro do banco de dados. Uma tabela s pode possui uma coluna deste tipo. O menor tipo de dado inteiro, ele consome apenas 1 byte de armazenamento e pode conter nmeros de 0 a 255. Um nmero hexadecimal de 16 bytes, tambm conhecido como GUID (globally unique identification number). Use a funo do SQL Server NEWID() para gerar novos identificadores nicos para alimentar uma varivel ou uma coluna deste tipo de dado. Similar ao tipo binrio, este pode conter at 8.000 bytes de dados binrios de tamanho varivel. Tamanho varivel significa que o campo ir consumir apenas o espao necessrio para armazenar os dados contidos no mesmo. Contm at 8.000 bytes de tamanho varivel para strings. Use este tipo para colunas que iro armazenar valores nulos de dados que variam em tamanho.

Smallmoney

Text

Timestamp

Tinyint Uniqueidentifier

Varbinary

Varchar

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

15

Comandos DML SQL


J vimos que os recursos SQL podem ser divididos em 3 grupos: DDL, DML e DCL. Veremosaqui a parte aparentemente mais evidente da SQL, aquela referente manipulao de dados (DML), composta por um pequeno conjunto de comandos, uma variedade de operadores e inmeras funes (algumas padronizadas para todos os SGBDRs, outras no). Um resumo dos comandos DML apresentado na tabela a seguir:

Veremos agora em detalhes cada um desses comandos.

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

16

Comando SELECT

Recupera um conjunto de linhas a partir de uma ou mais tabelas.

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

17

Exemplos de SELECT 1. Exibindo todos os dados da tabela categoria


select * from CATEGORIA
COD_CATEGORIA --------------------------------------1 2 3 4 5 6 7 8 9 NOME_CATEGORIA -------------------Ao Romance Aventura Fico Drama Terror Desenho Policial Comdia

2. Exibindo apenas nome e endereo dos clientes da cidade de Sorocaba


select NOME,ENDERECO from CLIENTES where CIDADE = 'Sorocaba'
NOME -----------------------------Edson Martin Feitosa Joo da Silva Maria Chiquinha Rafael Nunes Sales Renata Cristina Ladislau Ferreira ENDERECO ---------------------------------Rua Orlando Alvarenga, 1 Rua Mario Quintana, 13 Rua Padre Luiz, 55 Rua Orlando Alvarenga, 4 Rua Orlando Alvarenga, 1 Rua Orlando Alvarenga, 12345

3. Exibindo nome e telefone dos clientes masculinos ordenados por ordem alfabtica
select NOME,TELEFONE from CLIENTES where sexo = 'm' order by NOME ou select NOME,TELEFONE from CLIENTES where sexo = 'm' order by 1
NOME ---------------------------------------Edson Martin Feitosa Joo da Silva Joaquim Ferreira de Souza Junior Ladislau Ferreira Rafael Fernando de Moraes Moreno Rafael Nunes Sales TELEFONE ----------32125809 32134098 11125809 32144409 32274567 32124609

4. Exibindo codigo,nome e email de todos os clientes onde o email do provedor IG


select COD_CLIENTE,NOME,EMAIL from CLIENTES where EMAIL like '%@ig%'
COD_CLIENTE -------------1 4 8 10 NOME ------------------------------Edson Martin Feitosa Maria Chiquinha Joaquim Ferreira de Souza Junior Vanessa Oliveira EMAIL ---------------------------edson.feitosa@ig.com.br maria@ig.com.br joaquim_junior@ig.com.br vanessa@ig.com.br

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

18

5. Exemplo de juno de tabela, exibindo os nomes dos clientes que possuem locao e a data de locao
select NOME, DATA_RETIRADA from LOCACOES, CLIENTES where LOCACOES.COD_CLIENTE = CLIENTES.COD_CLIENTE
NOME -------------------------------------------------Edson Martin Feitosa Edson Martin Feitosa Edson Martin Feitosa Edson Martin Feitosa Edson Martin Feitosa Rafael Fernando de Moraes Moreno Joo da Silva Joo da Silva Maria Chiquinha Rafael Nunes Sales Daniela Martin Feitosa Daniela Martin Feitosa Renata Cristina Renata Cristina Renata Cristina Renata Cristina Renata Cristina Renata Cristina Joaquim Ferreira de Souza Junior Ladislau Ferreira Ladislau Ferreira Vanessa Oliveira DATA_RETIRADA ----------------------2010-03-20 19:05:43.887 2010-03-20 19:05:43.887 2010-03-20 19:05:43.887 2010-03-15 00:00:00.000 2010-03-15 00:00:00.000 2010-03-20 19:05:43.887 2010-03-18 19:05:43.887 2010-03-18 19:05:43.887 2010-03-01 19:05:43.887 2010-03-03 19:05:43.887 2010-03-03 19:05:43.887 2010-03-03 19:05:43.887 2010-03-13 19:05:43.887 2010-03-13 19:05:43.887 2010-03-14 19:05:43.887 2010-03-14 19:05:43.887 2010-03-14 19:05:43.887 2010-03-15 19:05:43.887 2010-03-20 19:05:43.887 2010-03-21 19:05:43.887 2010-03-21 19:05:43.887 2010-02-20 19:05:43.887

6. Excluindo registros duplicados do exemplo acima


select distinct NOME, DATA_RETIRADA from LOCACOES, CLIENTES where LOCACOES.COD_CLIENTE = CLIENTES.COD_CLIENTE
NOME -------------------------------------------------Daniela Martin Feitosa Edson Martin Feitosa Edson Martin Feitosa Joo da Silva Joaquim Ferreira de Souza Junior Ladislau Ferreira Maria Chiquinha Rafael Fernando de Moraes Moreno Rafael Nunes Sales Renata Cristina Renata Cristina Renata Cristina Vanessa Oliveira DATA_RETIRADA ----------------------2010-03-03 19:05:43.887 2010-03-15 00:00:00.000 2010-03-20 19:05:43.887 2010-03-18 19:05:43.887 2010-03-20 19:05:43.887 2010-03-21 19:05:43.887 2010-03-01 19:05:43.887 2010-03-20 19:05:43.887 2010-03-03 19:05:43.887 2010-03-13 19:05:43.887 2010-03-14 19:05:43.887 2010-03-15 19:05:43.887 2010-02-20 19:05:43.887

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

19

7. Exemplo de agrupador, contar quantidades de locaes por cliente e renomear a coluna para quantidade
select NOME, COUNT(*) as quantidade from LOCACOES, CLIENTES where LOCACOES.COD_CLIENTE = CLIENTES.COD_CLIENTE group by NOME
NOME -------------------------------------------------Daniela Martin Feitosa Edson Martin Feitosa Joo da Silva Joaquim Ferreira de Souza Junior Ladislau Ferreira Maria Chiquinha Rafael Fernando de Moraes Moreno Rafael Nunes Sales Renata Cristina Vanessa Oliveira quantidade ----------2 5 2 1 2 1 1 1 6 1

8. Exibindo clientes que alugaram mais ou igual a 5 filmes


select NOME, COUNT(*) as quantidade from LOCACOES, CLIENTES where LOCACOES.COD_CLIENTE = CLIENTES.COD_CLIENTE group by NOME having COUNT(*) >= 5
NOME quantidade -------------------------------------------------- ----------Edson Martin Feitosa 5 Renata Cristina 6

9. Refazendo exercicio 5 com aliases para tabelas


select NOME, DATA_RETIRADA from LOCACOES l, CLIENTES c where l.COD_CLIENTE = c.COD_CLIENTE
NOME -------------------------------------------------Edson Martin Feitosa Edson Martin Feitosa Edson Martin Feitosa Edson Martin Feitosa Edson Martin Feitosa Rafael Fernando de Moraes Moreno Joo da Silva Joo da Silva Maria Chiquinha Rafael Nunes Sales Daniela Martin Feitosa Daniela Martin Feitosa Renata Cristina Renata Cristina Renata Cristina Renata Cristina Renata Cristina Renata Cristina Joaquim Ferreira de Souza Junior Ladislau Ferreira Ladislau Ferreira Vanessa Oliveira DATA_RETIRADA ----------------------2010-03-20 19:05:43.887 2010-03-20 19:05:43.887 2010-03-20 19:05:43.887 2010-03-15 00:00:00.000 2010-03-15 00:00:00.000 2010-03-20 19:05:43.887 2010-03-18 19:05:43.887 2010-03-18 19:05:43.887 2010-03-01 19:05:43.887 2010-03-03 19:05:43.887 2010-03-03 19:05:43.887 2010-03-03 19:05:43.887 2010-03-13 19:05:43.887 2010-03-13 19:05:43.887 2010-03-14 19:05:43.887 2010-03-14 19:05:43.887 2010-03-14 19:05:43.887 2010-03-15 19:05:43.887 2010-03-20 19:05:43.887 2010-03-21 19:05:43.887 2010-03-21 19:05:43.887 2010-02-20 19:05:43.887

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

20

10. Criando campo calculado, prever data de entrega acrescentando 3 dias na data de retidada
select NOME,DATA_RETIRADA,(DATA_RETIRADA+3) as previsao_devolucao from LOCACOES l, CLIENTES c where l.COD_CLIENTE = c.COD_CLIENTE

NOME ----------------------------------Edson Martin Feitosa Edson Martin Feitosa Edson Martin Feitosa Edson Martin Feitosa Edson Martin Feitosa Rafael Fernando de Moraes Moreno Joo da Silva Joo da Silva Maria Chiquinha Rafael Nunes Sales Daniela Martin Feitosa Daniela Martin Feitosa Renata Cristina Renata Cristina Renata Cristina Renata Cristina Renata Cristina Renata Cristina Joaquim Ferreira de Souza Junior Ladislau Ferreira Ladislau Ferreira Vanessa Oliveira

DATA_RETIRADA ----------------------2010-03-20 19:05:43.887 2010-03-20 19:05:43.887 2010-03-20 19:05:43.887 2010-03-15 00:00:00.000 2010-03-15 00:00:00.000 2010-03-20 19:05:43.887 2010-03-18 19:05:43.887 2010-03-18 19:05:43.887 2010-03-01 19:05:43.887 2010-03-03 19:05:43.887 2010-03-03 19:05:43.887 2010-03-03 19:05:43.887 2010-03-13 19:05:43.887 2010-03-13 19:05:43.887 2010-03-14 19:05:43.887 2010-03-14 19:05:43.887 2010-03-14 19:05:43.887 2010-03-15 19:05:43.887 2010-03-20 19:05:43.887 2010-03-21 19:05:43.887 2010-03-21 19:05:43.887 2010-02-20 19:05:43.887

previsao_devolucao ----------------------2010-03-23 19:05:43.887 2010-03-23 19:05:43.887 2010-03-23 19:05:43.887 2010-03-18 00:00:00.000 2010-03-18 00:00:00.000 2010-03-23 19:05:43.887 2010-03-21 19:05:43.887 2010-03-21 19:05:43.887 2010-03-04 19:05:43.887 2010-03-06 19:05:43.887 2010-03-06 19:05:43.887 2010-03-06 19:05:43.887 2010-03-16 19:05:43.887 2010-03-16 19:05:43.887 2010-03-17 19:05:43.887 2010-03-17 19:05:43.887 2010-03-17 19:05:43.887 2010-03-18 19:05:43.887 2010-03-23 19:05:43.887 2010-03-24 19:05:43.887 2010-03-24 19:05:43.887 2010-02-23 19:05:43.887

Comando INSERT Insere linhas numa tabela ou view.

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

21

Exemplos: 1. Inserindo um novo filme


insert into FILME(FILME,COD_CATEGORIA,DIRETOR,VALOR_LOCACAO,RESERVADA) values ('Corao Valente',1,'Mel Gibson',3.5,'n')

Comando DELETE Exclui linhas de uma tabela ou view.

Exemplos: 1. Deletando filme Corao Valente


delete from FILME where FILME = 'Corao Valente'

Comando UPDATE Atualiza o contedo de uma tabela ou view.

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

22

Exemplos 1. Atualizando telefone do cliente Joo da Silva


update CLIENTES set TELEFONE = '47079538' where NOME = 'Joo da Silva'

Funes de agregao
A linguagem SQL oferece um conjunto de funes destinadas a calcular valores estatsticos a partir de grupos de linhas selecionadas atravs da clusula GROUP BY prevista no comando SELECT. Conforme os atributos que especificamos nessa clusula sero os agrupamentos de linhas que sero produzidos, uma vez que linhas com o mesmo valor nos atributos especificados so colocadas no mesmo grupo. As funes de agregao previstas pela SQL padro so indicadas na tabela a seguir.

Exemplos: 1. Mdia de valores dos filmes da locadora


SELECT AVG (VALOR_LOCACAO) FROM FILME

2. Valor mnimo pago por um filme da locadora


SELECT min (VALOR_LOCACAO) FROM FILME

3. Valor mximo pago por um filme da locadora


SELECT max (VALOR_LOCACAO) FROM FILME

4. Soma do valor de todos os filmes da locadora


SELECT sum (VALOR_LOCACAO) FROM FILME

5. Quantidade de clientes cadastrados


SELECT COUNT(*) FROM CLIENTES

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

23

Comandos DDL
Em SQL temos um conjunto de comandos com a finalidade de permitir a criao, alterao e eliminao dos objetos da base de dados. Esse conjunto chamado de Linguagem de Definio de Dados (em ingls, Data Definition Language DDL) e composto basicamente pelos comandos CREATE, ALTER E DROP. Com eles podemos definir objetos como tabelas, vises, ndices, entre outros, com pequenas variaes na sintaxe de cada comando. Comando CREATE TABLE Cria uma tabela, especificando suas colunas e restries. A sintaxe apresentada a seguir est simplificada, omitindo algumas clusulas opcionais um pouco mais tcnicas que no so importantes neste momento. CREATE TABLE <nome_tabela> ( <nome_coluna1> <tipo_dado> <restries_c>, <restries_t> ) Argumento <nome_tabela> <nome_coluna > <tipo_dado> Significado Especifica o nome da tabela a ser criada. Especifica o nome da coluna a ser criada. Tipo de dado da coluna, que dever ser escolhido dentro do conjunto de tipos de dados vlidos. Se necessrio, especificar tambm o tamanho do dado. Restries de coluna a serem aplicadas para o dado. Restries de tabela a serem aplicadas.

<restries_c> <restries_T> Exemplos:

1. Criando a tabela de Clientes


CREATE TABLE dbo.CLIENTES ( COD_CLIENTE NUMERIC(18,0) IDENTITY(1,1) PRIMARY KEY NOT NULL, RG VARCHAR(9) NOT NULL, NOME VARCHAR(50) NOT NULL, ENDERECO VARCHAR(50) NULL, BAIRRO VARCHAR(30) NULL, CIDADE VARCHAR(30) NULL, ESTADO CHAR(2) NOT NULL, TELEFONE VARCHAR(15) NULL, EMAIL VARCHAR(30) NULL, DATANASCIMENTO DATETIME NULL, sexo char(1) )

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

24

2. Criando a tabela de Locaes


CREATE TABLE dbo.LOCACOES ( COD_LOCACAO NUMERIC(18,0) IDENTITY(1,1) NOT NULL, COD_CLIENTE NUMERIC(18,0) NOT NULL, COD_FILME NUMERIC(18,0) NOT NULL, DATA_RETIRADA DATETIME NOT NULL, DATA_DEVOLUCAO DATETIME NULL, CONSTRAINT PK_LOCACAO_CLIENTE PRIMARY KEY(COD_LOCACAO, COD_CLIENTE, COD_FILME) )

Comando ALTER TABLE Altera definies de uma tabela, adicionando e modificando colunas ou adicionando e excluindo restries. ALTER TABLE <nome_tabela> { ALTER COLUMN <nome_coluna> <tipo_dado> <restrio_c> | ADD { <nome_coluna> <tipo_dado> <restrio_c> | <restrio_t> } [, ... n] | DROP { <restrio_t> | <nome_coluna> } } Argumento <nome_tabela> <nome_coluna> <tipo_dado> Significado Nome da tabela a ser modificada. Nome da coluna a ser modificada, inserida ou excluda. Tipo de dado da coluna, que dever ser escolhido dentro do conjunto de tipos de dados vlidos. Se necessrio, especificar tambm o tamanho do dado. Restries de coluna a serem aplicadas para o dado. Restries de tabela a serem aplicadas.

<restrio_c> <restrio_t> Exemplos:

1. Adicionando o campo CEL na tabela de Clientes


ALTER TABLE CLIENTES ADD CEL VARCHAR(15) NULL

2. Alterando o tamanho do campo Cel da tabela de Clientes


ALTER TABLE CLIENTES ALTER COLUMN CEL VARCHAR(20) NULL

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

25

3. Referenciando o campo COD_CLIENTE da tabela Clientes como chave estrangeira na tabela Locaes
ALTER TABLE dbo.LOCACOES WITH CHECK ADD CONSTRAINT FK_LOCACOES_CLIENTE FOREIGN KEY (COD_CLIENTE) REFERENCES dbo.CLIENTES(COD_CLIENTE)

Comando DROP TABLE Elimina uma tabela do banco de dados, excluindo todos os seus dados, bem como os ndices correspondentes. DROP TABLE <nome_tabela>

Argumento <nome_tabela> Exemplos:

Significado Nome da tabela a ser eliminada.

1. Excluindo a tabela Locaes


DROP TABLE LOCACOES

2. Excluindo a tabela Clientes


DROP TABLE CLIENTES

Comando CREATE VIEW Cria ou modifica uma viso. Uma viso uma espcie de tabela lgica, onde os seus dados so obtidos dinamicamente a partir das tabelas do banco de dados. CREATE | ALTER VIEW <nome_viso> AS <consulta> Argumento <nome_viso> <consulta> Significado Especifica o nome da viso a ser criada ou modificada. Consulta SELECT ... FROM... WHERE ... que fornecer os dados a serem exibidos pela viso.

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

26

Exemplos: 1. Criando um viso que mostre todos os clientes do estado de So Paulo


CREATE VIEW CLIENTES_SP AS SELECT * FROM CLIENTES WHERE ESTADO = 'SP'

2. Criando uma viso que mostre todos os filmes que no esto reservados
CREATE VIEW FILME_SEM_RESERVA AS SELECT * FROM FILME WHERE RESERVADA = 'n'

Comando DROP VIEW Elimina uma viso do banco de dados. DROP VIEW <nome_viso>

Argumento <nome_viso> Exemplo:

Significado Nome da viso a ser eliminada.

1. Excluindo a viso CLIENTES_SP


DROP VIEW CLIENTES_SP

2. Excluindo a viso FILME_SEM_RESERVA


DROP VIEW FILME_SEM_RESERVA

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

27

Referncias
[1] < http://msdn.microsoft.com/pt-br/library/bb545450.aspx> Biblioteca SQL SERVER. [2] Apostila SQL Prof MS. Antonio Cesar de Barros Munari.

SGBD e SQL ANSI [verso 1.0] Edson Martin Feitosa / Rafael Fernando de Moraes Moreno

28

You might also like