Você está na página 1de 6

Structured Query Language

● Criada pela IBM research (início dos anos 70)


Banco de Dados ● Linguagem declarativa para manipulação e recuperação de dados
● Linguagem padrão para os SGBDs relacionais
Introdução a SQL
● Versão estável: SQL-99

Fagner Leal – pantoja.ti@gmail.com


Baseado nos slides de Jaudete Daltio e André Santanchè

Structured Query Language

● Dividida em 4 módulos:
● Linguagem de Defnição de Dados (DDL)
● Defnir esquemas de relação, excluir relações e modifcar esquemas
● Linguagem de Manipulação de Dados (DML) Definição de Dados
● Inserir, excluir e modifcar dados e linguagem de consulta
● A linguagem de consulta é inspirada em Álgebra Relacional
● Linguagem de Controle de Dados (DCL)
● Gerenciar aspectos de controle de acesso entre usuários e dados
● Linguagem de Transação de Dados(DTL)
● Gerenciar aspectos de transações

Definição de Dados (DDL) Definição de Dados (DDL)

● ●
Objetos CREATE
● ●
Esquemas (Banco de dados) Cria um objeto dentro da base de dados
● ●
Tabela (Relação) ALTER
● ●
Visões(views) Altera um objeto já existente
● ●
Asserções DROP
● ●
Gatilhos (triggers) Apaga um objeto do banco de dados

Paralelos com Modelo Relacional

Tabela = Relação

Linha = Tupla

Coluna = Atributo
Create Sistema de Taxi
CREATE DATABASE <nome_do_banco>

CREATE TABLE <tabela> (


CREATE TABLE cliente_empresa(
<campo1> <tipo>, id VARCHAR(4),
cnpj VARCHAR(18),
[…, <campon> <tipo>] PRIMARY KEY(id),
FOREIGN KEY(id) REFERENCES cliente(id)
PRIMARY KEY <coluna> Script para criar banco sistema_taxi );
FOREIGN KEY <coluna> REFERENCES <tabela_ref>(<coluna_ref>) CREATE TABLE taxi (
CREATE DATABASE sistema_taxi placa VARCHAR(7),
) USE sistema_taxi marca VARCHAR(30),
modelo VARCHAR(30),
CREATE TABLE cliente( anofab INTEGER,
id VARCHAR(4), PRIMARY KEY(placa)
nome VARCHAR(80), );

PRIMARY KEY: Restrição de chave primária PRIMARY KEY(id) CREATE TABLE corrida (
● ); cliid VARCHAR(4),
FOREIGN KEY: Restrição de chave estrangeira placa VARCHAR(7),
CREATE TABLE cliente_particular(
● dataPedido DATE,
Tipos de domínios básicos: char(n), varchar(n), int, real, id VARCHAR(4),
cpf VARCHAR(14), PRIMARY KEY(cliid, placa, dataPedido),
double, float, boolean, date, etc. FOREIGN KEY(cliid) REFERENCES cliente(id),
PRIMARY KEY(id),
● FOREIGN KEY(placa) REFERENCES taxi(placa)
Outras restrições: NOT NULL, UNIQUE, CHECK FOREIGN KEY(id) REFERENCES cliente(id)
); );

Create Table Alter e Drop Table



ALTER TABLE <tabela> ADD <coluna><tipo>
Script para criação do banco Sistema de Taxi
ALTER TABLE <tabela> DROP <coluna>
CREATE TABLE cliente( CREATE TABLE taxi ( ●
Adicionar/remover nova coluna
id VARCHAR(4), placa VARCHAR(7),

nome VARCHAR(80), marca VARCHAR(30), Exemplos
PRIMARY KEY(id) modelo VARCHAR(30),
ALTER TABLE cliente_particular ADD email varchar(255)
); anofab INTEGER,
CREATE TABLE cliente_particular( PRIMARY KEY(placa)
ALTER TABLE cliente_particular DROP email
id VARCHAR(4), );
cpf VARCHAR(14), CREATE TABLE corrida (
PRIMARY KEY(id), cliid VARCHAR(4),
FOREIGN KEY(id) REFERENCES cliente(id) placa VARCHAR(7),
); dataPedido DATE,
CREATE TABLE cliente_empresa( PRIMARY KEY(cliid, placa, dataPedido), DROP TABLE <tabela>
id VARCHAR(4), FOREIGN KEY(cliid) REFERENCES cliente(id),

cnpj VARCHAR(18), FOREIGN KEY(placa) REFERENCES taxi(placa) Exluir tabela existente
PRIMARY KEY(id), );
FOREIGN KEY(id) REFERENCES cliente(id)
);

Manipulação de Dados (DML)


Inserir, atualizar ou remover registros

Manipulação de Dados INSERT

UPDATE

DELETE


Realizar consulta

SELECT
Insert Insert
● ●
Insere linhas (tuplas) numa relação Script para popular banco Sistema de Taxi

Insere todos os atributos da linha, na mesma ordem em INSERT INTO cliente VALUES
que foI especificado no CREATE TABLE ('1755', 'Doriana'),
('93','DinoTech'),
('1532','Asdrúbal'),
INSERT INTO <tabela> ('1780','Quincas'), ('97','Proj');
INSERT INTO cliente_particular VALUES
VALUES (valor1, valor2, …, valorn) ('1755', '567.387.387-44'),
('1532', '448.754.253-44'),
('1780', '576.456.123-55');

INSERT INTO cliente_empresa VALUES ('93', '58.443.828/0001-02'), ('97', '44.876.234/7789-10');
Insere somente os atributos especificados: INSERT INTO taxi VALUES
('DAE6534','Ford','Fiesta',1999),
('DKL4598','Wolksvagen','Gol',2001),
INSERT INTO <tabela> (campo1, campo2, …, campon) ('DKL7878','Ford','Fiesta',2001),
('JDM8776','Wolksvagen','Santana',2002),
VALUES (valor1, valor2, …, valorn) ('JJM3692','Chevrolet','Corsa',1999);
INSERT INTO corrida VALUES ('1755', 'DAE6534', '2003-02-15'), ('97', 'JDM8776', '2003-02-18');

Update Delete

Modifica os valores dos atributos das linhas da tabela em
que o predicado especificado seja verdadeiro

DELETE FROM <tabela> WHERE <condição>

UPDATE <tabela>
SET <campo1> = <valor1> [, …, <campon> <valorn>] ●
Exemplo:
WHERE <condição> DELETE FROM corrida WHERE placa = ‘DAE0534’

Exclui todos os registros da tabela em que o predicado
especificado seja verdadeiro

A exclusão não pode violar as restrições de integridade

Exemplo: referencial (chave estrangeira)

UPDATE cliente SET nome = ‘Doris’ WHERE id = ‘93’ Alguns SGBDs permitem exclusões em cascata

Uma atualização no valor da chave primária pode propagar-se
dependendo de como a restrição de chave estrangeira foi criada

Select Select

Consulta os dados presentes no banco

Estrtura básica: SELECT <lista de atributos>]
FROM <lista de tabeas>]
SELECT <lista de atributos>] WHERE <condição>
FROM <lista de tabeas>]
WHERE <condição> • Condição: expressão booleana que identifca as linhas a serem
• Lista de atributos: nomes dos atributos a serem recuperados recuperadas pela consulta
pela conulsta – pode conter:
– Quando a lista de atributos envolver todos os atributos da ●
Conectivos logicos: AND, OR, NOT
relação, pode-se usar * ●
Operadores de comparação: < ,<=, > ,>= , = , <>
• Lista de tabelas: nomes das tabelas envolvidas no ●
Comparador de string: LIKE. Usado de duas maneiras:
processamento da consulta
– LIKE ‘%<parte da string>%’
– Mais de uma tabela -> produto cartesiano ou junção
– LIKE ‘_ _ _ <parte da string> _ _ _’
Select x Álgebra Relacional Select - Projeçao

Selecionar as marcas e modelos de táxi


Diferentemente da Álgebra, o SELECT não elimina repetições do resultado. É
necessário forçar usando a palavra-chave DISTINCT. Exemplo:

SELECT DISTINCT <atributtos> FROM <ltabelas>

Select - Projeçao Select - Projeçao


SELECT marca, modelo FROM taxi SELECT marca, modelo FROM taxi

Select - Seleção Select - Seleção


Selecionar os táxis fabricados após o ano 2000 SELECT * FROM Taxi WHERE anofab > 2000
Select - Seleção Select - Seleção
SELECT * FROM taxi WHERE anofab > 2000 SELECT * FROM taxi WHERE anofab > 2000

Alias Produto Cartesiano



Uso de alias permite associar nomes alternativos tara
tabelas e colunas

Palavra-chave: AS SELECT *

Exemplo: FROM <tabela1> <tabela2>

SELECT anofab AS fabri FROM taxi AS carro

• Não há associação de atributo da <tabela 1> com atributo da


<tabela2>
• Não há condição que ligue tabelas

Junção Ordenação
SELECT
SELECT ...
FROM <tabela1> <tabela2> ….
WHERE <tabela1> <campo> = <tabela2> <tabela2> ORDER BY <lista de atributos> [ASC | DESC]

• Condiçao de ligação entre as tabelas: • Ordena a exibição dos registros


<tabela1> <campo> = <tabela2> <tabela2> • ASC (crescente) | DESC (decrescente)
• Ordenação default: ASC
Funções Agregadas Agrupamento: Group by
SELECT <função de agregação>(<coluna>) SELECT
FROM ... ….
WHERE ... GROUP BY <campo1>

• Agrupa linhas da tabela que compartilham os mesmo valores em


Função de agregação pode ser: todas as colunas da lista
• COUNT • Exemplo:
• SUM SELECT marca, count(*) FROM taxi group by marca;
• AVG

• MAX Resultado:
• MIN

Agrupamento: Having RESUMO


SELECT <lista de colunas>
FROM <lista de tabelas>
SELECT …
[WHERE <condição>]
GROUP BY <coluna_agrupar>
[GROUP BY <coluna_agrupar>]
HAVING <condição_grupo>
[HAVING <condição_grupo>]
[ORDER BY <lista de atributos>]
• Restring os resultados do GROUP BY quando a condição é
verdadeira • Apenas as cláusulas SELECT e FROM são obrigatórias
• Exemplo: • Quando existentes, as cláusulas devem aparecer nessa ordem
SELECT marca FROM taxi GROUP BY marca HAVING count(*)>1;


Resultado:

Você também pode gostar