Escolar Documentos
Profissional Documentos
Cultura Documentos
O SQL (Structured Query Language), é um linguagem padrão 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. Trata-se de uma linguagem
não Procedural. Quando usamos o SQL, especificamos o que queremos fazer, e não como
fazê-lo. É uma linguagem de fácil aprendizagem.
SQL teve seu início em 1970, com E.F. Codd, que formulou os principios de um sistema
relacional para manipulação de banco de dados e descreveu uma álgebra relacional para
organizar os dados em tabelas. De lá para cá, a linguagem foi se aperfeiçoando e hoje
existe um padrão desenvolvido pela American National Standards Institute (ANSI). Esse
padrão tem sido a base para a maioria dos SQL's existentes atualmente no mercado. Cada
fabricante inseriu novas funcionalidades em seu SQL, fazendo com que encontremos
dezenas de versões de SQL.
Apresentamos a seguir um visão geral da Arquitetura de um Sistema Gerenciador de
Banco de Dados, para que possamos compreender do que se compõe a Linguagem SQL.
Arquitetura SGBD
Visão Visão
Nível Externo
Externa 1 Externa n
Esquema
Nível Interno
Interno
Banco de Dados
1
1) Nível Interno. Descreve a estrutura física de armazenamento do Banco de Dados. O
Esquema Interno usa um modelo de dados físico e descreve todos os detalhes do
armazenamento de dados e caminhos de acesso ao Banco de Dados.
Linguagens SGBD
- Data Definition Language (DDL) - Para definir o esquema conceitual e o esquema
interno.
- View Definition Language (VDL) - Para definir as visões dos usuários e seus
mapeamentos ao esquema conceitual.
- Data Manipulation Language (DML) - Para manipular os dados de uma Base de
Dados. (Consultar, Inserir, Excluir, Modificar).
2
Conceitos utilizados em SQL
- Tabela. Um banco de dados contém uma ou mais tabelas. Cada tabela tem um nome
e contém um número específico de colunas e linhas (não ordenadas).
- Visão (View). É uma forma alternativa de representar os dados que existem em uma
ou mais tabelas. Uma view pode Ter todas ou algumas colunas de uma ou mais
tabelas. Pode-se também Ter views baseadas em outras views ou da combinação de
views e tabelas. Ela se assemelha a uma tabela, com a única diferença, de que a view
não existe fisicamente. Os seus dados estão armazenados nas tabelas nas quais elas se
baseiam.
- Junção (Join). Quando se deseja obter dados de mais de uma tabela, efetuamos a
junção dessas tabelas.
- Chave Primária (Primary Key). É uma columa ou grupo de colunas, cujo valor
identifica cada linha da tabela.
- Catálogo do Sistema. Cada banco de dados tem um catálogo do sistema que contém
tabelas do sistema. Essas tabelas contém informações sobre as tabelas, visões,
colunas, índices, e privilégios de segurança do banco de dados. Em alguns SGBDs,
esse catálogo é chamado de dicionário de dados.
3
Tipos de Dados (Datatypes)
Tipos de Dados especifica que tipo de informação (caracteres, números, datas) a coluna
de uma tabela pode armazenar e como esses dados serão armazenados. Abordaremos a
seguir alguns tipos de dados encontrado no SQL da Microsoft.
O usuário pode criar seu tipo de dado e armazená-lo no banco de dados para utilizá-lo na
definição das colunas das novas tabelas.
Exemplos:
4
Criação de Tabelas
Para se criar tabelas dentro de um banco de dados, utilizamos a sentença CREATE
TABLE.
Exemplos:
5
Integridade Referencial, Chave Primária e Chave Estrangeira
A Integridade Referencial de um Banco de Dados Relacional é a verificação de que as
ligações entre as linhas das tabelas relacionadas são válidas. Essas ligações são
implementadas da relação entre a chave primária (PK) de uma tabela com a chave
estrangeira (FK) da mesma tabela (no caso de um auto-relacionamento) ou de outra
tabela.
Chamamos a tabela que contém a chave primária de tabela pai, e a que contém a chave
estrangeira de tabela filho.
Quando criamos uma relação de Pai e Filho utilizando a Chave Primária e a Chave
Estrangeira, o SGBD automaticamente passa a checar a integridade referencial das linhas
das tabelas envolvidas, eliminando assim, a necessidade dessas checagem na
programação das aplicações.
Como exemplo, vamos considerar uma aplicação que trate os pedidos de um cliente.
Temos uma tabela Cliente que é tabela pai de uma outra tabela Pedido, onde a Chave
Primária da tabela Cliente é o código_do_cliente. Quando criamos a ligação entre as duas
tabelas, teremos uma coluna código_do_cliente na tabela Pedido que será a Chave
Estrangeira apontado para a Chave Primária da tabela Cliente. Dessa forma quando a
aplicação for 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 não atenda essa
condição.
Cliente
Cód_cliente (PK)
Nome_cliente
CGC
Endereço
Pedido
6
CREATE TABLE cliente
( cod_cliente int Primary Key,
nome_cliente varchar(30),
CGC varchar(14),
Endereco varchar(50))
Alteração de Tabelas
7
Exemplos
Exclusão de Tabelas
• Não se pode excluir uma tabela se esta tiver alguma outra tabela “filha” ligada à
ela.
• Quando se elimina uma tabela, todos os registros contidos nela são apagados e a
tabela em si com toda sua estrutura é eliminada da Base de Dados.
Exemplo:
8
Extraindo Informações das Tabelas
Para que se consiga consultar os dados armazenados em tabelas, utilizamos o comando
SELECT.
Exemplos
9
Utilizando Literais
Operadores Aritméticos
Símbolo Operação
+ Adição
- Subtração
/ Divisão
* Multiplicação
% Módulo
• O operador de módulo (%) não pode ser executado nos tipos de dados money,
smallmoney, float ou real.
10
Funções de Manipulação de Dados Numéricos:
11
Funções de Manipulação de Datas:
Funções do Sistema
12
SELECT tamanho = DATALENGTH (nome), nome
FROM empregado
CONVERSÃO DE DADOS
A função CONVERT permite converter expressões de um tipo de dado para outro tipo de
dado. Permite também formatar datas em diferentes estilos.
Resultado: 1999.03.07
13
Condições de Pesquisa
<> diferente
Obs: Evitar a utilização de condições de Negação, tal como NOT IN e NOT BETWEEN,
pois essas condições não são reconhecidas pelo otimizador de query.
Eliminando Duplicidades:
Classificando o Resultado:
15
Funções de Agregação:
Cláusula HAVING:
COMPUTE e COMPUTE BY
Restrições:
JOINS:
18
EQUI JOIN
SELF JOIN
• Realiza o join das linhas de uma tabela com outras linhas da mesma tabela
• Por tratar a mesma tabela, deve-se definir aliases distintos para essas tabelas
OUTER JOIN
• Mostra todas as linhas do join, inclusive aquelas que não encontram linhas
correspondentes na tabela relacionada.
• Só se pode fazer um outer join entre duas tabelas.
19
WHERE titles.title_id *= sales.title_id
SUBQUERIES:
SUBQUERIES CORRELATAS:
20
• São aquelas subqueries que referenciam na cláusula WHERE, uma tabela da cláusula
FROM da query externa. Neste caso, a subquery é executada para cada linha da
tabela referenciada na query externa.
SELECT INTO
Operador UNION
21
• Na união, as estruturas das colunas tem de ser as mesmas, e os tipos de dados
compatíveis.
• Por default, as linhas duplicadas são removidas do resultado final. Se desejar que
elas permaneçam, utilizar a opção ALL.
• As listas de colunas dos Selects devem Ter o mesmo número de colunas, tipos de
dados similares, e aparecerem na mesma ordem.
• Os nomes das colunas são obtidos da primeira sentença SELECT.
Inserindo LINHAS:
INSERT [ INTO ]
{ nome_tabela | nome_view } [ (lista_de_colunas) ]
{ VALUES ( lista_de_valores ) | sentença_select }
22
Inserindo linhas com SELECT
UPDATE empregado
SET salario = salario * 1.05
UPDATE empregado
SET cod_depto = 5
WHERE cod_depto = 2
23
Alteração com base em dados de outras tabelas:
UPDATE titles
SET ytd_sales = ( SELECT SUM (qty)
FROM sales
WHERE sales.title_id = titles.title_id
AND ord_date BETWEEN '01/01/95'
AND '12/31/95' )
Deletando Linhas:
DELETE empregado
WHERE DATEDIFF (YEAR, dt_admissao, GETDATE()) >= 5
Os dois exemplos a seguir realizam a mesma coisa. Deletam todas as linhas da tabela
titleauthor que tenha no título do livro a string "computers".
24
FROM authors a, titles t, titleauthor ta
WHERE a.au_id = ta.au_id
AND ta.title_id = t.title_id
AND t.title LIKE '%computers%' )
/* extensão Transact-SQL */
ÍNDICES:
Tipos de Índices:
Ö Clusterizado
Ö Não Clusterizado
25
Indices Clusterizados:
• As linhas são classificadas e se mantém 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.
• Não definindo que o índice é clusterizado, será criado um índice não clusterizado.
INTEGRIDADE DE DADOS
A Integridade de Dados fala da consistência de dados armazenadas em um banco de
dados, facilitando para as aplicações que dela se utilizam.
Propriedade IDENTITY
• Os valores para as colunas definidas como IDENTITY são gerados pelo sistema de
forma sequencial.
• Permitido somente uma única coluna IDENTITY por tabela
• Não pode ser alterada por um comando UPDATE
• Definidos somente para tipos de dados: tinyint, smallint, int, numeric, decimal
26
DEFAULTS
• Criado antes ou após a criação da tabela
• Nomes devem ser únicos dentro do Banco
• São checados no INSERT
• O tipo de dados deve ser o mesmo definido para a coluna da tabela associada
• Deve ser compatível com as regras (rules) definidas para a coluna
REGRAS (RULES)
• Criado antes ou após a criação da tabela
• Nomes devem ser únicos dentro do Banco
• São checados no INSERT e UPDATE
• O nome do parâmetro deve ser prefixado com @
Tanto os DEFAULTS quanto as RULES devem ser associadas (ligadas) a uma coluna
da tabela.
27
DROP DEFAULT def_uf
CONSTRAINTS
Tipos de Constraints:
Ö PRIMARY KEY
Ö UNIQUE
Ö FOREIGN KEY
Ö DEFAULT
Ö CHECK
28
VIEWS (VISÕES)
29
STORED PROCEDURES
EXEC cont_empregados
CURSORES
30
Sentença Descrição
DECLARE Cria e define um cursor
OPEN Abre um cursor declarado
FETCH Retira uma linha do cursor
CLOSE Fecha o cursor
DEALLOCATE Remove o cursor
OPEN cur_empregado
FETCH cur_empregado INTO @nro, @salario
WHILE (@@fetch_status = 0)
BEGIN
IF (@salario > 1000)
INSERT INTO novatab VALUES (@nro, @salario)
END
CLOSE cur_empregado
DEALLOCATE cur_empregado
31
TRIGGERS
O exemplo seguinte mostra uma trigger de insert, que altera a coluna ytd_sales na tabela
titles toda vez que uma nova linha na tabela sales é inserida.
32
33