sql 2012 - modulo i

Upload: hugo-verissimo

Post on 14-Jan-2016

61 views

Category:

Documents


3 download

DESCRIPTION

Apostillha de curso de introdução ao SQL 2012

TRANSCRIPT

  • COD.: TE 1586/1_WEB

    SQL - Mdulo I

  • SQL - Mdulo I

  • Crditos

    SQL - Mdulo I

    Copyright TechnoEdition Editora Ltda.

    Todos os direitos autorais reservados. Este manual no pode ser copiado, fotocopiado, reproduzido, traduzido ou convertido em qualquer forma eletrnica, ou legvel por qualquer meio, em parte ou no todo, sem a aprovao prvia, por escrito, da TechnoEdition Editora Ltda., estando o contrafator sujeito a responder por crime de Violao de Direito Autoral, conforme o art.184 do Cdigo Penal Brasileiro, alm de responder por Perdas e Danos. Todos os logotipos e marcas

    utilizados neste material pertencem s suas respectivas empresas.

    As marcas registradas e os nomes comerciais citados nesta obra, mesmo que no sejam assim identificados, pertencem aos seus respectivos proprietrios nos termos das leis, convenes e diretrizes nacionais e internacionais.

    Coordenao GeralMarcia M. Rosa

    Coordenao EditorialHenrique Thomaz Bruscagin

    Superviso EditorialSimone Rocha Arajo Pereira

    AtualizaoCarlos Magno Pratico de Souza

    DiagramaoIv Lucino Camargo

    Equipe de ApoioCarolina A. MessiasGuilherme Yuji Kinoshita

    Este material constitui uma nova obra e uma derivao da seguinte obra original, produzida por TechnoEdition Editora Ltda., em Abr/2009:SQL Server 2008 Mdulo IAutoria: Alexandre Hideki Chicaoka, Athos Morais Valverde Junior, Carla Banci Cole, Carlos Magno Pratico de Souza, Cristiana Hoffmann Pavan e Henrique Thomaz Bruscagin.

    Edio n 2 | cd.: 1586/1_WEBOutubro/ 2013

  • Sumrio

    Informaes sobre o treinamento ....................................................................................... 9

    Captulo 1 Introduo ao SQL Server 2012 .................................................................. 111.1. Banco de dados relacional .....................................................................121.2. As linguagens SQL e T-SQL ....................................................................141.3. Arquitetura cliente / servidor ...............................................................151.4. SQL Server ............................................................................................161.4.1. Componentes .......................................................................................161.4.2. Ferramentas de gerenciamento .............................................................171.5. SQL Server Management Studio (SSMS) .................................................181.5.1. Inicializando o SSMS ..............................................................................191.5.2. Interface ...............................................................................................201.5.3. Executando um comando .....................................................................241.5.4. Salvando scripts ....................................................................................26Pontos principais ................................................................................................27Teste seus conhecimentos .................................................................................................... 29

    Captulo 2 Criando um banco de dados ........................................................................ 332.1. Introduo ............................................................................................342.2. CREATE DATABASE ................................................................................342.3. CREATE TABLE ......................................................................................352.4. Tipos de dados .....................................................................................372.4.1. Numricos exatos .................................................................................372.4.2. Numricos aproximados .......................................................................392.4.3. Data e hora ...........................................................................................402.4.4. Strings de caracteres ANSI .....................................................................412.4.5. Strings de caracteres Unicode ...............................................................422.4.6. Strings binrias ....................................................................................432.4.7. Outros tipos de dados ..........................................................................442.5. Chave primria ......................................................................................442.6. Campo de autonumerao (IDENTITY) ...................................................452.7. Inserindo dados ....................................................................................452.7.1. INSERT posicional .................................................................................472.7.2. INSERT declarativo ................................................................................482.8. Constantes ............................................................................................482.9. Normalizao de dados .........................................................................522.9.1. Regras de normalizao ........................................................................53Pontos principais ................................................................................................60Teste seus conhecimentos .................................................................................................... 61Mos obra! .................................................................................................................................. 69

  • 6SQL - Mdulo I

    Captulo 3 Consultando dados .......................................................................................... 733.1. Introduo ............................................................................................743.2. SELECT ..................................................................................................783.2.1. Consultando todas as colunas ...............................................................803.2.2. Consultando colunas especficas ...........................................................803.2.3. Redefinindo os identificadores de coluna com uso de alias ...................823.3. Ordenando dados .................................................................................843.3.1. Retornando linhas na ordem ascendente ...............................................843.3.2. Retornando linhas na ordem descendente .............................................843.3.3. Ordenando por nome, alias ou posio .................................................853.3.4. ORDER BY com TOP ...............................................................................883.3.5. ORDER BY com TOP WITH TIES ..............................................................893.4. Filtrando consultas................................................................................913.5. Operadores relacionais .........................................................................913.6. Operadores lgicos ...............................................................................933.7. Consultando intervalos com BETWEEN ...................................................953.8. Consultando com base em strings de caractere .....................................963.9. Consultando valores pertencentes ou no a uma lista de elementos .................................................................................993.10. Lidando com valores nulos ....................................................................1003.11. Substituindo valores nulos ....................................................................1023.11.1. ISNULL ..................................................................................................1023.11.2. COALESCE .............................................................................................1033.12. Manipulando campos do tipo datetime ..................................................1033.13. Alterando a configurao de idioma a partir do SSMS ............................114Pontos principais ................................................................................................118Mos obra ! ................................................................................................................................. 119

    Captulo 4 Atualizando e excluindo dados ................................................................... 1254.1. Introduo ............................................................................................1264.2. UPDATE ................................................................................................1264.2.1. Alterando dados de uma coluna ............................................................1284.2.2. Alterando dados de diversas colunas ....................................................1294.3. DELETE .................................................................................................1304.3.1. Excluindo todas as linhas de uma tabela ...............................................1314.4. Transaes ...........................................................................................1324.4.1. Transaes explcitas ............................................................................1334.4.2. Clusula OUTPUT ..................................................................................134Pontos principais ................................................................................................138Mos obra! .................................................................................................................................. 139

  • 7Sumrio

    Captulo 5 Constraints e ndices ....................................................................................... 1435.1. Constraints ...........................................................................................1445.1.1. Nulabilidade..........................................................................................1445.1.2. Modelo EntidadeRelacionamento (MER) ................................................1445.1.2.1. Relacionamento entre tabelas ...............................................................1445.1.3. Tipos de constraints .............................................................................1485.1.3.1. PRIMARY KEY (chave primria) ...............................................................1485.1.3.2. UNIQUE .................................................................................................1495.1.3.3. CHECK ..................................................................................................1505.1.3.4. DEFAULT ...............................................................................................1515.1.3.5. FOREIGN KEY (chave estrangeira) ...........................................................1525.1.4. Criando constraints ...............................................................................1535.1.4.1. Criando constraints com CREATE TABLE ................................................1535.1.4.2. Criando constraints com ALTER TABLE ..................................................1565.1.4.3. Criando constraints graficamente ..........................................................1575.2. ndices ..................................................................................................1665.2.1. Criando ndices .....................................................................................1685.2.2. Excluindo ndices ..................................................................................169Pontos principais ................................................................................................170Mos obra! .................................................................................................................................. 171

    Captulo 6 Associando tabelas .......................................................................................... 1816.1. Introduo ............................................................................................1826.2. INNER JOIN ............................................................................................1826.3. OUTER JOIN ...........................................................................................1896.4. CROSS JOIN ...........................................................................................193Pontos principais ................................................................................................194Mos obra! .................................................................................................................................. 195

    Captulo 7 Consultas com subqueries ........................................................................... 1997.1. Introduo ............................................................................................2007.2. Principais caractersticas das subqueries ...............................................2007.3. Subqueries introduzidas com IN e NOT IN .............................................2037.4. Subqueries introduzidas com sinal de igualdade (=) ..............................2057.5. Subqueries correlacionadas ...................................................................2057.5.1. Subqueries correlacionadas com EXISTS ................................................2067.6. Diferenas entre subqueries e associaes ............................................2077.7. Diferenas entre subqueries e tabelas temporrias ................................208Pontos principais ................................................................................................211Mos obra! .................................................................................................................................. 213

  • 8SQL - Mdulo I

    Captulo 8 Atualizando e excluindo dados em associaes e subqueries ............................................................................................2158.1. UPDATE com subqueries .......................................................................2168.2. DELETE com subqueries ........................................................................2168.3. UPDATE com JOIN .................................................................................2178.4. DELETE com JOIN ..................................................................................217Pontos principais ................................................................................................218Mos obra! .................................................................................................................................. 219

    Captulo 9 Agrupando dados ............................................................................................ 2239.1. Introduo ............................................................................................2249.2. Funes de agregao ...........................................................................2249.2.1. Tipos de funo de agregao ...............................................................2259.3. Funes de cadeia de caracteres ...........................................................2289.4. GROUP BY .............................................................................................2329.4.1. Utilizando ALL .......................................................................................2359.4.2. Utilizando HAVING ................................................................................2359.4.3. Utilizando WITH ROLLUP .......................................................................2369.4.4. Utilizando WITH CUBE ...........................................................................239Pontos principais ................................................................................................241Mos obra! .................................................................................................................................. 243

    Apndice 1 - Outros recursos Outros recursos ............................................................ 2471.1. Funo CASE .........................................................................................2481.2. UNION ..................................................................................................2491.2.1. Utilizando UNION ALL ...........................................................................250

    Apndice 2 - Resumo de objetos de um banco de dados do SQL Server 2012 ........................................................................................ 2512.1. Objetos de banco de dados ...................................................................2522.1.1. Tabela ...................................................................................................2522.1.2. ndice ....................................................................................................2522.1.3. Constraint .............................................................................................2522.1.4. View......................................................................................................2532.1.5. Procedure .............................................................................................2542.1.6. Function ...............................................................................................2552.1.7. Trigger .................................................................................................258

  • Informaes sobre o treinamento

    9

    Para que os alunos possam obter um bom aproveitamento do curso SQL Mdulo I, imprescindvel que eles tenham participado dos nossos treinamentos de Ambiente Windows e Introduo Lgica de Programao, ou possuam conhecimentos equivalentes.

  • 1 9 Banco de dados relacional; 9 As linguagens SQL e T-SQL; 9 Arquitetura Cliente / Servidor; 9 SQL Server; 9 Componentes; 9 Ferramentas de gerenciamento; 9 SQL Server Management Studio.

    Introduo ao SQL Server 2012

  • 12

    SQL - Mdulo I

    1.1. Banco de dados relacionalUm banco de dados uma forma organizada de armazenar informaes de modo a facilitar sua insero, alterao, excluso e recuperao.

    Um banco de dados relacional uma arquitetura na qual os dados so armazenados em tabelas retangulares, semelhantes a uma planilha. Na maioria das vezes estas tabelas possuem uma informao chave que as relaciona.

    Observe as tabelas a seguir:

    TABELA EMPREGADOS

    TABELA CARGOS

  • 13

    Introduo ao SQL Server 2012 1 TABELA DEPARTAMENTOS

    Podemos concluir que no seria lgico termos dois empregados ou dois departamentos ou dois cargos com o mesmo cdigo. Isso porque cada coluna CDIGO uma informao-chave, que identifica de forma nica cada linha de uma tabela. Este tipo de coluna chamada de CHAVE PRIMRIA e, embora no seja obrigatria, criar uma tabela sem esta informao poder causar problemas futuros.

    Observe que a tabela EMPREGADOS no armazena os nomes de cargo e departamento, mas sim seus cdigos. Isso economiza espao e evita redundncia. Para saber em qual departamento trabalha um empregado, basta verificar o COD_DEPTO e busc-lo na tabela DEPARTAMENTOS. Uma coluna de uma tabela que est relacionada chave primria de outra tabela chamada de CHAVE ESTRANGEIRA.

    Observe o seguinte diagrama relacional:

    DIAGRAMA RELACIONAL

  • 14

    SQL - Mdulo I

    1.2. As linguagens SQL e T-SQLToda a manipulao de um banco de dados feita atravs de uma linguagem especfica, com uma exigncia sinttica rgida, chamada SQL (Structure Query Language). Os fundamentos desta linguagem esto baseados no conceito de banco de dados relacional.

    Esta linguagem foi desenvolvida pela IBM no incio da dcada de 70 e, posteriormente, foi adotada como linguagem padro pela ANSI (American National Standard Institute) e pela ISO (International Organization for Standardization), em 1986 e 1987, respectivamente.

    A T-SQL (Transact-SQL) uma implementao da Microsoft para a SQL padro ANSI. Ela cria opes adicionais para os comandos e tambm cria novos comandos que permitem o recurso de programao, como os de controle de fluxo, variveis de memria etc.

    Veja um exemplo de comando SQL:

    Alm da T-SQL, h outras implementaes da SQL, como Oracle PL/SQL (Procedural Language/SQL) e IBMs SQL Procedural Language.

    Resultado da execuo do comando SELECT.

  • 15

    Introduo ao SQL Server 2012 11.3. Arquitetura cliente / servidor A imagem a seguir ilustra a arquitetura cliente / servidor:

    SISTEMA GERENCIADOR DE BANCO DE DADOS (S.G.D.B.)

    APLICAO CLIENTE

    Cria um comando SQL (texto) o envia ao S.G.B.D. e recebe o

    retorno da instruo.

    BANCO DE DADOS

    a

    a

    A

    B

    b

    Em que:

    A - Mquina servidora

    a - Software servidor de banco de dados. ele que gerencia todo o acesso ao banco de dados. Ele recebe os comandos SQL, verifica sua sintaxe e os executa, enviando o retorno para a aplicao que enviou o comando;

    b - Banco de dados, incluindo as tabelas que sero manipuladas.

    B - Mquina cliente

    a - Aplicao contendo a interface visual que envia os comandos SQL ao servidor.

  • 16

    SQL - Mdulo I

    Essa arquitetura funciona da seguinte forma:

    Usurios acessam o servidor atravs de um aplicativo instalado no prprio servidor ou de outro computador;

    O computador cliente executa as tarefas do aplicativo, ou seja, fornece a interface do usurio (tela, processamento de entrada e sada) e manda uma solicitao ao servidor;

    O servidor de banco de dados processa a solicitao, que pode ser uma consulta, alterao, excluso, incluso etc.

    1.4. SQL ServerO SQL Server uma plataforma de banco de dados utilizada para armazenar dados e process-los, tanto em um formato relacional quanto em documentos XML. Tambm utilizada em aplicaes de comrcio eletrnico e atua como uma plataforma inteligente de negcios para integrao e anlise de dados, bem como de solues.

    Para essas tarefas, o SQL Server faz uso da linguagem T-SQL para gerenciar bancos de dados relacionais, que contm, alm da SQL, comandos de linguagem procedural.

    1.4.1. Componentes

    O SQL Server oferece diversos componentes opcionais e ferramentas relacionadas que auxiliam e facilitam na manipulao de seus sistemas. Por padro, nenhum dos componentes ser instalado.

    A seguir, descreveremos as funcionalidades oferecidas pelos principais componentes do SQL Server:

    SQL Server Database Engine: o principal componente do MS-SQL. Recebe as instrues SQL, as executa e devolve o resultado para a aplicao solicitante. Funciona como um servio no Windows e, normalmente, iniciado juntamente com a inicializao do sistema operacional;

  • 17

    Introduo ao SQL Server 2012 1 Analysis Services: Usado para consultas avanadas, que envolvem muitas

    tabelas simultaneamente, e para gerao de estruturas OLAP (On-Line Analytical Processing);

    Reporting Services:Ferramenta para gerao de relatrios;

    Integration Services:Facilita o processo de transferncia de dados entre bancos de dados.

    1.4.2. Ferramentas de gerenciamento

    A seguir, descreveremos as funcionalidades oferecidas pelas ferramentas de gerenciamento disponveis no SQL Server e que trabalham associadas aos componentes descritos anteriormente:

    SQL Server Management Studio (SSMS)

    um aplicativo usado para gerenciar bancos de dados, permite criar, alterar e excluir objetos no banco de dados:

  • 18

    SQL - Mdulo I

    SQL Server Configuration Manager

    Permite visualizar, alterar e configurar os servios dos componentes do SQL Server:

    Microsoft SQL Server Profiler

    Essa ferramenta permite capturar e salvar dados de cada evento em um arquivo ou tabela para anlise posterior.

    Database Engine Tuning Advisor

    Analisa o desempenho das operaes e sugere opes para sua melhora.

    SQL Server Data Tools

    Possui uma interface que integra os componentes Business Intelligence, Analysis Services, Reporting Services e Integration Services.

    1.5. SQL Server Management Studio (SSMS) Esta a principal ferramenta para gerenciamento de bancos de dados, por isso, fundamental conhecer o seu funcionamento. Os prximos tpicos apresentam como inicializar o SSMS, sua interface, como executar comandos e como salvar scripts.

  • 19

    Introduo ao SQL Server 2012 11.5.1. Inicializando o SSMS

    Para abrir o SQL Server Management Studio, siga os passos adiante:

    1. Clique no boto Iniciar e selecione a opo Programas;

    2. Selecione Microsoft SQL Server 2012 e, em seguida, SQL Server Management Studio:

    3. Na tela Connect to Database Engine, escolha a opo Windows Authentication para o campo Authentication e, no campo Server Name, especifique o nome do servidor com o qual ser feita a conexo:

  • 20

    SQL - Mdulo I

    4. Clique no boto Connect. A interface do SQL Server Management Studio ser aberta, conforme mostra a imagem a seguir:

    1.5.2. Interface

    A interface do SSMS composta pelo Object Explorer e pelo Code Editor, explicados a seguir:

    Object Explorer

    uma janela que contm todos os elementos existentes dentro do seu servidor MS-SQL Server no formato de rvore:

  • 21

    Introduo ao SQL Server 2012 1Observe que a pasta Databases mostra todos os bancos de dados existentes no servidor. No caso da imagem a seguir, PEDIDOS um banco de dados:

    Expandindo o item PEDIDOS e depois o item Tables, veremos os nomes das tabelas existentes no banco de dados:

    Tabelas existentes no banco de dados

    PEDIDOS

  • 22

    SQL - Mdulo I

    Expandindo uma das tabelas, veremos caractersticas da sua estrutura, como as suas colunas:

    Campos (colunas) da tabela

  • 23

    Introduo ao SQL Server 2012 1

    Code Editor

    O Code Editor (Editor de cdigo) do SQL Server Management Studio permite escrever comandos T-SQL, MDX, DMX, XML/A e XML. Clicando no boto New Query (Nova Consulta), ser aberta uma janela vazia para edio dos comandos. Cada vez que clicarmos em New Query, uma nova aba vazia ser criada:

    Cada uma dessas abas representa uma conexo com o banco de dados e recebe um nmero de sesso. Cada conexo tem um nmero de sesso nico, mesmo que tenha sido aberta pelo mesmo usurio com o mesmo login e senha. Quando outra aplicao criada em outra linguagem, como Delphi, VB, C#, abrir uma conexo, ela tambm receber um nmero nico de sesso.

    Nmero de sesso.

  • 24

    SQL - Mdulo I

    1.5.3. Executando um comando

    Para executar um comando a partir do SQL Server Management Studio, adote o seguinte procedimento:

    1. Escreva o comando desejado no Code Editor. Enquanto um comando digitado no Code Editor, o SQL Server oferece um recurso denominado IntelliSense, que destaca erros de sintaxe e digitao, e fornece ajuda para a utilizao de parmetros no cdigo. Ele est ativado por padro, mas pode ser desativado. Para forar a exibio do IntelliSense, utilize CTRL + Barra de espao:

    2. Selecione o comando escrito. A seleo necessria apenas quando comandos especficos devem ser executados, dentre vrios;

  • 25

    Introduo ao SQL Server 2012 1

    3. Na barra de ferramentas do Code Editor, clique sobre o boto Execute ou pressione a tecla F5 (ou CTRL + E) para que o comando seja executado. O resultado do comando ser exibido na parte inferior da interface, conforme a imagem a seguir:

    Com relao ao procedimento anterior, importante considerar as seguintes informaes:

    possvel ocultar o resultado do comando por meio do atalho CTRL + R;

    master um banco de dados de sistema, j vem instalado no MS-SQL Server;

    Se mandar executar o comando e nada foi selecionado, todos os comandos escritos no texto sero executados e, neste caso, eles precisam estar organizados em uma sequencia lgica perfeita, seno ocorrero erros;

    Quando salvamos o arquivo contido no editor, ele receber a extenso sql, por padro. um arquivo texto e tambm conhecido como SCRIPT SQL.

  • 26

    SQL - Mdulo I

    1.5.4. Salvando scripts

    Para salvar os scripts utilizados, siga os passos adiante:

    1. Acesse o menu File e clique em Save As:

    2. Digite o nome escolhido para o script:

    3. Clique em Save.

  • 27

    Introduo ao SQL Server 2012 1Pontos principaisAtente para os tpicos a seguir. Eles devem ser estudados com muita ateno, pois representam os pontos mais importantes do captulo.

    Um banco de dados composto por tabelas;

    Cada tabela possui vrias colunas de dados (campos);

    Uma tabela precisa ter uma coluna que identifica de forma nica cada uma de suas linhas. Esta coluna chamada de CHAVE PRIMRIA;

    A coluna de uma tabela que se relaciona com a chave primria de outra tabela chamada de CHAVE ESTRANGEIRA.

  • 1Introduo ao SQL Server 2012 Teste seus conhecimentos

  • 30

    SQL - Mdulo I

    1. Qual das alternativas a seguir um item composto por linhas e colunas e responsvel pelo armazenamento de dados?

    2. Por qual outro nome conhecida uma coluna de uma tabela?

    a) Campo

    b) Chave primria

    c) Chave estrangeira

    d) Tabela

    e) Banco de dados

    a) Campo

    b) Chave primria

    c) Chave estrangeira

    d) Tabela

    e) Banco de dados

  • 31

    Introduo ao SQL Server 2012 13. Qual das alternativas a seguir descreve o que uma chave primria?

    4. Qual das alternativas a seguir descreve o que uma chave estrangeira?

    a) Uma linha de uma tabela.

    b) Um campo de uma tabela que se relaciona com a chave primria de outra tabela.

    c) Um campo que identifica de forma nica cada uma das linhas da tabela.

    d) A primeira linha de uma tabela.

    e) Uma senha de acesso ao banco de dados.

    a) Uma linha de uma tabela.

    b) Um campo de uma tabela que se relaciona com a chave primria de outra tabela.

    c) Um campo que identifica de forma nica cada uma das linhas da tabela.

    d) A primeira linha de uma tabela.

    e) Uma senha de acesso ao banco de dados.

  • 2 9 CREATE TABLES; 9 CREATE DATABASE;

    9 Tipos de dados; 9 Chave primria; 9 Campo de autonumerao; 9 Inserindo dados; 9 Constantes; 9 Normalizao de dados.

    Criando um banco de dados

  • 34

    SQL - Mdulo I

    2.1. IntroduoNeste captulo, veremos os recursos iniciais para criao de banco de dados: os comandos CREATE DATABASE e CREATE TABLE, os tipos de dados, as constantes e como fazer a normalizao dos dados.

    Quando formos mostrar as opes de sintaxe de um comando SQL, usaremos a seguinte nomenclatura:

    []: Termos entre colchetes so opcionais;

    : Termos entre os sinais menor e maior so nomes ou valores definidos por ns;

    {a1|a2|a3...}: Lista de alternativas mutuamente exclusivas.

    2.2. CREATE DATABASEDatabase um conjunto de arquivos que armazena todos os objetos do banco de dados.

    Para que um banco de dados seja criado no SQL Server, necessrio utilizar a instruo CREATE DATABASE, cuja sintaxe bsica a seguinte:

    CREATE DATABASE

    A seguir, veja um exemplo de criao de banco de dados:

    CREATE DATABASE SALA_DE_AULA;

    Esta instruo criar dois arquivos:

    SALA_DE_AULA.MDF: Armazena os dados;

    SALA_DE_AULA_LOG.LDF: Armazena os logs de transaes.

    Normalmente, estes arquivos esto localizados na pasta DATA dentro do diretrio de instalao do SQL-Server.

  • 35

    Criando um banco de dados 2Assim que so criados, os bancos de dados possuem apenas os objetos de sistema, como tabelas, procedures, views, necessrios para o gerenciamento das tabelas.

    Para facilitar o acesso a um banco de dados, devemos coloc-lo em uso, mas isso no obrigatrio. Para colocar um banco de dados em uso, utilize o seguinte cdigo:

    USE

    Veja um exemplo:

    USE SALA_DE_AULA

    Observe que na parte superior esquerda do SSMS existe um ComboBox que mostra o nome do banco de dados que est em uso.

    2.3. CREATE TABLEOs principais objetos de um banco de dados so suas tabelas, responsveis pelo armazenamento dos dados.

    A instruo CREATE TABLE deve ser utilizada para criar tabelas dentro de um banco de dados j existente. A sintaxe para uso dessa instruo a seguinte:

    CREATE TABLE ( [IDENTITY [(,)] [NOT NULL] [DEFAULT ][, [NOT NULL] [DEFAULT ]

    Em que:

    : Nome que vai identificar a tabela. A princpio, nomes devem comear por uma letra, seguida de letras, nmeros e sublinhados. Porm, se o nome for escrito entre colchetes, poder ser ter qualquer sequncia de caracteres;

  • 36

    SQL - Mdulo I

    : Nome que vai identificar cada coluna ou campo da tabela. criado utilizando a regra para os nomes das tabelas;

    : Tipo de dado que ser gravado na coluna (texto, nmero, data etc.);

    [IDENTITY [(,)]: Define um campo como autonumerao;

    [NOT NULL]: Define um campo que precisa ser preenchido, isto , no pode ficar vazio (NULL);

    [DEFAULT ]: Valor que ser gravado no campo, caso ele fique vazio (NULL).

    Com relao sintaxe de CREATE TABLE, importante considerar, ainda, as seguintes informaes:

    A sintaxe descrita foi simplificada, h outras clusulas na instruo CREATE TABLE;

    Uma tabela no pode conter mais de um campo IDENTITY;

    Uma tabela no pode conter mais de uma chave primria, mas pode ter uma chave primria composta por vrios campos.

    A seguir, veja um exemplo de como criar uma tabela em um banco de dados:

    CREATE TABLE ALUNOS( NUM_ALUNO INT, NOME VARCHAR(30), DATA_NASCIMENTO DATETIME, IDADE TINYINT, E_MAIL VARCHAR(50), FONE_RES CHAR(8), FONE_COM CHAR(8), FAX CHAR(8), CELULAR CHAR(9), PROFISSAO VARCHAR(40), EMPRESA VARCHAR(50) );

    A estrutura desta tabela no respeita as regras de normalizao de dados. Adiante, corrigiremos este problema.

  • 37

    Criando um banco de dados 2

    2.4. Tipos de dadosCada elemento, como uma coluna, varivel ou expresso, possui um tipo de dado. O tipo de dado especifica o tipo de valor que o objeto pode armazenar, como nmeros inteiros, texto, data e hora, etc. O SQL Server organiza os tipos de dados dividindo-os em categorias.

    A seguir, sero descritas as principais categorias de tipos de dados utilizados na linguagem Transact-SQL.

    2.4.1. Numricos exatos

    A tabela a seguir descreve alguns dos tipos de dados que fazem parte dessa categoria:

    Inteiros

    Nome Descrio

    bigint8 bytes

    Valor de nmero inteiro compreendido entre -2^63 (-9,223,372,036,854,775,808) e 2^63-1 (9,223,372,036,854,775,807).

    int4 bytes

    Valor de nmero inteiro compreendido entre -2^31 (-2,147,483,648) e 2^31 - 1 (2,147,483,647).

    smallint2 bytes

    Valor de nmero inteiro compreendido entre -2^15 (-32,768) e 2^15 - 1 (32,767).

    tinyint1 byte

    Valor de nmero inteiro de 0 a 255.

    Bit

    Nome Descrio

    bit1 byte

    Valor de nmero inteiro com o valor 1 ou o valor 0.

  • 38

    SQL - Mdulo I

    Numricos exatos

    Nome Descrio

    decimal(,)Valor numrico de preciso e escala fixas de -10^38 +1 at 10^38 1.

    numeric(,)Valor numrico de preciso e escala fixas de -10^38 +1 at 10^38 1.

    Nos numricos exatos, importante considerar as seguintes informaes:

    : Corresponde quantidade mxima de algarismos que o nmero pode ter;

    : Corresponde quantidade mxima de casas decimais que o nmero pode ter;

    A quantidade de casas decimais est contida na quantidade mxima de algarismos ;

    A quantidade de bytes ocupada varia dependendo de .

    Valores monetrios

    Nome Descrio

    money8 bytes

    Compreende valores monetrios ou de moeda corrente entre -922.337.203.685.477,5808 e 922.337.203.685.477,5807.

    smallmoney4 bytes

    Compreende valores monetrios ou de moeda corrente entre -214,748.3648 e +214,748.3647.

  • 39

    Criando um banco de dados 2

    2.4.2. Numricos aproximados

    A tabela a seguir descreve alguns dos tipos de dados que fazem parte dessa categoria:

    Nome Descrio

    float[(n)]Valor numrico de preciso flutuante entre -1.79E + 308 e -2.23E - 308, 0 e de 2.23E + 308 at 1.79E + 308.

    realo mesmo que

    float(24)

    Valor numrico de preciso flutuante entre -3.40E + 38 e -1.18E - 38, 0 e de 1.18E - 38 at 3.40E + 38.

    Em que:

    O valor de n determina a preciso do nmero. O padro (default) 53;

    Se n est entre 1 e 24, a preciso de 7 algarismos e ocupa 4 bytes de memria. Com n entre 25 e 53, a preciso de 15 algarismos e ocupa 8 bytes.

    Esses tipos so chamados de Numricos aproximados porque podem gerar impreciso na parte decimal.

  • 40

    SQL - Mdulo I

    2.4.3. Data e hora

    A tabela a seguir descreve alguns dos tipos de dados que fazem parte dessa categoria:

    Nome Descrio

    datetime8 bytes

    Data e hora compreendidas entre 1 de Janeiro de 1753 e 31 de Dezembro de 9999, com a exatido de 3.33 milissegundos.

    smalldatetime4 bytes

    Data e hora compreendidas entre 1 de Janeiro de 1900 e 6 de Junho de 2079, com a exatido de 1 minuto.

    datetime2[(p)]8 bytes

    Data e hora compreendidas entre 01/01/0001 e 31/12/9999 com preciso de at 100 nanossegundos, dependendo do valor de p, que representa a quantidade de algarismos na frao de segundo. Omitindo p, o valor default ser 7.

    date3 bytes

    Data compreendida entre 01/01/0001 e 31/12/9999, com preciso de 1 dia.

    time[(p)]5 bytes

    Hora no intervalo de 00:00:00.0000000 a 23.59.59.9999999. O parmetro p indica a quantidade de dgitos na frao de segundo.

    Datetimeoffset[(p)]

    Data e hora compreendidas entre 01/01/0001 e 31/12/9999 com preciso de at 100 nanossegundos e com indicao do fuso horrio, cujo intervalo pode variar de - 14:00 a + 14:00. O parmetro p indica a quantidade de dgitos na frao de segundo.

  • 41

    Criando um banco de dados 2

    2.4.4. Strings de caracteres ANSI

    chamada de string uma sequncia de caracteres. No padro ANSI, cada caractere armazenado em 1 byte, o que permite a codificao de at 256 caracteres.

    A tabela a seguir descreve alguns dos tipos de dados que fazem parte dessa categoria:

    Nome Descrio

    char()Comprimento fixo de no mximo 8.000 caracteres no padro ANSI. Cada caractere armazenado em 1 byte.

    varchar()Comprimento varivel de no mximo 8.000 caracteres no padro ANSI. Cada caractere armazenado em 1 byte.

    text ouvarchar(max)

    Comprimento varivel de no mximo 2^31 - 1 (2,147,483,647) caracteres no padro ANSI. Cada caractere armazenado em 1 byte.

    Em que:

    : Representa a quantidade mxima de caracteres que poderemos armazenar. Cada caractere ocupa 1 byte.

    recomendvel a utilizao do tipo varchar(max) em vez do tipo text. Este ltimo ser removido em verses futuras do SQL Server. No caso de aplicaes que j o utilizam, indicado realizar a substituio pelo tipo recomendado. Ao utilizarmos max para varchar, estamos ampliando sua capacidade de armazenamento para 2 GB, aproximadamente.

  • 42

    SQL - Mdulo I

    2.4.5. Strings de caracteres Unicode

    Em strings Unicode, cada caractere armazenado em 2 bytes, o que amplia a quantidade de caracteres possveis para mais de 65000.

    A tabela a seguir descreve alguns dos tipos de dados que fazem parte dessa categoria:

    Nome Descrio

    nchar() Comprimento fixo de no mximo 4.000 caracteres Unicode.

    nvarchar()Comprimento varivel de no mximo 4.000 caracteres Unicode.

    ntext ounvarchar(max)

    Comprimento varivel de no mximo 2^30 - 1 (1,073,741,823) caracteres Unicode.

    Em que:

    : Representa a quantidade mxima de caracteres que poderemos armazenar. Cada caractere ocupa 2 bytes. Essa quantidade de 2 bytes destinada a pases cuja quantidade de caracteres utilizados muito grande, como Japo e China.

    Tanto no padro ANSI quanto no UNICODE, existe uma tabela (ASCII) que codifica todos os caracteres. Esta tabela usada para converter o caractere no seu cdigo, quando gravamos, e para converter o cdigo no caractere quando lemos.

  • 43

    Criando um banco de dados 2

    2.4.6. Strings binrias

    No caso das strings binrias, no existe uma tabela para converter os caracteres, voc interpreta os bits de cada byte de acordo com uma regra sua.

    A tabela a seguir descreve alguns dos tipos de dados que fazem parte dessa categoria:

    Nome Descrio

    binary()Dado binrio com comprimento fixo de no mximo 8.000 bytes.

    varbinary()Dado binrio com comprimento varivel, de no mximo 8.000 bytes.

    image ou varbinary(max)

    Dado binrio com comprimento varivel de no mximo 2^31 - 1 (2,147,483,647) bytes.

    Os tipos image e varbinary(max) so muito usados para importar arquivos binrios para dentro do banco de dados. Imagens, sons ou qualquer outro tipo de documento podem ser gravados em um campo desses tipos. recomendvel a utilizao do tipo varbinary(max) em vez do tipo image. Este ltimo ser removido em verses futuras do SQL Server. No caso de aplicaes que j o utilizam, indicado realizar a substituio pelo tipo recomendado.

  • 44

    SQL - Mdulo I

    2.4.7. Outros tipos de dados

    Essa categoria inclui tipos de dados especiais, cuja utilizao especfica e restrita a certas situaes. A tabela adiante descreve alguns desses tipos:

    Nome Descrio

    tableServe para definir um dado tabular, composto de linhas e colunas, assim como uma tabela.

    cursor Serve para percorrer as linhas de um dado tabular.

    sql_variantUm tipo de dado que armazena valores de vrios tipos suportados pelo SQL Server, exceto os seguintes: text, ntext, timestamp e sql_variant.

    Timestamp ou RowVersion

    Nmero hexadecimal sequencial gerado automaticamente.

    uniqueidentifier

    Globally Unique Identifier (GUID), tambm conhecido como Identificador nico Global ou Identificador nico Universal. um nmero hexadecimal de 16 bytes semelhante a 64261228-50A9-467C-85C5-D73C51A914F1.

    2.5. Chave primriaUma chave primria identifica de forma nica cada linha de uma tabela. Veja um exemplo:

    DROP TABLE ALUNOS;

    CREATE TABLE ALUNOS( NUM_ALUNO INT PRIMARY KEY, NOME VARCHAR(30), DATA_NASCIMENTO DATETIME, IDADE TINYINT, E_MAIL VARCHAR(50), FONE_RES CHAR(8), FONE_COM CHAR(8), FAX CHAR(8), CELULAR CHAR(9),PROFISSAO VARCHAR(40),EMPRESA VARCHAR(50) );

  • 45

    Criando um banco de dados 22.6. Campo de autonumerao (IDENTITY)A coluna de identidade, ou campo de autonumerao, definida pela propriedade IDENTITY. Ao atribumos essa propriedade a uma coluna, o SQL Server cria nmeros em sequncia para linhas que forem posteriormente inseridas na tabela em que a coluna de identidade est localizada.

    importante saber que uma tabela pode ter apenas uma coluna do tipo identidade e que no possvel inserir ou alterar seu valor, que gerado automaticamente pelo SQL-Server.

    Veja um exemplo:

    DROP TABLE ALUNOS;

    CREATE TABLE ALUNOS( NUM_ALUNO INT IDENTITY PRIMARY KEY, NOME VARCHAR(30), DATA_NASCIMENTO DATETIME, IDADE TINYINT, E_MAIL VARCHAR(50), FONE_RES CHAR(8), FONE_COM CHAR(8), FAX CHAR(8), CELULAR CHAR(9),PROFISSAO VARCHAR(40),EMPRESA VARCHAR(50) );

    2.7. Inserindo dadosPara acrescentar novas linhas de dados em uma tabela, utilize o comando INSERT, que possui a seguinte sintaxe:

    INSERT [INTO] [ ( ) ]{ VALUES ( ) [, ()] [,...] | }

  • 46

    SQL - Mdulo I

    Em que:

    : uma lista de uma ou mais colunas que recebero dados. Os nomes das colunas devem ser separados por vrgula e a lista deve estar entre parnteses;

    VALUES (): Lista de valores que sero inseridos em cada uma das colunas especificadas em .

    Para inserir uma nica linha em uma tabela, o cdigo o seguinte:

    INSERT INTO ALUNOS(NOME, DATA_NASCIMENTO, IDADE, E_MAIL, FONE_RES, FONE_COM,FAX, CELULAR, PROFISSAO, EMPRESA )VALUES(CARLOS MAGNO, 1959.11.12, 53, [email protected], 23456789,23459876,, 998765432, ANALISTA DE SISTEMAS, IMPACTA TECNOLOGIA);

    -- Consultando os dados inseridos na tabelaSELECT * FROM ALUNOS;

    Podemos inserir vrias linhas em uma tabela com o uso de vrios comandos INSERT ou um nico:

    INSERT INTO ALUNOS(NOME, DATA_NASCIMENTO, IDADE, E_MAIL, FONE_RES, FONE_COM, FAX, CELULAR, PROFISSAO, EMPRESA)VALUES(Andr da Silva, 1980.1.2, 33, [email protected], 23456789,23459876,, 998765432, ANALISTA DE SISTEMAS, SOMA INFORMTICA), (Marcelo Soares, 1983.4.21, 30, [email protected], 23456789,23459876,, 998765432, INSTRUTOR, IMPACTA TECNOLOGIA);

    -- Consultando os dados da tabelaSELECT * FROM ALUNOS;

  • 47

    Criando um banco de dados 2Podemos tambm fazer INSERT de SELECT:

    CREATE TABLE ALUNOS2 ( NUM_ALUNO INT, NOME VARCHAR(30), DATA_NASCIMENTO DATETIME, IDADE TINYINT, E_MAIL VARCHAR(50), FONE_RES CHAR(8), FONE_COM CHAR(8), FAX CHAR(8), CELULAR CHAR(9),PROFISSAO VARCHAR(40),EMPRESA VARCHAR(50) );

    INSERT INTO ALUNOS2SELECT * FROM ALUNOS;

    No necessrio determinar os nomes das colunas na sintaxe do comando INSERT quando os valores forem inseridos na mesma ordem fsica das colunas no banco de dados. J para valores inseridos aleatoriamente, preciso especificar exatamente a ordem das colunas. Esses dois modos de utilizao do comando INSERT so denominados INSERT posicional e INSERT declarativo.

    2.7.1. INSERT posicional

    O comando INSERT classificado como posicional quando no especifica a lista de colunas que recebero os dados de VALUES. Neste caso, a lista de valores precisa conter todos os campos, exceto o IDENTITY, na ordem fsica em que foram criadas no comando CREATE TABLE. Veja o exemplo a seguir:

    INSERT INTO ALUNOSVALUES(MARIA LUIZA, 1997.10.29, 15, [email protected], 23456789,23459876,, 998765432, ESTUDANTE, COLGIO MONTE VIDEL); -- Consultando os dadosSELECT * FROM ALUNOS;

  • 48

    SQL - Mdulo I

    2.7.2. INSERT declarativo

    O INSERT classificado como declarativo quando especifica as colunas que recebero os dados da lista de valores. Veja o prximo exemplo:

    INSERT INTO ALUNOS(NOME, DATA_NASCIMENTO, IDADE, E_MAIL, FONE_RES, FONE_COM,FAX, CELULAR, PROFISSAO, EMPRESA )VALUES(PEDRO PAULO, 1994.2.5, 19, [email protected], 23456789,23459876,, 998765432, ESTUDANTE, COLGIO MONTE VIDEL);

    -- Consultando os dadosSELECT * FROM ALUNOS;

    Quando utilizamos a instruo INSERT dentro de aplicativos, stored procedures ou triggers, deve ser o INSERT declarativo, pois, se houver alterao na estrutura da tabela (incluso de novos campos), ele continuar funcionando, enquanto que o INSERT posicional provocar erro.

    2.8. ConstantesAs constantes, ou literais, so informaes fixas, como o nome sugere, que no se alteram no decorrer do tempo. Por exemplo, o seu nome escrito no papel uma constante e a sua data de nascimento outra constante. Existem regras para escrever constantes no SQL:

    Constantes de cadeia de caracteres (CHAR e VARCHAR)

    So sequncias compostas por quaisquer caracteres existentes no teclado. Este tipo de constante deve ser escrita entre apstrofos:

    IMPACTA TECNOLOGIA, SQL-SERVER, XK-1808/2, CAIXA DAGUA

  • 49

    Criando um banco de dados 2

    Se o contedo do texto possuir o caractere apstrofo, ele deve ser colocado duas vezes, como mostrado em CAIXA DAGUA.

    Cadeias de caracteres Unicode

    Semelhante ao caso anterior, estas constantes devem ser precedidas pela letra maiscula N (identificador):

    NIMPACTA TECNOLOGIA, NSQL-SERVER, NXK-1808/2

    Constantes binrias

    So cadeias de nmeros hexadecimais e apresentam as seguintes caractersticas:

    No so includas entre aspas;

    Possuem o prefixo 0x.

    Veja um exemplo:

    0xff, 0x0f, 0x01a0

    Constantes datetime

    Utilizam valores de data includos em formatos especficos. Devem ser includos entre aspas simples:

    2009.1.15, 20080115, 01/15/2008, 22:30:10, 2009.1.15 22:30:10

    O formato da data pode variar dependendo de configuraes do SQL. Podemos tambm utilizar o comando SET DATEFORMAT para definir o formato durante uma seo de trabalho.

  • 50

    SQL - Mdulo I

    Constantes bit

    No includas entre aspas, as constantes bit so representadas por 0 ou 1. Uma constante desse tipo ser convertida em 1 caso um nmero maior do que 1 seja utilizado.

    0, 1

    Constantes float e real

    So constantes representadas por notao cientfica:

    2.53E4 2.53 x 104 2.53 x 10000 253004.5E-2 4.5 / 102 4.5 / 100 0.045

    Constantes integer

    So representadas por uma cadeia de nmeros sem pontos decimais e no includos entre aspas. As constantes integer no aceitam nmeros decimais, somente nmeros inteiros:

    15288172155

    Nunca utilize o separador de milhar.

  • 51

    Criando um banco de dados 2

    Constantes decimal

    So representadas por cadeias numricas com ponto decimal e no includas entre aspas:

    162.455.78

    O separador decimal sempre ser o ponto, independente de configuraes regionais do Windows.

    Constantes uniqueidentifier

    uma cadeia de caracteres que representa um GUID. Pode ser especificada como uma cadeia de binrios ou em um formato de caracteres, veja:

    0xff19966f868b11d0b42d00c04fc964ff 6F9619FF-8B86-D011-B42D-00C04FC964FF

    Constantes money

    So precedidas pelo caractere cifro ($). Este tipo de dado sempre reserva 4 posies para a parte decimal. Os algarismos alm da quarta casa decimal sero desprezados.

    $1543.56$12892.6534$56.275639

    No ltimo exemplo, ser armazenado apenas 56.2756.

  • 52

    SQL - Mdulo I

    2.9. Normalizao de dadosO processo de organizar dados e eliminar informaes redundantes de um banco de dados denominado normalizao.

    A normalizao envolve a tarefa de criar as tabelas e definir os seus relacionamentos. O relacionamento entre as tabelas criado de acordo com regras que visam proteo dos dados e eliminao de dados repetidos. Essas regras so denominadas normal forms ou formas normais.

    A normalizao apresenta grandes vantagens:

    Elimina dados repetidos, o que torna o banco mais compacto;

    Garante o armazenamento dos dados de forma lgica;

    Maior velocidade dos processos de classificar e indexar, j que as tabelas possuem uma quantidade menor de colunas;

    Permite o agrupamento de ndices conforme a quantidade de tabelas aumenta. Alm disso, reduz o nmero de ndices por tabela. Dessa forma, permite melhor performance de atualizao do banco de dados.

    Entretanto, o processo de normalizao pode aumentar a quantidade de tabelas e, consequentemente, a complexidade das associaes exigidas entre elas para que os dados desejados sejam obtidos. Isso pode acabar prejudicando o desempenho da aplicao.

    Outro aspecto negativo da normalizao que as tabelas, em vez de dados reais, podem conter cdigos. Nesse caso, ser necessrio recorrer tabela de pesquisa para obter os valores necessrios. A normalizao tambm pode dificultar a consulta ao modelo de dados.

  • 53

    Criando um banco de dados 2

    2.9.1. Regras de normalizao

    A normalizao inclui 3 regras principais: first normal form (1NF), second normal form (2NF) e third normal form (3NF).

    Consideramos que um o banco de dados est no first normal form quando a primeira regra (1NF) cumprida. Se as trs regras forem cumpridas, o banco de dados estar no third normal form.

    possvel atingir outros nveis de normalizao (4NF e 5NF), entretanto, o 3NF considerado o nvel mais alto requerido pela maior parte das aplicaes.

    Veja quais as regras que devem ser cumpridas para atingir cada nvel de normalizao:

    First Normal Form (1NF)

    Para que um banco de dados esteja nesse nvel de normalizao, cada coluna deve conter um nico valor e cada linha deve abranger as mesmas colunas. A fim de atendermos a esses aspectos, os conjuntos que se repetem nas tabelas individuais devem ser eliminados. Alm disso, devemos criar uma tabela separada para cada conjunto de dados relacionados e identificar cada um deles com uma chave primria.

  • 54

    SQL - Mdulo I

    Uma tabela sempre ter esse formato:

    CAMPO 1 CAMPO 2 CAMPO 3 CAMPO 4

    E nunca poder ter esse formato:

    CAMPO 1 CAMPO 2 CAMPO 3 CAMPO 4

    Considere os seguintes exemplos:

    Uma pessoa tem apenas um nome, um RG, um CPF, mas pode ter estudado em N escolas diferentes e pode ter feito N cursos extracurriculares;

    Um treinamento da Impacta tem um nico nome, tem uma nica carga horria, mas pode haver N instrutores que ministram este treinamento;

    Um aluno da Impacta tem apenas um nome, um RG, um CPF, mas pode ter N telefones.

    Percebemos aqui que a tabela ALUNOS, que criamos anteriormente, precisa ser reestruturada para que respeite a primeira forma normal.

  • 55

    Criando um banco de dados 2Sempre que uma linha de uma tabela tiver N informaes relacionadas a ela, precisaremos criar outra tabela para armazenar essas N informaes:

    DROP TABLE ALUNOS;

    CREATE TABLE ALUNOS( NUM_ALUNO INT IDENTITY PRIMARY KEY, NOME VARCHAR(30), DATA_NASCIMENTO DATETIME, IDADE TINYINT, E_MAIL VARCHAR(50), PROFISSAO VARCHAR(40), EMPRESA VARCHAR(50) );

    CREATE TABLE FONES( NUM_ALUNO INT, FONE CHAR(9), TIPO VARCHAR(15), PRIMARY KEY (NUM_ALUNO, FONE) ) ;

    No caso da tabela FONES, a chave primria formada por dois campos, NUM_ALUNO e FONE. Isso impedir que se cadastre o mesmo telefone mais de uma vez para o mesmo aluno:

    INSERT INTO ALUNOS(NOME, DATA_NASCIMENTO, IDADE, E_MAIL, PROFISSAO, EMPRESA )VALUES(CARLOS MAGNO, 1959.11.12, 53, [email protected], ANALISTA DE SISTEMAS, IMPACTA TECNOLOGIA),(Andr da Silva, 1980.1.2, 33, [email protected], ANALISTA DE SISTEMAS, SOMA INFORMTICA),(Marcelo Soares, 1983.4.21, 30, [email protected], INSTRUTOR, IMPACTA TECNOLOGIA),(PEDRO PAULO, 1994.2.5, 19, [email protected], ESTUDANTE, COLGIO MONTE VIDEL),(MARIA LUIZA, 1997.10.29, 15, [email protected], ESTUDANTE, COLGIO MONTE VIDEL) ;

  • 56

    SQL - Mdulo I

    INSERT INTO FONES( NUM_ALUNO, FONE, TIPO )VALUES( 1,28739988,RESIDENDIAL),( 1,68336989,COMERCIAL),( 1,991259976,CELULAR),( 2,992736266,CELULAR),( 3,52417262,COMERCIAL),( 3,998271717,CELULAR),( 5,77162525,RESIDENDIAL);

    Second Normal Form (2NF)

    No segundo nvel de normalizao, devemos criar tabelas separadas para conjuntos de valores que se aplicam a vrios registros, ou seja, que se repetem.

    Com a finalidade de criar relacionamentos, devemos relacionar essas novas tabelas com uma chave estrangeira e identificar cada grupo de dados relacionados com uma chave primria.

    Em outras palavras, a segunda forma normal pede que evitemos campos descritivos (alfanumricos) que se repitam vrias vezes na mesma tabela. Alm de ocupar mais espao, a mesma informao pode ser escrita de formas diferentes. Veja o caso da tabela ALUNOS, em que existe um campo chamado PROFISSAO (descritivo) onde possvel grafarmos a mesma profisso de vrias formas diferentes:

    ANALISTA DE SISTEMASANALISTA SISTEMASAN. SISTEMASAN. DE SISTEMASANALISTA DE SIST.

  • 57

    Criando um banco de dados 2

    Isso torna impossvel que se gere um relatrio filtrando os ALUNOS por PROFISSAO. A soluo, neste caso, criar uma tabela de profisses em que cada profisso tenha um cdigo. Para isso, na tabela ALUNOS, substituiremos o campo PROFISSAO por COD_PROFISSAO:

    DROP TABLE ALUNOS;

    CREATE TABLE ALUNOS( NUM_ALUNO INT IDENTITY PRIMARY KEY, NOME VARCHAR(30), DATA_NASCIMENTO DATETIME, IDADE TINYINT, E_MAIL VARCHAR(50), COD_PROFISSAO INT, COD_EMPRESA INT );

    CREATE TABLE PROFISSOES( COD_PROFISSAO INT IDENTITY PRIMARY KEY, PROFISSAO VARCHAR(30) ); INSERT INTO PROFISSOES( PROFISSAO )VALUES (ANALISTA DE SISTEMAS), (INSTRUTOR), (ESTUDANTE);

    SELECT * FROM PROFISSOES; CREATE TABLE EMPRESAS( COD_EMPRESA INT IDENTITY PRIMARY KEY, EMPRESA VARCHAR(50) );

  • 58

    SQL - Mdulo I

    INSERT INTO EMPRESAS( EMPRESA )VALUES (IMPACTA TECNOLOGIA),(SOMA INFORMTICA), (COLGIO MONTE VIDEL);

    SELECT * FROM EMPRESAS;

    INSERT INTO ALUNOS(NOME, DATA_NASCIMENTO, IDADE, E_MAIL, COD_PROFISSAO, COD_EMPRESA )VALUES(CARLOS MAGNO, 1959.11.12, 53, [email protected], 1, 1),(Andr da Silva, 1980.1.2, 33, [email protected], 1, 2),(Marcelo Soares, 1983.4.21, 30, [email protected], 2, 1),(PEDRO PAULO, 1994.2.5, 19, [email protected], 3, 3),(MARIA LUIZA, 1997.10.29, 15, [email protected], 3, 3);

    Third Normal Form (3NF)

    No terceiro nvel de normalizao, aps ter concludo todas as tarefas do 1NF e 2NF, devemos eliminar os campos que no dependem de chaves primrias.

    Cumpridas essas trs regras, atingimos o nvel de normalizao requerido pela maioria dos programas.

  • 59

    Criando um banco de dados 2

    Considere os seguintes exemplos:

    Em uma tabela de PRODUTOS, que tenha os campos PRECO_COMPRA e PRECO_VENDA, no devemos ter um campo LUCRO, pois ele no depende do cdigo do produto (chave primria), mas sim dos preos de compra e de venda. O lucro ser facilmente gerado atravs da expresso PRECO_VENDA PRECO_CUSTO;

    Na tabela ALUNOS, no devemos ter o campo IDADE, pois ela no depende do nmero do aluno (chave primria), mas sim do campo DATA_NASCIMENTO.

    -- Eliminar o campo IDADE da tabela ALUNOSALTER TABLE ALUNOS DROP COLUMN IDADE;-- Calcular a IDADE do ALUNOSELECT *, CAST((GETDATE() - DATA_NASCIMENTO) AS FLOAT)/365.25 AS IDADEFROM ALUNOS;

    Por fim, o banco de dados SALA_DE_AULA ficou com a seguinte estrutura:

  • 60

    SQL - Mdulo I

    Pontos principaisAtente para os tpicos a seguir. Eles devem ser estudados com muita ateno, pois representam os pontos mais importantes do captulo.

    Os objetos que fazem parte de um sistema so criados dentro de um objeto denominado database, ou seja, uma estrutura lgica formada por dois tipos de arquivo, um responsvel pelo armazenamento de dados e outro que armazena as transaes feitas. Para que um banco de dados seja criado no SQL Server, necessrio utilizar a instruo CREATE DATABASE;

    Os dados de um sistema so armazenados em objetos denominados tabelas (table). Cada uma das colunas de uma tabela refere-se a um atributo associado a uma determinada entidade. A instruo CREATE TABLE deve ser utilizada para criar tabelas dentro de bancos de dados j existentes;

    Cada elemento, como uma coluna, uma varivel ou uma expresso possui um tipo de dado. O tipo de dado especifica o tipo de valor que o objeto pode armazenar, como nmeros inteiros, texto, data e hora, etc.;

    Normalmente, as tabelas possuem uma coluna contendo valores capazes de identificar uma linha de forma exclusiva. Essa coluna recebe o nome de chave primria, cuja finalidade assegurar a integridade dos dados da tabela;

    Para acrescentar novas linhas de dados em uma tabela, utilizamos o comando INSERT;

    O processo de organizar dados e eliminar informaes redundantes de um banco de dados denominado normalizao. Envolve a tarefa de criar as tabelas, bem como definir relacionamentos. O relacionamento entre as tabelas criado de acordo com regras que visam proteo dos dados e eliminao de dados repetidos. Essas regras so denominadas normal forms, ou formas normais.

  • 2Criando um banco de dados Teste seus conhecimentos

  • 62

    SQL - Mdulo I

    1. Qual dos comandos a seguir cria um banco de dados chamado VENDAS?

    2. Qual das alternativas possui uma afirmao correta a respeito do seguinte cdigo?

    CREATE TABLE ALUNOS( COD_ALUNO INT IDENTITY PRIMARY KEY, NOME VARCHAR(40), DATA_NASCIMENTO DATETIME, IDADE TINYINT)

    a) CREATE TABLE VENDAS

    b) CREATE NEW DATA VENDAS

    c) CREATE VENDAS DATABASE

    d) CREATE DATABASE VENDAS

    e) NEW DATABASE VENDAS

    a) A coluna NOME armazenar sempre 40 caracteres, independente do nome inserido nela.

    b) A coluna DATA_NACIMENTO poder armazenar datas desde o ano 0001 at 9999.

    c) A coluna NOME armazenar no mximo 40 caracteres, ocupando apenas a quantidade de caracteres contida no nome inserido nela.

    d) A coluna IDADE poder armazenar nmeros inteiros no intervalo de -255 at +255.

    e) A coluna COD_ALUNO poder armazenar nmeros inteiros de -32000 at +32000.

  • 63

    Criando um banco de dados 2

    3. Qual das alternativas possui uma afirmao correta a respeito do seguinte cdigo?

    CREATE TABLE ALUNOS( COD_ALUNO INT IDENTITY PRIMARY KEY, NOME VARCHAR(40), DATA_NASCIMENTO DATETIME, IDADE TINYINT)

    a) A coluna COD_ALUNO ser numerada automaticamente pelo SQL-SERVER.

    b) A coluna DATA_NACIMENTO poder armazenar datas desde o ano 0001 at 9999.

    c) Ocorrer erro na definio da coluna COD_ALUNO porque no existe um tipo chamado INT, o correto INTEGER.

    d) A coluna IDADE poder armazenar nmeros inteiros no intervalo de -255 at +255.

    e) A coluna COD_ALUNO poder armazenar nmeros inteiros de -32000 at +32000.

  • 64

    SQL - Mdulo I

    4. Qual das alternativas possui uma afirmao correta a respeito do seguinte cdigo?

    CREATE TABLE ALUNOS( COD_ALUNO INT IDENTITY PRIMARY KEY, NOME VARCHAR(40), DATA_NASCIMENTO DATETIME, IDADE TINYINT)

    a) A coluna DATA_NACIMENTO poder armazenar datas desde o ano 0001 at 9999.

    b) De acordo com as regras de normalizao, a coluna IDADE no deveria fazer parte da estrutura da tabela, pois decorrente de um clculo envolvendo o campo DATA_NASCIMENTO.

    c) Ocorrer erro na definio da coluna COD_ALUNO porque no existe um tipo chamado INT, o correto INTEGER.

    d) A coluna IDADE poder armazenar nmeros inteiros no intervalo de -255 at +255.

    e) A coluna COD_ALUNO poder armazenar nmeros inteiros de -32000 at +32000.

  • 65

    Criando um banco de dados 2

    5. Qual dos comandos adiante insere uma linha com dados na tabela chamada ALUNOS, admitindo que a configurao de formato de data seja yyyy.mm.dd?

    CREATE TABLE ALUNOSCOD_ALUNO INT IDENTITY PRIMARY KEY, NOME VARCHAR(40), DATA_NASCIMENTO DATETIME, E_MAIL VARCHAR(100)

    a) INSERT INTO ALUNOS (COD_ALUNO, NOME, DATA_NASCIMENTO, E_MAIL) VALUES (1, MAGNO, 1959.11.12, [email protected])

    b) INSERT INTO ALUNOS (COD_ALUNO, NOME, DATA_NASCIMENTO, E_MAIL) VALUES (1, MAGNO, 1959.11.12, [email protected])

    c) INSERT INTO ALUNOS (NOME, DATA_NASCIMENTO, E_MAIL) VALUES (MAGNO, 1959.11.12, [email protected])

    d) INSERT INTO ALUNOS (NOME, DATA_NASCIMENTO, E_MAIL) VALUES (MAGNO, 1959.11.12, [email protected])

    e) INSERT INTO ALUNOS (NOME, DATA_NASCIMENTO, E_MAIL) VALUES (MAGNO, 1959.11.12, [email protected])

  • 66

    SQL - Mdulo I

    6. Qual tipo de campo mais adequado para armazenar a quantidade de pessoas que moram em uma casa?

    7. Qual tipo de campo mais adequado para armazenar o preo de um produto?

    a) CHAR(2)

    b) INT

    c) SMALLINT

    d) TINYINT

    e) NUMERIC(4,2)

    a) CHAR(8)

    b) INT

    c) NUMERIC(8)

    d) NUMERIC(2,10)

    e) NUMERIC(10,2)

  • 67

    Criando um banco de dados 2

    8. Qual tipo de campo mais adequado para armazenar o CEP (cdigo de endereamento postal)?

    a) CHAR(8)

    b) INT

    c) VARCHAR(8)

    d) NUMERIC(8)

    e) NUMERIC(9)

  • 2Criando um banco de dados Mos obra!

  • 70

    SQL - Mdulo I

    Laboratrio 1

    A Criando um banco de dados para administrar as vendas de uma empresa

    1. Crie um banco de dados chamado PEDIDOS_VENDA e coloque-o em uso;

    2. Nesse banco de dados, crie uma tabela chamada PRODUTOS com os seguintes campos:

    Cdigo do produtointeiro, autonumerao e chave primria.

    Nome do produto alfanumrico

    Cdigo da unid. de medida inteiro

    Cdigo da categoria inteiro

    Quantidade em estoque numrico

    Quantidade mnima numrico

    Preo de custo numrico

    Preo de venda numrico

    Caractersticas tcnicas texto longo

    Fotografia binrio longo

    3. Crie a tabela UNIDADES para armazenar unidades de medida:

    Cdigo da unidadeinteiro, autonumerao e chave primria.

    Nome da unidade alfanumrico

    4. Na tabela UNIDADES, insira os seguintes dados: PEAS, METROS, QUILOGRAMAS, DZIAS, PACOTE, CAIXA;

    5. Crie a tabela CATEGORIAS para armazenar as categorias de produto:

    Cdigo da categoriainteiro, autonumerao e chave primria.

    Nome da categoria alfanumrico

  • 71

    Criando um banco de dados 26. Na tabela CATEGORIAS, insira os seguintes dados: MOUSE, PEN-DRIVE, MONITOR DE VIDEO, TECLADO, C.P.U., CABO DE REDE;

    7. Crie uma tabela para armazenar os dados cadastrais dos clientes. Neste caso, voc pode definir quais sero os campos da tabela;

    Dica: Para atendermos s formas normais, crie uma tabela chamada CONTATOS para armazenar os dados de e-mail e telefone.

    8. Crie uma tabela para armazenar os dados cadastrais dos vendedores. Neste caso, voc pode definir quais sero os campos da tabela;

    9. Agora voc precisa criar uma tabela para armazenar os pedidos de venda. Neste caso, observe que um pedido possui um nico nmero (chave primria), pertence a um nico cliente, emitido em uma nica data, mas pode possuir N produtos. Para no violarmos a primeira forma normal, precisaremos dividir as informaes em duas tabelas:

    TABELA PEDIDOS

    Nmero do pedido inteiro, autonumerao e chave primria.

    Cdigo do cliente inteiro

    Cdigo do vendedor inteiro

    Data de emisso data e hora

    Data de entrega data e hora

    Valor Total numrico

    Situao

    Deve armazenar uma letra:

    P para PENDENTE;

    C para CANCELADO;

    E para ENTREGUE.

    Observaes texto longo

  • 72

    SQL - Mdulo I

    TABELA ITENSPEDIDO

    Nmero do pedido inteiro

    Num. Item

    inteiro: Este ser um nmero sequencial dentro de cada pedido, se um pedido possuir 5 produtos, este campo ser preenchido com 1, 2, 3, 4, 5.

    Cdigo do produto inteiro

    Quantidade numrico

    Preo Unitrio numrico

    Desconto numrico

    A chave primria ser formada pelos campos Nmero do pedido e Num. Item.

  • 3 9 SELECT; 9 Ordenao de dados; 9 Filtragem de consultas; 9 Operadores relacionais; 9 Operadores lgicos;

    9 Valores nulos;

    9 Consulta de intervalos com BETWEEN;

    9 Substituio de valores nulos;

    9 Consulta com base em strings de caractere;

    9 Manipulao de campos do tipo datetime;

    9 Consulta de valores em uma lista de elementos;

    9 Alterao do idioma a partir do SSMS.

    Consultando dados

  • 74

    SQL - Mdulo I

    3.1. IntroduoNa linguagem SQL, o principal comando utilizado para a realizao de consultas o SELECT. Por meio dele, torna-se possvel consultar dados pertencentes a uma ou mais tabelas de um banco de dados.

    No decorrer deste captulo, sero apresentadas as tcnicas de utilizao do comando SELECT, bem como algumas diretrizes para a realizao de diferentes tipos de consultas SQL.

    Para que possamos fazer exemplos que demonstrem as tcnicas mais apuradas de consulta, precisamos ter um banco de dados com um volume razovel de informaes j cadastradas.

    Siga os passos adiante:

    1. No Object Explorer, aplique um clique com o boto direito do mouse sobre o item Databases e selecione a opo Attach:

  • 75

    Consultando dados 3

    2. Na prxima tela, clique no boto Add:

  • 76

    SQL - Mdulo I

    3. Em seguida, procure a pasta Dados e selecione o arquivo PEDIDOS_TABELAS.MDF:

    4. Confirme a operao clicando no boto OK.

  • 77

    Consultando dados 3Observe que o banco de dados aparecer no Object Explorer. Neste banco, foram criados dois diagramas que mostram as tabelas existentes nele. Voc conseguir visualizar o diagrama executando um duplo-clique sobre o nome:

    DIAGRAMA DE PEDIDOS

    DIAGRAMA DE EMPREGADOS

  • 78

    SQL - Mdulo I

    3.2. SELECTO comando SELECT pertence ao grupo de comandos denominado DML (Data Manipulation Language ou Linguagem de Manipulao de Dados), que composto de comandos para consulta (SELECT), incluso (INSERT), alterao (UPDATE) e excluso de dados de tabela (DELETE).

    A sintaxe de SELECT, com seus principais argumentos e clusulas, exibida a seguir:

    SELECT [DISTINCT] [TOP (N) [PERCENT] [WITH TIES]] [INTO ] FROM tabela1 [JOIN tabela2 ON expressaoJoin [, JOIN tabela3 ON exprJoin [,...]]][WHERE ][GROUP BY [HAVING ]][ORDER BY {[DESC] | [ASC]} [, {[DESC] | [ASC]} [,...]]]

    Em que:

    [DISTINCT]: Palavra que especifica que apenas uma nica instncia de cada linha faa parte do conjunto de resultados. DISTINCT utilizada com o objetivo de evitar a existncia de linhas duplicadas no resultado da seleo;

    [TOP (N) [PERCENT] [WITH TIES]]: Especifica que apenas um primeiro conjunto de linhas ou uma porcentagem de linhas seja retornado. N pode ser um nmero ou porcentagem de linhas;

    : Colunas que sero selecionadas para o conjunto de resultados. Os nomes das colunas devem ser separados por vrgulas. Caso tais nomes no sejam especificados, todas as colunas sero consideradas na seleo;

    [INTO nome_tabela]: nome_tabela o nome de uma nova tabela a ser criada com base nas colunas especificadas em e nas linhas especificadas por meio da clusula WHERE;

  • 79

    Consultando dados 3 FROM tabela1 [JOIN tabela2 ON exprJoin [, JOIN tabela3 ON exprJoin

    [,...]]]:

    A clusula FROM define tabelas utilizadas no SELECT;

    expressaoJoin a expresso necessria para relacionar as tabelas da clusula FROM;

    tabela1, tabela2,... so as tabelas que possuem os valores utilizados na condio de filtragem .

    [WHERE ]: A clusula WHERE aplica uma condio de filtro que determinar quais linhas faro parte do resultado. Essa condio especificada em ;

    [GROUP BY :

    A clusula GROUP BY agrupa uma quantidade de linhas em um conjunto de linhas. Nele, as linhas so resumidas por valores de uma ou vrias colunas ou expresses;

    representa a expresso na qual ser realizada a operao por GROUP BY.

    [HAVING ]]: A clusula HAVING define uma condio de busca para o grupo de linhas a ser retornado por GROUP BY;

    [ORDER BY {[DESC] | [ASC]} [, {[DESC] | [ASC]} [,...]]]:

    A clusula ORDER BY utilizada para determinar a ordem em que os resultados so retornados;

    J campo1, campo2 so as colunas utilizadas na ordenao dos resultados.

    {[DESC]/[ASC]}: ASC determina que os valores das colunas especificadas em campo1, campo2 sejam retornados em ordem ascendente, enquanto DESC retorna esses valores em ordem descendente. As duas opes so opcionais e a barra indica que so excludentes entre si, ou seja, no podem ser utilizadas simultaneamente. As chaves indicam um grupo excludente de opes. Se nenhuma delas for utilizada, ASC ser assumido.

  • 80

    SQL - Mdulo I

    Para consultar uma lista de colunas de uma determinada tabela em um banco de dados, basta utilizar a seguinte sintaxe:

    SELECT FROM

    Em que:

    : Representa o nome da coluna ou colunas a serem selecionadas. Quando a consulta envolve mais de uma coluna, elas devero ser separadas por vrgula;

    : o nome da tabela a partir de onde ser feita a consulta.

    Para especificar o banco de dados de origem das tabelas, a partir do qual as informaes sero consultadas, utilize a instruo USE seguida pelo nome do banco de dados, da seguinte maneira:

    USE

    Essa instruo deve ser especificada na parte inicial da estrutura de cdigo, anteriormente s instrues destinadas consulta. Os exemplos adiante demonstraro como utiliz-la junto ao SELECT.

    3.2.1. Consultando todas as colunas

    O cdigo a seguir consulta todas as colunas da tabela EMPREGADOS do banco de dados PEDIDOS:

    USE PEDIDOS;SELECT * FROM EMPREGADOS;

    3.2.2. Consultando colunas especficas

    Para consultar colunas especficas de uma tabela, deve-se especificar o(s) nome(s) da(s) coluna(s), como mostrado adiante:

    SELECT FROM

  • 81

    Consultando dados 3O cdigo a seguir consulta todas as colunas da tabela EMPREGADOS:

    A - Efeito do comando USE PEDIDOS. Tambm possvel selecionar o banco de dados por aqui;

    B - Instruo que queremos executar. necessrio selecionar o comando antes de executar;

    C - Boto que executa o comando selecionado. importante saber que se nada estiver selecionado, o SQL tentar executar todos os comandos do script;

    D - Resultado da execuo do comando SELECT.

    Veja o seguinte exemplo, em que feita a consulta nas colunas CODFUN, NOME e SALARIO da tabela EMPREGADOS:

    SELECT CODFUN, NOME, SALARIO FROM EMPREGADOS;

    Confira o resultado:

    A

    C

    B

    D

  • 82

    SQL - Mdulo I

    O prximo exemplo efetua clculos gerando colunas virtuais (no existentes fisicamente nas tabelas):

    SELECT CODFUN, NOME, SALARIO, SALARIO * 1.10 FROM EMPREGADOS;

    Veja o resultado:

    Observe que no existe identificao para a coluna calculada.

    3.2.3. Redefinindo os identificadores de coluna com uso de alias

    O nome de uma coluna ou tabela pode ser substitudo por uma espcie de apelido, que criado para facilitar a visualizao. Esse apelido chamado de alias.

    Costuma-se utilizar a clusula AS a fim de facilitar a identificao do alias, no entanto, no uma obrigatoriedade. A sintaxe para a utilizao de alias descrita a seguir:

    SELECT [[AS] ], [[AS] ] [,...] FROM

  • 83

    Consultando dados 3Veja os seguintes exemplos de consulta com uso de alias:

    Definindo um ttulo para a coluna calculada

    SELECT CODFUN, NOME, SALARIO, SALARIO * 1.10 AS SALARIO_MAIS_10_POR_CENTOFROM EMPREGADOS;

    Confira o resultado:

    Na verdade, qualquer coluna da tabela pode receber um alias:

    SELECT CODFUN AS Codigo, NOME AS Nome, SALARIO AS Salario FROM EMPREGADOS;

    Se o alias contiver caracteres como espao, ou outros caracteres especiais, o SQL gera erro, a no ser que este nome seja delimitado por colchetes, apstrofo ou aspas:

    SELECT CODFUN AS Codigo, NOME AS Nome, SALARIO AS Salario, DATA_ADMISSAO AS [Data de Admisso] FROM EMPREGADOS;-- ouSELECT CODFUN AS Codigo, NOME AS Nome, SALARIO AS Salario, DATA_ADMISSAO AS Data de Admisso FROM EMPREGADOS;-- ouSELECT CODFUN AS Codigo, NOME AS Nome, SALARIO AS Salario, DATA_ADMISSAO AS Data de AdmissoFROM EMPREGADOS;

    -- Campo calculadoSELECT CODFUN AS Codigo, NOME AS Nome, SALARIO AS Salario, SALARIO * 1.10 [Salrio com 10% de Aumento]FROM EMPREGADOS

  • 84

    SQL - Mdulo I

    3.3. Ordenando dadosUtilizamos a clusula ORDER BY em conjunto com o comando SELECT para retornar os dados em uma determinada ordem.

    3.3.1. Retornando linhas na ordem ascendente

    A clusula ORDER BY pode ser utilizada com a opo ASC, que faz com que as linhas sejam retornadas em ordem ascendente. Caso a opo ASC seja omitida, o padro da ordenao ser ascendente.

    Veja um exemplo:

    SELECT * FROM EMPREGADOS ORDER BY NOME;SELECT * FROM EMPREGADOS ORDER BY NOME ASC;SELECT * FROM EMPREGADOS ORDER BY SALARIO;SELECT * FROM EMPREGADOS ORDER BY SALARIO ASC;

    SELECT * FROM EMPREGADOS ORDER BY DATA_ADMISSAO;

    3.3.2. Retornando linhas na ordem descendente

    A clusula ORDER BY pode ser utilizada com a opo DESC, a qual faz com que as linhas sejam retornadas em ordem descendente.

    Veja um exemplo:

    SELECT * FROM EMPREGADOS ORDER BY NOME DESC;SELECT * FROM EMPREGADOS ORDER BY SALARIO DESC;SELECT * FROM EMPREGADOS ORDER BY DATA_ADMISSAO DESC;

    Caso no especifiquemos ASC ou DESC, os dados da tabela sero retornados em ordem ascendente.

  • 85

    Consultando dados 33.3.3. Ordenando por nome, alias ou posio

    possvel utilizar a clusula ORDER BY para ordenar dados retornados. Para isso, utilizamos como identificao da coluna a ser ordenada o seu prprio nome fsico (caso exista), o seu alias ou a posio em que aparece na lista do SELECT.

    Usando o alias ou a posio da coluna como identificao do campo ordenado

    -- pela coluna SALARIOSELECT CODFUN AS Cdigo, NOME AS Nome, SALARIO AS Salrio, SALARIO * 1.10 [Salrio com 10% de Aumento]FROM EMPREGADOSORDER BY Salrio;

    -- idem anteriorSELECT CODFUN AS Cdigo, NOME AS Nome, SALARIO AS Salrio, SALARIO * 1.10 [Salrio com 10% de Aumento]FROM EMPREGADOSORDER BY 3;

    -- pela coluna SALARIO * 1.10SELECT CODFUN AS Cdigo, NOME AS Nome, SALARIO AS Salrio, SALARIO * 1.10 [Salrio com 10% de Aumento]FROM EMPREGADOSORDER BY [Salrio com 10% de Aumento];

    -- Idem anteriorSELECT CODFUN AS Cdigo, NOME AS Nome, SALARIO AS Salrio, SALARIO * 1.10 [Salrio com 10% de Aumento]FROM EMPREGADOSORDER BY 4;

  • 86

    SQL - Mdulo I

    Veja outro exemplo de retorno de dados de acordo com o nome da coluna:

    SELECT CODFUN, NOME, DATA_ADMISSAO, SALARIO FROM EMPREGADOS ORDER BY SALARIO;--SELECT CODFUN, NOME, DATA_ADMISSAO, SALARIO FROM EMPREGADOS ORDER BY DATA_ADMISSAO;

    Ordenando por vrias colunas

    Quando a coluna ordenada contm informao repetida, esta informao formar grupos. Observe o exemplo:

    SELECT COD_DEPTO, NOME, DATA_ADMISSAO, SALARIO FROM EMPREGADOS ORDER BY COD_DEPTO;

    Neste caso, pode ser til ordenar outra coluna dentro do grupo formado pela primeira:

    SELECT COD_DEPTO, NOME, DATA_ADMISSAO, SALARIO FROM EMPREGADOS ORDER BY COD_DEPTO, NOME;

  • 87

    Consultando dados 3

    Note que dentro de cada departamento os dados esto ordenados pela coluna NOME:

    --SELECT COD_DEPTO, NOME, DATA_ADMISSAO, SALARIO FROM EMPREGADOS ORDER BY COD_DEPTO, SALARIO;--SELECT COD_DEPTO, NOME, DATA_ADMISSAO, SALARIO FROM EMPREGADOS ORDER BY COD_DEPTO, DATA_ADMISSAO;-- Continua valendo o uso do alias ou da posio da -- colunaSELECT COD_DEPTO, NOME, DATA_ADMISSAO, SALARIO FROM EMPREGADOS ORDER BY 1, 3;

    O uso da opo DESC (ordenao descendente) independente para cada coluna no ORDER BY:

    SELECT COD_DEPTO, NOME, DATA_ADMISSAO, SALARIO FROM EMPREGADOS ORDER BY COD_DEPTO DESC, SALARIO;--SELECT COD_DEPTO, NOME, DATA_ADMISSAO, SALARIO FROM EMPREGADOS ORDER BY COD_DEPTO, SALARIO DESC;--SELECT COD_DEPTO, NOME, DATA_ADMISSAO, SALARIO FROM EMPREGADOS ORDER BY COD_DEPTO DESC, SALARIO DESC;

  • 88

    SQL - Mdulo I

    3.3.4. ORDER BY com TOP

    A clusula TOP mostra as N primeiras linhas de um SELECT, no entanto, se a usarmos sem a clusula ORDER BY, o resultado fica sem sentido. Veja o exemplo:

    -- Lista os 5 primeiros empregados de acordo com a chave -- primriaSELECT TOP 5 * FROM EMPREGADOS;

    No sabemos quem so esses cinco funcionrios listados. Provavelmente, so os primeiros a serem inseridos na tabela EMPREGADOS, mas nem isso podemos afirmar com certeza.

    J nos exemplos a seguir, conseguimos compreender o resultado:

    -- Lista os 5 empregados mais antigosSELECT TOP 5 * FROM EMPREGADOS ORDER BY DATA_ADMISSAO;

    -- Lista os 5 empregados mais novosSELECT TOP 5 * FROM EMPREGADOS ORDER BY DATA_ADMISSAO DESC;

    -- Lista os 5 empregados que ganham menosSELECT TOP 5 * FROM EMPREGADOS ORDER BY SALARIO;

    -- Lista os 5 empregados que ganham maisSELECT TOP 5 * FROM EMPREGADOS ORDER BY SALARIO DESC;

  • 89

    Consultando dados 33.3.5. ORDER BY com TOP WITH TIES

    TOP WITH TIES permitida apenas em instrues SELECT e quando uma clusula ORDER BY especificada. Indica que se o contedo do campo ordenado na ltima linha da clusula TOP se repetir em outras linhas, estas devero ser exibidas tambm.

    Observe a sequncia:

    SELECT CODFUN, NOME, SALARIO FROM EMPREGADOS ORDER BY SALARIO DESC;

    Este exemplo lista os empregados em ordem descendente de salrio. Note que no stimo registro o salrio de 4500.00 e este valor se repete nos cinco registros seguintes. Se aplicarmos a clusula TOP 7, qual dos seis funcionrios com salrio de 4500.00 ser mostrado, j que o valor o mesmo?

    -- Listar os 7 funcionrios que ganham maisSELECT TOP 7 CODFUN, NOME, SALARIO FROM EMPREGADOS ORDER BY SALARIO DESC;

    Por qual razo o SQL selecionou o funcionrio de CODFUN 7 como ltimo da lista, se existem outros cinco funcionrios com o mesmo salrio? Porque ele tem a menor chave primria.

  • 90

    SQL - Mdulo I

    Na maioria das consultas, quando um fato como esse ocorre (empate na ltima linha), o critrio para desempate, se houver, dificilmente ser pela menor chave primria. Ento, seria interessante que a consulta mostrasse todas as linhas em que o salrio fosse o mesmo da ltima:

    -- Lista os 7 empregados que ganham mais inclusive -- aqueles empatados com o ltimoSELECT TOP 7 WITH TIES CODFUN, NOME, SALARIO FROM EMPREGADOS ORDER BY SALARIO DESC;

    Tambm podemos usar a clusula TOP com percentual. A tabela EMPREGADOS possui sessenta linhas, ento, se pedirmos pra ver 10% das linhas, devero aparecer seis. Confira:

    -- Mostra 10% das linhas da tabela EMPREGADOSSELECT TOP 10 PERCENT CODFUN, NOME, SALARIO FROM EMPREGADOS ORDER BY SALARIO DESC;

    So exibidas as seguintes linhas:

  • 91

    Consultando dados 33.4. Filtrando consultasO exemplo a seguir demonstra o que vimos at aqui sobre a instruo SELECT:

    SELECT [TOP (n) [PERCENT] [WITH TIES]] |*FROM [WHERE ][ORDER BY [ASC|DESC] [, [ASC|DESC] [,...]]]

    A clusula WHERE determina um critrio de filtro e que somente as linhas que respeitem este critrio sejam exibidas. A expresso contida no critrio de filtro deve retornar TRUE (verdadeiro) ou FALSE (falso).

    3.5. Operadores relacionaisA tabela a seguir exibe os operadores relacionais:

    Operador Descrio

    = Compara, se igual.

    ou != Compara, se diferentes.

    > Compara, se maior que.

    < Compara, se menos que.

    >= Compara, se maior que ou igual.

  • 92

    SQL - Mdulo I

    Mostrando os funcionrios com SALRIO acima de 5000

    SELECT CODFUN, NOME, COD_CARGO, SALARIO FROM EMPREGADOS WHERE SALARIO > 5000ORDER BY SALARIO;

    Mostrando os funcionrios com campo COD_DEPTO menor ou igual a 3

    SELECT * FROM Empregados WHERE COD_DEPTO RAQUELORDER BY NOME;

  • 93

    Consultando dados 3 Mostrando os funcionrios que tenham NOME alfabeticamente menor

    que ELIANA

    SELECT CODFUN, NOME, SALARIOFROM EMPREGADOSWHERE NOME < ELIANAORDER BY NOME;

    3.6. Operadores lgicosA filtragem de dados em uma consulta tambm pode ocorrer com a utilizao dos operadores lgicos AND, OR ou NOT, cada qual permitindo uma combinao especfica de expresses, conforme apresentado adiante:

    O operador AND combina duas expresses e exige que sejam verdadeiras, ou seja, TRUE;

    O operador OR verifica se pelo menos uma das expresses retornam TRUE;

    O operador NOT inverte o resultado lgico da expresso sua direita, ou seja, se a expresso verdadeira ele retorna falso e vice-versa.

    Acompanhe os seguintes exemplos:

    Mostrando funcionrios do departamento 2 que ganhem mais de 5000

    SELECT * FROM EMPREGADOS WHERE COD_DEPTO = 2 AND SALARIO > 5000;

  • 94

    SQL - Mdulo I

    Mostrando funcionrios do departamento 2 ou aqueles que ganhem mais de 5000

    SELECT * FROM EMPREGADOSWHERE COD_DEPTO = 2 OR SALARIO > 5000;

    importante saber onde utilizar o AND e o OR. Vamos supor que foi pedido para listar todos os funcionrios do COD_DEPTO igual a 2 e tambm igual a 5. Se fossemos escrever o comando exatamente como foi pedido, digitaramos o seguinte:

    SELECT * FROM EMPREGADOSWHERE COD_DEPTO = 2 AND COD_DEPTO = 5;

    No entanto, essa consulta no vai produzir nenhuma linha de resultado. Isso porque um mesmo empregado no est cadastrado nos departamentos 2 e 5 simultaneamente. Um empregado est cadastrado ou (OR) no departamento 2 ou (OR) no departamento 5.

    Precisamos entender que a pessoa que solicita a consulta est visualizando o resultado pronto e acaba utilizando e (AND) no lugar de ou (OR). Sendo assim, importante saber que, na execuo do SELECT, ele avalia os dados linha por linha. E ento, o correto o seguinte:

    SELECT * FROM EMPREGADOSWHERE COD_DEPTO = 2 OR COD_DEPTO = 5;

    Veja outros exemplos da utilizao de AND e OR:

    Mostrando funcionrios com SALARIO entre 3000 e 5000

    SELECT * FROM EMPREGADOSWHERE SALARIO >= 3000 AND SALARIO

  • 95

    Consultando dados 3 Mostrando funcionrios com SALARIO abaixo de 3000 ou acima de 5000

    SELECT * FROM EMPREGADOSWHERE SALARIO < 3000 OR SALARIO > 5000ORDER BY SALARIO;-- Tambm pode ser feito usando o operador NOT. Aqueles -- que no esto entre 3000 e 5000, esto fora desta -- faixa.SELECT * FROM EMPREGADOSWHERE NOT (SALARIO >= 3000 AND SALARIO = e = e = 3000 AND SALARIO

  • 96

    SQL - Mdulo I

    Alm de BETWEEN, podemos utilizar NOT BETWEEN, que permite consultar os valores que no se encontram em uma determinada faixa de valores. O exemplo a seguir pesquisa valores no compreendidos no intervalo especificado:

    SELECT * FROM EMPREGADOSWHERE SALARIO < 3000 OR SALARIO > 5000ORDER BY SALARIO;

    Em vez de e OR, podemos utilizar NOT BETWEEN mais o operador AND para pesquisar os mesmo valores da consulta anterior:

    SELECT * FROM EMPREGADOSWHERE SALARIO NOT BETWEEN 3000 AND 5000ORDER BY SALARIO;-- OU ENTOSELECT * FROM EMPREGADOSWHERE NOT SALARIO BETWEEN 3000 AND 5000ORDER BY SALARIO;

    3.8. Consultando com base em strings de caractereO operador LIKE usado para fazer pesquisas em dados do tipo string (CHAR, VARCHAR, NCHAR e NVARCHAR). til quando no sabemos de forma exata o dado que queremos pesquisar. Por exemplo, sabemos que o nome da pessoa comea com MARIA, mas no sabemos o restante do nome, ou sabemos que o nome contm a palavra RAMOS, mas no sabemos o nome completo.

    Veja os seguintes exemplos:

    Nomes que comeam com MARIA

    SELECT * FROM EMPREGADOSWHERE NOME LIKE MARIA%;

    O sinal % um curinga que equivale a uma quantidade qualquer de caracteres, inclusive nenhum.

  • 97

    Consultando dados 3 Nomes que comeam com MA

    SELECT * FROM EMPREGADOSWHERE NOME LIKE MA%;

    Nomes que comeam com M

    SELECT * FROM EMPREGADOSWHERE NOME LIKE M%;

    Na verdade, esse recurso de consulta pode buscar palavras que estejam contidas no texto, seja no incio, no meio ou no final dele. Acompanhe outros exemplos:

    Nomes terminando com MARIA

    SELECT * FROM EMPREGADOSWHERE NOME LIKE %MARIA;

    Nomes terminando com SOUZA

    SELECT * FROM EMPREGADOSWHERE NOME LIKE %SOUZA;

    Nomes terminando com ZA

    SELECT * FROM EMPREGADOSWHERE NOME LIKE %ZA;

    Nomes contendo a palavra MARIA

    SELECT * FROM EMPREGADOSWHERE NOME LIKE %MARIA%;

    Nomes contendo a palavra SOUZA

    SELECT * FROM EMPREGADOSWHERE NOME LIKE %SOUZA%;

    Outro caractere coringa que pode ser utilizado em consultas com LIKE o subscrito (_), que equivale a um nico caractere qualquer. Veja alguns exemplos:

  • 98

    SQL - Mdulo I

    Nomes iniciados por qualquer caractere, mas que o segundo caractere seja a letra A

    SELECT * FROM EmpregadosWHERE NOME LIKE _A%;

    Nomes cujo penltimo caractere seja a letra Z

    SELECT * FROM EmpregadosWHERE NOME LIKE %Z_;

    Nomes terminados em LU e seguidos de 3 outras letras

    SELECT * FROM EmpregadosWHERE NOME LIKE %LU___;

    Podemos, tambm, fornecer vrias opes para um determinado caractere da chave de busca, como no exemplo a seguir, que busca nomes que contenham SOUZA ou SOUSA:

    SELECT * FROM EMPREGADOSWHERE NOME LIKE %SOU[SZ]A%;

    Veja outro exemplo, que busca nomes contendo JOS ou JOSE:

    SELECT * FROM EMPREGADOSWHERE NOME LIKE %JOS[E]%;

    Alm disso, podemos utilizar o operador NOT LIKE, que atua de forma oposta ao operador LIKE. Com NOT LIKE, obtemos como resultado de uma consulta os valores que no possuem os caracteres ou slabas determinadas.

    O exemplo a seguir busca nomes que no contenham a palavra MARIA:

    SELECT * FROM EMPREGADOSWHERE NOME NOT LIKE %MARIA%;

    O exemplo a seguir busca nomes que no