SQL - Parte I

Propaganda
SQL
Histórico
Structured Query Language (SQL)
Foi desenvolvido pela IBM em meados
dos anos 70 como uma linguagem de
manipulação de dados (DML - Data
Manipulation
Language)
para
suas
primeiras tentativas de desenvolvimento
de bancos de dados relacionais.
Histórico
O SQL tornou-se de fato o padrão
depois de 1986, quando o American
National Standards Institute (ANSI), a
organização responsável pelos padrões
industriais
nos
Estados
Unidos,
endossou o SQL como linguagem
padrão para os bancos de dados
relacionais.
Histórico
Desde então
atualizações;
o
SQL
vem
sofrendo
já sofreu duas atualizações oficiais:
em 1989;
em 1992: esse é o usado atualmente mas ainda sofre
atualizações, para se adequar as últimas versões de
banco de dados relacionais lançadas no mercado.
Histórico
SQL3
Padrão aprovado em 1999;
Versão da linguagem orientada a
objetos;
SGBDs comerciais oferecem parte da
SQL3;
Falta de padronização.
O que é SQL
O SGBD
Banco de
linguagem
acesso aos
(Sistema Gerenciador de
Dados) necessita de uma
que permita aos usuários
dados.
SQL (Structured Query Language) é a
linguagem de consulta adotada pela
maioria dos SGBDs relacionais.
Características do SQL
Linguagem English-like
Processa conjunto de registros (tabelas) ao invés
de registros individuais
Padronizada
Fornece comandos para uma série de tarefas,
como:
Recuperação de dados;
Inclusão, atualização e exclusão de registros;
Criar, modificar e excluir objetos do banco;
Etc.
Comandos SQL
Comandos SQL
Comandos DDL (Data Definition Language)
Usados para construir e modificar estruturas de
tabelas e outros objetos no BD.
Têm efeito imediato.
Comandos DML(Data Manipulation Language)
Usados para trabalhar com os dados nas tabelas.
Necessitam
de um
“COMMIT” para sua
confirmação.
Construções básicas
Comando SELECT
Recupera informações do banco de dados
Sintaxe:
SELECT lista_de_colunas
FROM lista_de_tabelas
WHERE condições
GROUP BY agrupamento ***
ORDER BY ordenação_para_apresentação
Construções básicas
Exemplo:
SELECT nome
FROM Departamentos;
ou
SELECT *
FROM Departamentos;
* =>Seleção de todas os campos (ou colunas) da
tabela de Departamentos
Construções básicas
Distinct
Elimina
duplicidades,
significando
que
somente relações distintas serão apresentadas
como resultado de uma pesquisa.
Exemplo
SELECT DISTINCT nome
FROM Empregado;
Construções básicas
TOP n
Seleciona um número específico de registros.
Exemplo
SELECT TOP 10 * FROM Cidade;
Funções Agregadas (ou de
Agrupamento)
Função
Retorno
Avg(n)
Média do valor n, ignorando nulos
Count(expr)
Max(expr)
Vezes que o número da expr avalia
para algo não nulo
Maior valor da exp
Min(expr)
Menor valor da expr
Sum(n)
Soma dos valores de n, ignorando
nulos
Construções básicas
Select AVG (salarios) From Funcionario
Select Count (codigoPessoa) From Pessoa
Select MAX (dataInclusao) FROM Pessoa
Select MIN (dataInclusao) FROM Pessoa
Select SUM (salarios) FROM Funcionario
Construções básicas
Cláusula WHERE
Usada para selecionar as linhas para consultar ou alterar.
Se omitida, todas as linhas da tabela serão submetidas à
ação referente ao comando em questão.
Exemplo:
SELECT nome
FROM Pessoa
WHERE idade >= 10;
Construções básicas
Você pode fazer condições compostas com AND,
OR ou NOT.
SELECT nome
FROM empregados
(AND) WHERE (nome = ‘JOSE’ AND salario = 20)
(OR) WHERE (salario = 10 OR salario = 20)
(NOT) WHERE (nome IS NOT NULL)
Operadores lógicos
Operador
Significado
=
Igual a
>
Maior que
>=
Maior que ou igual a
<
Menor que
<=
Menor que ou igual a
Construções básicas
Você pode fazer condições compostas com like,
between ou is null.
SELECT nome
FROM empregados
(like)
WHERE (nome like ‘%JOSE%’)
(between) WHERE (salario between 10 and 100)
(is null)
WHERE (nome is null)
% => independente, qualquer coisa
Demais Operadores
Operador
Significado
Between...and...
Entre dois valores (inclusive)
In (...)
Lista de valores
Like
Com padrão de caracteres
Is null
É um valor nulo
Operadores Negativos
Operador
Significado
<>
Diferente
Not nome coluna=
Diferente da coluna
Not nome coluna>
Não maior que
Not between
Não entre dois valores informados
Not in
Não existente numa dada lista de valores
Not like
Diferente do padrão de caracteres informado
Is not null
Não é um valor nulo
Construções básicas
Cláusula Group By
Realiza o agrupamento por uma coluna da tabela
SELECT nomeFuncionario, nomeDepartamento
FROM Empregado
GROUP BY nomeDepartamento;
Construções básicas
Cláusula Order By
Modifica a ordem de apresentação do resultado da
pesquisa (ascendente ou descendente).
SELECT nome, dataNascimento
FROM Empregado
ORDER BY nome ASC;
*** ASC – Ascendente
*** DESC – Descendente
Construções básicas
Junção de Tabelas Join
O uso da operação JOIN numa cláusula FROM
especifica como se deseja que as tabelas sejam
vinculadas.
Use INNER JOIN para associar somente os tuplas
coincidentes de ambas as tabelas.
O OUTER JOIN liga as linhas de tabelas, mas não
necessariamente precisam casar entre si. Desta forma,
mesmo as linhas que não se encontrou referência no
cruzamento das tabelas aparecerá no Resultado de
Dados. Existem tipos de OUTER JOIN:
Construções básicas
LEFT JOIN usado para associar todas as
tuplas da primeira tabela com apenas as
coincidentes na segunda tabela. O Access
retorna com valor nulo para as tuplas que não
coincidem na segunda tabela.
RIGHT JOIN usado para associar todas as
tuplas da segunda tabela com apenas as
coincidentes na primeira tabela
Construções básicas
SELECT nome_da_tabela1.nome_do_campo,
nome_da_tabela2.nome_do_campo
FROM nome_da_tabela1 inner join
nome_da_tabela2 on
nome_da_tabela1.nome_da_chaveprimaria1=
nome_da_tabela2.nome_da_chave_estrangeira
Construções básicas
SELECT Nome_Tabela.nome_campo
FROM Tabela1 LEFT OUTER JOIN Tabela2
ON Tabela1.chave_primaria = Tabela2.chave_estrangeira
SELECT Nome_Tabela.nome_campo
FROM Tabela1 RIGHT OUTER JOIN Tabela2
ON Tabela1.chave_primaria = Tabela2.chave_estrangeira
Construções básicas
Um comando SELECT também pode fazer
uma consulta que traz dados de duas ou
mais tabelas.
SELECT nome_da_tabela1.nome_do_campo,
nome_da_tabela2.nome_do_campo
FROM nome_da_tabela1, nome_da_tabela2
WHERE nome_da_tabela1.nome_da_chaveprimaria1=
nome_da_tabela2.nome_da_chave_estrangeira
Construções básicas
Comando INSERT
Permite adicionar linhas à uma tabela
Sintaxe
INSERT INTO [(coluna1, ..., colunaN)]
VALUES (<value1>, ..., <valueN>);
Exemplo
INSERT INTO Pessoa (rg, nome, sexo)
VALUES (435442829, ‘João’, ‘M’);
Construções básicas
Comando UPDATE
Permite a alteração de valores de uma tabela
Sintaxe:
UPDATE <tabela>
SET <coluna> [ ..., colunaN]= <expressão>
WHERE <condição>;
Exemplo:
UPDATE Pessoa
SET nome=‘José’
WHERE rg=435442829;
Construções básicas
Comando DELETE
Remove linhas de uma tabela
Sintaxe:
DELETE FROM <tabela>
WHERE <condição>;
Exemplo:
DELETE FROM Pessoa
WHERE rg=435442829;
Tipos de dados
TINYINT: Valores numéricos inteiros variando de 0 até 256
SMALLINT: Valores numéricos inteiros variando de –32.768 até 32.767
INT: Valores numéricos
2.147.483.647
inteiros
variando
de
-2.147.483.648
até
BIT: Somente pode assumir os valores 0 ou 1. Utilizado para armazenar
valores lógicos
DECIMAL(I,D) e NUMERIC(I,D): Armazenam valores numéricos
inteiros com casas decimais utilizando precisão. I deve ser substituído
pela quantidade de dígitos total do número e D deve ser substituído
pela quantidade de dígitos da parte decimal (após a vírgula)
SMALLMONEY: Valores numéricos decimais variando de -214.748,3648
até 214.748,3647
Tipos de dados
MONEY:
Valores
numéricos
decimais
variando
922.337.203.685.477,5808 até 922.337.203.685.477,5807
de
-
REAL: Valores numéricos aproximados com precisão de ponto flutuante,
indo de
-3.40E + 38 até 3.40E + 38
FLOAT: Valores numéricos aproximados
flutuante, indo de
-1.79E + 308 até 1.79E + 308
com
precisão
de
ponto
SMALLDATETIME: Armazena hora e data variando de 1 de janeiro de
1900 até 6 de junho de 2079. A precisão de hora é armazenada até os
segundos.
DATETIME: Armazena hora e data variando de 1 de janeiro de 1753 até
31 de Dezembro de 9999. A precisão de hora é armazenada até os
centésimos de segundos
Tipos de dados
CHAR(N): Armazena N caracteres fixos (até 8.000) no formato não
Unicode. Se a quantidade de caracteres armazenada no campo for
menor que o tamanho total especificado em N, o resto do campo é
preenchido com espaços em branco
VARCHAR(N): Armazena N caracteres (até 8.000) no formato não
Unicode. Se a quantidade de caracteres armazenada no campo for
menor que o tamanho total especificado em N, o resto do campo não
é preenchido
TEXT: Armazena caracteres (até 2.147.483.647) no formato não
Unicode. Se a quantidade de caracteres armazenada no campo for
menor que 2.147.483.647, o resto do campo não é preenchido.
Procure não utilizar este tipo de dado diretamente, pois existem
funções específicas para trabalhar com este tipo de dado
Tipos de dados
NCHAR(N): Armazena N caracteres fixos (até 4.000) no formato
Unicode. Se a quantidade de caracteres armazenada no campo for
menor que o tamanho total especificado em N, o resto do campo é
preenchido com espaços em branco
NVARCHAR(N): Armazena N caracteres (até 4.000) no formato
Unicode. Se a quantidade de caracteres armazenada no campo for
menor que o tamanho total especificado em N, o resto do campo não
é preenchido
NTEXT: Armazena caracteres (até 1.073.741.823) no formato
Unicode. Se a quantidade de caracteres armazenada no campo for
menor que 1.073.741.823, o resto do campo não é preenchido.
Procure não utilizar este tipo de dado diretamente, pois existem
funções específicas para trabalhar com este tipo de dado
Criando tabelas
Uma tabela pode ser criada com o comando Create Table
CREATE TABLE Cliente1
(
CodCliente int NOT NULL,
Nome varchar(50),
CPF varchar(11) NULL,
DataCadastro datetime NOT NULL DEFAULT (getdate()),
Cidade varchar(20) NULL,
UF char(2) NULL,
País varchar(20) DEFAULT ('Brasil')
)
** NOT NULL (Campo não pode ser nulo)
** NULL (Campo pode ser nulo)
** DEFAULT (Valor padrão para campo caso o mesmo não seja informado)
Download