apostila de sql server 2008

53
Sql Server 2008 Curso Básico Marcos Antônio de Souza SQL Server 2005 – Parte 2 – Introdução e Origem, Diferenças entre versões, Tutorial de instalação e Comandos básicos Olá pessoal, começamos definitivamente nossa série de artigos sobre SQL Server 2005. Nesta parte iremos falar contar a história do SQL, sua origem, falarmos das diferenças entre as versões 2000, 2005 e 2008 (e suas respectivas edições), mostrar um tutorial passo a passo de instalação da versão 2005, um link de um tutorial para instalação da versão 2008 e descrever os comandos básicos. Então, vamos lá! Introdução 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 padrão ANSI desde 1986 e ISO desde 1987. Usada principalmente para alterar, consultar, incluir e excluir registros, com um leque muito variado de opções para manipular dados. Hoje em dia conta com três versões: o T-SQL (Transacted Structured Query Language – padrão Microsoft), PL/SQL (Procedural Language/Structured Query Language – padrão Oracle) e SQL PL (SQL Procedural Language – padrão IBM). A linguagem foi desenvolvida em meados da década de 70, com base nos trabalhos sobre bancos de dados relacionais de Edgar Francis Codd. Apesar de que, em 1969, uma versão “beta” já circulava nos corredores da IBM. Na década 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 chamou SEQUEL (Structured English Query Language), mais algum tempo depois mudou para SQL, pois uma marca da Inglaterra já usava o nome SEQUEL. Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 1 de 53

Upload: marcos0512

Post on 07-Jan-2017

148 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

SQL Server 2005 – Parte 2 – Introdução e Origem, Diferenças entre versões, Tutorial de instalação e Comandos básicosOlá pessoal, começamos definitivamente nossa série de artigos sobre SQL Server 2005. Nesta parte iremos falar contar a história do SQL, sua origem, falarmos das diferenças entre as versões 2000, 2005 e 2008 (e suas respectivas edições), mostrar um tutorial passo a passo de instalação da versão 2005, um link de um tutorial para instalação da versão 2008 e descrever os comandos básicos. Então, vamos lá!

Introdução 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 padrão ANSI desde 1986 e ISO desde 1987. Usada principalmente para alterar, consultar, incluir e excluir registros, com um leque muito variado de opções para manipular dados.

Hoje em dia conta com três versões: o T-SQL (Transacted Structured Query Language – padrão Microsoft), PL/SQL (Procedural Language/Structured Query Language – padrão Oracle) e SQL PL (SQL Procedural Language – padrão IBM).

A linguagem foi desenvolvida em meados da década de 70, com base nos trabalhos sobre bancos de dados relacionais de Edgar Francis Codd. Apesar de que, em 1969, uma versão “beta” já circulava nos corredores da IBM. Na década 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 chamou SEQUEL (Structured English Query Language), mais algum tempo depois mudou para SQL, pois uma marca da Inglaterra já usava o nome SEQUEL.

No fim da década de 70, IBM e Oracle (na época com o nome de Relational Software Inc.) desenvolveram sistemas baseados nos conceitos do SQL.

Em 1979, três 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 lança seu próprio banco de dados, chamado de Microsoft SQL Server 4.2. Após isso foram lançadas diversas versões: 4.21 para Windows NT, 6.0, 7.0 (com interface gráfica) e 2000 (o primeiro que teve uma versão para a plataforma de 64 bits da Intel).

As versões mais recentes tiveram diversas alterações. Em Novembro de 2005 é lançado o SQL Server 2005 com aumento de performance e alterações na IDE, nos comandos, integração com a CLR, entre outras. A última versão teve mais alterações como novos tipos de dados, segurança e performance melhorados, etc.

Fontes de pesquisa:

Wikipedia – http://pt.wikipedia.org/wiki/Sql-server

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 1 de 41

Page 2: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

Blog 50 Minutos – http://www.50minutos.com.br/blog/post/Algo-sobre-o-SQL-Server.aspx

Diferenças entre versões –

- No SQL Server 2000, temos 6 tipos de versões que podem ser instaladas, vejam a seguir um breve descritivo de todas elas:

1 – Enterprise Edition – Esta versão suporta todas as funcionalidades do SQL Server 2000 e pode ser utilizada tanto em um ambiente OLTP como em OLAP.

2 – Standard Edition – Esta versão suporta quase todas as funcionalidades da versão Enterprise, com algumas limitações e restrições ao serviço Analysis Services.

3 – Personal Edition – Esta versão possui quase tudo o que a versão Standard possui, com a exceção de que não podemos criar um Publicador/Distribuidor em uma replicação transacional. Há também uma limitação de performance quando mais de 5 usuários enviam instruções SQL ao mesmo tempo.

4 – Windows CE Edition – Versão para dispositivos portáteis que armazena temporariamente uma pequena quantidade de dados para depois transferir para outro SQL Server 2000. Possui diversas limitações.

5 – Developer Edition – Possui todas as funcionalidades da versão Enterprise. A única limitação é que, como o próprio nome diz, esta versão é exclusiva para o desenvolvimento de aplicações em ambiente de desenvolvimento e não em um ambiente de produção.

6 – Desktop Engine – Este é somente o engine do SQL Server, sem ferramentas gráficas. Não podemos criar um banco com mais de 2GB e possui a mesma limitação que a versão Personal. Esta versão é também chamada de MSDE e pode ser distribuída livremente sem a necessidade de licença.

- No SQL Server 2005, temos também 6 versões:

1 – Express Edition – Esta versão pode ser baixada gratuitamente e a mais utilizada por desenvolvedores e estudantes da área. Conta com uma limitação de 4GB para os arquivos de dados

2 – Workgroup Edition – Versão para empresas, que precisam utilizar bancos de dados sem limites quanto ao tamanho e à quantidade de usuários.

3 – Developer Edition – Versão para o desenvolvedor, permite desenvolver qualquer tipo de aplicação.

4 – Standard Edition – Oferece uma solução para pequenas e médias empresas que buscam uma solução fácil de utilizar e que seja capaz de suportar atividades comerciais.

5 – Enterprise Edition – Opção mais indicada para os usuários que buscam a versão com maior escalabilidade e disponibilidade.

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 2 de 41

Page 3: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

6 – Mobile Edition – Com esta edição, o desenvolvimento de aplicações relacionadas à Business Inteligence e ao gerenciamento de dados pode ser implementado em dispositivos móveis.

- No SQL Server 2008, temos 5 versões:

1 – Enterprise Edition – Usada por grandes empresas que precisam de um fluxo maior de dados. Há outras duas versões, Developer e Evaluation, que tem as mesmas funcionalidades da Enterprise com algumas restrições em seu licenciamento. As diferenças entre as versões Standard e Enterprise são maiores no SQL 2008 do que na versão 2005.

2 – Standard Edition – Versão para pequenas e médias empresas, tem um maior poder em análise de dados e Reporting Services.

3 – Workgroup Edition – Inclui os recursos básicos dos bancos de dados relacionais, é muito usado para funções de replicação de dados. Mais apropriada para empresas que precisam de performance em sincronização remota ou para servidores geograficamente distantes.

4 – Express Edition – Versão gratuita do SQL Server, essencial para quem quer aprender a construir aplicações pequenas. Usada em larga escala por estudantes.

5 – Compact Edition – Mais uma versão gratuita do SQL Server, usada principalmente em aplicativos móveis, mais também em desktops e clientes.

SQL Server 2005 – Parte 3 – Objetos do SQL Server, Databases, Tipos de Dados, Tabelas do Sistema e Criação de Tabelas

Olá pessoal, voltamos com nosso curso básico de SQL Server. Nesta parte, iremos descrever os Objetos do SQL Server, mostrar a definição e criação de um Database, mostrarmos os tipos de dados, as tabelas do sistema e começar a criação das tabelas. Acompanhem:

Objetos do SQL Server – A versão 2005 do SQL Server nos oferece diferentes tipos de objetos, como descrevemos abaixo:

- Database – Os objetos do sistema são criados dentro de uma estrutura lógica que corresponde ao objeto Database, iremos falar dele mais adiante.

- Table – Os dados do sistema são inclusos neste objeto de duas dimensões, que é formado por linhas e colunas.

- Constraint, Default e Rule – Consistem em regras usadas para implementar a consistência e a integridade dos dados. Mais sobre elas em artigos futuros.

- Data Type e User Defined Data Type – Os dados são armazenados no disco sob um formato representado pelo datatype. Um datatype deverá ser atribuído  a cada coluna de uma tabela.

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 3 de 41

Page 4: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

- View – Este objeto nos oferece uma visualização lógica dos dados de uma tabela, de modo que diversas aplicações possam compartilhá-la.

- Index – São objetos responsáveis pela otimização 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, responsável por uma determinada tarefa. Sua lógica pode ser compartilhada por várias aplicações. Muito utilizado atualmente em praticamente todo tipo de empresa.

- Trigger – Como a Procedure, este objeto também possui um bloco de comandos Transact-SQL. É criado sobre uma tabela e ativado no momento da execução dos comandos UPDATE, INSERT e/ou DELETE.

- Function – Neste objeto, temos um bloco de comandos Transact-SQL responsável por uma determinada tarefa. Como a Procedure, sua lógica pode ser compartilhada por N aplicações. Importante dizer que uma função SEMPRE retornará um valor.

Obs: Os objetos Procedure, Trigger e Function são processados rapidamente, pois seu código tende a ficar compilado na memória. Isso acontece porque estes objetos são executados no servidor de dados.

Databases – Como dito anteriormente, dentro do objeto Database são criados os objetos que fazem parte do sistema, ou seja, uma estrutura lógica formada por dois tipos de arquivo, um responsável pelo armazenamento dos dados e outro que armazena as transações feitas. Ok, mais como eu crio um Database? Simples! Por meio da instrução 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 instrução CREATE DATABASE Clientes e aperto F5 ou clico em Execute. Veja abaixo:

Como há de se esperar, assim que criamos um database, não 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 instrução USE nomedodatabase. Confira abaixo:

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 4 de 41

Page 5: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

Logo abaixo da minha instrução usei a palavra GO, que nada mais é que uma simples maneira de dizer ao SQL para seguir na respectiva instrução. Esse comando não é obrigatório.

Da mesma forma, se desejarmos excluir o database recém criado, devemos usar a instrução DROP 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 excluído, pois vemos acima no DropDownList Avaliable Databases.

Tipos de Dados – Os tipos de dados são classificados em diferentes categorias e permitem N formatos. Abaixo uma descrição 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 dígito, sendo que o espaço ocupado no disco é de um dígito por caractere. É possível utilizar até 8 mil dígitos.

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 5 de 41

Page 6: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

- Varchar(n) – Também aceita como valor qualquer dígito e o espaço ocupado em disco é de um dígito por caractere. Permite usar também no máximo 8 mil dígitos. A diferença pro Char, é que o Varchar geralmente é usado quando não sei o tamanho fixo de um campo.

- Text – Qualquer dígito 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 dígito, sendo ocupados 2 bytes a cada caractere. É possível usar até 8 mil bytes.

- Nvarchar(n) – Igual ao tipo anterior, com a única diferença que uso esse tipo quando não sei o tamanho fixo de um campo. 2 bytes são ocupados a cada caractere. É possível usar até 8 mil bytes.

- Ntext – Também aceita qualquer digito, 2 bytes são ocupados a cada caractere. Podem ser usados até 1.073.741.823 bytes.

- Baseados em Numéricos 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 também 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 Numéricos Exatos:

- Decimal(P,S) – Os valores aceitos variam entre -10^38-1 e 10^38-1, sendo que o espaço ocupado varia de acordo com a precisão. Se a precisão for de 1 a 9, o espaço ocupado é de 5 bytes. Se a precisão é de 10 a 19, o espaço ocupado é de 9 bytes, já se a precisão for de 20 a 28, o espaço ocupado é de 13 bytes, e se a precisão for de 29 a 38, o espaço ocupado é de 17 bytes.

- Numérico(P,S) – Considerado um sinônimo do datatype decimal, o numérico também permite valores entre -10^38-1 e 10^38-1 e o espaço ocupado é o mesmo do anterior.

- Baseados em Numéricos 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 espaço ocupado varia de acordo com o valor de n. Se esse valor estiver entre 1 e 24, a precisão será de 7 dígitos, sendo que o espaço ocupado será de 4 bytes. Se o valor de n estiver entre 25 e 53, sua precisão será de 15 dígitos, assim sendo o espaço ocupado será de 8 bytes.

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 6 de 41

Page 7: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

- 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 Numéricos Monetários:

- Money – Este datatype aceita valores entre -2^63 e 2^63-1, sendo que 8 bytes são ocupados.

- Smallmoney – É possível usar valores entre -2^31 e 2^31-1, sendo que 4 bytes são 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 precisão atinge 3.33 milisegundos.

- Smalldatetime – Aceita o uso de valores entre 1/1/1900 e 06/06/2079, sendo que sua precisão é de 1 minuto e ocupa 4 bytes em disco.

- Baseados em Binários:

- Binary[(n)] – Este datatype representa os dados que serão usados no formato binário. O espaço ocupado é de n+4 bytes, sendo que n pode variar entre 1 e 8000 bytes.

- Varbinary[(n)] – Aqui também é usado o formato binário, o espaço ocupado e a variação de n é igual ao anterior.

- Image – O formato binário também é usado aqui, sendo que o espaço ocupado é de 2^31-1 bytes ou 2.147.483.647.

- Baseados em Tipos de Dados Especiais:

- Uniqueidentifier – O formato hexadecimal é usado para o armazenamento de dados binários, sendo que este datatype ocupa 16 bytes.

- Timestamp – Um valor binário é 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. Também utilizado como um tipo de dado int.

- Sql_Variant – Os valores aqui podem ser de qualquer datatype, sendo que é possível armazenar até 8016 bytes.

- Cursor – Datatype usado somente quando trabalhamos com variáveis.

- Table – Datatype usado somente quando trabalhamos com variáveis de memória.

- Xml – Por este datatype, podemos armazenar fragmentos de documentos XML em um banco de dados SQL. Estes fragmentos correspondem à instâncias XML que não possuem um determinado elemento de nível superior. Essas instâncias são armazenadas quando

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 7 de 41

Page 8: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

criamos variáveis e colunas com datatype XML. O espaço máximo ocupado deve ser de 2GB.

Tabelas do Sistema – Após instalarmos o SQL Server, são criados alguns bancos de dados que permitem ao software gerenciar os sistemas de usuários, fazendo assim com que a integridade e a segurança dos dados sejam mantidas. Esses bancos de dados são chamados de bancos de dados gerenciais. Dentro deles, são criadas tabelas por meio da instalação 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 são visualizados de forma lógica no esquema sys de todos os bancos de dados. O Resource, que é um banco de dados somente leitura, não possui metadados ou dados dos usuários. Ele permite a rápida atualização de versões e o fácil rollback dos pacotes de serviços. Importante salientar que, em hipótese alguma, devemos mover ou renomear o arquivo do banco de dados Resource, pois, se isso acontecer, o SQL Server não será iniciado.

- Master – O banco Master é o responsável por efetuar os registros de todas as informações do nível do sistema. Ele registra as informações para iniciar o SQL Server, contas de login, configurações referentes ao sistema e a existência de outros bancos de dados e seus arquivos. Se este banco estiver indisponível, torna-se inviável iniciar o SQL Server.

- TEMPDB – Este é o banco responsável por manter todo o tipo de armazenamento temporário, inclusive o de tabelas de caráter temporário. Ele é considerado um recurso global, visto que armazena tabelas e stored procedures temporárias que podem ser acessadas por todos os usuários que estiverem conectados. Todas as vezes que o SQL Server é iniciado, este banco é recriado, o que significa que sempre há uma cópia limpa do banco de dados quando o sistema é iniciado. Dessa forma, quando o SQL é encerrado, não existem conexões ativas, sendo que entre uma sessão e outra não há itens a serem salvos em um banco de dados tempdb. Vale ressaltar que não 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 criação 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 alterações sobre este banco de dados, todos aqueles criados posteriormente também refletirão tais modificações.

- MSDB – Este banco é usado pelo SQL Server Agent com a finalidade de registrar operadores e programar a execução de jobs e de alerts. O msdb é utilizado para realizar o armazenamento de dados não apenas pelo SQL Server Agent, mais também pelo SQL Server Management Studio. Um histórico completo de backup e restauração online é mantido pelo SQL Server no banco de dados msdb. Esses dados são usados pelo SQL Server a fim de criar um planejamento de restauração do banco de dados e aplicar backups de log de transação. Recomenda-se realizar um backup do msdb com frequência caso esse banco sofra constantes alterações. Caso esse banco seja danificado, as informações referentes ao backup e à restauração são perdidas, bem como as informações utilizadas pelo SQL Server Agent.

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 8 de 41

Page 9: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

Visualizando os bancos de dados do sistema – Caso você deseje visualizar os bancos de dados do sistema, faça o seguinte: abra o SQL Server, vá a janela Object Explorer (F8), expanda a opção Databases e expanda a opção System Databases, como mostra a imagem a seguir.

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

Criação de Tabelas – Os dados de um sistema são 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 gravação dos dados

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 9 de 41

Page 10: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

no disco (descritos um a um anteriormente) deverão ser especificados para cada coluna da tabela. Ok, após descrever de forma resumida a parte teórica, vamos a prática. Para criarmos uma tabela, devemos usar a instrução 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 parênteses 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 instrução SELECT, que será abordada no próximo artigo.

Desta forma, terminamos aqui mais uma parte de nossa série de artigos, ou melhor, dizendo, de nosso mini-curso básico de SQL Server. Na próxima parte, começaremos a falar dos comandos DML, como o INSERT e SELECT. Aguardem!

SQL Server 2005 – Parte 4 – Comandos DML – Insert e Select

Olá pessoal, voltamos com nosso curso básico de SQL Server. Nesta parte, iremos aprender o que são os Comandos DML, e falaremos sobre dois deles, o Insert e o Select, seguidos de alguns exemplos que ilustram o uso dos comandos. Acompanhem:

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 10 de 41

Page 11: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

Comandos DML – Os comandos Data Manipulation Language, ou apenas DML são utilizados para realizar inclusões, consultas, exclusões e alterações de dados presentes em registros. Por estes comandos, estas tarefas podem ser executadas em vários registros de diversas tabelas ao mesmo tempo.

Os DML responsáveis pelas funções citadas acima são INSERT, SELECT, UPDATE e DELETE, respectivamente. Como dito anteriormente, neste artigo irei falar sobre os dois primeiros mostrando os conceitos e alguns exemplos práticos 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, são opcionais, ou seja, você pode usar somente

INSERT NomedaTabela VALUES (Valores)

Os valores descritos junto ao comando INSERT são transformados em uma ou mais linhas da tabela. Os nomes das colunas nas quais os dados serão inseridos devem ser separados por vírgulas.

As colunas que não foram declaradas no comando INSERT podem apresentar um valor padrão, caso essa definição seja configurada pelo usuário, ou o valor NULL.

Vamos tomar como exemplo a tabela de clientes abaixo:

Para fazê-la, precisamos fazer o uso da instrução 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 física 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

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 11 de 41

Page 12: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

serem inclusos. Neste tipo de Insert, que nosso 4º que está faltando, nossa instrução 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 instrução SELECT, instrução 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 também para outras aplicações.

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 substituído por uma espécie de apelido, criado para facilitar sua visualização ao usuário. Esse apelido é chamado de Alias. Vamos tomar como exemplo novamente nossa tabela de clientes abaixo:

Os nomes das colunas são, na ordem que aparece acima, CODCLIENTE, NOMECLIENTE, ENDERECOCLIENTE, FONECLIENTE, EMAILCLIENTE, SALARIOCLIENTE e DATACLIENTE. Para que elas fiquem com um nome melhor apresentável ao usuário, como na imagem acima, faça a seguinte instrução:

Não é necessário usar a cláusula AS para obter o resultado desejado. Entretanto, como boas práticas, diversos usuários preferem manter essa cláusula para facilitar a identificação 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 também criar uma coluna virtual usando o Select, ou seja, podemos exibir uma coluna não disponível fisicamente na tabela. No exemplo abaixo, a

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 12 de 41

Page 13: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

coluna Tipo de Cliente não faz parte do banco de dados, mais por meio do Select, podemos defini-la como existente:

Exibindo um cálculo – Nem sempre é necessário gravar o resultado de um cálculo para que esse valor seja exibido na tabela. Por exemplo, imaginemos que o salário dos clientes possui um aumento de 10%. Desejamos visualizar esse aumento, mais não inseri-los no banco. Para isso, faça o seguinte:

Dessa forma, obtemos uma rápida visualização de quanto seria o aumento aos clientes, sem precisar gravar esses dados no banco.

Uso da Cláusula Distinct – Por meio dessa cláusula, é 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, são apenas 8, mais imagine o cenário em uma grande empresa com milhares (até milhões) de dados repetidos. Seria um grande desperdício de tempo e produtividade

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 13 de 41

Page 14: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

visualizarmos vários dados repetidos. Para isso, usamos a cláusula Distinct, por meio da seguinte instrução:

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 são 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:

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 14 de 41

Page 15: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

Com apenas duas linhas de instruções SQL, consigo copiar os dados de uma tabela em outra vazia.

Insert com Select quando as tabelas são diferentes – Vamos supor que temos duas tabelas distintas, Clientes e Funcionarios, com números de colunas diferentes:

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

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 15 de 41

Page 16: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

Desta forma, usando colunas virtuais, consigo copiar os dados existentes da tabela Clientes para a tabela Funcionário.

Caso as colunas da tabela Funcionario aceitem valores nulos (NULL), podemos escrever a instrução de outra forma, como mostra a imagem:

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

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 16 de 41

Page 17: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

Neste caso devemos fazer como mostra a imagem a seguir:

Desta forma, terminamos aqui mais uma parte de nossa série de artigos.

Na próxima parte, continuaremos falando dos comandos DML, abordando o UPDATE e o DELETE. Aguardem!

SQL Server 2005 – Parte 5 – Comandos DML – Update e Delete

Olá pessoal, voltamos com nosso curso básico de SQL Server. Nesta parte, iremos ver os comandos DML Update e Delete e veremos a cláusula Where. Da mesma forma como fizemos na parte anterior, iremos fazer nessa alguns exemplos para melhor entendimento desses comandos. Confiram:

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 17 de 41

Page 18: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

Update – Os dados pertencentes a múltiplas linhas de uma tabela podem ser alterados por meio do comando UPDATE. Quando usarmos o UPDATE, devemos especificar algumas informações, como o nome da tabela que será atualizada e os filtros que serão usados na atualização. Sintaxe básica: UPDATE nomedatabela SET coluna1 = valor1, coluna2 = valor2, coluna3 = valor3, WHERE critério. Importante: Devemos passar sempre o Where, que é uma espécie de filtro em nossa tabela, porque senão ao 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 salários dos funcionários, da tabela Funcionario. Para isso, faça o seguinte comando:

Nessa instrução SQL, do um aumento de 10% no salário dos funcionários que estiverem com o salário menor que 1900,00, que nesse exemplo são os 2 primeiros, já que o 3º e o 4º são o mesmo. O resultado será esse:

Alterando os dados de várias colunas – Podemos alterar os dados de várias colunas. Vamos usar desta vez a tabela Clientes, como exemplo. Vamos aumentar em 5% o salário dos clientes que ganharem mais do que 1600.00. Aumentaremos também em 2 dias o campo DataCliente. A instrução de Update ficará assim:

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 18 de 41

Page 19: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

E o resultado será esse:

Podemos usar a cláusula Update de outras maneiras também, 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 número grande de dados, porque o Update não tem volta, fez tá feito! Por isso também a importância de usar a cláusula Where junto ao Update.

Deixo para que vocês usem a criatividade e criem exemplos básicos de uso do Update. Qualquer dúvida com relação ao uso dele mande um email para o endereço que está no fim deste artigo.

Delete – O comando DELETE deve ser usado quando desejamos excluir os dados de uma tabela. Sintaxe básica: DELETE FROM nomedatabela. Por exemplo, se quisermos remover os dados da tabela Funcionario, devemos executar a seguinte instrução 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 situações, já que, uma vez executado esses comandos, não será possível desfazer a ação realizada. Portanto, devemos ficar atentos ao usar esses comandos em tabelas complexas.

Cláusula Where – Como dito anteriormente, a utilidade da cláusula WHERE é a de ser um filtro, que determina quais os dados que serão afetados, podendo ser usada juntamente com SELECT, UPDATE e DELETE. Podemos dizer então que essa cláusula determina o escopo de uma consulta a algumas linhas, realizando a filtragem dos dados que estejam de acordo com as condições definidas. Abaixo vamos criar uma nova tabela, a de Produtos, e utilizaremos a cláusula Where juntamente com as instruções SELECT, UPDATE e DELETE:

De início vamos criar a tabela Produtos…

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 19 de 41

Page 20: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

…e inserir alguns dados:

Nossa tabela ficará com os seguintes dados:

Agora vamos fazer um SELECT, que irá me retornar somente os produtos de Informática. Para isso, uso a cláusula WHERE, como na imagem a seguir:

O resultado será esse:

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 20 de 41

Page 21: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

Ok, a consulta só me retornou os produtos do tipo Informática, por meio da cláusula WHERE. Agora quero aumentar em 5% o valor dos produtos do tipo Informática. Como eu faço? Usando UPDATE com WHERE:

E o meu resultado será:

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

Como só tínhamos 2 produtos com valor abaixo de 100.00, minha tabela terá agora 8 produtos:

Com o Where, podemos fazer milhares de filtros específicos para colunas diversas.

Essa foi apenas uma breve introdução a cláusula Where. Na próxima parte, veremos o uso do Where com vários operadores específicos, como o AND, OR, IN, BETWEEN, LIKE, entre outros. Aguardem!

SQL Server 2008 – Parte 6 – Cláusula Where e seus Operadores

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 21 de 41

Page 22: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

Nesta parte, iremos ver o uso da cláusula WHERE em conjunto com os operadores AND, OR, IN, NOT IN, BETWEEN e NOT BETWEEN.

Deixaremos a explicação e os exemplos do uso dos operadores LIKE e NOT LIKE para a próxima 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 é necessário usar mais de uma condição de comparação. 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 acréscimo de 10% nos produtos de Informática cujo valor seja igual ou inferior a 350.00. Para isso, faça a seguinte instrução (antes dê um Select * From Produtos e note o valor dos produtos Processador e Monitor):

Nossa tabela ficará assim:

Percebeu a diferença? As colunas Processador e Monitor sofreram um acréscimo de 10% em seu valor.

O operador OR é usado especificamente quando desejamos atender a duas condições distintas. Considerando a tabela Produto, o OR deve ser utilizado quando desejamos, por exemplo, atribuir um acréscimo de 10% sobre o valor dos produtos do tipo Eletrônicos ou sobre o valor daqueles cujo preço é maior ou igual a 350.00. Neste caso, uma das condições deve ser atendida. Para isso, precisamos executar a seguinte instrução (sempre lembrando que, como UPDATE não tem volta, fez tá feito, use o Select * From Produtos para notar a diferença antes e depois do UPDATE):

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 22 de 41

Page 23: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

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 após o uso do UPDATE.

Dito isto, podemos concluir que o operador AND permite realizar a avaliação de duas expressões conjuntamente, sendo que o resultado obtido apenas será verdadeiro se ambas as expressões forem verdadeiras. Ao contrário, o operador OR permite que realizemos a avaliação de duas expressões de forma separada. Assim, o resultado será verdadeiro se somente uma expressão for verdadeira ou se ambas forem verdadeiras.

WHERE com IN – Podemos usar o operador IN no lugar do operador OR em determinadas situações. 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 Eletrônicos ou do tipo Informática. Confira a seguir como fazer esta consulta com ambos os operadores:

- Operador OR

- Operador IN

Ambas as consultas nos trarão o mesmo resultado:

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 23 de 41

Page 24: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

WHERE com NOT IN – Este operador, ao contrário do IN, permite obter como resultado o valor de uma coluna que não pertence a uma determinada lista de elementos, como podemos perceber pela seguinte instrução:

O resultado será o seguinte:

Podemos perceber acima que foram exibidos apenas os produtos que não são do tipo Eletrônicos ou Informática. Podemos usar também o operador AND em conjunto com o sinal de comparação diferente (<>) para obter o mesmo resultado, como a instrução 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 instrução:

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 > também é possível 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.

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 24 de 41

Page 25: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

WHERE com NOT BETWEEN – O operador NOT BETWEEN, ao contrário do anteriormente descrito, permite consultar os valores que não se encontram em uma determinada faixa. Considerando nossa tabela, podemos consultar os produtos cujos valores não estão entre 300.00 e 500.00. Para isso, é preciso executar o comando descrito a seguir:

Com a execução desta instrução, o resultado obtido é o seguinte:

Outra forma de se obter o mesmo resultado é o seguinte:

Com a execução deste comando, o resultado obtido com a tabela Produtos é o mesmo apresentado com a execução do operador NOT BETWEEN. Assim finalizamos mais esta parte de nosso curso básico de SQL Server.

Na próxima parte, iremos ver o uso do Where em conjunto com os operadores LIKE e NOT LIKE. Veremos também os conceitos e exemplos das cláusulas ORDER BY, TOP, e TOP WITH TIES. Aguardem!

SQL Server 2005 – Parte 7 – Operadores Like e Not Like e Cláusula Order By

Nesta parte, veremos o uso da cláusula WHERE em conjunto com os operadores LIKE e NOT LIKE. Veremos também as cláusulas ORDER BY, TOP e TOP WITH TIES separadas e em conjunto. Acompanhem:

WHERE com LIKE – O operador LIKE é empregado nas situações em que usamos como base para realizar pesquisas (ou filtros) as colunas que estão 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 aconteça, devemos executar a seguinte instrução:

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 25 de 41

Page 26: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

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 não é 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 posição na palavra:

O resultado será esse:

Também podemos obter como resultado as palavras que contenham um determinado caractere em qualquer posição. O comando descrito a seguir retornará como resultado todos os produtos contenham o caractere C em qualquer posição. Veja:

O resultado será o seguinte:

Além destes tipos de consulta descritos, o operador LIKE também permite consultar nomes de produtos que contenham uma determinada sílaba. Por exemplo, para realizar uma consulta obtendo como resultado os nomes dos produtos que contenham a sílaba ‘or’, basta executarem a seguinte instrução:

Com essa instrução, teremos os seguintes resultados:

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 26 de 41

Page 27: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

Podemos restringir ainda mais esta consulta determinando não apenas uma sílaba que deve estar presente nos nomes dos produtos, mas também 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 sílaba ‘or’ e os tipos que possuam a sílaba ‘ti’:

O resultado obtido será este:

Com isso, podemos concluir que o operador LIKE em conjunto da cláusula WHERE é muito útil quando queremos realizar filtros diversos em consultas.

WHERE com NOT LIKE – Os operadores NOT LIKE são usados de forma oposta ao operador LIKE. Com eles obtemos o resultado de uma consulta os nomes e tipos de produtos que não possuem tais caracteres ou sílabas determinadas neste filtro. Para ficar clara a diferença 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 também 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 não seja C e que não contenha o caractere D em qualquer outra posição da palavra:

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 27 de 41

Page 28: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

O resultado será esse:

Também podemos obter como resultado as palavras que não contenham um determinado caractere em qualquer posição. O comando descrito a seguir retornará como resultado todos os produtos cujos nomes não contenham o caractere E em qualquer posição. Veja:

O resultado será esse:

Como feito anteriormente, com o operador NOT LIKE podemos restringir ainda mais nossa consulta, determinando uma sílaba que não deve estar presente no nome dos produtos e também uma sílaba que não deve estar presente no tipo do produto. O comando a seguir nos permite obter como resultado os produtos cujos nomes não possuem a sílaba ‘or’ e os tipos que não possuem a sílaba ‘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 cláusula WHERE.

CLÁUSULA ORDER BY – Quando precisamos que o resultado de nossa consulta a uma tabela seja fornecido em uma ordem específica, de acordo com um determinado critério, devemos usar a cláusula ORDER BY que, como o próprio nome diz, considera uma certa ordem para retornar os dados de uma consulta. A sintaxe padrão é a seguinte: SELECT coluna1, coluna2 FROM nomedatabela ORDER BY coluna1. Usaremos os exemplos a seguir usando a tabela Produtos.

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 28 de 41

Page 29: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

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. Além disso, a exibição dos valores da coluna NOMEPRODUTO é retornada em ordem alfabética, como podemos ver:

Ordenando por várias colunas – É possível usar a cláusula ORDER BY para ordenar os dados por várias colunas, com base nos nomes das colunas e nas posições das mesmas no SELECT. Com o comando a seguir conseguimos isso:

O resultado será esse:

ORDER BY ASC e DESC – A cláusula ORDER BY pode ser utilizada com as opções ASC e DESC, descritas abaixo:

- ASC – Quando utilizada, esta opção faz com que as linhas sejam retornadas em ordem ascendente.

- DESC – Quando utilizada, esta opção faz com que as linhas sejam retornadas em ordem descendente.

Caso não especifiquemos ASC ou DESC, os dados da tabela serão retornados em ordem ascendente, que é o valor padrão.

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 29 de 41

Page 30: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

Veja abaixo o uso das opções:

ASC – Executemos a seguinte instrução:

E veremos o seguinte resultado:

A opção ASC também pode ser usada para ordenar os dados de uma tabela conforme duas colunas diferentes. Para isso, devemos usar a seguinte instrução:

Iremos obter o seguinte resultado:

DESC – A instrução a seguir demonstra o uso da opção DESC junto ao ORDER BY:

O resultado será esse:

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 30 de 41

Page 31: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

Assim como o ASC, a opção DESC também 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á necessário que os itens de uma coluna sejam exibidos em ordem crescente e a da outra em ordem decrescente. Neste caso, podemos usar as opções ASC e DESC juntas, como mostra o exemplo a seguir:

O resultado será esse:

Percebam que podemos fazer diversas combinações de consultas com ASC e DESC.

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 31 de 41

Page 32: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

CLÁUSULA TOP – Como resultado de uma consulta a uma tabela de banco dados, temos a opção de retornar a quantidade de linhas desejada, a partir da primeira linha selecionada. Para isso, usamos a cláusula TOP. Usando a tabela Produtos como exemplo, usamos a seguinte instrução para retornar as cinco primeiras linhas desta tabela:

O resultado será esse:

O uso da cláusula TOP merece as seguintes considerações:

- Em Partitioned Views, TOP não pode ser aplicada junto às instruções UPDATE e INSERT.

- Não há ordem das linhas referenciadas na expressão TOP utilizada com as instruções INSERT, DELETE ou UPDATE, sendo que TOP n retornam linhas aleatórias n como resposta.

CLÁUSULA TOP COM ORDER BY – As cláusulas TOP e ORDER BY podem e devem ser utilizadas de forma conjunta. Usando novamente a tabela Produtos como exemplo, vamos exibir os três primeiros produtos de menor preço, dentre a relação de produtos da lista. Usamos a seguinte instrução:

Que nos resultará nisso:

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

Que nos resultará nesses valores:

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 32 de 41

Page 33: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

CLÁUSULA TOP WITH TIES COM ORDER BY – Permitida apenas em instruções SELECT e quando uma cláusula ORDER BY é especificada, a cláusula 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 instrução:

O resultado é esse:

Vamos supor agora que precisamos obter como resultado o produto com a menor quantidade de unidades. Porém, é preciso considerar a existência de produtos com a mesma quantidade de unidades. Neste caso, executamos a seguinte instrução para retornar os produtos com o menor número de unidades:

O resultado será esse:

Podemos observar na imagem acima que existem três produtos com a mesma quantidade de unidades, ou seja, todos eles representam a menor quantidade de unidades da tabela.

Neste exemplo, além das cláusulas ORDER BY e TOP, já descritas anteriormente, a cláusula WITH TIES retorna a primeira linha da tabela, além de todas as linhas que apresentam quantidade idêntica à quantidade do produto que a cláusula TOP 1 selecionou.

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 33 de 41

Page 34: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

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 instrução:

Que nos resultará nisso:

E aqui finalizamos nosso artigo. Ficou um pouco extenso, mais acho que valeu a pena pelo conteúdo 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.

Não percam a próxima parte de nosso mini-curso. Iremos ver as regras de integridade e consistência dos dados e os tipos de constraints, como as chaves primárias e as chaves estrangeiras. Aguardem!

SQL Server 2005 – Parte 8 – Regras de Integridade e Consistência de Dados

e ConstraintsNesta parte, veremos os conceitos sobre integridade e consistência de dados e os conceitos e exemplos práticos com as constraints. Acompanhem:

Integridade e Consistência de Dados – Para que um sistema de banco de dados sempre possa fornecer informações confiáveis aos usuários, o administrador deve filtrar algumas ações realizadas a fim de evitar a ocorrência de possíveis erros relacionados às mesmas.

Além disso, esse sistema deve ser capaz de receber informações de forma constante sem ter que sofrer alterações com a mesma freqüência.

O banco de dados deve possibilitar a inserção 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 relação entre tabelas por meio das chaves primárias e estrangeiras (e outros tipos de chaves que irei descrever mais adiante).

NULL / NOT NULL – NULL (o mesmo que nulo) determina que uma coluna não deva receber nenhum valor, enquanto NOT NULL (não nulo) indica que uma coluna deverá sempre receber um valor no momento em que uma linha é acrescentada. Veja o exemplo a seguir:

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 34 de 41

Page 35: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

No exemplo acima, temos três valores que não permitem valores nulos e dois que permitem nulos, que são 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 são objetos usados com a finalidade de estabelecer regras referentes à integridade e à consistência 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 válidos 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 estão 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 constraintChave Primária Constraint Primary KeyChave Estrangeira Constraint Foreign Key e

Constraint References Chave Primária Secundária ou Chave Únicas Constraint Unique Regras de Validação Constraint Check Valor Padrão Constraint Default

Veja agora a explicação de cada uma das constraints e o uso prático em exemplos:

Chaves Primárias – Geralmente, as tabelas possuem uma coluna contendo valores capazes de identificar uma linha de forma exclusiva. Essa coluna recebe o nome de chave primária, também conhecida como Primary Key, cuja finalidade é assegurar a integridade dos dados da tabela.

A chave primária pode ser gerada no momento da criação ou da alteração 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 não 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.

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 35 de 41

Page 36: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

O Database Engine é o responsável por assegurar a exclusividade dos dados quando usamos a constraint Primary Key. Para tanto, ele cria um índice único para as colunas relacionadas à chave primária, o qual possibilita acessar os dados de forma rápida nas situações em que são realizadas consultas por meio dessas chaves.

Há situações em que a constraint Primary Key é definida em várias colunas. Quando isso ocorre, é possível que haja valores duplicados em uma coluna, porém, a combinação 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.

Faça 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, além de ambas estarem com Telefone e CPF/CNPJ com valor nulo.

Com esta situação, caso desejamos alterar o tipo de venda de apenas um registro, de Á VISTA para CHEQUE, por exemplo, será preciso identificá-los individualmente. Uma das soluções para este caso é acrescentar na tabela uma coluna cujos valores são únicos para cada venda. Neste caso, precisamos acrescentar uma coluna CodVenda, que será única para cada registro. Para incluir esta coluna, execute a seguinte instrução:

Na instrução acima, inseri a coluna CODVENDA, que é IDENTITY, ou seja, ela é auto-incremento, sendo contada de 1 em 1 (definido pelos parâmetros passados entre os parênteses) 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.

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 36 de 41

Page 37: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

Com a inclusão de uma coluna referente a código da venda, é possível identificar cada funcionário individualmente e, dessa forma, aplicar as alterações necessárias, sabendo que estamos tratando da venda certa.

A chave primária deve fazer parte da integridade referencial que se estabelece entre duas tabelas relacionadas. Mais sobre isso logo abaixo.

Chaves Primárias Secundárias ou Chaves Únicas – Além das constraints Primary Key, também podemos utilizar constraints Unique, as quais asseguram que dados duplicados não sejam inseridos em colunas que não fazem parte das chaves primárias. A Unique é uma constraint que também é capaz de assegurar a exclusividade dos dados. Em uma tabela, várias colunas podem ser definidas com constraints Unique.

As colunas nas quais são definidas constraints Unique permitem a inclusão 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 primária usada na coluna CODVENDA não 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 primária na coluna CODVENDA, essa inserção de uma mesma venda mais do que uma vez não seria evitada. Ao mesmo tempo, não seria viável exigir que os usuários consultassem a tabela inteira antes de inserir nela alguma informação (imagine uma tabela complexa, com milhares de registros).

Para resolver este problema, podemos inserir uma coluna RGCLIENTE como mostra a instrução a seguir:

Tendo em vista que não há duas pessoas com o mesmo RG, poderíamos colocar a chave primária nesta coluna a fim de evitar a inclusão de uma mesma venda duas ou mais vezes na tabela. Como já temos a chave primária na coluna CODVENDA e a mesma não pode se repetir devemos usar as chaves primárias secundárias, também chamadas de chaves únicas.

Desta forma, podemos colocar a chave primária 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.

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 37 de 41

Page 38: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

Chaves Estrangeiras – Colunas que representam chaves estrangeiras são utilizadas com a finalidade de estabelecer um vínculo entre os dados de tabelas distintas. A criação deste tipo de chave requer a utilização 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 primária, seja referenciada pela coluna que se encontra na segunda tabela. Assim, a coluna da segunda tabela torna-se a chave estrangeira.

Vale destacar que não é necessário que uma constraint Foreign Key em uma tabela esteja vinculada apenas a uma constraint Primary Key em outra tabela. Além disso, embora a Foreign Key possa conter valores nulos, é possível que, nesta situação, a verificação dos valores que formam esta constraint não ocorra.

Podemos assegurar que a verificação dos valores de Foreign Key ocorra por meio da especificação 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 de Produtos, 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, faça a seguinte instrução pra criarmos uma coluna que será a chave primária desta tabela, já que a mesma não contém chaves primárias:

Agora na tabela Vendas, iremos criar a chave estrangeira que irá referenciar a chave primária criada anteriormente na tabela Produtos. Para isso, use a seguinte instrução:

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 parênteses e usando a cláusula REFERENCES, apontando a que tabela será feita o relacionamento dessa chave, que no caso é a PRODUTOS. Os parênteses finais são para passar a chave primária 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 Validação – Além de evitar que os usuários insiram valores inexistentes na tabela, as regras de validação dos dados evitam situações como a ilustrada a seguir:

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 38 de 41

Page 39: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

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 errôneo e que pode causar problemas dependendo da complexidade e das regras de negócios envolvidas em suas tabelas.

Para resolver este (e muitos outros que podem acontecer) problema, devemos utilizar as regras de validação nas colunas a fim de evitar a inclusão de valores inadequados. Neste caso, a regra de validação é não permitir valores negativos nas colunas QTDEPRODUTO e VALORPRODUTO. Para isso, devemos criar a constraint CHECK, da seguinte forma:

Reparem que usei WITH NOCHECK. Isto indica que a constraint que adicionei não 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 colunas QTDEPRODUTO e VALORPRODUTO para valores negativos, como a instrução 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’.

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 39 de 41

Page 40: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

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).

Observação importante: a constraint FOREIGN KEY também permite controlar os valores inseridos nas colunas, porém ela baseia-se em uma lista de valores válidos obtidos a partir de uma tabela. A constraint CHECK, por sua vez, utiliza uma expressão lógica 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 inclusão de valores negativos, os dados estarão íntegros e consistentes.

Valor Padrão – O valor padrão é outra regra que pode ser aplicada às colunas de uma tabela. Quando um valor padrão é estabelecido para uma coluna, o sistema assume que ele deve ser utilizado nas situações em que o usuário deixa de inserir o valor desejado. Como nem sempre é recomendável trabalhar com colunas que aceitem valores nulos, a recomendação é que usemos um valor padrão para a coluna por meio da constraint DEFAULT.

Para compreendermos melhor, voltemos à tabela VENDAS. Vamos definir que o tipo da venda, por padrão, terá o valor Á VISTA (lembrando que esse é um exemplo fictício).

Para inserirmos esta constraint a coluna TIPOVENDA, faça a seguinte instrução:

Lembre-se de colocar o FOR para indicar para qual coluna a constraint será aplicada.

Assim, se não especificarmos o tipo da venda, por default, ela será Á VISTA.

Regras de Constraints – Cada tipo de constraint possui suas próprias regras. Veja na tabela a seguir quais são elas:

Tipos de constraints DescriçãoConstraint Primary Key(Chave Primária) Uma coluna que é definida como

chave primária não pode aceitar valores nulos. Em cada tabela, pode haver somente uma constraint de chave primária.

Constraint Foreign Key(Chave Estrangeira) Várias 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 primária em outra tabela. As colunas definidas como chave estrangeira podem aceitar valores

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 40 de 41

Page 41: Apostila de sql server 2008

Sql Server 2008 Curso Básico Marcos Antônio de Souza

nulos, e os datatypes das colunas relacionadas devem ser iguais (int com int, por exemplo).

Constraint Unique(Chave Única) Várias 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 são determinadas para elas.

Constraint Default Várias 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.

Não percam a próxima parte de nosso mini-curso. Iremos ver os conceitos do MER e do DER, os tipos e regras de relacionamentos. Aguardem!

Útil Consultoria e Tecnologia (31) 9149-8304 27/11/2013 Página 41 de 41