apostila ii transact sql detalhado

Upload: orlandopsjunior

Post on 13-Oct-2015

135 views

Category:

Documents


6 download

TRANSCRIPT

  • SQL SERVER Rudson Kiyoshi Souza Carvalho

    [email protected]

  • PUBLICO ALVO

    Estudantes da rea de TI que desejam aprender a manipular informaes em banco de dados SQL Server.

    PR-REQUISITOS

    Conhecimento em Lgica de Programao e noes bsicas de banco de dados.

    DURAODurao total de 40 horas divididas em 4,5 horas em 9 sbados.Expectativa de incio em ......... e trmino em .........

    OBJETIVOInserir participantes do treinamento no aprendizado da linguagem SQL SERVER, atravs da apresentao dos assuntos fundamentais para compreender os conceitos bsicos acerca do SQL, alm da prtica de exerccios simples para reforar a teoria e conhecer os principais comandos e ferramentas da linguagem.

    INTRODUO

    Este o primeiro mdulo de uma srie de trs, neste mdulo iremos aprender os conceitos bsicos de banco de dados relacional, sua utilizao e boa parte dos recursos que o SQL Server nos disponibiliza para manipular as informaes armazenadas na base de dados.

  • SUMRIO

    PUBLICO ALVO .............................................................................. 2 PR-REQUISITOS .......................................................................... 2 DURAO ....................................................................................... 2 OBJETIVO ....................................................................................... 2 INTRODUO ................................................................................. 2 Captulo 1 - Conceitos bsicos ........................................................ 7

    Banco de dados ....................................................................................................................... 7 Modelos de Banco de Dados ................................................................................................... 7 Banco de dados relacional ...................................................................................................... 9 Origem da linguagem SQL .................................................................................................... 9 1.1.A linguagem Transact-SQL ............................................................................................ 11 SQL Server Management Studio .......................................................................................... 12

    Captulo 2 - Alguns objetos do SQL Server .................................. 13 Principais objetos do SQL Server ......................................................................................... 13 Databases 14 Tabelas 15 Criando a primeira Tabela .................................................................................................... 15 O comando Insert .................................................................................................................. 16 A instruo Select ................................................................................................................. 17 DROP TABLE Tb_Cliente ................................................................................................... 17 A segunda Tabela .................................................................................................................. 18 A terceira Tabela ................................................................................................................... 19

    Captulo 3 - DML Simples .............................................................. 20 INSERT 20 INSERT posicional ............................................................................................................... 21 INSERT declarativo .............................................................................................................. 22 SELECT 23 Exibindo todas as colunas ..................................................................................................... 23 Exibindo algumas colunas .................................................................................................... 23 Exibindo colunas utilizando alias ......................................................................................... 23 Exibindo colunas utilizando alias com espao no nome ....................................................... 24 Criando uma coluna virtual com o comando SELECT ........................................................ 25 Exibindo uma operao com comando SELECT ................................................................. 26 Exibindo apenas uma vez os dados repetidos DISTINCT ................................................. 27 Copiando dados de uma tabela para outra tabela utilizando os comandos INSERT com

    SELECT ............................................................................................................... 28 INSERT com SELECT quando as tabelas so iguais ........................................................... 28 INSERT com SELECT quando as tabelas so diferentes ..................................................... 29 29 3.3. UPDATE ........................................................................................................................ 30 Alterando dados de uma coluna ............................................................................................ 30 Alterando dados de varias colunas ........................................................................................ 31 DELETE 31

    Captulo 4 - A clusula WHERE ..................................................... 32 A clusula WHERE com os operadores lgicos AND e OR ................................................ 34 A clusula WHERE com o operador IN ............................................................................... 35 A clusula WHERE com os operadores NOT IN ................................................................. 36

  • 4.1.A clusula WHERE com o operador BETWEEN ......................................................... 37 A clusula WHERE com os operadores NOT BETWEEN .................................................. 37 O Operador LIKE ................................................................................................................. 38 A clusula WHERE com os operadores NOT LIKE ............................................................ 40

    Captulo 5 - A Clusula ORDER BY ................................................ 41 ORDER BY .......................................................................................................................... 41 Ordenando por colunas ......................................................................................................... 41 Ordenando por uma coluna ................................................................................................... 41 Ordenando por varias colunas ............................................................................................... 41 5.1.ORDER BY ASC e DESC .............................................................................................. 41 A clusula TOP ..................................................................................................................... 43 A clusula TOP com Order By ............................................................................................. 44 A clusula TOP WITH TIES com ORDER BY ................................................................... 44

    Captulo 6 - Integridade e Consistncia dos Dados ....................... 46 Regras de Integridade e consistncia .................................................................................... 46 Constraints ............................................................................................................................ 48 Chaves primrias ................................................................................................................... 48

    IDENTITY ..................................................................................... 49 49 Chaves primrias, secundrias ou chaves nicas .................................................................. 50 Chaves estrangeiras ............................................................................................................... 51 Regras de validao .............................................................................................................. 52 Valor Padro ......................................................................................................................... 52 Valores nulos e no nulos ..................................................................................................... 52 Data types .............................................................................................................................. 53 Regras de Constraints ........................................................................................................... 54

    Constraint DEFAULT ..................................................................... 54 Constraint UNIQUE ....................................................................... 54 Constraint CHECK ......................................................................... 54 Constraint PRIMARY KEY .............................................................. 54 Constraint FOREIGN KEY .............................................................. 54

    Modelo entidade e relacionamento (MER) ........................................................................... 55 Relacionamento ..................................................................................................................... 56 Relacionamento 1:1 .............................................................................................................. 56 Relacionamento 1:N .............................................................................................................. 56 Regras de relacionamento 1:N .............................................................................................. 57 Relacionamento N:N ............................................................................................................. 57 Regras de relacionamento N:N ............................................................................................. 58

    Captulo 7 - Associando Tabelas ................................................... 61 JOIN 61 INNER JOIN ......................................................................................................................... 63 LEFT JOIN ........................................................................................................................... 66 RIGHT JOIN ......................................................................................................................... 67 FULL JOIN ........................................................................................................................... 68 CROSS JOIN ........................................................................................................................ 69 7.1.Os comandos UPDATE e DELETE ............................................................................... 71 UPDATE 73 DELETE 75

    Captulo 8 - Union e Subquery ...................................................... 76 UNION, UNION ALL e EXCEPT ....................................................................................... 76

  • Subquery 82 Subquery introduzida com IN/NOT ...................................................................................... 85 Subquery introduzida com o sinal de igual (=) ..................................................................... 86 Update com Subqueries ........................................................................................................ 87 Delete com Subqueries ......................................................................................................... 87

    Captulo 9 - Totalizando Dados ..................................................... 88 A clusula GROUP BY ........................................................................................................ 88 A clusula HAVING com GROUP BY ................................................................................ 94 A clusula WITH ROLLUP com GROUP BY ..................................................................... 96 A clusula CUBE com GROUP BY ..................................................................................... 97 A clusula JOIN com GROUP BY ....................................................................................... 99

    Captulo 10 - Compute BY ........................................................... 101 10.1.COMPUTE BY com JOIN ......................................................................................... 102 Resumindo dados usando COMPUTE e COMPUTE BY .................................................. 104 As diferenas entre COMPUTE e GROUP BY ................................................................. 105

    Captulo 11 Tabelas ................................................................. 106 Tabela permanente ............................................................................................................. 106 Tabela temporria Global ................................................................................................... 106

    Captulo 12 Case ...................................................................... 107 A clusula CASE ................................................................................................................ 107

    BIBLIOGRAFICA BSICA ............................................................ 109

  • Captulo 1 - Conceitos bsicos

    Captulo 1 - Conceitos bsicos

    Banco de dados

    Um banco de dados um conjunto de dados estruturados, normalmente organizados em tabelas e armazenados de forma persistente, ou seja, no se perde a informao ao desligar o computador.

    Num banco de dados pode-se adicionar, atualizar e consultar informaes, mas para que tudo isso ocorra de maneira organizada necessrio um software que gerencie todo este processo e garanta a integridade dos dados. Este software e denominado SGBD - Sistema Gerenciador de Banco de Dados.

    Atualmente existem diversos SGBDs no mercado, como por exemplo, DB2, Sybase, Oracle, SQL Server, MySql, Firebird, PostGreSQL. A grande maioria destes SGBDs possuem uma verso free que podem ser baixados do site de seus fabricantes.

    A funo do SGBD estabelecer a interface entre o usurio e o banco de dados. Isso quer dizer que usurio no tem acesso direto aos dados armazenados, mas pode fazer uma solicitao ao SGBD que ser responsvel por acessar o banco de dados e disponibilizar o resultado.

    Fica evidente ento que existe uma diferena entre banco de dados e SGBD, apesar de ser comum o banco de dados ser chamado pelo mesmo nome do seu gerenciador. Exemplificando, SQL Server o nome do SGBD e no do banco de dados, como comum se pensar.

    Modelos de Banco de Dados

    Quando se fala de modelo de banco de dados preciso entender que isso se refere ao modelo conceitual de banco de dados. Um modelo conceitual a representao de estrutura do banco de dados. Pode comparar com a planta de uma casa ou um mapa de estradas, pois estes apenas representam objetos do mundo real.

    No caso de banco de dados, o modelo uma representao da maneira com dados sero armazenados. Existem diversos tipos de modelos de banco de dados, entretanto a maior parte dos SGBDs do mercado atual segue o modelo relacional. Tomando este modelo como base ns podemos identificar trs geraes de modelos:

    7

  • Captulo 1 - Conceitos bsicos

    1- Gerao Pr-Relacional

    Sistemas Baseados em Arquivos dados armazenados em arquivos autnomos e sem nenhum relacionamento entre eles. Este modelo no existe SGBD e o usurio manipula os dados diretamente.

    Modelo Hierrquico os dados so igualmente armazenados em arquivos, porm existe uma relao de hierarquia de pai-filho entre eles. O modelo tem o formato de uma rvore que contem ns pai e filhos. Este um dos primeiros modelos com SGBD.

    Modelo em Rede a extenso do modelo hierrquico, pois mantm o relacionamento eliminando o conceito de hierarquia para possibilitar que um registro possua vrias associaes e eliminar problemas de redundncia e duplicao de dados.

    2- Gerao Relacional

    Modelo Relacional no segue a evoluo dos modelos anteriores, pois foi criado baseado na teoria dos conjuntos, ramo da matemtica que simultaneamente simples e poderoso. A estrutura de dados utilizada a relao, ou seja, tabela. Uma tabela constituda de colunas(atributo ou campo) e linhas(registro, instncia ou tupla).

    3- Gerao Ps-Relacional

    Modelo Orientado a Objetos segue a mesma estrutura da orientao a objetos em linguagens de programao. O objetivo aproximar o desenvolvimento das aplicaes ao banco de dados. Permite a implementao de herana, encapsulamento e polimorfismo.

    Modelo Objeto-Relacional tem uma estrutura hbrida, pois consiste de um SGBD relacional que tambm utiliza orientao a objetos. O objetivo unir o melhor do modelo relacional com o modelo orientado a objetos, um exemplo de banco de dados orientado a objetos o Jasmine da CA e tambm o Prevayler.

    8

  • Captulo 1 - Conceitos bsicos

    Banco de dados relacional

    A maioria dos bancos de dados baseia-se no modelo relacional de Edgar Frank Codd no inicio dos anos 70. Embora esta teoria seja a base para o software de banco de dados relacionais, muito poucos sistemas de gesto de bases de dados seguem o modelo de forma restrita.

    A disposio das informaes em tabelas uma das principais caracteristicas do banco de dados relacional.

    Uma tabela de banco de dados relacional possui os seguintes elementos:

    Atributos (campos): Respresentam as colunas

    Registros (dados): Representam as linhas (tuplas)

    Em um banco de dados relacional, podemos utilizar diversas tabelas para manter as informaes. Essas tabelas que representam entidades podem ter suas informaes combinadas por meio de relacionamentos. Na verdade, as tabelas possuem chaves primrias e secundrias ou estrangeiras, por meio das quais os relacionamentos so estabelecidos.Um dos pontos fortes do modelo relacional de banco de dados a possibilidade de definio de um conjunto de restries de integridade. Estas definem os conjuntos de estados e mudanas de estado consistentes do banco de dados, determinando os valores que podem e os que no podem ser armazenados.

    Origem da linguagem SQL

    Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL, uma linguagem de pesquisa declarativa para banco de dados relacional (base de dados relacional). Muitas das caractersticas originais do SQL foram inspiradas na lgebra relacional.

    A linguagem SQL foi desenvolvida originalmente no incio dos anos 70 nos laboratrios da IBM em San Jose, dentro do projeto System R, que tinha por objetivo demonstrar a viabilidade da implementao do modelo relacional proposto por E. F. Codd. O nome original da linguagem era SEQUEL, acrnimo para "Structured English Query Language" (Linguagem de Consulta Estruturada em Ingls) [1], vindo da o fato de, at hoje, a sigla, em ingls, ser comumente pronunciada "squel" ao invs de "s-ki-l", letra a letra. No entanto, em portugus, a pronncia mais corrente a letra a letra: "se-qu-le".

    9

  • Captulo 1 - Conceitos bsicos

    A linguagem SQL um grande padro de banco de dados. Isto decorre da sua simplicidade e facilidade de uso. Ela se diferencia de outras linguagens de consulta a banco de dados no sentido em que uma consulta SQL especifica a forma do resultado e no o caminho para chegar a ele. Ela uma linguagem declarativa em oposio a outras linguagens procedurais. Isto reduz o ciclo de aprendizado daqueles que se iniciam na linguagem.

    Embora o SQL tenha sido originalmente criado pela IBM, rapidamente surgiram vrios "dialetos" desenvolvidos por outros produtores. Essa expanso levou necessidade de ser criado e adaptado um padro para a linguagem. Esta tarefa foi realizada pela American National Standards Institute (ANSI) em 1986 e ISO em 1987.

    O SQL foi revisto em 1992 e a esta verso foi dado o nome de SQL-92. Foi revisto novamente em 1999 e 2003 para se tornar SQL:1999 (SQL3) e SQL:2003, respectivamente. O SQL:1999 usa expresses regulares de emparelhamento, queries recursivas e gatilhos (triggers). Tambm foi feita uma adio controversa de tipos no-escalados e algumas caractersticas de orientao a objeto. O SQL:2003 introduz caractersticas relacionadas ao XML, seqncias padronizadas e colunas com valores de auto-generalizao (inclusive colunas-identidade).

    Tal como dito anteriormente, o SQL, embora padronizado pela ANSI e ISO, possui muitas variaes e extenses produzidos pelos diferentes fabricantes de sistemas gerenciadores de bases de dados. Tipicamente a linguagem pode ser migrada de plataforma para plataforma sem mudanas estruturais principais.

    Os padres da SQL:

    Ano Nome Conhecido como Mudanas1986 SQL-86 SQL-87(Adotado pela ISO)

    Primeira publicao do padro ANSI/ISO

    1989 SQL-89 Apenas uma pequena verso do padro original

    1992 SQL-92 SQL2 Maior atualizao do padro original e ainda suportando os padres originais

    1999 SQL99 SQL3

    Atualizao do padro acrescentado em 1992 e novas formas de selecionar os dados, e aplicada novas regras de integridade dos dados e a introduo da orientao a objetos.

    2003 SQL-2003 Introduzido suporte a XML e campos de valores auto gerveis.

    10

  • Captulo 1 - Conceitos bsicos

    1.1. A linguagem Transact-SQL

    A linguagem Transact-SQL subdividida em trs grupos de comandos:

    Data Definition Language (DDL)

    CREATE TABLE - Criar uma nova tabela no banco de dados ALTER TABLE alterar uma tabela do banco de dados DROP TABLE excluir uma tabela do banco de dados CREATE INDEX criar index na tabela do banco de dados DROP INDEX excluir index da tabela

    Data Manipulation Language (DML)

    SELECT extrair dados do banco de dados

    UPDATE alterar dados do banco de dados

    DELETE apagar dados do banco de dados

    INSERT INTO inserir novos dados no banco de dados

    Data Control Language (DCL)

    GRANT permitir privilgios aos usurios do banco de dados

    REVOKE revogar privilgios aos usurios do banco de dados

    DENY negar permisso de acesso aos usurios do banco de dados

    Estes comandos so relativamente simples o que pode levar algumas pessoas a acharem que extremamente simples manipular informaes em uma base de dados, e que qualquer um pode ser um DBA, mas a histria no bem essa, estes comandos possuem clausulas que podem tornar um comando SQL muito complexo, maior ainda se realizado em ambientes onde aplicaes acessam e alteram informaes o tempo todo, a linguagem SQL muito poderosa, mas s com ela no se pode construir uma aplicao completa, pois a SQL no possui instrues para construo de programas, por este motivo a Microsoft criou a linguagem Transact-SQL, para que funcione os comandos SQL em conjunto com uma linguagem procedural.

    11

  • Captulo 1 - Conceitos bsicos

    SQL Server Management Studio

    O SQL Server Management Studio um ambiente de desenvolvimento integrado para acessar, configurar, gerenciar e desenvolver todos os componentes do SQL Server. O SQL Server Management Studio combina um amplo grupo de ferramentas grficas com editores de scripts sofisticados para fornecer acesso ao SQL Server para desenvolvedores e administradores de todos os nveis de conhecimento.

    O SQL Server Management Studio combina os recursos do Enterprise Manager, Query Analyzer e Analysis Manager, includos em verses anteriores do SQL Server, em um nico ambiente. Alm disso, o SQL Server Management Studio trabalha com todos os componentes do SQL Server, como Reporting Services, Integration Services e SQL Server Compact 3.5 SP1.

    O SQL Management Studio compatvel com qualquer verso do SQL Server.

    Ambiente SQL Server 2005 Express

    12

  • Captulo 3 DML Simples

    Captulo 2 - Alguns objetos do SQL Server

    Principais objetos do SQL Server

    Um banco de dados composto de objetos, ndices, tipos de dados e restries: Cada objeto tem uma linha correspondente na tabela sysobjects. Seu tamanho mnimo 1Mb.

    Database uma estrutura que contm todos os outros objetos. Por padro formado por dois arquivos: um de dados (com extenso .MDF) e um de log (com extenso LDF).

    Table Todos os dados do sistema so inclusos em tabelas, formado por linhas e colunas e estas tabelas ficam armazenadas no Database.

    Constraint, Default e Rule Estes objetos, consistem em regras utilizadas para manter a consistncia e a integridade dos dados no Database.

    Data Type e User Defined Data Type Os dados so armazenados no disco sob um formato representado pelo datatype. Um datatype dever ser atribudo a cada coluna de uma tabela.

    View Representa uma seleo de dados em uma ou mais tabelas.

    Index So responsveis pela otimizao de acesso aos dados de uma tabela utilizando a estrutura de busca B-Tree.

    Procedure Bloco de comandos Transact-SQL, responsvel por uma determinada tarefa. Sua lgica pode ser compartilhada por varias aplicaes.

    Trigger Bloco de comandos Transact-SQL. O objeto trigger criado sobre uma tabela e ativado no momento da execuo de instrues como update, insert e delete.

    Function Bloco de comandos Transact-SQL, responsvel por uma determinada tarefa. Sua lgica pode ser compartilhada por vrias aplicaes. Vale lembrar que uma funo sempre retornara um tipo de valor.

    Obs. Os objetos procedure, trigger e function so processados mais rapidamente, pois seu cdigo fica compilado na memria do servidor.

    13

  • Captulo 3 DML Simples

    Databases

    Os objetos que fazem parte de um sistema de banco de dados so criados dentro de um database, uma estrutura lgica composta por dois tipos de arquivos, um responsvel por manter a estrutura de tabelas com seus dados e outro responsvel pelo armazenamento de Transactionlog, ou seja, armazenado todas as transaes efetuadas.

    Para criarmos um banco de dados no SQL Server 2005, utilizamos instruo:

    CREATE DATABASE

    Por exemplo, para criarmos uma base de dados com o nome de DB_ESTUDO, utilizamos a seguinte instruo: CREATE DATABASE DB_ESTUDO.

    CREATE DATABASE DB_ESTUDO

    Quando um banco de dados criado o mesmo encontra-se vazio, at que uma tabela seja inserida, no entanto para criarmos uma tabela no banco de dados precisamos ter acesso a ele, para utilizarmos um banco de dados utilizamos a clausula use, ento executaremos a seguinte instruo:

    USE

    Seguindo o nosso exemplo a instruo ficaria assim: USE DB_ESTUDO.

    14

  • Captulo 3 DML Simples

    Dessa forma, quando for necessrio executar alguma instruo em uma determinada base de dados podemos alternar entre as bases utilizando o comando use.

    Caso seja necessrio eliminar uma base de dados, devemos utilizar a instruo drop database.

    DROP DATABASE

    Conforme o exemplo: DROP DATABASE DB_ESTUDO

    Tabelas

    Uma tabela um objeto de banco de dados formada por um conjunto de linhas e colunas, cada uma dessas colunas refere-se a um atributo associado a tabela que tambm chamamos de entidade, os datatypes, ou seja o formato do dado gravado devera ser especificado para cada coluna

    Para criarmos uma tabela utilizamos a instruo:

    CREATE TABLE

    Criando a primeira Tabela

    Neste exemplo temos uma tabela chamada Tb_Cliente.

    inCod_Cli vcNome_Cli1 Marina Farina2 Edson Mendes3 Aline Moda4 Tatiana Souza5 Cssio Adriano

    Iremos cri-la em nossa base de dados DB_Estudo para isso caso voc tenha excludo a base de dados ser necessrio recri-la e utilizar a instruo use para acessarmos a base de dados onde iremos criar nossa primeira tabela.

    15

  • Captulo 3 DML Simples

    Na base de dados db_estudo executaremos a seguinte instruo:

    CREATE TABLE Tb_Cliente(

    inCod_Cli int,vcNome_Cli varchar(30)

    )

    CREATE TABLE Tb_Cliente

    O comando Insert

    Para acrescentarmos linhas em uma tabela, necessrio utilizarmos o comando INSERT.

    insert into tb_cliente values (1,'Marina Farina')insert into tb_cliente values (2,'Edson Mendes')insert into tb_cliente values (3,'Aline Moda')insert into tb_cliente values (4,'Tatiane Souza')insert into tb_cliente values (5,'Cssio Adriano')

    importante lembrar que os apstrofos () devem ser utilizados em strings e caracteres, com exceo de dados numricos; Os valores de cada coluna por sua vez, devem ser separados por vrgulas.

    Obs. No SQL 7 e Access obrigatrio usar a clausula into, a partir do SQL 2000 e superior est clausula no mais obrigatria.

    16

  • Captulo 3 DML Simples

    A instruo Select

    Os dados em uma tabela podem ser lidos atravs da instruo SELECT.

    Por exemplo, para lermos os dados da tabela Tb_Clientes que criamos utilizamos a instruo:

    SELECT * FROM Tb_Clientes

    SELECT * FROM Tb_Clientes

    O asterisco (*) significa que queremos trazer todas as colunas da tabela Cliente.

    Caso seja necessrio removermos uma tabela do banco de dados, devemos executar a seguinte instruo:

    DROP TABLE Tb_Cliente

    17

  • Captulo 3 DML Simples

    A segunda Tabela

    Agora, devemos criar a tabela cliente com diferentes dados, com e-mail e endereo, de modo que ela seja exibida da seguinte maneira:

    incod_Cli vcNome_Cli vcEnd_Cli chFone_Cli vcEmail_Cli1 Marina Farina R Campos, 299 3211-1563 [email protected] Edson Mendes Av. Paulista, 277 5125-2000 [email protected] Aline Moda Al. Santos, 512 4116-1518 [email protected] Tatiana Souza Av. Rebouas, 15 9985-0965 [email protected] Cssio Adriano Av. 9 de julho, 60 5465-1358 [email protected]

    Criaremos est tabela no banco de dados DB_Estudo

    use DB_Estudocreate table tb_cliente(

    inCod_cli int ,vcNome_cli varchar(30),vcEnd_cli varchar(30),chFone_cli char(11),vcEmail_cli varChar(30)

    )

    Assim que a tabela cliente criada devemos inserir os dados apresentados anteriormente, para isso ser necessrio executar as seguintes instrues:

    insert tb_clientevalues(1,'Marina Farina','R Campos, 299','3211-1563','[email protected]')insert tb_cliente values(2,'Edson Mendes','Av. Paulista, 277','5125-2000','[email protected]')insert tb_cliente values(3,'Aline Moda','Al. Santos, 512','4116-1518','[email protected]')insert tb_cliente values(4,'Tatiana Souza','Av. Rebouas, 15','9985-0965','[email protected]')insert tb_cliente values(5,'Cssio Adriano','Av. 9 de julho, 60','5465-1358','[email protected]')

    Feito isso ser necessrio executar o comando SELECT para visualizarmos os dados inseridos na tabela.

    Select * from tb_cliente

    Finalmente podemos finalizar este script e partir para o prximo, mas antes eliminaremos est tabela atravs da instruo:

    DROP TABLE tb_cliente

    18

  • Captulo 3 DML Simples

    A terceira Tabela

    Neste prximo exemplo iremos inserir dados referentes ao salrio e a data que o funcionrio foi registrado, para isso, utilize o datatype decimal e o datatype datetime.

    O tipo decimal necessita de dois parmetros separados por vrgula para identificar a parte inteira e qual ser a parte decimal como (10,2),Durante a incluso dos dados decimais, o ponto (.) dever ser utilizado como separador de casas decimais.

    O tipo datetime baseado no padro norte-americano, ou seja, os valores devem atender ao modelo mm/dd/aaaa. O sinal de apostrofo () tambm deve ser utilizado para indicar o comeo e o final de cada data. A barra obliqua necessria para a separao dos valores referentes ao ms, dia e ano.

    inCod_Cli vcNome_Cli vcEnd_Cli chFone_Cli vcEmail_Cli dcSal_Cli dtData_Cli

    1 Marina FarinaR Campos, 299 3211-1563 [email protected] 1800.00 04/15/2008

    2 Edson MendesAv. Paulista, 277 5125-2000 [email protected] 1210.10 03/20/2007

    3 Aline Moda Al. Santos, 512 4116-1518 [email protected] 2000.00 08/28/2006

    4 Tatiana Souza

    Av. Rebouas, 15

    9985-0965 [email protected] 1500.30 05/01/2004

    5 Cssio Adriano Av. 9 de julho 5465-1358 [email protected] 1945.88 24/06/2005

    use db_estudocreate table tb_cliente(

    inCod_cli int , vcNome_cli varchar(30), vcEnd_cli varchar(30), chFone_cli char(11), vcEmail_cli varChar(30), dcSal_cli decimal(10,2), dtData_cli datetime

    )Depois de criada a tabela adicione os dados:

    insert tb_cliente values(1,'Marina Farina','R Campos, 299','3211-1563','[email protected]',1800.00,'15/04/2008')insert tb_cliente values(2,'Edson Mendes','Av. Paulista, 277','5125-2000','[email protected]',1210.10,'20/03/2007')insert tb_cliente values(3,'Aline Moda','Al. Santos, 512','4116-1518','[email protected]',2000.00,'28/08/2006')insert tb_cliente values(4,'Tatiana Souza','Av. Rebouas, 15','9985-0965','[email protected]',1500.30,'05/01/2004')insert tb_cliente values(5,'Cssio Adriano','Av. 9 de julho, 60','5465-1358','[email protected]',1945.88,'24/06/2005')

    19

  • Captulo 3 DML Simples

    Captulo 3 - DML Simples

    Os comandos DML (Data Manipulation Language - Linguagem de Manipulao de Dados) um subconjunto da linguagem usada para selecionar, inserir, atualizar e apagar dados, por meio destes comandos, essas tarefas podem ser executadas em vrios registros ao mesmo tempo.

    INSERT usada para somar uma fila (formalmente uma tupla) a uma tabela existente.

    SELECT o comumente mais usado do DML, comanda e permite ao usurio especificar uma query como uma descrio do resultado desejado. A questo no especifica como os resultados deveriam ser localizados.

    UPDATE para mudar os valores de dados em uma fila de tabela existente. DELETE permite remover filas existentes de uma tabela.

    INSERT

    A instruo INSERT utilizada para adicionar registros em uma tabela de um banco de dados.

    INSERT [INTO] VALUES()

    INSERT [INTO] (coluna1, coluna2,..colunaN)VALUES (valor1, valor2, ..., valorN)

    Os valores descritos junto ao comando INSERT so transformados em uma ou mais linhas da tabela. Os nomes das colunas nas quais os dados sero inseridos devem ser separados por vrgulas.

    As colunas que no foram declaradas no comando INSERT podem apresentar um valor padro caso essa definio seja configurada na tabela, ou simplesmente o valor NULL.

    Obs. No SQL 7 obrigatrio utilizar a clusula INTO na instruo de INSERT, no SQL SERVER 2000 ou superior, est clusula no mais obrigatria.

    20

  • Captulo 3 DML Simples

    Para compreendermos o uso do INSERT, consideremos o exemplo a seguir.

    INSERT posicional

    A instruo INSERT posicional deve ser utilizada quando queremos inserir dados de acordo com a ordem fsica das colunas da tabela.Exemplo:

    INSERT Tb_Cliente VALUES (1,'Marcos Evangel','Rua 1','3515-2119','[email protected]','4500.26','10/15/02')

    INSERT Tb_ClienteVALUES (2,'Adalberto Bacili','Rua 2','3288-1563','[email protected]','5600.38','10/20/03')

    INSERT Tb_Cliente VALUES (3,'Srgio Manoel','Rua So Bento','4545-1212','[email protected]','4982.74','01/25/04')

    INSERT Tb_Cliente VALUES (4,'Thiago Hawano','Rua Direta','7875-1520','[email protected]','6423.12','02/14/06')

    INSERT Tb_Cliente VALUES (5,'Carina Tugues','Rua Torta ','3132-3113','[email protected]','6800.98','01/13/98')

    INSERT Tb_Cliente VALUES (6,'Fabio Monte','Av. Santos','2526-1515','[email protected]','4678.15','06/25/92')

    21

  • Captulo 3 DML Simples

    INSERT declarativo

    O INSERT declarativo deve ser utilizado quando queremos incluir dados na tabela de modo que possamos definir uma ordem em que tais valores sero adicionados. Exemplo:

    INSERT INTO Tb_Cliente (inCod_cli, vcNome_cli, vcEnd_Cli, vcFone_cli, vcEmail_cli, dcSal_cli, dtDAta_cli)VALUES (1,'Marcos Evangel','Rua 1','3515-2119','[email protected]','4500.26','10/15/02')

    INSERT INTO Tb_Cliente ( inCod_cli, vcNome_cli, vcEnd_Cli, vcFone_cli, vcEmail_cli, dcSal_cli, dtDAta_cli)VALUES (2,'Adalberto Bacili','Rua 2','3288-1563','[email protected]','5600.38','10/20/03')

    INSERT INTO Tb_Cliente ( inCod_cli, vcNome_cli, vcEnd_Cli, vcFone_cli, vcEmail_cli, dcSal_cli, dtDAta_cli)VALUES ( 3, 'Srgio Manoel', 'Rua So Bento', '4545-1212', '[email protected]', '4982.74', '01/25/04' )

    Obs. As trs estruturas esto corretas, neste exemplo apenas estruturei as instrues de formas diferentes para ilustrar algumas maneiras de organizar a instruo, lembrando que para executarmos uma instruo, temos de selecionar todo o comando referente a mesma.

    22

  • Captulo 3 DML Simples

    SELECT

    Esta sem duvidas a instruo SQL mais importante e mais utilizada na linguagem SQL para a realizao de consultas a dados. Por meio desta instruo podemos retornar dados para outros comandos SQL e outras aplicaes.

    Para compreendermos o uso do SELECT, consideremos o exemplo a seguir.

    Exibindo todas as colunas

    Para que todos os dados contidos dentro da tabela cliente sejam exibidos, devemos utilizar o seguinte comando:

    SELECT * FROM Tb_Cliente

    Com a utilizao do comando ( * ), os dados so exibidos na mesma ordem em que foram criados na tabela Cliente.

    Exibindo algumas colunas

    Para exibirmos apenas os dados de algumas colunas da tabela de clientes, devemos substituir o ( * ) pelos nomes das colunas da tabela.

    SELECT vcNome_cli, vcEnd_cli, vcEmail_cli FROM Tb_Cliente

    Exibindo colunas utilizando alias

    Podemos substituir o nome de uma coluna por um alias (apelido), para facilitarmos a visualizao.

    SELECT vcNome_cli AS Nome_Cliente, vcEnd_cli AS Endereco_Cliente, vcEmail_cli AS Email_Cliente

    FROM Tb_Cliente

    23

  • Captulo 3 DML Simples

    No necessrio utilizar clusula AS para colocarmos um apelido nas colunas da tabela, mas muitos usurios, preferem manter a clusula AS para facilitar a identificao do apelido.

    SELECT vcNome_cli Nome_Cliente, vcEnd_cli Endereco_Cliente, vcEmail_cli Email_Cliente

    FROM Tb_Cliente

    Existe tambm outra maneira de se utilizar os apelidos de colunas, como mostra o exemplo a seguir:

    SELECT Nome_Cliente = vcNome_cli, Endereco_Cliente = vcEnd_cli, Email_Cliente = vcEmail_cli

    FROM Tb_Cliente

    Exibindo colunas utilizando alias com espao no nome

    Para utilizarmos espaos em branco em apelidos de colunas, devemos fazer o uso dos colchetes [Nome Cliente], vejamos alguns exemplos:

    SELECT vcNome_cli AS [Nome Cliente], vcEnd_cli AS [Endereco Cliente], vcEmail_cli AS [Email Cliente]

    FROM Tb_Cliente

    SELECT vcNome_cli [Nome Cliente], vcEnd_cli [Endereco Cliente], vcEmail_cli [Email Cliente]

    FROM Tb_Cliente

    SELECT[Nome Cliente] = vcNome_cli, [Endereco Cliente] = vcEnd_cli, [Email Cliente] = vcEmail_cli

    FROM Tb_Cliente

    24

  • Captulo 3 DML Simples

    Criando uma coluna virtual com o comando SELECT

    Quando utilizamos uma instruo SELECT no necessariamente podemos exibir apenas as colunas existentes em uma tabela, podemos apresentar colunas que no existe na tabela para, por exemplo, descrever uma situao em relao aos dados listados. No exemplo a seguir a coluna Tipo de Cliente no faz parte do banco de dados, mas podemos inclu-la em uma consulta para retornarmos alguma descrio sobre os dados, vejamos o exemplo

    SELECT vcNome_cli AS [Nome Cliente], vcEnd_cli AS [Endereco Cliente], vcEmail_cli AS [Email Cliente],Ex-aluno AS [Tipo de Cliente]

    FROM Tb_Cliente

    SELECT vcNome_cli [Nome Cliente], vcEnd_cli [Endereco Cliente], vcEmail_cli [Email Cliente],Ex-aluno [Tipo de Cliente]

    FROM Tb_Cliente

    SELECT [Nome Cliente] = vcNome_cli, [Endereco Cliente] = vcEnd_cli, [Email Cliente] = vcEmail_cli , [Tipo de Cliente] = Ex-aluno

    FROM Tb_Cliente

    25

  • Captulo 3 DML Simples

    Exibindo uma operao com comando SELECT

    Algumas vezes necessitamos exibir alguns dados que no existem em uma tabela, como por exemplo, se quisermos exibir um aumento de 10% no salrio de cada cliente. Desejamos exibir esta informao, mas no queremos salvar esta informao na tabela. Vejamos o exemplo:

    SELECT vcNome_cli AS [Nome Cliente], vcEnd_cli AS [Endereco Cliente], vcEmail_cli AS [Email Cliente],Ex-aluno AS [Tipo de Cliente],dcSal_cli AS [Salrio do Cliente],dcSal_cli * 1.1 AS [Salrio com 10% de aumento]

    FROM Tb_Cliente

    SELECT vcNome_cli [Nome Cliente], vcEnd_cli [Endereco Cliente], vcEmail_cli [Email Cliente],Ex-aluno [Tipo de Cliente],dcSal_cli [Salrio do Cliente],dcSal_cli * 1.1 [Salrio com 10% de aumento]

    FROM Tb_Cliente

    SELECT [Nome Cliente] = vcNome_cli, [Endereco Cliente] = vcEnd_cli, [Email Cliente] = vcEmail_cli , [Tipo de Cliente] = Ex-aluno, [Salrio do Cliente] = dcSal_cli , [Salrio com 10% de aumento] = dcSal_cli * 1.1

    FROM Tb_Cliente

    26

  • Captulo 3 DML Simples

    Exibindo apenas uma vez os dados repetidos DISTINCT

    Conforme a tabela abaixo o cliente Fabio Monte foi adicionado duas vezes na tabela de cadastro de cliente, mas desejamos exibir apenas uma vez cada registro.

    Ao listarmos os dados de Nome de cliente e data de Cadastro teremos o cliente Fabio Monte aparecera duas vezes como no exemplo abaixo:

    SELECT vcNome_cli, dtData_clFROM Tb_Cliente

    Para que os registros repetidos no sejam exibidos, devemos utilizar a clusula DISTINCT junto como comando SELECT, como mostra a instruo a seguir:

    SELECT DISTINCT vcNome_cli, dtData_cli FROM Tb_Cliente

    27

  • Captulo 3 DML Simples

    Copiando dados de uma tabela para outra tabela utilizando os comandos INSERT com SELECT

    Para copiarmos dados de uma tabela para outra, precisamos que a estrutura das tabelas seja similar, ou se diferentes, que a tornemos similares por meio da instruo SELECT.

    INSERT com SELECT quando as tabelas so iguais

    Para este exemplo, criaremos duas tabelas com estruturas idnticas, mas representando entidades diferentes.

    CREATE TABLE tb_cliente(

    inCod_cli int , vcNome_cli varchar(30), vcEnd_cli varchar(30), chFone_cli char(11), vcEmail_cli varChar(30), dcSal_cli decimal(10,2), dtData_cli datetime

    )

    CREATE TABLE tb_funcionario(

    inCod_fun int , vcNome_fun varchar(30), vcEnd_fun varchar(30), chFone_fun char(11), vcEmail_fun varChar(30), dcSal_fun decimal(10,2), dtData_fun datetime

    )

    Os dados j esto disponveis na tabela de cliente, mas queremos copi-los para a tabela de funcionrios. Como ambas possuem a mesma quantidade de colunas e o mesmo tipo de dados em cada coluna e uma seqncia idntica, podemos utilizar a seguinte instruo:

    INSERT INTO tb_funcionario SELECT * FROM tb_cliente

    INSERT tb_funcionarioSELECT * FROM tb_cliente

    28

  • Captulo 3 DML Simples

    INSERT com SELECT quando as tabelas so diferentes

    Para este exemplo, criaremos duas tabelas com estruturas idnticas, mas representando entidades diferentes.

    CREATE TABLE tb_cliente(

    inCod_cli int , vcNome_cli varchar(30), vcEnd_cli varchar(30) , dtData_cli datetime

    )

    CREATE TABLE tb_funcionario(

    inCod_fun int , vcNome_fun varchar(30), vcEnd_fun varchar(30), chFone_fun char(11), vcEmail_fun varChar(30), dcSal_fun decimal(10,2), dtData_fun datetime

    )

    Embora a tabela de cliente contenha alguns registros, nem todas as colunas existentes em funcionrio, existem na tabela de clientes. Para que seja possvel copiar dados de cliente para funcionrio, devemos utilizar a instruo SELECT com as colunas virtuais, como no exemplo abaixo:

    INSERT INTO Tb_funcionarioSELECT inCod_cli

    , vcNome_cli, vcEnd_cli, 0000-0000, No tem e-mail, 0,dtData_cli

    FROM tb_cliente

    INSERT Tb_funcionarioSELECT inCod_cli

    , vcNome_cli, vcEnd_cli, 0000-0000, No tem e-mail, 0,dtData_cli

    FROM tb_cliente

    Dessa forma a tabela de funcionrio ter os seguintes registros:

    29

  • Captulo 3 DML Simples

    3.3. UPDATE

    Os registros de cada tabela podem ser alterados por meio do comando UPDATE, por exemplo, por meio deste comando podemos aumentar o valor do salrio de todos os clientes em 5%.Para utilizarmos esta instruo precisamos, especificar algumas informaes. Como o nome da tabela que ser atualizada e as colunas que sofrero a alterao

    Para compreendermos o uso do UPDATE, consideremos o exemplo a seguir.

    Alterando dados de uma coluna

    Para alterarmos apenas os dados da coluna dcSal_cli devemos utilizar a seguinte instruo:

    UPDATE Tb_cliente SET dc_Sal_cli = dc_Sal_cli * 1.05

    Aps executarmos este comando os registros apareceram da seguinte forma:

    30

  • Captulo 3 DML Simples

    Alterando dados de varias colunas

    Para alterarmos os dados de diferentes colunas da tabela devemos especificar o nome das colunas separadas por vrgula.

    UPDATE Tb_cliente SET dc_Sal_cli = dc_Sal_cli * 1.05

    , dtData_cli = dtData_cli + 1

    UPDATE Tb_cliente SET dc_Sal_cli = dc_Sal_cli * 1.05

    , dtData_cli = dtData_cli + 1FROM Tb_cliente

    Alm de alterarmos o salrio dos clientes, estamos somando 1 dia a mais na data de cadastro dos clientes.

    DELETE

    A instruo DELETE deve ser utilizado quando desejamos eliminar dados de uma tabela.

    Por exemplo:

    DELETE Tb_cliente DELETE FROM Tb_cliente

    Obs. Caso alguma linha no possa ser removida da tabela, nenhum dado ser eliminado.

    31

  • Captulo 4 - A clusula WHERE

    Captulo 4 - A clusula WHERE

    A clusula WHERE uma parte opcional da instruo SELECT, DELETE e da instruo UPDATE. A clusula WHERE permite selecionar linhas baseado em uma expresso booleana. Somente as linhas para as quais a expresso avaliada como TRUE so retornadas no resultado, ou no caso da instruo DELETE, excludas, ou no caso da instruo UPDATE, atualizadas.

    Utilizaremos a seguinte tabela de produtos para trabalharmos com a clusula WHERE.

    CREATE TABLE tb_Produto( inCod_Prod int

    , vcNome_Prod varchar(50), vcTipo_Prod varchar(50), inQtd_Prod int, dcValor_Prod decimal(10,2)

    )GOINSERT INTO tb_Produto VALUES(1,'Teclado','Informtica',100,150.00)INSERT INTO tb_Produto VALUES(2,'Mouse','Informtica',300,45.00)INSERT INTO tb_Produto VALUES(3,'Filmadora Digital','Digitais',500,2500.00)INSERT INTO tb_Produto VALUES(4,'Celular','Telefones',1000,1500.00)INSERT INTO tb_Produto VALUES(5,'DVD Player','Eletrnicos',150,150.00)INSERT INTO tb_Produto VALUES(6,'Caixas de Som','Informtica',20,80.00)INSERT INTO tb_Produto VALUES(7,'Televisor','Digitais',50,25000.00)INSERT INTO tb_Produto VALUES(8,'Rgua','Escritrio',180,10.00)INSERT INTO tb_Produto VALUES(9,'CD','Informtica',320,1.50)INSERT INTO tb_Produto VALUES(10,'DVD','Informtica',500,3.50)

    32

  • Captulo 4 - A clusula WHERE

    Exemplo 1: Alterao linha Exemplo 2: Seleo Exemplo 3: Apagar linha

    UPDATE tb_ProdutoSET dcValor_Prod = dcValor_Prod *1.1WHERE vcTipo_Prod = 'Informtica'

    SELECT * FROM tb_ProdutoWHERE vcTipo_Prod = Informtica

    DELETE FROM tb_produtoWHERE inCod_Prod = 8

    Exemplos :

    Exemplo 1: Alterao linha

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod1 Teclado Informtica 100 165.002 Mouse Informtica 300 49.503 Filmadora Digital Digitais 500 2500.004 Celular Telefones 1000 1500.005 DVD Player Eletrnicos 150 150.006 Caixas de Som Informtica 20 88.007 Televisor Digitais 50 25000.008 Rgua Escritrio 180 10.009 CD Informtica 320 1.65

    10 DVD Informtica 500 3.85

    Exemplo 2: Seleo

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod1 Teclado Informtica 100 165.002 Mouse Informtica 300 49.506 Caixas de Som Informtica 20 88.009 CD Informtica 320 1.65

    10 DVD Informtica 500 3.85

    33

  • Captulo 4 - A clusula WHERE

    Exemplo 3: Apagar linha

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod1 Teclado Informtica 100 165.002 Mouse Informtica 300 49.503 Filmadora Digital Digitais 500 2500.004 Celular Telefones 1000 1500.005 DVD Player Eletrnicos 150 150.006 Caixas de Som Informtica 20 88.007 Televisor Digitais 50 25000.009 CD Informtica 320 1.65

    10 DVD Informtica 500 3.85

    A clusula WHERE com os operadores lgicos AND e OR

    Os operadores lgicos AND e OR so empregados na clusula WHERE quando necessitamos especificar mais que uma condio de comparao.

    Exemplo 1: Precisamos listar todos os produtos de informtica cuja quantidade seja menor que 300.

    Logo queremos os produtos onde Tipo= Informtica e Quantidade menor que 300.

    Ento: WHERE vcTipo_Prod = Informtica AND inQtd_Prod < 300

    SELECT * FROM tb_ProdutoWHERE vcTipo_Prod = 'Informtica'AND inQtd_Prod < 300

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod1 Teclado Informtica 100 165.006 Caixas de Som Informtica 20 88.00

    34

  • Captulo 4 - A clusula WHERE

    Exemplo 2: Precisamos aumentar o valor do produto em 10% dos produtos que forem dos tipos Eletrnicos ou sobre o valor daqueles cujo preo maior ou igual a R$700,00.

    Logo queremos os produtos onde Tipo= Eletrnicos ou Valor

  • Captulo 4 - A clusula WHERE

    Ao executarmos ambas as instrues obtemos os mesmos resultados.

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod1 Teclado Informtica 100 181.502 Mouse Informtica 300 54.455 DVD Player Eletrnicos 150 165.006 Caixas de Som Informtica 20 96.809 CD Informtica 320 1.82

    10 DVD Informtica 500 4.24

    A clusula WHERE com os operadores NOT IN

    O operador lgico NOT IN, ao contrrio de IN, permite obter resultados que no esteja em uma determinada condio. Por exemplo, no queremos os produtos do tipo Eletrnicos e Informtica.

    Exemplo Operador NOT IN

    SELECT * FROM tb_ProdutoWHERE vcTipo_Prod NOT IN ('Eletrnicos','Informtica')

    Tambm possivel utilizar o operador lgico AND em conjunto ao sinal de comparao diferente ( ) ou ( != ) para obter o mesmo resultado.

    SELECT * FROM tb_ProdutoWHERE vcTipo_Prod 'Eletrnicos'AND vcTipo_Prod 'Informtica'

    SELECT * FROM tb_ProdutoWHERE vcTipo_Prod != 'Eletrnicos'AND vcTipo_Prod != 'Informtica'

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod3 Filmadora Digital Digitais 500 2500.004 Celular Telefones 1000 1500.007 Televisor Digitais 50 25000.00

    36

  • Captulo 4 - A clusula WHERE

    4.1. A clusula WHERE com o operador BETWEEN

    O operador BETWEEN tem a finalidade de permitir a consulta de uma faixa de valores. Dessa forma, podemos selecionar da tabela produtos os produtos que estejam entre R$100,00 e R$500,00. Vejamos o exemplo:

    SELECT * FROM tb_ProdutoWHERE dcValor_Prod BETWEEN 100.00 AND 500.00

    Outra forma de se obter o mesmo resultado por meio da seguinte instruo:

    SELECT * FROM tb_ProdutoWHERE dcValor_Prod >= 100.00 AND dcValor_Prod 500.00

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod2 Mouse Informtica 300 54.453 Filmadora Eletrnicos 500 2750.004 Celular Eletrnicos 1000 1650.006 Caixas de Som Informtica 20 96.807 Televisor Eletrnicos 50 27500.009 CD Informtica 320 1.82

    10 DVD Informtica 500 4.24

    37

  • Captulo 4 - A clusula WHERE

    O Operador LIKE

    O operador LIKE [como] faz casamento de padres. Um padro uma string contendo caracteres que podem ser combinados com parte de outra string.Por exemplo, o caractere % em um padro representa qualquer quantidade de caracteres. Por exemplo, para obter todos os produtos cujo (primeiro) nome comea com C, use:

    SELECT * FROM tb_produtoWHERE vcNome_Prod LIKE 'C%'

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod4 Celular Eletrnicos 1000 1650.006 Caixas de Som Informtica 20 96.809 CD Informtica 320 1.82

    Para obter todos os produtos que contenham as letras 'ad' no meio (ou no incio ou no fim), use:

    SELECT * FROM tb_produtoWHERE vcNome_Prod LIKE '%ad%'

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod1 Teclado Informtica 100 181.503 Filmadora Digital Digitais 500 2500.00

    Tambm possvel usar os colchetes para combinar com uma determinada faixa de caracteres. Por exemplo, LIKE '[CD]%' encontra os produtos que iniciam com C ou K

    SELECT * FROM tb_produtoWHERE vcNOme_Prod LIKE '[CD]%'

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod4 Celular Telefones 1000 1500.005 DVD Player Eletrnicos 150 165.006 Caixas de Som Informtica 20 96.809 CD Informtica 320 1.82

    10 DVD Informtica 500 4.24

    38

  • Captulo 4 - A clusula WHERE

    Tambm possvel trazer os produtos que comeam com as letras de A at F.

    SELECT * FROM tb_produtoWHERE vcNome_Prod LIKE '[A-F]%'

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod3 Filmadora Digital Digitais 500 2500.004 Celular Telefones 1000 1500.005 DVD Player Eletrnicos 150 165.006 Caixas de Som Informtica 20 96.809 CD Informtica 320 1.82

    10 DVD Informtica 500 4.24

    J o LIKE '[^T]%' encontra os produtos que no comeam com T (o caractere ^ indica no).

    SELECT * FROM tb_produtoWHERE vcNome_Prod LIKE '[^T]%'

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod2 Mouse Informtica 300 54.453 Filmadora Digital Digitais 500 2500.004 Celular Telefones 1000 1500.005 DVD Player Eletrnicos 150 165.006 Caixas de Som Informtica 20 96.809 CD Informtica 320 1.82

    10 DVD Informtica 500 4.24

    Caso invertamos a posio da % como no exemplo abaixo, teremos o valores que terminam com, por exemplo, R.

    SELECT * FROM tb_produtoWHERE vcNome_Prod LIKE '%R'

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod4 Celular Telefones 1000 1500.005 DVD Player Eletrnicos 150 165.007 Televisor Digitais 50 25000.00

    Note que as comparaes feitas com LIKE dependem da ordem de classificao [sort order] escolhida durante a instalao do SQL Server. Se for usada a ordem "accentinsensitive", ele consegue procurar ignorando acentos. Por exemplo, LIKE 'camara' vai encontrar tambm 'Cmara'.

    39

  • Captulo 4 - A clusula WHERE

    A clusula WHERE com os operadores NOT LIKE

    O operador NOT LIKE utilizado de forma oposta ao operador LIKE.

    Por exemplo, queremos produtos que no possuem a letra R no nome do produto.

    SELECT * FROM tb_produtoWHERE vcNome_Prod NOT LIKE '%R%'

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod1 Teclado Informtica 100 181.502 Mouse Informtica 300 54.456 Caixas de Som Informtica 20 96.809 CD Informtica 320 1.82

    10 DVD Informtica 500 4.24

    Ou produtos que no comeam com a letra C.

    SELECT * FROM tb_produtoWHERE vcNome_Prod NOT LIKE 'c%'

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod1 Teclado Informtica 100 181.502 Mouse Informtica 300 54.453 Filmadora Digital Digitais 500 2500.005 DVD Player Eletrnicos 150 165.007 Televisor Digitais 50 25000.00

    10 DVD Informtica 500 4.24

    Outro caractere para usar em padres o sublinhado (_). Ele combina com um nico caractere. Por exemplo, se nos seus dados existem campos como, por exemplo, nome 'Sousa' ou 'Souza', voc pode usar: LIKE '%sou_a%'.

    40

  • Captulo 5 - A Clusula ORDER BY

    Captulo 5 - A Clusula ORDER BY

    ORDER BY

    Para ver o resultado numa ordem particular, use a clusula ORDER BY. Se estiver presente, deve ser a ltima clusula do comando SELECT, a clusula ORDER BY utilizada em conjunto com a instruo SELECT, a fim de retornar o resultado de uma consulta em uma determinada ordem.

    Ordenando por colunas

    Podemos utilizar como critrio de ordenao, o nome ou o numero referente a coluna que se deseja ordenar.

    Ordenando por uma coluna

    SELECT * FROM tb_produtoORDER BY vcNome_Prod

    SELECT * FROM tb_produtoORDER BY 2

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod6 Caixas de Som Informtica 20 96.809 CD Informtica 320 1.824 Celular Telefones 1000 1500.00

    10 DVD Informtica 500 4.245 DVD Player Eletrnicos 150 165.003 Filmadora Digital Digitais 500 2500.002 Mouse Informtica 300 54.451 Teclado Informtica 100 181.507 Televisor Digitais 50 25000.00

    Ordenando por varias colunas

    SELECT * FROM tb_produtoORDER BY vcTipo_Prod, dcValor_Prod

    SELECT * FROM tb_produtoORDER BY 3,5

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod3 Filmadora Digital Digitais 500 2500.007 Televisor Digitais 50 25000.005 DVD Player Eletrnicos 150 165.009 CD Informtica 320 1.82

    10 DVD Informtica 500 4.242 Mouse Informtica 300 54.456 Caixas de Som Informtica 20 96.801 Teclado Informtica 100 181.504 Celular Telefones 1000 1500.00

    5.1. ORDER BY ASC e DESC

    41

  • Captulo 5 - A Clusula ORDER BY

    Na clusula ORDER BY pode-se adicionar mais uma instruo que indica se a ordenao ser ascendente ou descendente.

    ASCQuando utilizamos est instruo, estamos solicitando uma ordenao ascendente, ou seja, do menor para o maior.

    SELECT vcNome_Prod, dcValor_Prod FROM tb_produtoORDER BY dcValor_Prod ASC

    vcNome_Prod dcValor_ProdCD 1.82DVD 4.24Mouse 54.45Caixas de Som 96.80DVD Player 165.00Teclado 181.50Celular 1500.00Filmadora Digital 2500.00Televisor 25000.00

    DESCQuando utilizamos est instruo, estamos solicitando uma ordenao descendente, ou seja, do maior para o menor.

    SELECT vcNome_Prod, dcValor_Prod FROM tb_produtoORDER BY dcValor_Prod DESC

    vcNome_Prod dcValor_ProdTelevisor 25000.00Filmadora Digital 2500.00Celular 1500.00Teclado 181.50DVD Player 165.00Caixas de Som 96.80Mouse 54.45DVD 4.24CD 1.82

    42

  • Captulo 5 - A Clusula ORDER BY

    ASC e DESC

    Podemos combinar as clusulas ASC e DESC de maneira que uma coluna fique na ordem crescente e a outra fique na ordem decrescente, por exemplo, queremos que a primeira coluna do tipo de produto esteja na ordem crescente, mas os preos estejam na ordem decrescente. Vejamos o exemplo:

    SELECT vcTipo_Prod, vcNome_Prod, dcValor_Prod FROM tb_produtoORDER BY vcTipo_Prod ASC, dcValor_Prod DESC

    vcTipo_Prod vcNome_Prod dcValor_ProdDigitais Televisor 25000.00Digitais Filmadora Digital 2500.00Eletrnicos DVD Player 165.00Informtica Teclado 181.50Informtica Caixas de Som 96.80Informtica Mouse 54.45Informtica DVD 4.24Informtica CD 1.82Telefones Celular 1500.00

    Nota: Se no especificarmos ASC nem DESC, o default ASC.

    A clusula TOP

    A clusula TOP permite que retornemos em uma consulta um limite mximo de linhas estipulado na clusula TOP.

    Est clusula muito utilizado tambm para realizarmos testes para verificarmos nomes de campos de uma determinada tabela sem precisarmos retornar todos os registros.

    SELECT TOP 5 * FROM tb_Produto

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod1 Teclado Informtica 100 181.502 Mouse Informtica 300 54.453 Filmadora Digital Digitais 500 2500.004 Celular Telefones 1000 1500.005 DVD Player Eletrnicos 150 165.00

    43

  • Captulo 5 - A Clusula ORDER BY

    A clusula TOP com Order By

    Por exemplo, queremos os trs produtos mais caros de nossa loja.

    SELECT TOP 3 * FROM tb_ProdutoORDER BY dcValor_Prod DESC

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod7 Televisor Digitais 50 25000.003 Filmadora Digital Digitais 500 2500.004 Celular Telefones 1000 1500.00

    A clusula TOP WITH TIES com ORDER BY

    Especifica que linhas adicionais so retornadas do conjunto de resultados base com o mesmo valor das colunas que aparecem na ltima das TOP n linhas (PERCENT). TOP... WITH TIES s pode ser especificado em instrues SELECT, e apenas se uma clusula ORDER BY for especificada.

    Para o exemplo abaixo iremos realizar mais um INSERT na tabela de produtos.

    INSERT INTO tb_Produto VALUES(1,'Teclado Wireless','Informtica',20,150.00)

    Agora vamos supor que precisamos obter como resultado o produto com a menor quantidade de unidades. Porm, preciso considerar a existncia do e produtos com a mesma quantidade de unidades. Neste caso o comando para retornar os produtos com menor numera de unidades:

    SELECT TOP 1 WITH TIES * FROM tb_ProdutoORDER BY inQtd_Prod ASC

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod6 Caixas de Som Informtica 20 96.801 Teclado Wireless Informtica 20 150.00

    A clusula WITH TIES retorna a primeira linha da tabela, alm de todas as linhas que apresentam quantidade idntica quantidade do produto que a clusula TOP selecionou.

    44

  • Captulo 5 - A Clusula ORDER BY

    Vejamos mais um exemplo com a clusula WITH TIES.

    Na instruo SELECT com TOP normalmente s retornado a quantidade mxima que especificada na clusula TOP, neste caso, apenas oito registros, mas quando utilizamos a clusula WITH TIES a instruo retorna tambm os registros onde a quantidade igual ao ultimo registro, neste caso, o oitavo registro.

    SELECT TOP 8 WITH TIES * FROM tb_ProdutoORDER BY inQtd_Prod ASC

    inCod_Prod vcNome_Prod vcTipo_Prod inQtd_Prod dcValor_Prod6 Caixas de Som Informtica 20 96.801 Teclado Wireless Informtica 20 150.007 Televisor Digitais 50 25000.001 Teclado Informtica 100 181.505 DVD Player Eletrnicos 150 165.002 Mouse Informtica 300 54.459 CD Informtica 320 1.82

    10 DVD Informtica 500 4.243 Filmadora Digital Digitais 500 2500.00

    45

  • Captulo 7 - Associando Tabelas

    Captulo 6 - Integridade e Consistncia dos Dados

    Quando falamos em integridade, pensamos em proteo contra hackers e ataques do gnero, ou at mesmo backup, mas a integridade comea em um nvel muito mais baixo, comea na criao e projeto do banco de dados.

    Regras de Integridade e consistncia

    Integridade de Domnio

    A integridade de domnio nada mais do que a integridade do campo como o tipo de dados correto, se permite valores nulos ou no nulos, valores padro, verificao de valores e restries, estes mecanismos foram criados para dar integridade aos campos. Os tipos de dados tambm so caracterizados como integridade de domnio, se o tipo de dado estiver incorreto, ou com mais posies que o necessrio, pode haver um risco que quebre a qualidade da informao.

    Integridade de Entidade

    A integridade de entidade nada mais que a integridade da tabela, isto conseguido atravs das chaves primrias ou campos nicos, uma tabela sem chave primria ou campo nico uma tabela sem integridade de entidade, muito comum encontrarmos base de dados com tabelas sem qualquer tipo de restrio, alguns colocam campo auto incrementvel e no se preocupam com a chave primria ou principal, mas esquecem que o campo auto incrementvel no garante a no duplicidade dos registros.

    Integridade Referencial

    A integridade referencial conhecida principalmente pelas chaves estrangeiras ou referencias a outras tabelas, nada mais que criarmos campos de mesmo tipo de dados referente a uma coluna de chave primria de outra tabela, isto possvel a partir da integridade de entidade, apenas conseguimos criar uma chave estrangeira a partir de uma chave primria ou nica.

    46

  • Captulo 7 - Associando Tabelas

    Para que possamos compreender as regras referentes integridade e consistncia de dados, utilizaremos a tabela de Colaborador, descrita abaixo.

    vcNome chSexo dcSalarioLuana Maia M 1980.00Andr Inca M 2103.00Suzana Silva F 2530.00Rogrio Tecca M 1752.00Andr Inca M 2103.00

    CREATE TABLE tb_colaborador(

    vcNome varchar(100),chSexo char(1),dcSalario decimal(10,2)

    )

    GO

    INSERT INTO tb_colaborador values ('Luana Maia','M',1980.00)INSERT INTO tb_colaborador values ('Andr Inca','M',2103.00)INSERT INTO tb_colaborador values ('Suzana Silva','F',2530.00)INSERT INTO tb_colaborador values ('Rogrio Tecca','M',1752.00)INSERT INTO tb_colaborador values ('Andr Inca','M',2103.00)

    47

  • Captulo 7 - Associando Tabelas

    Constraints

    Uma restrio [constraint] uma propriedade de uma coluna usada para reforar a integridade de dados. Geralmente restries so definidas quando a tabela criada, mas podem tambm ser definidas ou retiradas quando a tabela j contm dados. Se um comando de alterao (INSERT ou UPDATE) no satisfaz uma das restries, o comando cancelado.Toda restrio tem um nome, que voc pode informar nos comandos CREATE TABLE e ALTER TABLE. Se voc no informar um nome, o SQL gera um automaticamente, como PK_TITLEAUTH_AU_ID_154AF3E0.

    A fim de assegurar a integridade dos dados, o SQL SERVER oferece cinco tipos de restries diferentes, os quais esto relacionados na tabela abaixo:

    Tipos de Integridade Tipos de ConstraintsChave Primria Constraint Primary KeyChave Estrangeira Constraint Foreign Key e Constraint ReferencesChave Primria, Secundria ou Chave Unica Constraint UniqueRegras de validao Constaint CheckValor Padro Constraint Default

    Chaves primrias

    A chave primria de uma tabela uma coluna ou seqncia de colunas que identificam unicamente uma linha dentro da tabela, ou seja, seu valor no pode ser repetido para outras linhas. Ao definir uma chave primria, automaticamente criado um ndice clustered na tabela. S pode existir uma chave primria na tabela. No se pode inserir um valor nulo em qualquer coluna chave primria (lembrando que nulo um valor desconhecido, diferente de 0 ou de espao em branco). Recomenda-se uma coluna inteira e pequena, como uma chave primria

    Vejamos o exemplo da tabela colaborador, o funcionrio Andr foi inserido duas vezes na tabela de colaborador, para aplicarmos um aumento salarial apenas a um dos Andrs necessitamos de um identificador que diferencie um Andr do outro Andr, para isso precisamos incluir uma coluna de cdigo do colaborador que nos permita diferenciar um colaborador do outro, ento criaremos uma coluna de cdigo do tipo inteiro que seja auto-incremento e seja nica.

    48

  • Captulo 7 - Associando Tabelas

    ALTER TABLE tb_colaborador ADD inId int IDENTITY(1,1) PRIMARY KEY

    vcNome chSexo dcSalario inIdLuana Maia M 1980.00 1Andr Inca M 2103.00 2Suzana Silva F 2530.00 3Rogrio Tecca M 1752.00 4Andr Inca M 2103.00 5

    Ao adicionarmos uma nova coluna, a mesma sempre ser gerada na ultima coluna da tabela.

    IDENTITY

    Quando indicamos um campo como IDENTITY estamos dizendo que este campo ser auto incrementvel, portanto no podemos especific-lo ou adicionar um valor ao mesmo quando realizarmos um INSERT na tabela, pois os valores deste campo so auto gerveis.

    IDENTITY [ (seed , increment) ]

    SEED - SementeCorresponde ao numero do primeiro valor que ser inserido na tabela.

    INCREMENT - Incremento o valor incremental que acrescentado ao valor de identidade linha anterior, que foi carregado, o famoso passo.

    Caso no seja especificado o seed e o increment o padro (1,1)

    Nota: Existem situaes em que a constraint Primary Key definida em vrias colunas. Quando isso ocorre, possvel que haja valores duplicados em uma coluna, porm, a combinao de valores da coluna que representa a constraint Primary Key deve ser nica.

    49

  • Captulo 7 - Associando Tabelas

    Chaves primrias, secundrias ou chaves nicas

    Alm das constraints Primary Key, tambm podemos utilizar constraints UNIQUE, uma restrio UNIQUE em uma coluna ou grupo de colunas determina que o seu valor deva ser nico na tabela. Esse tipo de restrio usado para chaves alternadas, ou seja, valores que se repetem na tabela alm da chave primria. Pode haver vrias restries UNIQUE na tabela e as colunas de uma restrio UNIQUE permitem valores nulos.

    Vamos adicionar o campo Documento na tabela colaborador, o mesmo dever ser NICO para cada colaborador, mas primeiro precisamos criar um campo documento e inserir seus respectivos valores.

    Criando o campo Documento na tabela colaborador

    ALTER TABLE tb_colaborador ADD vcDocumento varchar(11)

    vcNome chSexo dcSalario inId vcDocumentoLuana Maia M 1980.00 1 NULLAndr Inca M 2103.00 2 NULLSuzana Silva F 2530.00 3 NULLRogrio Tecca M 1752.00 4 NULLAndr Inca M 2103.00 5 NULL

    UPDATE tb_colaborador SET vcDocumento = '22623228884'WHERE inId = 1UPDATE tb_colaborador SET vcDocumento = '22623228881'WHERE inId = 2UPDATE tb_colaborador SET vcDocumento = '22623228882'WHERE inId = 3UPDATE tb_colaborador SET vcDocumento = '22623228883'WHERE inId = 4UPDATE tb_colaborador SET vcDocumento = NULLWHERE inId = 5

    vcNome chSexo dcSalario inId vcDocumentoLuana Maia M 1980.00 1 22623228884Andr Inca M 2103.00 2 22623228881Suzana Silva F 2530.00 3 22623228882Rogrio Tecca M 1752.00 4 22623228883Andr Inca M 2103.00 5 NULL

    Obs. Nota quando adicionamos um novo campo a tabela, a coluna ser sempre inserida no final da tabela.

    50

  • Captulo 7 - Associando Tabelas

    Aps atualizarmos a tabela de colaborador, podemos adicionar a restrio UNIQUE no campo documento, para garantirmos que duas pessoas no tero o mesmo documento na tabela.

    ALTER TABLE tb_colaborador ADD CONSTRAINT UQ_Documento UNIQUE(vcDocumento)

    Note que colocamos um nome a constraint UNIQUE de UQ_Documento.

    Nota: As constraints do tipo UNIQUE podem ser utilizadas para referenciar uma chave estrangeira.

    Chaves estrangeiras

    Uma forma importante de integridade no banco de dados a integridade referencial, que a verificao de integridade feita entre duas tabelas. Por exemplo, a tabela 'Dependente' ser usada para relacionar dados de COLABORADOR e DEPENDENTES. Ela contm as colunas inIdColab e inIdDepen. A segunda deve conter um cdigo vlido que exista na tabela 'Colaborador'. Uma chave estrangeira Foreign Key uma restrio de integridade referencial. Ela consiste de uma coluna ou grupo de colunas cujo valor deve coincidir com valores da outra tabela, embora a chave estrangeira possa conter valores nulos, possvel que, a verificao dos valores que formam esta constraint no ocorra, ento para garantirmos a verificao da chave estrangeira, fazemos uso da restrio NOT NULL com atribuio desta coluna.

    Vejamos nas tabelas abaixo como este tipo de referencia implementado.

    Tabela de Colaborador

    inIdColab Chave Primria vcNome

    vcDocumento Chave nica

    chSexo Apenas M ou F

    dcSalario valores positivos

    1 Luana Maia 22623228884 M 1980.002 Andr Inca 22623228881 M 2103.003 Suzana Silva 22623228882 F 2530.004 Rogrio Tecca 22623228883 M 1752.00

    Tabela de Dependente

    inIdDepen Chave Primria inIdColab vcNome dtNasc

    chSexo apenas M ou F vcParente

    1 4 Isabella da Silva 02/13/95 F Filha2 2 Marina Faria 01/15/82 F Esposa3 3 Paulo Henrique 09/21/80 M Marido4 3 Aline Faria 07/16/93 F Filha3 1 Thiago Maia 09/21/99 M Filho

    51

  • Captulo 7 - Associando Tabelas

    Na pagina anterior, temos duas tabelas, Colaborador e Dependente, onde podemos verificar quais os funcionrios que temos em nossa base de dados e encontrar seus respectivos dependentes, como possumos um cdigo do colaborador na tabela de dependentes, podemos encontrar facilmente quem so seus filhos, Marido ou esposa, note que apenas criamos uma segunda coluna que permite a entrada de valores numricos, com isso no garantimos a integridade dos dados, pois podemos inserir qualquer valor nesta coluna mesmo no existindo este cdigo na tabela de colaboradores, para resolver este tipo de problema de inconsistncia, devemos colocar uma verificao para que no possa ser atribuda uma entrada que no exista em colaborador, para isso deve-se fazer uso da famosa chave estrangeira ou foreign key.

    Regras de validao

    Devemos implementar regras de validao em nossas tabelas para que possamos garantir a qualidade da informao que estamos trabalhando em nosso banco de dados, est regras podem evitar confuses na insero de valores nas tabelas, protegendo desta forma a integridade dos dados, e impedindo que um possvel erro se propague por um tempo indeterminado em sua base de dados.

    Por exemplo, ao criarmos um campo que classifique uma pessoa como sexo Masculino ou Feminino, poderia restringir a informao para este campo como sendo somente Masculino e Feminino, dessa forma garantimos que ao retornar uma consulta, no encontraremos um valor estranho como, por exemplo, o endereo na coluna de sexo.

    Valor Padro

    O valor padro uma regra que pode ser aplicada a inmeras colunas de sua tabela, quando um valor padro estabelecido para uma determinada coluna, o sistema assume que ele deve ser utilizado nas situaes em que o usurio, deixa de inserir um valor a um campo da tabela.

    Tabela de Colaborador2

    inIdColab vcNome chSexo dcSalario

    valor padro 1000.001 Luana Maia M 1000.002 Andr Inca M 1000.003 Suzana Silva F 2530.004 Rogrio Tecca M 1752.00

    Valores nulos e no nulos

    Alm dos valores padro, podemos atribuir valores nulos e no nulos a uma determinada coluna. Assim ao deixarmos de inserir um valor em um determinado campo, o mesmo assumiria um valor nulo, e ao restringirmos como no nulo, no poderemos deixar de inserir valor neste campo, ao

    52

  • Captulo 7 - Associando Tabelas

    tentarmos deixar um campo no nulo em branco o SQL Server retornar um erro.Atribuir um valor nulo a uma coluna significa que ela no ter valor. Assim de acordo com as regras de integridade e consistncia dos dados, preciso atribuir a nulabilidade das colunas de uma tabela a fim de determinar se elas aceitaro valores nulos (NULL) ou no (NOT NULL).

    Data types

    Datatypes so os tipos de dados que o SQL Server aceita. Eles existem para que possamos definir o tipo de contedo de um campo de tabela ou de uma varivel ou parmetro.

    Aqui est uma lista de Data Types mais utilizados.

    TIPOS NUMRICOS

    NOMETAMANHO (BYTES)

    MENOR VALOR

    MAIOR VALOR ARMAZENA

    BIGINT 8 -263 263 - 1 INTEIROINT 4 -231 231 - 1 INTEIROSMALLINT 2 -215 215 - 1 INTEIROTINYINT 1 0 255 INTEIRO

    DECIMAL(C, D) VARIVEL -1038 1038 - 1DECIMAL EXATO, ONDE C INDICA NMERO DE POSIES E D O NMERO DE CASAS DECIMAIS

    NUMERIC(C, D) VARIVEL -1038 1038 - 1DECIMAL EXATO, ONDE C INDICA NMERO DE POSIES E D O NMERO DE CASAS DECIMAIS

    MONEY 8 -263 263 - 1 MONETRIO - EQUIVALE A UM DECIMAL COM 4 CASAS DECIMAISSMALLMONEY 4 -231 231 - 1 MONETRIO - EQUIVALE A UM DECIMAL COM 4 CASAS DECIMAIS

    FLOAT(D) 4 OU 8 -1.79 X 10308 1.79 X 10308PONTO FLUTUANTE, ONDE D INDICA O NMERO MXIMO DE CASAS DECIMAIS, ENTRE 0 E 53

    REAL 4 -3.4 X 1038 3.4 X 1038 PONTO FLUTUANTE - EQUIVALENTE AO FLOAT(24)

    TIPOS TEXTO

    NOME TABELA LIMITE (CARACTERES)TAMANHO (CARACTERES) ARMAZENA

    CHAR(N) ASCII 8000 EXATAMENTE N CARACTERES, ONDE N INDICA O TAMANHO DO CAMPO

    VARCHAR(N) ASCII 8000 AT N CARACTERES, ONDE N INDICA O TAMANHO DO CAMPO

    NCHAR(N) UNICODE 4000 EXATAMENTE NCARACTERES, ONDE N INDICA O TAMANHO DO CAMPO

    NVARCHAR(N)

    UNICODE 4000 AT N

    CARACTERES, ONDE N INDICA O TAMANHO DO CAMPO

    TEXT ASCII 231 - 1 AT 231 - 1 CARACTERES

    NTEXT UNICODE 231 - 1 AT 231 - 1 CARACTERES

    TIPOS DATA HORA

    NOME TAMANHO (BYTES) MENOR VALOR MAIOR VALOR PRECISO

    DATETIME 8 1753-01-01 00:00:00.0009999-12-31 23:59:59.997 3.33 ms

    SMALLDATETIME 4 1/1/1900 00:00 6/6/2079 23:59

    1 MINUTO, SENDO QUE AT 29.998ms ARREDONDA PARA MENOS E ACIMA DISSO PARA O PROXIMO

    53

  • Captulo 7 - Associando Tabelas

    Regras de Constraints

    As constraints so utilizadas para limitar o tipo de informao que pode ser inserida em uma tabela, uma constraint pode ser especificada quando uma tabela criada (com a declarao CREATE TABLE) ou aps a tabela ser criada (com o ALTER TABLE).

    Constraint DEFAULT

    Esta constraint serve para indicar um valor padro para um campo, quando uma declarao INSERT no especifica o valor para a coluna. Uma omisso de um campo no INSERT pode atribuir um valor constante, o valor de um sistema de funo, ou NULL para uma coluna. Voc pode usar uma constraint Default em qualquer coluna, exceto colunas IDENTIDADE e colunas do tipo timestamp.

    Constraint UNIQUE

    Esta constraint faz a validao de valores nicos em uma coluna de uma tabela, o SQL Server utiliza um ndice para garantir que uma coluna ou um conjunto de colunas no contenha valores duplicados. Diferente da PRIMARY KEY, podemos colocar vrias constraints UNIQUE por tabela mas para cada campo que possue uma constraint UNIQUE somente podemos inserir o valor NULL uma vez.

    Constraint CHECK

    Quando criamos uma constraint do tipo CHECK o banco ir analisar os dados quando tentarmos inserir ou modificar uma coluna. Se a expresso avaliada para false, o banco de dados no ir salvar a nova linha ou alterao. Implementar uma contraint check semelhante a construir uma clusula WHERE. Podemos utilizar muito dos mesmos operadores (>,

  • Captulo 7 - Associando Tabelas

    Quando o campo que est sendo referenciado residir na mesma tabela, no precisamos uitilizar a palavra-chave FOREIGN KEY, podendo somente utilizar REFERENCES. Esta constraint tambm pode ser desabilitada, para o caso de uma grande insero de dados na tabela.

    Modelo entidade e relacionamento (MER)

    O Modelo Entidade Relacionamento, foi desenvolvido pelo professor Peter Chen, a fim de representar as estruturas de dados de uma forma mais natural e mais prxima do mundo real dos negcios, tem seu conceito fundamentado na teoria de modelos relacionais apresentada pelo pesquisador E.T. Codd, um modelo abstrato cuja finalidade descrever, de maneira conceitual as informaes que representam um determinado sistema, segundo Paulo Cougo , descreve o mundo como ...cheio de coisas que possuem caractersticas prprias e que se relacionam entre si. Essas coisas podem ser pessoas, objetos, conceitos e eventos que possam ser expressos como entidades.O Modelo E-R propem que a realidade seja visualizada sob trs pontos de vista. Assim, h trs conceitos fundamentais no Modelo E-R: Entidade, Atributo e Relacionamento.

    Entidade, do latim, entitas, significa ser, existncia; algo que possui existncia distinta e separada, real ou imaginria.Uma entidade corresponde representao de todo e qualquer substantivo, concreto ou abstrato, sobre o qual se precisa armazenar e/ou recuperar informaes.Em ingls, o conceito de entidade recebe o nome que demonstra bem o seu significado, que entity type, ou seja, um tipo de entidade.Outro aspecto importante n