Você está na página 1de 41

Tecnologia

Em
Banco de Dados

Introduo a Liguagem SQL

Prof. Oswaldo Evaristo da Costa Neto

Linguagem SQL ( Structure Query Language)


O SQL surgiu no incio dos anos 70, como resultado de um
projeto da IBM que que tinha como objetivo desenvolver uma linguagem
de programao que se adaptasse ao modelo relacional.

Comercialmente, o primeiro sistema de banco de dados baseado


em SQL foi lanado no final dos anos 70.

A primeira padronizao do SQL de acordo com a ANSI


(American National Standards Institute) e ISO (International Organization
For Standardization) foi publicada na dcada de 80. Desde ento, a
linguagem vem evoluindo e tornando-se uma ferramenta poderosa de
definio e manipulao de banco de dados relacionais.

Estrutura da Linguagem SQL

O SQL uma linguagem formada por dois grupos comandos que


podem ser executados para os mais diversos objetivos. Os grupos so:
Linguagem de Definio de Dados (DDL) fornece comandos que so
utilizados para criao e modificao de tabelas, como tambm a remoo
e criao de ndices. So comandos: Create Table, Drop Table e Alter
Table.
Linguagem de Manipulao de Dados (DML) a linguagem inclui
comandos de consultas aos dados existentes nas tabelas. Os comandos
existentes so utilizados para inserir, remover e modificar informaes em
um banco de dados. Os comandos bsicos so: Select, Insert, Update e
Delete.

Tipos de Dados em SQL


Dentre os tipos de dados existentes no SQL, relacionaremos os
principais:

Varchar (n) Permite a insero de dados do tipo caracteres de tamanho


varivel, como tamanho mximo n determinado pelo usurio.
Exemplo: Um campo do tipo Varchar (30), poder receber 30 caracteres
quaisquer como nmeros e letras.
Int Absorve dados numricos do tipo inteiro.

Numeric (p,d) um nmero de ponto fixo cuja preciso definida pelo


usurio. O nmero consiste de p digitos e d casas decimais.
Exemplo: Um campo do tipo Numeric (5,2) tem a seguinte representao
999,99, ou seja, 3 digitos antes da vrgula e 2 aps, totalizando os 5
digitos.

Real um nmero com ponto flutuante, isto , a representao de


nmero real pode mudar de acordo com a representao atual.
Exemplo: 100.0 igual a 10.0E+2
Date Armazena dados do tipo data (dd/mm/aa). Exemplo: 05/06/1966.

Time Armazena valores correspondentes a hora, minuto e segundo.

Os demais tipos de dados, sero apresentados durante as


exposies sobre a linguagem SQL.

Linguagem de Definio de Dados - DDL


Criao de Tabelas

Criar uma tabelano SQL, exige que o usurio defina todas as


caractersticas necessrias no momento da codificao, ou seja, o nome
da tabela, nmero de colunas, nome de cada coluna e o tipo de dado a
ser armazenado.

A criao de uma tabela pode ser um processo mais amplo, onde


no momento da escrita em SQL pode-se definir as regars de acesso e de
uso dos dados. Essas regras recebem o nome de Regras de
Integridades.

Sintaxe para Criao de uma Tabela


Create Table <nome da tabela>
(
Atributo1 Tipo1,
Atributo2 Tipo2,
.
.
AtributoN TipoN
);
Exemplo:
Create Table FUNCIONARIO
(
Cod_Func int,
Nome_Func varchar (30),
CPF_Func char (11),
Idade_Func int,
);

Obs.:
O tipo de dado Char utilizado
no exemplo, diferencia do tipo
Varchar por no variar durante
a insero dos dados.

Definindo campos com preenchimentos obrigatrios


Quando se cria uma tabela, alguns campos podero receber
valores nulos e outros no. Para que o sistema no aceite campos com
valores nulos, no momento da declarao dos atributos na criao de
uma tabela, o usurio dever digitar a expresso NOT NULL (No Nulo).
Caso no seja especificado que o campo dever obrigatoriamente um
valor diferente de nulo, o SQL atribuir o valor NULL para o no
preenchimento do campo.
Exemplo:
Create Table FUNCIONARIO
(
Cod_Func int Not Null,
Nome_Func varchar (30) Not Null,
CPF_Func char (11) Not Null,
Idade_Func int Not Null,
);

Outras Regras de Integridade dos Dados


As regras de integridades so importantes para que sejam
evitadas as redundncias em um banco de dados, garantindo portanto, a
integridade dos dados.

As especificaes dos campos chaves tambm uma forma de


manter a integridade dos dados. No SQL as chaves so declaradas da
seguinte maneira:

Sintaxe:
Primary key (Atributo1, Atributo2,.AtributoN) Para chaves primrias.

Foreign key (Atributo1, Atributo2,.AtributoN) references <nome da


tabela> Para chaves estrangeiras e a tabela referenciada.

Exemplo1:
Create Table CURSOS
(
Cod_Curso int,
Descricao varchar (30) Not Null,
Num_Vagas int (11) Not Null,
Periodo char,
Primary Key (Cod_Curso),
);
Create Table ALUNOS
(
Cod_Aluno int,
Nome varchar (30) Not Null,
CPF char (11),
Primary Key (Cod_Aluno),
);

Create Table MATRICULAS


(
Cod_Aluno_Mat int,
Cod_Curso_Mat int,
Data date,
Primary Key (Cod_Aluno_Mat, Cod_Curso, Data),
Foreign Key (Cod_Aluno_Mat) references ALUNOS (Cod_Aluno),
Foreign Key (Cod_Curso_Mat) references CURSOS (Cod_Curso),
);

Alterando a Estrutura de uma Tabela


Em uma tabela se pode fazer dois tipos de alterao: inserindo um
novo campo ou alterando as especificaes de um campo existente.

1 Inserindo um Novo Campo:

Sintaxe:
Alter Table <nome da tabela> Add <nome do novo campo>

Exemplos:
Alter Table ALUNOS Add DataNasc date;
Alter Table ALUNOS Add Primary Key (Cod_Aluno);

2 Alterando o Tamanho de um Campo:

Sintaxe:
Alter Table <nome da tabela> Modify <nome do campo>
Exemplos:

Alter Table ALUNOS Modify Nome varchar (50);

Removendo Tabelas de um Banco de Dados


Sintaxe:
Drop Table <nome da tabela>;
Exemplo:
Drop Table ALUNOS;

Regras Para se Remover uma Tabela:


1 A tabela excluida no pode possuir chaves estrangeiras;
2 Caso a tabela possua referncia com outra tabela atravs de uma
chave estrangeira, dever se excluir primeiro a tabela refenciada;

3 A tabela s poder ser excluida se no possuir dados cadastrados.

Linguagem de Manipulao de Dados - DML


Insero de Dados
O comando INSERT permite a insero de valores nos
campos de uma tabela. Complementando o comando de insero
de dados em uma tabela, temos INTO e VALUES.
Onde:
INTO <table> especifica em que tabela os dados sero
inseridos;
VALUES especifica a seqncia dos valores a serem inseridos
na tabela.

Sintaxe:
INSERT INTO NOME_TABELA (Col1, Col2, Col3, ...., ColN)
VALUES (Valor1, Valor2, Valor3, ...., ValorN);

Para exemplificarmos a utilizao do comando INSERT,


simularemos a introduo dos seguintes dados na tabela
PRODUTOS:
Tabela: PRODUTOS
COD_PROD

DESC_PROD

QUANT_PROD

PRECO_PROD

Mamo

3,00

Melo

2,00

Pinha

1,00

Laranja

1,20

Vejamos o comando para preenchimento da tabela


PRODUTOS:
INSERT Into PRODUTOS
Values(1, Mamo, 2, 3.00);
INSERT Into PRODUTOS
Values(2, Melo, 3, 2.00);

INSERT Into PRODUTOS


Values(3, Pinha, 6, 1.00);
INSERT Into PRODUTOS
Values(4, Laranja, 5, 1.20);

Obs.1: Como o preenchimento para todos os campos da


tabela PRODUTOS, ento fica facultativo a complementao
da linha de comando aps o nome da tabela com a
especificao dos campos entre parnteses.
Obs.2: Caso seja digitado um valor que no corresponda a
natureza do dado, o sistema informar que o campo no
pode receber o valor digitado por incompatibilidade.
Obs.3: No existe uma ordem para a insero de valores na
tabela, no entanto deve-se informar na linha de comando os
campos e os valores correspondentes aos campos.

Seleo de Dados
O comando de seleo de dados o mais utilizado
nos projetos de sistemas, pois ele quem possibilita a
organizao e visualizao dos dados listados para o
usurio. Portanto, o comando SELECT responsvel por
esta execuo no banco de dados.
Selecionar dados em um BD para posterior
visualizao parece ser uma tarefa complexa, mas com
certeza mais fcil do que imagina. O segredo da utilizao
dos comandos em SQL, est na forma de expressar do
usurio no momento de definir os parmetros da execuo
da tarefa.

O usurio deve lembrar que todos os dados esto


armazenados em uma estrutura chamada de tabela, e que ela
constituda de linhas que determinam os registros
armazenados e colunas onde os campos determinam os
dados a serem armazenados na tabela.

Sintaxe do Comando:
SELECT Col1, Col2, Col3...ColN
FROM NOME_TABELA
WHERE CONDIO;

rea de atuao do comando SELECT

COL1

COL2

COL3

COLn

rea de atuao da
clusula WHERE

Nota 1: Se a clusula WHERE for omitida, ento todas as


linhas da tabela sero listadas.
Nota 2: A utilizao do comando SELECT mais ampla.
Alm da clusula WHERE, outras so utilizadas para
melhorar a atuao do comando atravs da ordenao e
agrupamento de dados.

Exemplos:
1 Listar os cdigos dos produtos.
SELECT COD_PROD
FROM PRODUTO;

2 Listar os cdigos e as descries dos produtos.


SELECT COD_PROD, DESC_PROD
FROM PRODUTO;
3 Listar todos os campos da tabela.
SELECT *
FROM PRODUTO;

Utilizao do Comando SELECT com a Clusula


WHERE

A utilizao da clusula WHERE s permite a


listagem dos campos que corresponderem condio
imposta.
Exemplos:
1 Listando os produtos com preo inferior a R$
3,00.
SELECT *
FROM PRODUTO
WHERE PRECO_PROD < 3.00;

2 Listando os cdigos, descries e preos de produtos


com preo igual a R$ 1,00.
SELECT COD_PROD, DESC_PROD, PRECO_PROD
FROM PRODUTO
WHERE PRECO_PROD = 1.00;

Utilizando Clusula de Ordenao de Dados


A clusula ORDER BY utilizada no comando
SELECT objetivando ordenar os dados que sero listados.
A ordenao de dados pode ser na ordem crescente ou
decrescente, para isto, s acrescentar ASC ou DESC no
final da linha da clusula ORDER BY.

Exemplos:
1 Listando os produtos em ordem decrescente de
acordo com o cdigo.
SELECT *
FROM PRODUTO
ORDER BY COD_PROD DESC;
2 Listando cdigos e descries de produtos com
preo menor a R$ 3,00 em ordem crescente de descrio.
SELECT COD_PROD, DESC_PROD
FROM PRODUTO
WHERE PRECO_PROD < 3.00
ORDER BY DESC_PROD;

Utilizando Clusula de Agrupamento de Dados

A clusula GROUP BY condensa em uma nica


linha todas as linhas selecionadas que compartilham os
mesmos valores para as colunas agrupadas. Para que a
listagem seja exibida de forma ordenada, a clusula
ORDER BY dever ser adicionada aps a linha de
comando onde aparece a clausula GROUP BY.
Para que possamos apresentar os exemplos com a
clusula GROUP BY, utilizaremos a seguinte estrutura de
tabelas:

REGIOES
Cod_Reg
Nome_Reg

PRODUTOS
Cod_Prod
Reg_ID
Produtor_ID
Preco_Prod
Desc_Prod
Quant_Prod

PRODUTOR
Cod_Produtor
Nome_Produtor

De acordo com o esquema acima onde as tabelas se


relacionam, podemos afirmar que um determinado produto
de cdigo X possui uma descrio e produzido em uma
determinada regio por um produtor.

Vejamos alguns exemplos da utilizao da clusula GROUP BY:

1 Listar todos os produtores por regio.


SELECT COD_PRODUTOR, NOME_PRODUTOR, COD_REG, NOME_REG
FROM PRODUTOS
GROUP BY REG_ID;

2 Listando todos os produtos e seus respectivos produtores.


SELECT DESC_PROD, NOME_PRODUTOR
FROM PRODUTOS
GROUP BY PRODUTOR_ID;

3 Listando todos os produtos e seus respectivos produtores


em ordem decrescente pela descrio do produto.
SELECT DESC_PROD, NOME_PRODUTOR
FROM PRODUTOS
GROUP BY PRODUTOR_ID
ORDER BY DESC_PROD DESC;

Funes de Agregao
Uma funo de agregao retorna apenas um nico
valor para vrias linhas de entrada de uma tabela. A funo
de agregao est sempre associada a uma coluna da
tabela.
Principais Funes de Agregao
Funo

Ao

Count

Retorna o nmero de ocorrncias da coluna da tabela.

Sum

Soma os valores da coluna da tabela.

Avg

Calcula a mdia dos valores da coluna da tabela.

Max

Exibi o maior valor da coluna da tabela.

Min

Exibi o menor valor da coluna da tabela.

Distinct

No permite que valores iguais de uma coluna sejam listados na consulta.

Exemplos:

1 - Listar o maior preo, o menor preo, a mdia dos


preos, o total de preos e a quantidade de produtos
cadastrados.
SELECT
Max (PRECO_PROD) as Maior,
Min (PRECO_PROD) as Menor,
Avg (PRECO_PROD) as Media,
Count (COD_PROD) as Qtde,
Sum (PRECO_PROD) as Somatorio
FROM PRODUTOS;
Visualizao dos resultados:
Maior

Menor

2,99

1,44

Media

1,7943

Qtde

Somatorio

12,56

2 - Listando os nomes e os preos de produtos que


no se repetem na tabela.
SELECT DESC_PROD, PRECO_PROD
Distinct (PRECO_PROD)
FROM PRODUTOS;
3 - Listando a quantidade de produtos que possuem
preo menor que R$ 3,00.
SELECT
Count (COD_PROD)
FROM PRODUTOS
WHERE PRECO_PROD < 3.00;

Palavras Chaves Usadas Na Clusula WHERE


BETWEEN - palavra chave usada para especificar uma srie
que compreende, de um valor mais baixo at um valor mais
alto, para a pesquisa.

Exemplo:
SELECT COD_PROD, DESC_PROD
FROM PRODUTO
WHERE COD_PROD BETWEEN 2 AND 5;

NOT BETWEEN - palavra chave usada para excluir os


dados fora da srie entre o mais baixo e o mais alto valor
especificado (Fora do intervalo).

Exemplo:

SELECT COD_PROD, DESC_PROD


FROM PRODUTO
WHERE COD_PROD NOT BETWEEN 2 AND 5;

LIKE - palavra chave usada para selecionar linhas que


contm campos que se assemelham em uma determinada
poro do string.

usado somente com char , varchar e date;


Pode usar coringas.

Significado dos coringas:

% (porcentagem) - qualquer string de zero ou mais


caracteres;
_ (Underline) - qualquer caractere simples;
[] (colchetes) - qualquer caractere simples dentro da
srie especificada;
[^] (colchetes e acento circunflexo) - qualquer
caractere simples fora da srie Especificada.

Obs.: Coloque os coringas e o string de caracteres entre


aspas simples.

Exemplo Utilizando o LIKE:


SELECT DESC_PROD
FROM PRODUTO
WHERE DESC_PROD LIKE M%

Exemplo Utilizando Not Like

SELECT DESC_PROD
FROM PRODUTO
WHERE DESC_PROD NOT LIKE B%

UPPER - palavra chave usada para converter os dados do


tipo texto para letras maisculas.
Exemplo:

SELECT *
FROM PRODUTO
WHERE UPPER (DESC_PROD) LIKE M%;

Outros Tipos de Dados


TINYINT: Valores numricos inteiros variando de 0 at 256
SMALLINT: Valores numricos inteiros variando de
32.768 at 32.767
INT: Valores numricos inteiros variando de -2.147.483.648
at 2.147.483.647
BIT: Somente pode assumir os valores 0 ou 1. Utilizado
para armazenar valores lgicos
DECIMAL(I,D) e NUMERIC(I,D): Armazenam valores
numricos inteiros com casas decimais utilizando preciso. I
deve ser substitudo pela quantidade de dgitos total do
nmero e D deve ser substitudo pela quantidade de dgitos
da parte decimal (aps a vrgula)
SMALLMONEY: Valores numricos decimais variando de 214.748,3648 at 214.748,3647

MONEY: Valores numricos decimais variando de 922.337.203.685.477,5808 at 922.337.203.685.477,5807


REAL: Valores numricos aproximados com preciso de
ponto flutuante, indo de -3.40E + 38 at 3.40E + 38

FLOAT: Valores numricos aproximados com preciso de


ponto flutuante, indo de -1.79E + 308 at 1.79E + 308
SMALLDATETIME: Armazena hora e data variando de 1 de
janeiro de 1900 at 6 de junho de 2079. A preciso 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 preciso de hora
armazenada at os centsimos de segundos

TEXT: Armazena caracteres (at 2.147.483.647) no formato no


Unicode. Se a quantidade de caracteres armazenada no campo for
menor que 2.147.483.647, o resto do campo no preenchido.
Procure no utilizar este tipo de dado diretamente, pois existem
funes especficas para trabalhar com este tipo de dado
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 espaos 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
no 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 no preenchido.
Procure no utilizar este tipo de dado diretamente, pois existem
funes especficas para trabalhar com este tipo de dado

Variaes entre os comandos

1 - Voc pode fazer condies compostas com AND, OR


ou NOT.
Exemplo:
SELECT nome
FROM empregados
(AND) WHERE (nome = JOSE AND salario = 20)
(OR) WHERE (salario = 10 OR salario = 20)
(NOT) WHERE (nome IS NOT NULL)

Exemplo 2:
SELECT nome
FROM empregados
OR WHERE (salario = 10 OR salario = 20)

Exemplo 3:
SELECT nome
FROM empregados
NOT WHERE (nome IS NOT NULL)

Você também pode gostar