Вы находитесь на странице: 1из 50

SQL Server 2005 Parte 1 Overview

9 09UTC maro 09UTC 2010

Ol pessoal, comeo mais uma srie de artigos em meu blog. Desta vez, o assunto SQL
Server Bsico.
Pretendo, aps terminar esta srie de artigos, fazer outra falando sobre SQL Server
Avanado. Aproveitem e postem sugestes ou pedidos de artigos!
Irei falar desde a histria do SQL Server, a origem, as verses lanadas, mostrar
umtutorial para baixar e instalar o SQL Server 2005, mostrar os objetos do SQL
Server, osdatabases previamente instalados, os comandos mais usados
como Select, Insert, Update eDelete, os tipos de Constraints, as Regras de
Relacionamento, MER, DER, falarei tambm das clusulas Where, Order By, Inner
Join, Group By e muito mais!

Vocs podem me perguntar: porqu falar da verso 2005 e no da verso 2008, j que
mais nova? E eu lhes respondo: estou usando como base de meus artigos minha apostila
daImpacta, onde fiz cursos de SQL Server 2005. Sem contar tambm que no h uma
grande diferena entre as verses 2005 e 2008. De qualquer forma irei postar algumas coisas
sobre SQL Server 2008.
Comeando a partir do prximo artigo a falar sobre a introduo e origem do SQL, diferenas
entre verses, tutorial para baixar e instalar o SQL Server 2005 Express Edition e comandos
bsicos.
Aguardem, at o final da semana surgir um novo artigo!
Abraos.

SQL Server 2005 Parte 2 Introduo e Origem, Diferenas


entre verses, Tutorial de instalao e Comandos bsicos
13 13UTC maro 13UTC 2010

Ol pessoal, comeamos definitivamente nossa srie de artigos sobre SQL Server 2005. Nesta
parte iremos falar contar a histria do SQL, sua origem, falarmos das diferenas entre as
verses 2000, 2005 e 2008 (e suas respectivas edies), mostrar um tutorial passo a passo
de instalao da verso 2005, um link de um tutorial para instalao da verso 2008 e
descrever os comandos bsicos. Ento, vamos l!
Introduo e origem do SQL Server O SQL Server um SGBD Sistema Gerenciador
de Banco de Dados criado pela Microsoft. Um banco muito robusto usado por sistemas
corporativos de diversos segmentos. A sigla SQL significa Structured Query
Language(Linguagem Estruturada de Consulta) e um padro ANSI desde 1986
e ISO desde 1987. Usada principalmente para alterar, consultar, incluir e excluir registros,
com um leque muito variado de opes para manipular dados.
Hoje em dia conta com trs verses: o T-SQL (Transacted Structured Query Language
padro Microsoft), PL/SQL (Procedural Language/Structured Query Language padro
Oracle) e SQL PL (SQL Procedural Language padro IBM).
A linguagem foi desenvolvida em meados da dcada de 70, com base nos trabalhos sobre
bancos de dados relacionais de Edgar Francis Codd. Apesar de que, em 1969, uma verso
beta j circulava nos corredores da IBM. Na dcada de 70, um grupo de IBM desenvolveu o
sistema de banco de dados System R, tendo como base os trabalhos de Edgar F. Codd, como
dito acima. A linguagem desenvolvida para manipular os dados deste modelo se
chamouSEQUEL (Structured English Query Language), mais algum tempo depois mudou
para SQL, pois uma marca da Inglaterra j usava o nome SEQUEL.
No fim da dcada de 70, IBM e Oracle (na poca com o nome de Relational Software Inc.)
desenvolveram sistemas baseados nos conceitos do SQL.
Em 1979, trs empresas se juntaram (Sybase, Microsoft e Ashton-Tate) com o intuito de
desenvolver um produto para concorrer com os bancos de dados da IBM e Oracle. Assim
nasce o SQL Server 1.0 para OS/2.
Somente em 1992, a Microsoft lana seu prprio banco de dados, chamado de Microsoft
SQL Server 4.2. Aps isso foram lanadas diversas verses: 4.21 para Windows NT, 6.0, 7.0
(com interface grfica) e 2000 (o primeiro que teve uma verso para a plataforma de 64 bits
da Intel.
As verses mais recentes tiveram diversas alteraes. Em Novembro de 2005 lanado
o SQL Server 2005 com aumento de performance e alteraes na IDE, nos comandos,
integrao com a CLR, entre outras. A ltima verso teve mais alteraes como novos tipos
de dados, segurana e performance melhorados, etc.
Fontes de pesquisa:
Wikipedia http://pt.wikipedia.org/wiki/Sql-server
Blog 50 Minutos http://www.50minutos.com.br/blog/post/Algo-sobre-o-SQL-Server.aspx
Diferenas entre verses
- No SQL Server 2000, temos 6 tipos de verses que podem ser instaladas, vejam a
seguir um breve descritivo de todas elas:
1 Enterprise Edition Esta verso suporta todas as funcionalidades do SQL Server 2000
e pode ser utilizada tanto em um ambiente OLTP como em OLAP.

2 Standard Edition Esta verso suporta quase todas as funcionalidades da verso


Enterprise, com algumas limitaes e restries ao servio Analysis Services.
3 Personal Edition Esta verso possui quase tudo o que a verso Standard possui, com
a exceo de que no podemos criar um Publicador/Distribuidor em uma replicao
transacional. H tambm uma limitao de performance quando mais de 5 usurios enviam
instrues SQL ao mesmo tempo.
4 Windows CE Edition Verso para dispositivos portteis que armazena
temporariamente uma pequena quantidade de dados para depois transferir para outro SQL
Server 2000. Possui diversas limitaes.
5 Developer Edition Possui todas as funcionalidades da verso Enterprise. A nica
limitao que, como o prprio nome diz, esta verso exclusiva para o desenvolvimento de
aplicaes em ambiente de desenvolvimento e no em um ambiente de produo.
6 Desktop Engine Este somente o engine do SQL Server, sem ferramentas grficas.
No podemos criar um banco com mais de 2GB e possui a mesma limitao que a verso
Personal. Esta verso tambm chamada de MSDE e pode ser distribuda livremente sem a
necessidade de licena.
- No SQL Server 2005, temos tambm 6 verses:
1 Express Edition Esta verso pode ser baixada gratuitamente e a mais utilizada por
desenvolvedores e estudantes da rea. Conta com uma limitao de 4GB para os arquivos de
dados
2 Workgroup Edition Verso para empresas, que precisam utilizar bancos de dados
sem limites quanto ao tamanho e quantidade de usurios.
3 Developer Edition Verso para o desenvolvedor, permite desenvolver qualquer tipo
de aplicao.
4 Standard Edition Oferece uma soluo para pequenas e mdias empresas que
buscam uma soluo fcil de utilizar e que seja capaz de suportar atividades comerciais.
5 Enterprise Edition Opo mais indicada para os usurios que buscam a verso com
maior escalabilidade e disponibilidade.
6 Mobile Edition Com esta edio, o desenvolvimento de aplicaes relacionadas
Business Inteligence e ao gerenciamento de dados pode ser implementado em dispositivos
mveis.
- No SQL Server 2008, temos 5 verses:
1 Enterprise Edition Usada por grandes empresas que precisam de um fluxo maior de
dados. H outras duas verses, Developer e Evaluation, que tem as mesmas
funcionalidades da Enterprise com algumas restries em seu licenciamento. As diferenas
entre as verses Standard e Enterprise so maiores no SQL 2008 do que na verso 2005.
2 Standard Edition Verso para pequenas e mdias empresas, tem um maior poder em
anlise de dados e Reporting Services.
3 Workgroup Edition Inclui os recursos bsicos dos bancos de dados relacionais,
muito usado para funes de replicao de dados. Mais apropriada para empresas que
precisam de performance em sincronizao remota ou para servidores geograficamente
distantes.
4 Express Edition Verso gratuita do SQL Server, essencial para quem quer aprender a
construer aplicaes pequenas. Usada em larga escala por estudantes.
5 Compact Edition Mais uma verso gratuita do SQL Server, usada principalmente em
aplicativos mveis, mais tambm em desktops e clientes.
Fontes de pesquisa:

IMasters
http://imasters.uol.com.br/artigo/263/sql_server/as_diferentes_versoes_do_sql_server/
DevBr.Net http://devbr.net/blog/?p=6
Tutorial de instalao
SQL Server 2005
Acesse este link: http://www.microsoft.com/downloads/details.aspx?familyid=220549b50b07-4448-8848-dcc397514b41&displaylang=en. Role a tela para baixo e escolha a opo
de53.5mb clicando em Download, como mostra a imagem abaixo:

Aps ter feito o download, execute o arquivo para que a instalao se inicie. Neste caso j
tenho uma instncia do SQL Server instalada em meu pc, mais no tem problema, pois a
verso Express do SQL 2005 nos permite instalar at 50 instncias em um mesmo
computador, desde que cada uma tenha uma identificao diferente. Como j tenho instalado
uma instncia em meu pc, iremos instalar mais uma, o que seria praticamente a mesma coisa
se eu estivesse instalando da 1 vez. Ok, aps dar dois cliques no SQLEXPR.exe, ir
aparecer um aviso do Windows perguntando se deseja executar, clique em Executar e
aguarde at que aparea uma tela como a da imagem abaixo:

Clique na opo para aceitar os termos de licena e clique em Next. Aguarde alguns
segundos. Na prxima tela, clique em Next

Ir ser rodado um utilitrio chamado System Configuration Check, que checa se o seu
hardware e software so compatveis com a instalao. Na imagem abaixo mostra um aviso
que, como j tenho uma instncia do SQL Server instalada, para alternar entre as instncias
devo rodar o instalador do prompt de comando e incluir o parmetro SKUUPGRADE = 1.

Clique em Next e aguarde. Na prxima tela, digite seu nome e clique em Next

Na tela abaixo, perguntado quais componentes voc deseja instalar e aonde. Deixe como
est e clique em Next.

A prxima tela ir aparecer apenas para quem j tem uma instncia do SQL Server instalada
no pc, como o meu caso. Se voc estiver nesse caso, d um nome diferente do nome da
instncia que voc j tem instalada e clique em Next.

Na tela abaixo, perguntado qual ser o modo de autenticao no SQL, deixe como Windows
Authentication Mode e clique em Next.

Na prxima tela ir aparecer um resumo do que ser instalado em seu computador, apenas
clique em Install e aguarde a instalao ser concluda.

Aps instalado com sucesso, o SQL Server poder ser acessado atravs do menu Iniciar >
Todos os programas > Microsoft SQL Server 2005 > SQL Server Management Studio
Express

Caso voc tenha mais instncias instaladas em seu pc, para alternar simples: quando o SQL
Server se abrir, clique no menu Server Name e clique na opo Browse for more Agora
expanda a aba Database Engine e escolha sua instncia, como mostra a imagem abaixo:

Fazendo isso, seu SQL Server 2005 estar instalado e pronto para ser utilizado corretamente.
SQL Server 2008
Diferente da verso 2005, o SQL 2008 um pouco mais complexo para ser instalado. Aps
baixado, deve ser seguida uma srie de instrues para que a instalao seja efetuada com
sucesso. Como o foco aqui no SQL 2005, abaixo demonstro os passos para baixar e
escolher a verso que melhor se encaixa ao que voc quer. Logo aps tem um link para um
tutorial detalhado:
1 Acesse o SQL 2008 em http://www.microsoft.com/sqlserver e clique na opo SQL Server
2008 Express (free), como mostra a imagem abaixo:

Na pgina que se abre, clique na aba Installation Options, para escolher que tipo de
instalao voc deseja baixar. A imagem abaixo lista todas as opes de instalao:

Como vemos pela imagem, temos 4 tipos de instalaes, que so:


Database Only essa opo instala somente o SQL Server Database Engine, que cria
bancos relacionais para processamento de transaes online ou dados de processamento
analtico online. Tamanho = 84mb.
Management Tools essa opo instala somente o SQL Server Management Studio
Express, que a plataforma que precisamos para manipular os dados. Tamanho = 172mb.

Database with Management Tools essa opo vir com o Database Engine e mais
oManagement Studio. A mais indicada para usurios iniciantes e estudantes. Tamanho =
224mb.
Database with Advanced Services essa opo a mais completa, pois alm de ter
oDatabase Engine e o Management Studio, contm tambm o Full Text-Search, que
uma espcie de servio de pesquisa do SQL Server e o Reporting Services, que nos permite
exibir relatrios por meio de algumas ferramentas como o Gerenciador de
Relatrios. Tamanho = 515mb.
Link do tutorial de instalao passo a passo:
http://www.marcosdellantonio.net/2009/06/08/instalando-o-sql-server-management-studio2008-express/
Comandos Bsicos Aps ter aberto o SQL, clique em New Query abaixo do menu
superior ou aperte CTRL+N para criar uma nova consulta. Abaixo desse boto New Query
existe a barra de ferramentas SQL Editor, que possui uma dropdownlist chamada Avaliable
Databases, por meio da qual podemos escolher o banco de dados que queremos acessar,
como mostra a imagem:

Para executar qualquer comando no SQL Server, escreva o determinado comando na tela de
consultas do centro da tela e logo acima, na barra de ferramentas, clique no
boto Execute ou simplesmente aperte F5. J, se voc tiver mais do que um comando, como
por exemplo a imagem abaixo nos mostra uma instruo SELECT e abaixo dela
uma DELETE, necessrio que selecionemos qual instruo queremos executar para a sim
podermos clicar no respectivo boto ou apertar F5 como desejado:

Abaixo podemos notar a janela de resultados quando executamos a instruo acima.

Podemos usar as teclas CTRL+R para ocultar essa janela se desejarmos.


Para no estender muito o artigo, iremos parar por aqui. Na prxima parte de nossa
srie de artigos, iremos ver os tipos de objetos do SQL Server, os databases e
tabelas do sistema, os tipos de dados e iremos comear a criao de tabelas.
Quaisquer dvidas, postem.
Abraos.
At o prximo artigo!

SQL Server 2005 Parte 3 Objetos do SQL Server, Databases,


Tipos de Dados, Tabelas do Sistema e Criao de Tabelas
21 21UTC maro 21UTC 2010

Ol pessoal, voltamos com nosso curso bsico de SQL Server. Nesta parte, iremos descrever
os Objetos do SQL Server, mostrar a definio e criao de um Database, mostrarmos os
tipos de dados, as tabelas do sistema e comear a criao das tabelas. Acompanhem:
Objetos do SQL Server A verso 2005 do SQL Server nos oferece diferentes tipos de
objetos, como descrevemos abaixo:
- Database Os objetos do sistema so criados dentro de uma estrutura lgica que
corresponde ao objeto Database, iremos falar dele mais adiante.
- Table Os dados do sistema so inclusos neste objeto de duas dimenses, que formado
por linhas e colunas.
- Constraint, Default e Rule Consistem em regras usadas para implementar a
consistncia e a integridade dos dados. Mais sobre elas em artigos futuros.
- Data Type e User Defined Data Type Os dados so armazenados no disco sob um
formato representado pelo datatype. Um datatype dever ser atribudo a cada coluna de
uma tabela.
- View Este objeto nos oferece uma visualizao lgica dos dados de uma tabela, de modo
que diversas aplicaes possam compartilh-la.
- Index So objetos responsveis pela otimizao de acesso aos dados de uma tabela, com
o objetivo de agilizar determinadas pesquisas de dados.
- Procedure Neste objeto, encontramos um bloco de comandos Transact-SQL,
responsvel por uma determinada tarefa. Sua lgica pode ser compartilhada por vrias
aplicaes. Muito utilizado atualmente em praticamente todo tipo de empresa.
- Trigger Como a Procedure, este objeto tambm possui um bloco de comandos TransactSQL. criado sobre uma tabela e ativado no momento da execuo dos
comandos UPDATE,INSERT e/ou DELETE.
- Function Neste objeto, temos um bloco de comandos Transact-SQL responsvel por uma
determinada tarefa. Como a Procedure, sua lgica pode ser compartilhada por N aplicaes.
Importante dizer que uma funo SEMPRE retornar um valor.
Obs: Os objetos Procedure, Trigger e Function so processados rapidamente, pois seu
cdigo tende a ficar compilado na memria. Isso acontece porque estes objetos so
executados no servidor de dados.
Databases Como dito anteriormente, dentro do objeto Database so criados os objetos
que fazem parte do sistema, ou seja, uma estrutura lgica formada por dois tipos de arquivo,
um responsvel pelo armazenamento dos dados e outro que armazena as transaes feitas.
Ok, mais como eu crio um Database? Simples! Por meio da instruo CREATE DATABASE.
Por exemplo, vamos dizer que quero criar um database chamado Clientes. Para isso, abro o
SQL Server, crio uma nova query, digito a instruo CREATE DATABASE Clientes e
aperto F5ou clico em Execute. Veja abaixo:

Como h de se esperar, assim que criamos um database, no h tabelas no mesmo, muito


menos registros. Mais, antes que pensemos em inserir tabelas (e registros), precisamos
informar ao SQL Server qual database iremos utilizar. Para isso, usamos a instruo USE
nomedodatabase. Confira abaixo:

Logo abaixo da minha instruo usei a palavra GO, que nada mais que uma simples
maneira de dizer ao SQL para seguir na respectiva instruo. Esse comando no
obrigatrio.
Da mesma forma, se desejarmos excluir o database recm criado, devemos usar a
instruoDROP DATABASE. Apenas ressaltando que, se estivermos dentro do database que
iremos excluir, o SQL nos impede de fazermos isso. Para resolver isso, simplesmente saia do
database e v para o master por exemplo, como mostra a imagem a seguir:

Podemos notar que o database foi mesmo excludo, pois vemos acima no
DropDownListAvaliable Databases.
Tipos de Dados Os tipos de dados so classificados em diferentes categorias e permitem
N formatos. Abaixo uma descrio de cada categoria e de cada tipo de dado do SQL Server
2005:
- Baseados em Caracteres:
- Char(n) Trata-se de um datatype que aceita como valor qualquer dgito, sendo que o
espao ocupado no disco de um dgito por caractere. possvel utilizar at 8 mil dgitos.
- Varchar(n) Tambm aceita como valor qualquer dgito e o espao ocupado em disco
de um dgito por caractere. Permite usar tambm no mximo 8 mil dgitos. A diferena pro
Char, que o Varchar geralmente usado quando no sei o tamanho fixo de um campo.
- Text Qualquer dgito pode ser usado neste datatype, sendo ocupado 1 byte por caractere,
o equivalente a 2.147.483.647 bytes.
- Baseados em Caracteres Unicode:
- Nchar(n) Neste datatype, pode usar qualquer dgito, sendo ocupados 2 bytes a cada
caractere. possvel usar at 8 mil bytes.
- Nvarchar(n) Igual ao tipo anterior, com a nica diferena que uso esse tipo quando no
sei o tamanho fixo de um campo. 2 bytes so ocupados a cada caractere. possvel usar
at8 mil bytes.
- Ntext Tambm aceita qualquer digito, 2 bytes so ocupados a cada caractere. Podem ser
usados at 1.073.741.823 bytes.
- Baseados em Numricos Inteiros:
- Bigint Aceita valores entre -2^63 e 2^63-1, sendo que esse datatype ocupa 8 bytes.
- Int Os valores aceitos aqui variam entre -2^31 a 2^31-1. Ocupa 4 bytes.
- Smallint Aceita valores entre -32768 at 32767 e ocupa 2 bytes.
- Tinyint Os valores aceitos aqui variam entre 0 e 255, ocupa apenas 1 byte.
- Bit um tipo de dado inteiro (conhecido tambm como booleano), cujo valor pode
corresponder a NULL, 0 ou 1. Podemos converter valores de string TRUE e FALSE em
valores de bit, sendo que TRUE corresponde a 1 e FALSE a 0.
- Baseados em Numricos Exatos:
- Decimal(P,S) Os valores aceitos variam entre -10^38-1 e 10^38-1, sendo que o espao
ocupado varia de acordo com a preciso. Se a preciso for de 1 a 9, o espao ocupado de 5
bytes. Se a preciso de 10 a 19, o espao ocupado de 9 bytes, j se a preciso for de 20
a 28, o espao ocupado de 13 bytes, e se a preciso for de 29 a 38, o espao ocupado de
17 bytes.

- Numrico(P,S) Considerado um sinnimo do datatype decimal, o nmerico tambm


permite valores entre -10^38-1 e 10^38-1 e o espao ocupado o mesmo do anterior.
- Baseados em Numricos Aproximados:
- Float[(n)] O mesmo que double precision quando o valor de n 53, este datatype
aceita valores entre -1.79E + 308 e 1.79E + 308. O espao ocupado varia de acordo com o
valor de n. Se esse valor estiver entre 1 e 24, a preciso ser de 7 dgitos, sendo que o
espao ocupado ser de 4 bytes. Se o valor de n estiver entre 25 e 53, sua preciso ser de
15 dgitos, assim sendo o espao ocupado ser de 8 bytes.
- Real Este datatype similar ao float(n) quando o valor de n 24. Os valores aceitos
variam entre -3.40E + 38 e 3.40E + 38. Esse datatype ocupa 4 bytes.
- Baseados em Valores Numricos Monetrios:
- Money Este datatype aceita valores entre -2^63 e 2^63-1, sendo que 8 bytes so
ocupados.
- Smallmoney possvel usar valores entre -2^31 e 2^31-1, sendo que 4 bytes so
ocupados.
- Baseados em Data e Hora:
- Datetime Permite o uso de valores entre 1/1/1753 e 31/12/9999. Este datatype
ocupa 8 bytes e sua preciso atinge 3.33 milisegundos.
- Smalldatetime Aceita o uso de valores entre 1/1/1900 e 06/06/2079, sendo que sua
preciso de 1 minuto e ocupa 4 bytes em disco.
- Baseados em Binrios:
- Binary[(n)] Este datatype representa os dados que sero usados no formato binrio. O
espao ocupado de n+4 bytes, sendo que n pode variar entre 1 e 8000 bytes.
- Varbinary[(n)] Aqui tambm usado o formato binrio, o espao ocupado e a variao
den igual ao anterior.
- Image O formato binrio tambm usado aqui, sendo que o espao ocupado de 2^311 bytes ou 2.147.483.647.
- Baseados em Tipos de Dados Especiais:
- Uniqueidentifier O formato hexadecimal usado para o armazenamento de dados
binrios, sendo que este datatype ocupa 16 bytes.
- Timestamp Um valor binrio gerado pelo SQL Server, sendo que esse datatype ocupa
8 bytes.
- Bit Este datatype pode apresentar 0, 1 ou NULL, como valor, sendo ocupado 1 byte.
Tambm utilizado como um tipo de dado int.
- Sql_Variant Os valores aqui podem ser de qualquer datatype, sendo que possvel
armazenar at 8016 bytes.
- Cursor Datatype usado somente quando trabalhamos com variveis.
- Table Datatype usado somente quando trabalhamos com variveis de memria.
- Xml Por este datatype, podemos armazenar fragmentos de documentos XML em um
banco de dados SQL. Estes fragmentos correspondem instncias XML que no possuem um
determinado elemento de nvel superior. Essas instncias so armazenadas quando criamos
variveis e colunas com datatype XML. O espao mximo ocupado deve ser de 2GB.
Tabelas do Sistema Aps instalarmos o SQL Server, so criados alguns bancos de dados
que permitem ao software gerenciar os sistemas de usurios, fazendo assim com que a
integridade e a segurana dos dados sejam mantidas. Esses bancos de dados so chamados
de bancos de dados gerenciais. Dentro deles, so criadas tabelas por meio da instalao do
SQL Server, que recebem o nome de system tables. Abaixo descrevo estes bancos de
dados:

- Resource Este banco possui todos os objetos de sistema do SQL Server, os quais so
visualizados de forma lgica no esquema sys de todos os bancos de dados. O Resource, que
um banco de dados somente leitura, no possui metadados ou dados dos usurios. Ele
permite a rpida atualizao de verses e o fcil rollback dos pacotes de
servios. Importante salientar que, em hiptese alguma, devemos mover ou
renomear o arquivo do banco de dados Resource pois, se isso acontecer, o SQL
Server no ser iniciado.
- Master O banco Master o responsvel por efetuar os registros de todas as informaes
do nvel do sistema. Ele registra as informaes para iniciar o SQL Server, contas de login,
configuraes referentes ao sistema e a existncia de outros bancos de dados e seus
arquivos. Se este banco estiver indisponvel, torna-se invivel iniciar o SQL Server.
- TEMPDB Este o banco responsvel por manter todo o tipo de armazenamento
temporrio, inclusive o de tabelas de carter temporrio. Ele considerado um recurso
global, visto que armazena tabelas e stored procedures temporrias que podem ser
acessadas por todos os usurios que estiverem conectados. Todas as vezes que o SQL Server
iniciado, este banco recriado, o que significa que sempre h uma cpia limpa do banco de
dados quando o sistema iniciado. Dessa forma, quando o SQL encerrado, no existem
conexes ativas, sendo que entre uma sesso e outra no h itens a serem salvos em um
banco de dados tempdb. Vale ressaltar que no podemos fazer o backup ou restaurar esse
banco de dados.
- MODEL Este banco usado como modelo para criar todos os outros bancos de dados.
Dessa forma, quando solicitamos a criao de um novo banco de dados ao SQL Server, este
copia todos os objetos armazenados no MODEL para o novo banco de dados. Caso sejam
feitas alteraes sobre este banco de dados, todos aqueles criados posteriormente tambm
refletiro tais modificaes.
- MSDB Este banco usado pelo SQL Server Agent com a finalidade de registrar
operadores e programar a execuo de jobs e de alerts. O msdb utilizado para realizar o
armazenamento de dados no apenas pelo SQL Server Agent, mais tambm pelo SQL Server
Management Studio. Um histrico completo de backup e restaurao online mantido pelo
SQL Server no banco de dados msdb. Esses dados so usados pelo SQL Server a fim de criar
um planejamento de restaurao do banco de dados e aplicar backups de log de transao.
Recomenda-se realizar um backup do msdb com freqncia caso esse banco sofra
constantes alteraes. Caso esse banco seja danificado, as informaes referentes ao backup
e restaurao so perdidas, bem como as informaes utilizadas pelo SQL Server Agent.
Visualizando os bancos de dados do sistema Caso voc deseje visualizar os bancos de
dados do sistema, faa o seguinte: abra o SQL Server, v a janela Object Explorer (F8),
expanda a opo Databases e expanda a opo System Databases, como mostra a imagem a
seguir.

Se voc quiser ver os databases via instruo SQL, crie uma nova query e digite SELECT *
FROM SYSDATABASES. Veja o resultado abaixo:

Criao de Tabelas Os dados de um sistema so armazenados em objetos denominados


tabelas. Cada uma das colunas de uma tabela refere-se a um atributo associado a uma
determinada entidade. Os datatypes, ou seja, os formatos usados para a gravao dos dados
no disco (descritos um a um anteriormente), devero ser especificados para cada coluna da
tabela. Ok, aps descrever de forma resumida a parte terica, vamos a prtica. Para criarmos
uma tabela, devemos usar a instruo CREATE TABLE, desde que criemos esta tabela em
um banco de dados existente. No exemplo abaixo, crio e me conecto ao database Clientes e
crio uma tabela simples de Cliente:

De forma simplificada assim que criamos nossas tabelas, lembrando sempre de usar esta
estrutura CREATE TABLE NomeDaTabela ( ), dentro dos parnteses vai toda a estrutura
da minha tabela, como os nomes das colunas e os tipos de dados referentes as colunas. Para
exibir minha tabela criada uso a instruo SELECT, que ser abordada no prximo artigo.
Desta forma, terminamos aqui mais uma parte de nossa srie de artigos, ou melhor dizendo,
de nosso mini curso bsico de SQL Server. Na prxima parte, comearemos a falar dos
comandos DML, como o INSERT e SELECT. Aguardem!
Quaisquer dvidas, postem.
Abraos.
At o prximo artigo!

SQL Server 2005 Parte 4 Comandos DML Insert e Select


28 28UTC maro 28UTC 2010

Ol pessoal, voltamos com nosso curso bsico de SQL Server. Nesta parte, iremos aprender o
que so os Comandos DML, e falaremos sobre dois deles, o Insert e o Select, seguidos de
alguns exemplos que ilustram o uso dos comandos. Acompanhem:
Comandos DML Os comandos Data Manipulation Language, ou apenas DML so utilizados
para realizar incluses, consultas, excluses e alteraes de dados presentes em registros.
Por estes comandos, estas tarefas podem ser executadas em vrios registros de diversas
tabelas ao mesmo tempo.
Os DML responsveis pelas funes citadas acima
so INSERT, SELECT, UPDATE e DELETE, respectivamente. Como dito anteriormente,
neste artigo irei falar sobre os dois primeiros mostrando os conceitos e alguns exemplos
prticos no SQL Server.
Insert Usamos o comando Insert para incluir dados em uma ou mais colunas de uma
tabela. Este comando tem a seguinte sintaxe:
INSERT [INTO] NomedaTabela [(nomesdascolunas)] VALUES (Valores)
Os valores entre colchetes, so opcionais, ou seja, voc pode usar somente
INSERT NomedaTabela VALUES (Valores)
Os valores descritos junto ao comando INSERT so transformados em uma ou mais linhas da
tabela. Os nomes das colunas nas quais os dados sero inseridos devem ser separados por
vrgulas.
As colunas que no foram declaradas no comando INSERT podem apresentar um valor
padro, caso essa definio seja configurada pelo usurio, ou o valor NULL.
Vamos tomar como exemplo a tabela de clientes abaixo:

Para faz-la, precisamos fazer o uso da instruo INSERT, como mostra a imagem a seguir:

Se voc perceber, na imagem da tabela h 4 registros e na imagem acima, do Insert, tem


apenas 3. J explico o porque disso.
Existem dois tipos de INSERT, o posicional e o declarativo. O posicional deve ser usado
quando precisamos incluir dados de acordo com a ordem fsica das colunas. O Insert da
imagem acima um exemplo disso. J o Insert declarativo deve ser usado quando desejamos
incluir dados na tabela de modo que possamos escolher a ordem dos valores a serem
inclusos. Neste tipo de Insert, que nosso 4 que est faltando, nossa instruo fica como a
imagem abaixo:

Neste exemplo, o resultado ser o mesmo, j que usei a mesma ordem do Insert posicional,
mais fica a dica se voc quiser alterar a ordem e ver o resultado. Para ver os resultados, voc
ter que usar a instruo SELECT, instruo essa que abordarei a partir de agora.
Select O Select o principal comando usado em SQL para realizar consultas a dados
pertencentes a uma tabela. Por meio desse simples comando, podemos retornar dados para
outros comandos SQL e tambm para outras aplicaes.
Para exibir todas as colunas da tabela Clientes, uso SELECT * FROM CLIENTES, j para
exibir algumas colunas, devemos substituir o uso do asterisco pelos respectivos nomes das
colunas, como por exemplo SELECT NomeCliente, EnderecoCliente FROM CLIENTES.
Usando Alias o nome de uma coluna pode ser substitudo por uma espcie de apelido,
criado para facilitar sua visualizao ao usurio. Esse apelido chamado de Alias. Vamos
tomar como exemplo novamente nossa tabela de clientes abaixo:

Os nomes das colunas so, na ordem que aparece


acima, CODCLIENTE, NOMECLIENTE,ENDERECOCLIENTE, FONECLIENTE, EMAILCLIEN
TE, SALARIOCLIENTE e DATACLIENTE. Para que elas fiquem com um nome melhor
apresentvel ao usurio, como na imagem acima, faa a seguinte instruo:

No necessrio usar a clusula AS para obter o resultado desejado. Entretanto, como boas
prticas, diversos usurios preferem manter essa clusula para facilitar a identificao do
alias. Podemos omitir o AS ou troc-lo por um sinal de igual.
Como voc pode perceber na imagem, quando queremos dar um nome composto ao Alias,
temos que coloc-los entre colchetes.
Coluna Virtual Podemos tambm criar uma coluna virtual usando o Select, ou seja,
podemos exibir uma coluna no disponvel fisicamente na tabela. No exemplo abaixo, a
coluna Tipo de Cliente no faz parte do banco de dados, mais por meio do Select, podemos
defini-la como existente:

Exibindo um clculo Nem sempre necessrio gravar o resultado de um clculo para que
esse valor seja exibido na tabela. Por exemplo, imaginemos que o salrio dos clientes possui
um aumento de 10%. Desejamos visualizar esse aumento, mais no inseri-los no banco. Para
isso, faa o seguinte:

Dessa forma, obtemos uma rpida visualizao de quanto seria o aumento aos clientes, sem
precisar gravar esses dados no banco.
Uso da Clusula Distinct Por meio dessa clusula, exibido apenas uma vez os dados
repetidos de determinada tabela. Como voc pode perceber na imagem acima, j tenho uma
coluna duplicada propositalmente, que a cliente Andressa. No exemplo abaixo, tenho na
tabela Clientes as colunas duplicadas, me gerando assim o dobro dos dados de que preciso
visualizar:

No exemplo, so apenas 8, mais imagine o cenrio em uma grande empresa com milhares
(at milhes) de dados repetidos. Seria um grande desperdcio de tempo e produtividade
visualizarmos vrios dados repetidos. Para isso, usamos a clusula Distinct, por meio da
seguinte instruo:

Que ir me retornar apenas 3 resultados:

Copiando dados de uma tabela a outra Caso as estruturas de duas tabelas sejam
similares ou diferentes, podemos copiar os dados de uma para outra por meio dos seguintes
comandos.

Insert com Select quando as tabelas so iguais Para fazer este exemplo, vamos criar
uma outra tabela, com a mesma estrutura de colunas da tabela de Clientes. Crie a tabela a
seguir:

Logicamente esta tabela est sem dados, pois acabou de ser criada. Para que copiemos os
dados da tabela Clientes, mais simples do que voc imagina:

Com apenas duas linhas de instrues SQL, consigo copiar os dados de uma tabela em outra
vazia.
Insert com Select quando as tabelas so diferentes Vamos supor que temos duas
tabelas distintas, Clientes e Funcionarios, com nmeros de colunas diferentes:

Embora a tabela Clientes contenha dados, nem todas as colunas de Funcionario podem ser
encontradas na Cliente. Para que seja possvel copiar dados de Clientes para Funcionario,
devemos usar o comando SELECT de colunas virtuais, como mostra a imagem abaixo:

Desta forma, usando colunas virtuais, consigo copiar os dados existentes da tabela Clientes
para a tabela Funcionrio.
Caso as colunas da tabela Funcionario aceitem valores nulos (NULL), podemos escrever a
instruo de outra forma, como mostra a imagem:

Agora vamos supor o contrrio, ou seja, agora a tabela Funcionario que ter menos dados
que a tabela Clientes:

Neste caso devemos fazer como mostra a imagem a seguir:

Desta forma, terminamos aqui mais uma parte de nossa srie de artigos.
Estou disponibilizando a quem se interessar o script de todo este artigo, com os assuntos
abordados aqui. O script est comentado para melhor entendimento. Quem quiser baixar,
sclicar aqui.
Na prxima parte, continuaremos falando dos comandos DML, abordando o UPDATE e
oDELETE. Aguardem!
Quaisquer dvidas, postem.
Abraos.
At o prximo artigo!

Dica Rpida: Inserir Nmero de Linhas + Atalho no SQL


Server 2005
21 21UTC abril 21UTC 2010

Ol pessoal, a dica de hoje simples, mais importante: como inserir os Line Numbers, ou
os nmeros nas linhas no SQL Server 2005. Para isso, abra o SQL Server 2005, clique
em Tools > Options. Na janela que se abrir, clique em Text Editor > All Languages.

No menu ao lado, s clicar na opo Line Numbers e dar Ok. Pronto! Sua instruo SQL
agora tem numerao! Importante para quando usamos ou fazemos longos scripts e
precisamos voltar ao incio para pesquisar algo. Para isso minha outra dica usar o
atalhoCTRL + G, que ir abrir uma tela para voc digitar o nmero da linha que deseja
navegar.

Simples n? Qualquer dvida, s postar.


Abraos.

SQL Server 2005 Parte 5 Comandos DML Update e Delete


21 21UTC abril 21UTC 2010

Ol pessoal, voltamos com nosso curso bsico de SQL Server. Nesta parte, iremos ver os
comandos DML Update e Delete e veremos a clusula Where. Da mesma forma como fizemos
na parte anterior, iremos fazer nessa alguns exemplos para melhor entendimento desses
comandos. Confiram:
Update Os dados pertencentes a mltiplas linhas de uma tabela podem ser alterados por
meio do comando UPDATE. Quando usarmos o UPDATE, devemos especificar algumas
informaes, como o nome da tabela que ser atualizada e os filtros que sero usados na
atualizao. Sintaxe bsica: UPDATE nomedatabela SET coluna1 = valor1, coluna2 = valor2,
coluna3 = valor3, WHERE critrio. Importante: Devemos passar sempre o Where, que
uma espcie de filtro em nossa tabela, porque seno o passarmos atualizaremos TODOS os
dados da tabela e isso pode acarretar em diversos problemas, dependendo do tamanho e da
complexidade da sua tabela.
Falarei mais a respeito do Where daqui a pouco.
Alterando os dados de uma coluna Para simplificar o uso do UPDATE, vamos usar as
tabelas do artigo anterior, Clientes e Funcionarios, conforme voc v abaixo:

Vamos alterar os salrios dos funcionrios, da tabela Funcionario. Para isso, faa o seguinte
comando:

Nessa instruo SQL, do um aumento de 10% no salrio dos funcionrios que estiverem com
o salrio menor que 1900,00, que nesse exemplo so os 2 primeiros, j que o 3 e o 4 so o
mesmo. O resultado ser esse:

Alterando os dados de vrias colunas Podemos alterar os dados de vrias colunas.


Vamos usar desta vez a tabela Clientes, como exemplo. Vamos aumentar em 5% o salrio
dos clientes que ganharem mais do que 1600.00. Aumentaremos tambm em 2 dias o campo
DataCliente. A instruo de Update ficar assim:

E o resultado ser esse:

Podemos usar a clusula Update de outras maneiras tambm, para atualizar uma ou mais
colunas, como vimos nestes exemplos. Sempre bom lembrar que deve se tomar um
cuidado ao usar o comando Update, principalmente em tabelas complexas, que contenham
um nmero grande de dados, porque o Update no tem volta, fez t feito! Por isso tambm a
importncia de usar a clusula Where junto ao Update.
Deixo para que voc usem a criatividade e criem exemplos bsicos de uso do Update.
Qualquer dvida com relao ao uso dele, mande um email para o endereo que est no fim
deste artigo.
Delete O comando DELETE deve ser usado quando desejamos excluir os dados de uma
tabela. Sintaxe bsica: DELETE FROM nomedatabela. Por exemplo, se quisermos, remover os
dados da tabela Funcionario, devemos executar a seguinte instruo SQL:
Que nos resultar na limpeza completa dos dados da tabela Funcionario:

Simples n? Lembrando que este comando, assim como o UPDATE, pode ser perigoso em
algumas situaes, j que, uma vez executado esses comandos, no ser possvel desfazer a
ao realizada. Portanto, devemos ficar atentos ao usar esses comandos em tabelas
complexas.
Clusula Where Como dito anteriormente, a utilidade da clusula WHERE a de ser um
filtro, que determina quais os dados que sero afetados, podendo ser usada juntamente
comSELECT, UPDATE e DELETE. Podemos dizer ento que essa clusula determina o
escopo de uma consulta a algumas linhas, realizando a filtragem dos dados que estejam de
acordo com as condies definidas. Abaixo vamos criar uma nova tabela, a de Produtos, e
utilizaremos a clusula Where juntamente com as instrues SELECT, UPDATE e DELETE:
De incio vamos criar a tabela Produtos

e inserir alguns dados:

Nossa tabela ficar com os seguintes dados:

Agora vamos fazer um SELECT, que ir me retornar somente os produtos de Informtica.


Para isso, uso a clusula WHERE, como na imagem a seguir:

O resultado ser esse:

Ok, a consulta s me retornou os produtos do tipo Informtica, por meio da clusula WHERE.
Agora quero aumentar em 5% o valor dos produtos do tipo Informtica. Como eu fao?
Usando UPDATE com WHERE:

E o meu resultado ser:

Pronto, aumentei em 5% o valor dos produtos de Informtica. Agora quero apagar todos os
produtos que tiverem um valor menor que 100.00. Como fazer?
Usando DELETE com WHERE:

Como s tnhamos 2 produtos com valor abaixo de 100.00, minha tabela ter agora 8
produtos:

Com o Where, podemos fazer milhares de filtros especficos para colunas diversas.
Estou disponibilizando a quem se interessar o script de todo este artigo, com os assuntos
abordados aqui. O script est comentado para melhor entendimento. Quem quiser baixar,
sclicar aqui.
Essa foi apenas uma breve introduo a clusula Where. Na prxima parte, veremos o uso do
Where com vrios operadores especficos, como o AND, OR, IN, BETWEEN, LIKE, entre
outros. Aguardem!
Quaisquer dvidas, postem nos comentrios ou sintam-se vontade para mandar emails
parawellingtonbalbo@gmail.com.
Abraos.
At o prximo artigo!

SQL Server 2005 Parte 6 Clusula Where e seus Operadores


13 13UTC maio 13UTC 2010

Ol pessoal, voltamos com nosso curso bsico de SQL Server. Nesta parte, iremos ver o uso
da clusula WHERE em conjunto com os
operadores AND, OR, IN, NOT IN, BETWEEN e NOTBETWEEN.
Deixaremos a explicao e os exemplos do uso dos operadores LIKE e NOT LIKE para a
prxima parte de nosso curso.
Como feito em partes anteriores, faremos nessa alguns exemplos para melhor entendimento
do uso do Where com esses operadores. Como foi explicado os conceitos e mostrados
exemplos do Where na parte anterior, nessa iremos direto ao uso dele com os operadores.
Acompanhem os conceitos e exemplos:
WHERE com AND e OR Usamos os operadores AND e OR junto com Where quando
necessrio usar mais de uma condio de comparao. Como exemplo, iremos usar a tabela
de Produtos ao longo de todo este artigo, criada na parte anterior (ao final do artigo, irei
disponibilizar o script dos exemplos). Vamos ao exemplo: iremos utilizar o
operador AND para determinar um acrscimo de 10% nos produtos de Informtica cujo
valor seja igual ou inferior a 350.00. Para isso, faa a seguinte instruo (antes d um Select
* From Produtos e note o valor dos produtos Processador e Monitor):

Nossa tabela ficar assim:

Percebeu a diferena? As colunas Processador e Monitor sofreram um acrscimo de 10%


em seu valor.
O operador OR usado especificamente quando desejamos atender a duas condies
distintas. Considerando a tabela Produto, o OR deve ser utilizado quando desejamos, por
exemplo, atribuir um acrscimo de 10% sobre o valor dos produtos do tipo Eletrnicos ou
sobre o valor daqueles cujo preo maior ou igual a 350.00. Neste caso, uma das condies
deve ser atendida. Para isso, precisamos executar a seguinte instruo (sempre lembrando
que, como UPDATE no tem volta, fez t feito, use o Select * From Produtos para notar a
diferena antes e depois do UPDATE):

Que nos resultar nesta tabela:

Neste exemplo observamos que o uso do operador OR muito mais abrangente do que o
operador AND, j que podemos perceber que uma quantidade maior de linhas foi atingida
aps o uso do UPDATE.
Dito isto, podemos concluir que o operador AND permite realizar a avaliao de duas
expresses conjuntamente, sendo que o resultado obtido apenas ser verdadeiro se ambas
as expresses forem verdadeiras. Ao contrrio, o operador OR permite que realizemos a
avaliao de duas expresses de forma separada. Assim, o resultado ser verdadeiro se
somente uma expresso for verdadeira ou se ambas forem verdadeiras.
WHERE com IN Podemos usar o operador IN no lugar do operador OR em
determinadas situaes. O IN permite verificar se o valor de uma coluna est presente em
uma lista de elementos. Considerando a tabela Produtos, podemos utilizar o IN ou o OR para
selecionar os produtos do tipo Eletrnicos ou do tipo Informtica. Confira a seguir como
fazer esta consulta com ambos os operadores:
- Operador OR

- Operador IN

Ambas as consultas nos traro o mesmo resultado:

WHERE com NOT IN Este operador, ao contrrio do IN, permite obter como resultado o
valor de uma coluna que no pertence a uma determinada lista de elementos, como podemos
perceber pela seguinte instruo:

O resultado ser o seguinte:

Podemos perceber acima que foram exibidos apenas os produtos que no so do


tipoEletrnicos ou Informtica. Podemos usar tambm o operador AND em conjunto com
o sinal de comparao diferente (<>) para obter o mesmo resultado, como a instruo a
seguir nos mostra:

WHERE com BETWEEN O operador BETWEEN tem a finalidade de permitir a consulta


entre uma determinada faixa de valores. Dessa forma, podemos usar este operador para
selecionar todos os produtos cujos valores estejam entre 300.00 e 500.00 na
tabela Produtos. Para isso devemos fazer essa instruo:

Que ter como resultado essa consulta:

Outra forma de obter o mesmo resultado por meio do seguinte comando:

Por meio do operador AND e dos operadores relacionais =, < e > tambm possvel
consultar uma determinada faixa de valores. No entanto, por meio do BETWEEN esta
consulta torna-se ainda mais simples. Este operador permite checar se o valor de uma coluna
encontra-se em um determinado intervalo. Ele pode ser utilizado para verificar intervalos de
data, caracteres, entre outros.
WHERE com NOT BETWEEN O operador NOT BETWEEN, ao contrrio do anteriormente
descrito, permite consultar os valores que no se encontram em uma determinada faixa.
Considerando nossa tabela, podemos consultar os produtos cujos valores no esto
entre300.00 e 500.00. Para isso, preciso executar o comando descrito a seguir:

Com a execuo desta instruo, o resultado obtido o seguinte:

Outra forma de se obter o mesmo resultado o seguinte:

Com a execuo deste comando, o resultado obtido com a tabela Produtos o mesmo
apresentado com a execuo do operador NOT BETWEEN. Assim finalizamos mais esta parte
de nosso curso bsico de SQL Server.

Estou disponibilizando a quem se interessar o script de todo este artigo, com os assuntos
abordados aqui. O script est comentado para melhor entendimento. Quem quiser baixar, s
clicar aqui.
Na prxima parte, iremos ver o uso do Where em conjunto com os operadores LIKE e NOT
LIKE. Veremos tambm os conceitos e exemplos das clusulas ORDER BY, TOP,
e TOP WITHTIES. Aguardem!
Quaisquer dvidas, postem nos comentrios ou sintam-se vontade para mandar emails
parawellingtonbalbo@gmail.com.
Abraos.
At o prximo artigo!

SQL Server 2005 Parte 7 Operadores Like e Not Like e


Clusula Order By
1 01UTC junho 01UTC 2010

Ol pessoal, depois de um tempo sem atividades no blog (fim de semestre de faculdade


complicado!) voltamos ativa com nosso curso bsico de SQL Server.
Nesta parte, veremos o uso da clusula WHERE em conjunto com os
operadores LIKE e NOT LIKE. Veremos tambm as clusulas ORDER
BY, TOP e TOP WITH TIES separadas e em conjunto. Acompanhem:
WHERE com LIKE O operador LIKE empregado nas situaes em que usamos como
base para realizar pesquisas (ou filtros) as colunas que esto no formato caractere, como as
colunas NOMEPRODUTO e TIPOPRODUTO, de nossa tabela de Produtos. Por exemplo,
podemos usar esse operador para obter como resultado todos os produtos cuja primeira letra
seja C. Para que isso acontea, devemos executar a seguinte instruo:

Que nos resultar nisso:

Como desejamos determinar apenas a letra inicial da palavra a fim de obter o resultado,
devemos utilizar o caractere % para representar que quaisquer outros caracteres podem
estar contidos na palavra, desde que ela se inicie com a letra C. Sendo assim, o % representa
um caractere coringa.
Vale destacar que no apenas o primeiro caractere que pode ser determinado para uma
consulta. Veja o comando descrito a seguir, no qual desejamos obter como resultado todos os
nomes de produtos cujo caractere inicial seja C e que contenha o caractere D em qualquer
posio na palavra:

O resultado ser esse:

Tambm podemos obter como resultado as palavras que contenham um determinado


caractere em qualquer posio. O comando descrito a seguir retornar como resultado todos
os produtos contenham o caractere C em qualquer posio. Veja:

O resultado ser o seguinte:

Alm destes tipos de consulta descritos, o operador LIKE tambm permite consultar nomes
de produtos que contenham uma determinada slaba. Por exemplo, para realizar uma
consulta obtendo como resultado os nomes dos produtos que contenham a slaba or, basta
executarem a seguinte instruo:

Com essa instruo, teremos os seguintes resultados:

Podemos restringir ainda mais esta consulta determinando no apenas uma slaba que deve
estar presente nos nomes dos produtos, mas tambm outra que deve estar presente no tipo
de produto. Vejamos o comando descrito a seguir, no qual desejamos obter como resultado
da consulta os produtos cujos nomes possuam a slaba or e os tipos que possuam a
slabati:

O resultado obtido ser este:

Com isso, podemos concluir que o operador LIKE em conjunto da clusula WHERE muito
til quando queremos realizar filtros diversos em consultas.
WHERE com NOT LIKE Os operadores NOT LIKE so usados de forma oposta ao
operadorLIKE. Com eles obtemos o resultado de uma consulta os nomes e tipos de produtos
que no possuem tais caracteres ou slabas determinadas neste filtro. Para ficar clara a
diferena entre os operadores, usaremos os mesmos exemplos que usamos acima, mais
agora a fim de explicar a finalidade dos operadores NOT LIKE. Veja:

O resultado ser esse:

Assim como o operador LIKE, o NOT LIKE tambm permite que mais de um caractere seja
usado para uma consulta. Veja o comando descrito a seguir, no qual desejamos obter como
resultado todos os nomes de produtos cujo caractere inicial no seja C e que no contenha o
caractere D em qualquer outra posio da palavra:

O resultado ser esse:

Tambm podemos obter como resultado as palavras que no contenham um determinado


caractere em qualquer posio. O comando descrito a seguir retornar como resultado todos
os produtos cujos nomes no contenham o caractere E em qualquer posio. Veja:

O resultado ser esse:

Como feito anteriormente, com o operador NOT LIKE podemos restringir ainda mais nossa
consulta, determinando uma slaba que no deve estar presente no nome dos produtos e
tambm uma slaba que no deve estar presente no tipo do produto. O comando a seguir nos
permite obter como resultado os produtos cujos nomes no possuem a slaba or e os tipos
que no possuem a slaba ti:

O resultado ser esse:

Assim terminamos nossos exemplos com o uso dos operadores LIKE e NOT LIKE. Fica a dica
para que treinem outros exemplos com o uso destes operadores em conjunto com a
clusulaWHERE.
CLUSULA ORDER BY Quando precisamos que o resultado de nossa consulta a uma
tabela seja fornecido em uma ordem especfica, de acordo com um determinado critrio,
devemos usar a clusula ORDER BY que, como o prprio nome diz, considera uma certa
ordem para retornar os dados de uma consulta. A sintaxe padro a seguinte: SELECT
coluna1, coluna2 FROM nomedatabela ORDER BY coluna1. Usaremos os exemplos a
seguir usando a tabela Produtos.
Ordenando por uma coluna Para que os dados sejam retornados e exibidos de acordo
com o nome da coluna, usamos o seguinte comando:

O comando acima determina que as colunas NOMEPRODUTO e VALORPRODUTO sejam


selecionadas. Alm disso, a exibio dos valores da coluna NOMEPRODUTO retornada em
ordem alfabtica, como podemos ver:

Ordenando por vrias colunas possvel usar a clusula ORDER BY para ordenar os
dados por vrias colunas, com base nos nomes das colunas e nas posies das mesmas
no SELECT. Com o comando a seguir conseguimos isso:

O resultado ser esse:

ORDER BY ASC e DESC A clusula ORDER BY pode ser utilizada com as


opes ASC eDESC, descritas abaixo:
- ASC Quando utilizada, esta opo faz com que as linhas sejam retornadas em ordem
ascendente.
- DESC Quando utilizada, esta opo faz com que as linhas sejam retornadas em ordem
descendente.
Caso no especifiquemos ASC ou DESC, os dados da tabela sero retornados em ordem
ascendente, que o valor padro.
Veja abaixo o uso das opes:
ASC Executemos a seguinte instruo:

E veremos o seguinte resultado:

A opo ASC tambm pode ser usada para ordenar os dados de uma tabela conforme duas
colunas diferentes. Para isso, devemos usar a seguinte instruo:

Iremos obter o seguinte resultado:

DESC A instruo a seguir demonstra o uso da opo DESC junto ao ORDER BY:

O resultado ser esse:

Assim como o ASC, a opo DESC tambm pode ser adotada para ordenar os dados de uma
tabela conforme duas ou mais colunas diferentes. Para isso, podemos usar o seguinte
comando:

O resultado ser esse:

- ASC e DESC Suponhamos que precisamos retornar o resultado de duas colunas de uma
tabela, mas ser necessrio que os itens de uma coluna sejam exibidos em ordem crescente
e a da outra em ordem decrescente. Neste caso, podemos usar as
opes ASC e DESC juntas, como mostra o exemplo a seguir:

O resultado ser esse:

Percebam que podemos fazer diversas combinaes de consultas com ASC e DESC.
CLUSULA TOP Como resultado de uma consulta a uma tabela de banco dados, temos a
opo de retornar a quantidade de linhas desejada, a partir da primeira linha selecionada.
Para isso, usamos a clusula TOP. Usando a tabela Produtos como exemplo, usamos a
seguinte instruo para retornar as cinco primeiras linhas desta tabela:

O resultado ser esse:

O uso da clusula TOP merece as seguintes consideraes:


- Em Partitioned Views, TOP no pode ser aplicada junto s
instrues UPDATE e INSERT.
- No h ordem das linhas referenciadas na expresso TOP utilizada com as
instruesINSERT, DELETE ou UPDATE, sendo que TOP n retornam linhas
aleatrias n como resposta.
CLUSULA TOP COM ORDER BY As clusulas TOP e ORDER BY podem e devem ser
utilizadas de forma conjunta. Usando novamente a tabela Produtos como exemplo, vamos
exibir os trs primeiros produtos de menor preo, dentre a relao de produtos da lista.
Usamos a seguinte instruo:

Que nos resultar nisso:

Da mesma forma, se desejar retornarmos os dois produtos mais caros da tabela, por
exemplo, usaremos a seguinte instruo:

Que nos resultar nesses valores:

CLUSULA TOP WITH TIES COM ORDER BY Permitida apenas em instrues SELECT e
quando uma clusula ORDER BY especificada, a clusula TOP WITH TIES determina que
linhas adicionais sejam retornadas a partir do conjunto de resultados base com o mesmo
valor apresentado nas colunas ORDER BY, sendo exibidas como as ltimas das linhas TOP n
(PERCENT).
Considerando nossa tabela de Produtos, vamos exibir seus dados em ordem crescente
conforme a coluna QTDEPRODUTO. Isso feito pela seguinte instruo:

O resultado esse:

Vamos supor agora que precisamos obter como resultado o produto com a menor quantidade
de unidades. Porm, preciso considerar a existncia de produtos com a mesma quantidade
de unidades. Neste caso, executamos a seguinte instruo para retornar os produtos com o
menor nmero de unidades:

O resultado ser esse:

Podemos observar na imagem acima que existem trs produtos com a mesma quantidade de
unidades, ou seja, todos eles representam a menor quantidade de unidades da tabela.
Neste exemplo, alm das clusulas ORDER BY e TOP, j descritas anteriormente, a
clusulaWITH TIES retorna a primeira linha da tabela, alm de todas as linhas que
apresentam quantidade idntica quantidade do produto que a clusula TOP 1 selecionou.
Da mesma forma, por exemplo, se quisermos retornar um resultado com os dois produtos
que possuem maior quantidade de unidades, seguido dos produtos que apresentam a mesma
quantidade do segundo produto, usamos a seguinte instruo:

Que nos resultar nisso:

E aqui finalizamos nosso artigo. Ficou um pouco extenso, mais acho que valeu a pena pelo
contedo apresentado.

Estou disponibilizando a quem se interessar o script de todo este artigo, com os assuntos
abordados aqui. O script est comentado para melhor entendimento. Quem quiser baixar, s
clicar aqui.
No percam a prxima parte de nosso mini-curso. Iremos ver as regras de integridade e
consistncia dos dados e os tipos de constraints, como as chaves primrias e as chaves
estrangeiras. Aguardem!
Quaisquer dvidas postem nos comentrios ou sintam-se vontade para mandar emails
parawellingtonbalbo@gmail.com.
Abraos.
At o prximo artigo!

SQL Server 2005 Parte 8 Regras de Integridade e Consistncia


de Dados e Constraints
5 05UTC julho 05UTC 2010

Ol pessoal, voltamos com nosso mini-curso de SQL Server.


Nesta parte, veremos os conceitos sobre integridade e consistncia de dados e os conceitos e
exemplos prticos com as constraints. Acompanhem:
Integridade e Consistncia de Dados Para que um sistema de banco de dados sempre
possa fornecer informaes confiveis aos usurios, o administrador deve filtrar algumas
aes realizadas a fim de evitar a ocorrncia de possveis erros relacionados s mesmas.
Alm disso, esse sistema deve ser capaz de receber informaes de forma constante sem ter
que sofrer alteraes com a mesma freqncia.
O banco de dados deve possibilitar a insero de uma grande quantidade de dados sem que o
mesmo precise ser alterado em sua estrutura.
Diferentes tipos de integridade podem ser estabelecidos quando definida uma relao entre
tabelas por meio das chaves primrias e estrangeiras (e outros tipos de chaves que irei
descrever mais adiante).
NULL / NOT NULL NULL (o mesmo que nulo) determina que uma coluna no deva
receber nenhum valor, enquanto NOT NULL (no nulo) indica que uma coluna dever
sempre receber um valor no momento em que uma linha acrescentada. Veja o exemplo a
seguir:

No exemplo acima, temos trs valores que no permitem valores nulos e dois que permitem
nulos, que so os campos pra Cpf/Cnpj do cliente e pra Telefone. Crie a tabela Vendas e
insira os registros abaixo, pois iremos us-la mais a frente:

Constraints Constraints so objetos usados com a finalidade de estabelecer regras


referentes integridade e consistncia nas colunas das tabelas pertencentes a um sistema
de banco de dados. Isso importante porque para planejar e criar tabelas devemos garantir
a integridade dos dados presentes nas colunas e identificar os valores vlidos para tais dados.
Com o objetivo de assegurar a integridade dos dados de uma tabela, o SQL Server nos
oferece cinco tipos diferentes de constraints, os quais esto relacionados a cinco tipos de
integridades. Veja na tabela abaixo os cinco tipos de constraints e os respectivos tipos de
integridade:

Tipos de integridade

Tipos de constraint

Chave Primria

Constraint Primary Key

Chave Estrangeira

Constraint Foreign Key e


Constraint References

Chave Primria Secundria ou Chave


nicas

Constraint Unique

Regras de Validao

Constraint Check

Valor Padro

Constraint Default

Veja agora a explicao de cada uma das constraints e o uso prtico em exemplos:
Chaves Primrias Geralmente, as tabelas possuem uma coluna contendo valores capazes
de identificar uma linha de forma exclusiva. Essa coluna recebe o nome de chave primria,
tambm conhecida como Primary Key, cuja finalidade assegurar a integridade dos dados
da tabela.
A chave primria pode ser gerada no momento da criao ou da alterao da tabela,
bastando para isso definir uma constraint Primary Key. importante ter em mente que cada
tabela pode conter apenas uma constraint Primary Key, sendo que a coluna que a
representa no pode aceitar valores nulos. Este tipo de constraint capaz de assegurar que
os dados sejam nicos e exclusivos, portanto, comum que a coluna que a representa seja
chamada de coluna de identidade.
O Database Engine o responsvel por assegurar a exclusividade dos dados quando usamos
a constraint Primary Key. Para tanto, ele cria um ndice nico para as colunas relacionadas
chave primria, o qual possibilita acessar os dados de forma rpida nas situaes em que so
realizadas consultas por meio dessas chaves.
H situaes em que a constraint Primary Key definida em vrias colunas. Quando isso
ocorre, possvel que haja valores duplicados em uma coluna, porm, a combinao de
valores da coluna que representa a constraint Primary Key deve ser nica.
PS: Como j dito em artigos anteriores, partes dos conceitos descritos ao longo deste artigo e
de outros foram retirados das minhas apostilas de SQL Server, da Impacta Tecnologia.
Em nossos exemplos vamos usar a tabela Vendas, que criamos e inserimos registros
anteriormente.
Faa um SELECT * FROM na tabela Vendas e veja o resultado:

Nela, podemos observar nos registros que podemos ter duas vendas com o mesmo tipo e
mesmo valor, alm de ambas estarem com Telefone e CPF/CNPJ com valor nulo.
Com esta situao, caso desejamos alterar o tipo de venda de apenas um registro, de
VISTA para CHEQUE, por exemplo, ser preciso identific-los individualmente. Uma das
solues para este caso acrescentar na tabela uma coluna cujos valores so nicos para
cada venda. Neste caso, precisamos acrescentar uma coluna CodVenda, que ser nica para
cada registro. Para incluir esta coluna, execute a seguinte instruo:

Na instruo acima, inseri a coluna CODVENDA, que IDENTITY, ou seja, ela autoincremento, sendo contada de 1 em 1 (definido pelos parmetros passados entre os

parnteses) e que PRIMARY KEY. Agora d um SELECT * FROM na tabela VENDAS e


veja o resultado:

Quando trabalhamos com o SQL Server, a nova coluna inserida sempre no final da tabela.
Com a incluso de uma coluna referente a cdigo da venda, possvel identificar cada
funcionrio individualmente e, dessa forma, aplicar as alteraes necessrias, sabendo que
estamos tratando da venda certa.
A chave primria deve fazer parte da integridade referencial que se estabelece entre duas
tabelas relacionadas. Mais sobre isso logo abaixo.
Chaves Primrias Secundrias ou Chaves nicas Alm das constraints Primary Key,
tambm podemos utilizar constraints Unique, as quais asseguram que dados duplicados no
sejam inseridos em colunas que no fazem parte das chaves primrias. A Unique uma
constraint que tambm capaz de assegurar a exclusividade dos dados. Em uma tabela,
vrias colunas podem ser definidas com constraints Unique.
As colunas nas quais so definidas constraints Unique permitem a incluso de valores nulos,
desde que seja apenas um por coluna.
As constraints do tipo Unique podem ser utilizadas para referenciar uma chave estrangeira.
A chave primria usada na coluna CODVENDA no impediria que uma venda para o mesmo
cliente fosse duplicada. Um exemplo disso j tem em nossa tabela, nos registros 1 e 4, onde
h duas vendas exatamente iguais.

Neste caso, mesmo com a chave primria na coluna CODVENDA, essa insero de uma
mesma venda mais do que uma vez no seria evitada. Ao mesmo tempo, no seria vivel
exigir que os usurios consultassem a tabela inteira antes de inserir nela alguma informao
(imagine uma tabela complexa, com milhares de registros).
Para resolver este problema, podemos inserir uma coluna RGCLIENTE como mostra a
instruo a seguir:

Tendo em vista que no h duas pessoas com o mesmo RG, poderamos colocar a chave
primria nesta coluna a fim de evitar a incluso de uma mesma venda duas ou mais vezes na
tabela. Como j temos a chave primria na coluna CODVENDA e a mesma no pode se
repetir devemos usar as chaves primrias secundrias, tambm chamadas de chaves nicas.
Desta forma, podemos colocar a chave primria na coluna CODVENDA para que cada linha
seja identificada como nica, e a chave nica na coluna RGCLIENTE para evitar que valores
j existentes na tabela sejam registrados novamente.

Chaves Estrangeiras Colunas que representam chaves estrangeiras so utilizadas com a


finalidade de estabelecer um vnculo entre os dados de tabelas distintas. A criao deste tipo
de chave requer a utilizao da constraint Foreign Key.
Para compreendermos este assunto de forma mais adequada, destacamos que para criarmos
uma chave estrangeira preciso que a coluna da primeira tabela, na qual se encontra a
chave primria, seja referenciada pela coluna que se encontra na segunda tabela. Assim, a
coluna da segunda tabela torna-se a chave estrangeira.
Vale destacar que no necessrio que uma constraint Foreign Key em uma tabela esteja
vinculada apenas a uma constraint Primary Key em outra tabela. Alm disso, embora
aForeign Key possa conter valores nulos, possvel que, nesta situao, a verificao dos
valores que formam esta constraint no ocorra.
Podemos assegurar que a verificao dos valores de Foreign Key ocorra por meio da
especificao do valor NOT NULL em todas as colunas que fazem parte deste tipo de
constraint.
Para entendermos melhor os conceitos de chaves estrangeiras, vamos usar a tabela
deProdutos, muito usada nos artigos anteriores. Antes vamos excluir a
coluna CODPRODUTO, que permite valores nulos, para cri-la novamente mais a frente:

Agora na tabela Produtos, faa a seguinte instruo pra criarmos uma coluna que ser a
chave primria desta tabela, j que a mesma no contm chaves primrias:

Agora na tabela Vendas, iremos criar a chave estrangeira que ir referenciar a chave
primria criada anteriormente na tabela Produtos. Para isso, use a seguinte instruo:

Na sintaxe acima criei a coluna CODPRODUTO, do tipo INT na tabela VENDAS, e j


adicionei a constraint FOREIGN KEY, passando o nome a ela dentro dos parnteses e
usando a clusula REFERENCES, apontando a que tabela ser feita o relacionamento dessa
chave, que no caso a PRODUTOS. Os parnteses finais so para passar a chave primria
que ser relacionada com a chave estrangeira que acabamos de criar.
Assim, est criada nossa chave estrangeira, relacionando uma venda a um produto. Voc
ver que nossa coluna est com o valor nulo, pois as chaves estrangeiras realmente aceitam
valores nulos.
Regras de Validao Alm de evitar que os usurios insiram valores inexistentes na
tabela, as regras de validao dos dados evitam situaes como a ilustrada a seguir:

Como voc pode ver, na tabela Produtos, na coluna QTDEPRODUTO, temos um valor
negativo, que o do Monitor, que est com -100. Esse um valor errneo e que pode
causar problemas dependendo da complexidade e das regras de negcios envolvidas em suas
tabelas.
Para resolver este (e muitos outros que podem acontecer) problema, devemos utilizar as
regras de validao nas colunas a fim de evitar a incluso de valores inadequados. Neste
caso, a regra de validao no permitir valores negativos nas

colunas QTDEPRODUTO eVALORPRODUTO. Para isso, devemos criar a constraint CHECK,


da seguinte forma:

Reparem que usei WITH NOCHECK. Isto indica que a constraint que adicionei no ser
capaz de validar dados antigos, ou seja, se eu der um SELECT * FROM na
tabela PRODUTOS, verei que o valor negativo da coluna QTDEPRODUTO continua l:

Para alterarmos isso podemos fazer um UPDATE simples no banco.

Se quisermos fazer outro UPDATE e tentarmos alterar os valores das


colunasQTDEPRODUTO e VALORPRODUTO para valores negativos, como a instruo
abaixo nos sugere, ocorrer o erro a seguir:

Msg 547, Level 16, State 0, Line 1


The UPDATE statement conflicted with the CHECK constraint CHK_QTDEPRODUTO. The
conflict occurred in database Clientes, table dbo.PRODUTOS, column QTDEPRODUTO.
The statement has been terminated.
Este erro nos diz que o UPDATE que tentamos fazer entrou em conflito com uma de nossas
constraints CHECK que criamos anteriormente (ao conflitar com a primeira constraint ele
nem tenta a segunda).
Observao importante: a constraint FOREIGN KEY tambm permite controlar os valores
inseridos nas colunas, porm ela baseia-se em uma lista de valores vlidos obtidos a partir de
uma tabela. A constraint CHECK, por sua vez, utiliza uma expresso lgica para definir os
valores que podem ser adicionados, sem tomar como base os dados de outra coluna ou
tabela.
Com todos os procedimentos realizados para evitar a incluso de valores negativos, os dados
estaro ntegros e consistentes.
Valor Padro O valor padro outra regra que pode ser aplicada s colunas de uma
tabela. Quando um valor padro estabelecido para uma coluna, o sistema assume que ele
deve ser utilizado nas situaes em que o usurio deixa de inserir o valor desejado. Como
nem sempre recomendvel trabalhar com colunas que aceitem valores nulos, a
recomendao que usemos um valor padro para a coluna por meio da
constraint DEFAULT.
Para compreendermos melhor, voltemos tabela VENDAS. Vamos definir que o tipo da
venda, por padro, ter o valor VISTA (lembrando que esse um exemplo fictcio).

Para inserirmos esta constraint a coluna TIPOVENDA, faa a seguinte instruo:

Lembre-se de colocar o FOR para indicar para qual coluna a constraint ser aplicada.
Assim, se no especificarmos o tipo da venda, por default, ela ser VISTA.
Regras de Constraints Cada tipo de constraint possui suas prprias regras. Veja na
tabela a seguir quais so elas:

Tipos de constraints

Descrio

Constraint Primary Key(Chave Primria)

Uma coluna que definida como chave primria


no pode aceitar valores nulos. Em cada tabela,
pode haver somente uma constraint de chave
primria.

Constraint Foreign Key(Chave Estrangeira)

Vrias colunas podem ser definidas como chave


estrangeira. No entanto, para que uma coluna seja
definida desta forma, preciso que ela j tenha sido
definida como chave primria em outra tabela. As
colunas definidas como chave estrangeira podem
aceitar valores nulos, e os datatypes das colunas
relacionadas devem ser iguais (int com int, por
exemplo).

Constraint Unique(Chave nica)

Vrias colunas de uma tabela podem ser definidas


como chave nica e, ainda, aceitar valores nulos.

Constraint Check

Diversas colunas de uma tabela podem ser definidas


como constraint check. Essas colunas podem aceitar
valores nulos, mais isso depende das regras que so
determinadas para elas.

Constraint Default

Vrias colunas de uma tabela podem ser definidas


como constraint default. Essas colunas podem
aceitar valores nulos.

E aqui finalizamos nosso artigo. Estou disponibilizando a quem se interessar o script de todo
este artigo, com os assuntos abordados aqui. O script est comentado para melhor
entendimento. Quem quiser baixar, s clicar aqui.
No percam a prxima parte de nosso mini-curso. Iremos ver os conceitos do MER e do DER,
os tipos e regras de relacionamentos. Aguardem!
Quaisquer dvidas postem nos comentrios ou sintam-se vontade para mandar emails
parawellingtonbalbo@gmail.com.
Abraos.
At o prximo artigo!

Вам также может понравиться