Você está na página 1de 8

FATEC Taquaritinga | LTP XI Professor Erick Eduardo Petrucelli

Apostila de SQL
Parte 1 - Comandos DDL

Introduo SQL
O SQL (Structured Query Language) uma linguagem padro usada para acesso a Banco de Dados. O conjunto de seus comandos permite-nos definir a estrutura dos dados no banco de dados relacional, acessar e manipular esses dados. Quando usamos o SQL, especificamos o que queremos fazer, e no como faz-lo. uma linguagem de fcil aprendizagem. SQL teve seu incio em 1970, com E. F. Codd, que formulou os princpios de um sistema relacional para manipulao de banco de dados e descreveu uma lgebra relacional para organizar os dados em tabelas. De l para c, a linguagem foi se aperfeioando e foi padronizada pela American National Standards Institute (ANSI). Esse padro tem sido a base para a maioria dos SQL existentes atualmente no mercado. Cada fabricante inseriu novas funcionalidades em seu SQL, fazendo com que encontremos dezenas de verses de SQL. A verso da Microsoft a Transact SQL (T-SQL), utilizada em seu SGBD Microsoft SQL Server. Apresentamos a seguir uma viso geral da Arquitetura de um Sistema Gerenciador de Banco de Dados, para que possamos compreender do que se compe a Linguagem SQL.

Sub-Linguagens do SQL
Data Definition Language (DDL) - para definir o esquema conceitual e o esquema interno (traduzindo: a estrutura do banco, como tabelas, colunas, chaves, ndices, restries etc.). Data Manipulation Language (DML) - para manipular os dados (consultar, inserir, excluir, modificar).

SQL = DDL + DML


Conceitos utilizados em SQL
SQL utiliza os termos tabela (table), linha (row), e coluna (column) para relao ou entidade, tupla e atributo, respectivamente. Apresentamos alguns objetos e conceitos fundamentais no entendimento da linguagem SQL:
-

Banco de Dados (Database). um conjunto de objetos. Quando definimos um banco de dados, damos-lhe um nome para agrupar uma eventual coleo de tabelas e ndices associados. Tabela (Table). Um banco de dados contm uma ou mais tabelas. Cada tabela tem um nome e contm um nmero especfico de colunas e linhas.
Pgina | 1

FATEC Taquaritinga | LTP XI Professor Erick Eduardo Petrucelli -

ndice (Index). um conjunto ordenado de ponteiros para os dados de uma tabela, organizando os registros. Cada ndice baseado nos valores dos dados de uma ou mais colunas de uma tabela. O ndice visa melhorar o desempenho e tambm garantir a unicidade do dado (caso necessrio). Restrio (Constraint). Critrios que delimitam condies para uma ou mais colunas, como a definio de chaves, critrios de unicidade e restrio de valores. Chave Primria (Primary Key). uma coluna ou grupo de colunas cujo valor identifica cada linha da tabela. O critrio essencial que este valor no se repita em outras linhas. Outras prticas utilizadas: colunas do tipo inteiro e valores auto-incremento. Chave Estrangeira (Foreign Key). Colunas de tabelas que referenciam a chave primria de outra tabela, para apontar para aquele registro (garantindo a Normalizao do banco e evitando duplicaes de dados). Auto-incremento (Identity). Colunas cujo valor numrico incrementado automaticamente, no precisando ser preenchidas manualmente. Muito usado em Chaves Primrias. Integridade Referencial. Quando definimos uma chave estrangeira, estamos definindo uma integridade referencial entre as tabelas envolvidas, para garantir dados ntegros, ou seja, que no sejam duplicados em vrias tabelas. Catlogo do Sistema. Cada banco de dados tem um catlogo do sistema que contm tabelas do sistema. Essas tabelas contm informaes sobre as tabelas, vises, colunas, ndices e privilgios de segurana do banco de dados. Em alguns SGBDs, esse catlogo chamado de dicionrio de dados.

Tipos de Dados (Data Types)


Tipos de dados so a especificao do tipo de informao (caracteres, nmeros, datas) que uma coluna de uma tabela pode armazenar e como esses dados sero armazenados. Abordaremos a seguir alguns dos tipos mais usados no SQL Server: Nome do Tipo VARCHAR(n) CHAR(n) TEXT BINARY(n) VARBINARY(n) IMAGE DATE Descrio da Utilizao Texto com quantidade varivel de caracteres (similar a String). Texto com quantidade fixa de caracteres. Textos mais longos (acima de 8000 caracteres). Quantidade fixa de nmeros binrios. Quantidade varivel de nmeros binrios. Quantidade gigantesca nmeros binrios (para salvar imagens). Data.
Pgina | 2

FATEC Taquaritinga | LTP XI Professor Erick Eduardo Petrucelli

SMALLDATETIME DATETIME DECIMAL(n, d) NUMERIC(n, d) TINYINT SMALLINT INT BIGINT MONEY BIT

Data com preciso de horas, minutos e segundos. Data com preciso adicional de milissegundos. Valores numricos, onde n a quantidade total de nmeros, e o c corresponde parte decimal (quantidade aps a vrgula) Nmeros inteiros (de -255 a +255). Nmeros inteiros (de -32.767 a +32.767, similar a Short). Nmeros inteiros (unidade padro, comumente usada em PKs). Nmeros inteiros grandes (similar a Long). Valores monetrios. Valor binrio simples, 0 ou 1 (similar a Boolean).

possvel tambm criar seus prprios tipos de dado e armazen-los no banco de dados para utilizlos na definio das colunas de novas tabelas. Exemplos: EXEC sp_addtype CEP, 'char(10)' EXEC sp_addtype StringPadro, 'varchar(75)' EXEC sp_droptype CEP

Criao de Tabelas
Para se criar tabelas dentro de um banco de dados, utilizamos a sentena CREATE TABLE.

Nomes de colunas devem ser nicos dentro de uma mesma tabela. Toda coluna deve ter um tipo de dado declarado. Pode-se definir at 2 bilhes de tabelas por banco de dados. Pode-se definir at 250 colunas por tabela. Um valor NULL indica a ausncia de dados. NULL no branco ou zero, no igual a nada. Por padro, o SQL assume NULL para as colunas que no esto declaradas com NOT NULL. Ou seja, necessrio declarar quando uma coluna obrigatria usando o NOT NULL.

Exemplo: CREATE TABLE Empresa ( Codigo INT NOT NULL, Nome VARCHAR(45) NOT NULL, Fundao SMALLDATETIME, NumeroFuncionarios SMALLINT );

Integridade Referencial, Chave Primria e Chaves Estrangeiras


Pgina | 3

FATEC Taquaritinga | LTP XI Professor Erick Eduardo Petrucelli

A Integridade Referencial de um Banco de Dados Relacional a verificao de que as ligaes entre as linhas das tabelas relacionadas so vlidas. Essas ligaes so a relao entre a chave primria (PK) de uma tabela com a chave estrangeira (FK) da mesma tabela (no caso de um autorelacionamento) ou de outra tabela. Chamamos a tabela da chave primria de tabela pai e da chave estrangeira de tabela filha. Quando criamos uma relao de Pai e Filho utilizando a Chave Primria e a Chave Estrangeira, o SGBD automaticamente passa a checar a integridade referencial das linhas das tabelas envolvidas, eliminando assim, a necessidade desse tipo de checagem na programao das aplicaes. Como exemplo, vamos considerar uma aplicao que trate os pedidos de um cliente. Temos uma tabela Cliente que tabela pai de uma outra tabela Pedido, onde a Chave Primria da tabela Cliente o CodigoCliente. Quando criamos a ligao entre as duas tabelas, teremos uma coluna CodigoCliente na tabela Pedido que ser a Chave Estrangeira apontado para a Chave Primria da tabela Cliente. Dessa forma, quando a aplicao inserir um pedido de um cliente na tabela Pedido, o SGBD ir checar se esse cliente j existe na tabela Cliente, retornando um erro, caso no atenda essa condio. Tal modelagem representada desta forma:

Teramos o seguinte script de criao das tabelas: CREATE TABLE Cliente ( CodigoCliente INT PRIMARY KEY NOT NULL, NomeCliente VARCHAR(30) NOT NULL, CPF VARCHAR(14) NULL ); CREATE TABLE Pedido ( NumeroPedido INT NOT NULL, DataPedido SMALLDATETIME NOT NULL, CodigoCliente INT NOT NULL, CONSTRAINT PK_Pedido PRIMARY KEY (NumeroPedido, CodigoCliente), CONSTRAINT FK_Pedido_Cliente FOREIGN KEY (CodigoCliente) REFERENCES Cliente (CodigoCliente) );

Alterao de Tabelas
Pgina | 4

FATEC Taquaritinga | LTP XI Professor Erick Eduardo Petrucelli

O comando ALTER realiza alteraes na estrutura dos objetos criados no banco. Para criar, alterar ou apagar uma CONSTRAINT, voc deve alterar a tabela que a contm. Pode-se habilitar e desabilitar a verificao de CONSTRAINTs de Foreign Key e de Check com a opo CHECK (habilita) e NOCHECK (desabilita). Uma coluna a ser acrescentada tabela (comando ADD) deve ser definida como NULL se j existirem registros cadastrados na tabela. Somente para criao de colunas o comando ADD no precisa de mais nenhuma informao. Para criao de outras coisas (CONSTRAINTs, por exemplo, aps o ADD utiliza-se o nome do elemento a ser adicionado). possvel deletar elementos da tabela (colunas, CONSTRAINTs, etc) usando o DROP.

Exemplos:

Excluso de Tabelas
Pgina | 5

FATEC Taquaritinga | LTP XI Professor Erick Eduardo Petrucelli

O comando ALTER realiza alteraes na estrutura dos objetos criados no banco.

No se pode excluir uma tabela se esta tiver alguma outra tabela filha ligada ela. Quando se elimina uma tabela, todos os registros contidos nela so apagados e a tabela em si com toda sua estrutura eliminada da base de dados, irreversivelmente.

Exemplo:

ndices

O principal objetivo da utilizao de ndices aumentar a performane nas consultas. Melhora a performance na resoluo de ORDER BY e GROUP BY (veremos adiante). O prprio banco j cria um ndice para cada chave primria definida na tabela. As modificaes (UPDATE) tendem a se tornar mais demoradas quando se usa de ndices. Evitar definir ndices para colunas do tipo text, image ou bit. Evitar definir ndices quando a performance do UPDATE mais importante que a do SELECT. A clusula UNIQUE especifica que a coluna ou conjunto de colunas que compem o ndice no podem ter valores duplicado na tabela (quase como uma chave primria, mas sem ser chave).

Exemplo: CREATE UNIQUE INDEX IDU_Empregado_Nome ON Empregado (Nome)

Tipos de ndices:
Clusterizado No Clusterizado

ndices Clusterizados:

As linhas so classificadas e se mantm ordenadas. Pode haver somente um ndice clusterizado por tabela. O ndice clusterizado deve sempre ser o primeiro ndice a ser criado. Grande vantagem quando se deseja consultar enormes intervalos. No definindo que o ndice clusterizado, ser criado um ndice no clusterizado.

ndices No Clusterizados:
Pgina | 6

FATEC Taquaritinga | LTP XI Professor Erick Eduardo Petrucelli

Classificao fsica das linhas no a mesma da classificao nos ndices. Pode-se possuir at 249 indces no clusterizados por tabela. Cada um pode prover acesso aos dados em diferentes ordens, agilizando consultas com diferentes ordenaes.

Exemplos: -- ndice clusterizado: CREATE CLUSTERED INDEX IDC_Empregado_Nome ON Empregado (Nome) -- ndice no clusterizado: CREATE INDEX IDNC_Empregado_Salario ON Empregado (Salario)

Melhorando a Integridade de Dados


A integridade de dados fala da consistncia de dados armazenadas em um banco, facilitando para as aplicaes que dela se utilizam. Alguns comandos ajudam a manter um banco mais ntegro.

Identity

Os valores para as colunas definidas como IDENTITY so gerados pelo sistema de forma sequencial. ideal usar em chaves primrias. Permitido somente uma nica coluna IDENTITY por tabela. No pode ser alterada por um comando UPDATE. Definidos somente para tipos de dados: TINYINT, SMALLINT, INT, NUMERIC, DECIMAL.

Exemplo: -- Primeiro parmetro: valor inicial. -- Segundo parmetro: quantidade a incrementar. CREATE TABLE Aluno ( Codigo INT IDENTITY(100, 5), Nome VARCHAR(50) ); INSERT INSERT Aluno Aluno VALUES ('Cido') -- Ser criado com Codigo = 100 VALUES ('Wagner') -- Ser criado com Codigo = 105

Default
Pgina | 7

FATEC Taquaritinga | LTP XI Professor Erick Eduardo Petrucelli

Define o valor padro para determinado campo, caso no seja informado. Ou seja, o campo no ficar como NULL, mas sim com o valor DEFAULT.

So checados durante o INSERT. O tipo de dados deve ser o mesmo definido para a coluna da tabela associada.

Exemplo: CREATE TABLE Cidade ( Codigo INT IDENTITY(1, 1) NOT NULL, Nome VARCHAR(50) NOT NULL, Estado CHAR(2) DEFAULT 'SP' );

Constraint

Pode ser colocado em uma coluna ou uma tabela. Pode ser adicionada a uma tabela que j contenha dados. Caso no se coloque um nome para a constraint, o sistema cria um com o seu padro.

Tipos de Constraints: PRIMARY KEY FOREIGN KEY UNIQUE DEFAULT CHECK

Exemplos: ALTER TABLE Empregado ADD CONSTRAINT UNIQUE_Nome UNIQUE NONCLUSTERED (Nome) ALTER TABLE Cidade ADD CONSTRAINT DEFAULT_Estado DEFAULT 'SP' FOR Estado ALTER TABLE Empregado ADD CONSTRAINT CK_Salario CHECK (Salario BETWEEN 0 AND 100000)

Pgina | 8