Linguagem de Consulta Estruturada
(SQL – Structured Query Language)
- Linguagem padrão adotada pelos SGBDs para que os usuários possam definir e
manipular dados.
- Permite acesso aos elementos de uma tabela.
- Serve para criar, manipular e recuperar dados em um BD, bem como manter a
segurança desses dados.
- Criada em 1972 pela IBM - SEQUEL, acrônimo para Structured English Query
Language (Linguagem de Consulta Estruturada em Inglês).
- SQL divide-se em:
- DDL – Linguagem de Definição de Dados. Serve para criar, manipular e deletar
tabelas. (Create, Alter, Drop)
- DML – Linguagem de Manipulação de Dados. Serve para inserir, atualizar e
apagar dados (Insert, Update, Delete)
- DQL – Linguagem de Consulta de Dados. Serve para consultar dados. (Select)
Comandos Básicos:
1) CREATE DATABASE <nome do banco de dados>
Ex.: CREATE DATABASE escola;
USE <nome do banco de dados>
Ex.: USE escola;
Para criar as tabelas é necessário especificar os tipos de dados que poderão ser
armazenados.
Tipos de dados:
• CHAR – sequência de caracteres (string) de comprimento fixo. O
tamanho é especificado entre parênteses. O tamanho máximo permitido
é de 255 caracteres.
• VARCHAR - sequência de caracteres (string) com tamanho variável. O
tamanho máximo, ou seja, a quantidade máxima de caracteres que
poderá ser armazenada no campo é especificada entre parênteses.
• INT – tipo numérico que aceita valores inteiros. Podemos representar com
esse tipo qualquer valor inteiro na faixa entre -[Link] e
[Link], o que é mais que suficiente para armazenar a idade de
alguém!
• DECIMAL(n,d) – tipo numérico que aceita valores reais (n indica a
quantidade total de números e d indica a quantidade do total que
corresponde a casas decimais). Exemplo: DECIMAL(5,2) corresponde a
números com 5 dígitos com até duas casas decimais, como 256,12.
• TIME – tipo tempo no formato hora:minuto:segundo.
• DATE – tipo data no formato ano-mês-dia.
• SERIAL – autoincremento.
Comando CREATE – cria tabelas em um SGBD
CREATE TABLE nome_da_tabela(
atributo1 tipo1,
atributo2 tipo2,
...
atributoN tipoN
);
Ex.:
create TABLE aluno(
idaluno SERIAL primary KEY,
nome varchar(50),
endereco varchar(300),
cpf varchar(11),
Nascimento date);
create TABLE produto(
idProduto SERIAL primary KEY,
nome varchar(50),
descricao varchar(300),
tipo INT,
preco DECIMAL(10,2)
);
2) Comando DROP: deleta uma tabela
DROP TABLE <nome da tabela>
Ex.: DROP TABLE escola;
3) Alter Table - Adicionar colunas:
3.1 Adicionar Atributo
ALTER TABLE <nome_da_tabela> ADD <nome_coluna> <tipo_dado>;
Ex.: ALTER TABLE Produto ADD unidade VARCHAR(100);
É possível palavras chaves para posicionar a nova coluna na posição que desejar
na tabela:
- FIRST (primeiro), SECOND (segundo), THIRD (terceiro) e assim por diante.
- AFTER (após)
- BEFORE (antes)
- LAST (por último).
Ex.: ALTER TABLE Produto ADD descontoMax DECIMAL(3,1) AFTER preco;
3.2 Deletar coluna:
Síntese:
ALTER TABLE <nome_da_tabela> DROP COLUMN <nome_atributo>;
Exemplo:
ALTER TABLE Produto DROP COLUMN descontoMax;
3.3 Incluir chave estrangeira:
alter TABLE <nome_Tabela> add foreign key(atributo_ch_estrangeira)
references <nome_Tabela_origem>(<nome_atributo_origem>);
Ex.: CREATE TABLE curso(
idCurso serial PRIMARY KEY,
nome VARCHAR(200),
conteudo VARCHAR(500),
cargaHoraria INT
);
CREATE TABLE aluno(
idAluno serial PRIMARY KEY,
nome VARCHAR(200),
endereco VARCHAR(200),
idcurso BIGINT UNSIGNED NOT null
);
alter TABLE aluno add foreign key(idcurso) references curso(idcurso);
4) Insert
Síntese:
INSERT INTO <nome_da_tabela> (<atributo1>, <atributo2>, ...) VALUES (<valor1>,
<valor2>, ...);
Exemplos:
INSERT INTO produto (idProduto, nome, descricao,tipo,preco)values(DEFAULT,
'Arroz','pacote de 5hk', 1, 30.0);
Atenção:
• Registros do tipo varchar (tem que dizer a quantidade de caracteres),
date(formato aaaa-mm-dd) são inseridos entre aspas
• Atributo que é Chaves primárias – não pode ter valor repetido na
coluna
• Atributos not null (não nulo) tem que ter valar atribuído a ele
• Há 03 formas de escrever o comando insert.
o Mencionando todos os atributos
o Sem mencionar os atributos
o Mencionando parcialmente os atributos
5) Update
UPDATE <nome_da_tabela> SET <atributo> = <valor> WHERE <condição>;
Exemplos:
UPDATE Produto SET preco = 35.0 WHERE nome = 'arroz';
É possível usar operadores no commando Update
Na clausula SET:
UPDATE Produto SET preco = preco + (preco * 0.1) WHERE tipo =1;
UPDATE Produto SET preco = preco - (preco * 0.2);
Na clausula WHERE:
UPDATE Produto SET preco = preco + (preco * 0.1) WHERE tipo =1 OR tipo=2 ;
UPDATE Produto SET preco = preco + (preco * 0.1) WHERE tipo =1 AND
preco<10.0;
6) SELECT
SELECT <atributo1>, <atributo2>, ...
FROM <nome_da_tabela>
WHERE <condição>;
Ex.:
SELECT * FROM produto;
SELECT nome,tipo, preco FROM produto;
SELECT nome,tipo, preco FROM produto WHERE preco > 20;
SELECT nome,tipo, preco FROM produto WHERE preco < 20;
7) DELETE
DELETE FROM <nome_da_tabela>
WHERE <condição>;
Ex.:
DELETE FROM produto WHERE nome = 'milho';
DELETE FROM produto;/* cuidado*/
8) DESC
O mostra a estrutura física da tabela;
Ex.: DESC <nome_da_tabela>
CREATE TABLE pedidos (
cod_pedido serial PRIMARY KEY,
cod_prod int REFERENCES produtos (cod_prod),
quantidade int);
9) SELECT – quando os dados estão em mais de uma tabela
SELECT <atributo1>, <atributo2>, ...
FROM <nome_da_tabela1>, <nome_da_tabela2>, ...
WHERE <condição>
A cláusula Where é responsável pela consistência dos dados. Seu
usarmos como sem a cláusula Where:
SELECT <atributo1>, <atributo2>, ...
FROM <nome_da_tabela1>, <nome_da_tabela2>, ...
Resultará em dados inconsistentes!
Considerando as tabelas:
CREATE TABLE curso(
idCurso serial PRIMARY KEY,
nome VARCHAR(200),
conteudo VARCHAR(500),
cargaHoraria INT
);
CREATE TABLE aluno(
idAluno serial PRIMARY KEY,
nome VARCHAR(200),
endereco VARCHAR(200),
idcurso BIGINT UNSIGNED NOT null
);
alter TABLE aluno add foreign key(idcurso) references curso(idcurso);
Como consultar qual aluno faz qual curso?
1) ERRADO!!!
Select [Link], [Link]
From aluno, curso
O comando cima (sem Where) resulta no cruzamento dos dados das duas
tabelas. Pega todos os registos de alunos e combina com todos os registros de
curso
2) CORRETO!!!
Select [Link], [Link]
From aluno, curso
Where [Link] = [Link]
O comando cima (sem Where) resulta no cruzamento dos dados das duas
tabelas. Pega todos os registos de alunos e combina com todos os registros de
curso e, mediante a cláusula Where, seleciona os registros onde campo idcurso
possui valores iguais nas duas tabelas (aluno e curso).