. SQL
SQL (Structured Query Language) é o padrão adotado para linguagens de consultas em Sistemas Gerenciadores de Banco de Dados Relacionais (SGBDR).
A linguagem oficial do modelo Relacional. Permite a definição de esquemas, restrições e definições além da manipulação de instâncias.
Considere as relações:
- Cliente($\underline{RG}$, nome_cli, ano_nasc, cidade_cli, sexo)
- Agencia($\underline{cod_ag}$, nome_ag, cidade_ag, ativo)
- Deposito($\underline{num_dep}$, RG, saldo, cod_ag)
- Empréstimo($\underline{num_empr}$, RG, valor, cod_ag)
DML
parte de modelagem
select lista_de_atributos (ou *)
from lista_de_relações
where predicadoexemplos:
select *
from cliente
where cidade_cli = "Bauru" and sexo = "M"select nome_cli, cidade_cli, num_dep
from cliente, deposito
where Cliente.rg = Deposito.rg and saldo > 200podemos definir em Álgebra Relacional a operação acima:
- Produto Cartesiano
- Seleção
- Projeção
as
Permitem associar um identificador a uma tabela. (e.g x = cliente)
todos os clientes que residem na mesma cidade do cliente de RG “123”
select y.nome_cli
from cliente as x, cliente as y
where y.cidade_cli = x.cidade_cli and x.rg = "123"in/not in
pertence/não pertence
todos os clientes que residem na mesma cidade do cliente de RG “123”
select nome_cli
from cliente
where cidade_cli in (
select cidade_cli
from cliente
where rg = "123"
)todos os clientes que não residem na mesma cidade do cliente de RG “123”
select nome_cli
from cliente
where cidade_cli not in (
select cidade_cli
from cliente
where rg = "123"
)union
somente trabalha em conjuntos
(select nome_cli, saldo
from cliente
where saldo > 200.00)
union
(select num_empr, valor
from emprestimo
where valor > 200.00)intersect
somente trabalha em conjuntos
(select nome_cli, saldo
from cliente
where saldo > 200.00)
intersect
(select num_empr, valor
from emprestimo
where valor > 200.00)minus
(select nome_cli, saldo
from cliente
where saldo > 200.00)
minus
(select num_empr, valor
from emprestimo
where valor > 200.00)some -> retorna todos os referentes dentro de um conjunto
select num_dept, RG
from Deposito
where saldo > some
(select saldo
from Deposito
whehe rg = '12345')all -> entre todos
contains / not contains B está contido em A
i.e -> todas os cliente que possuam depositos em todas as cidades onde o cliente de rg = 1234 possuem deposito
select rg, nome_cli
from cliente as z
where
(
(select cidade_ag
from agencia, deposito
where agencia.cod_ag = deposito.cod_ag
z.rg = deposito.rg)
contains
(select cidade_ag
from agencia, deposito
where deposito.rg = 1234 and deposito.cod_ag = agencia.cod_ag)
)Agregação de túplas
- avg() - média aritmética
- sum() - soma
- min() - mínimo dentre os resultados obtidos
- max() - máximo dentre os resultados obtidos
- count() - conta o número de resultados
group by = parametro de agrupamento
having -> so usado com group by, permite comparações no group by
select cod_ag, avg(saldo)
from Deposito
group by (cod_ag)
having avg(saldo) > 1200count
select rg, nome_cli
from cliente as x,
where 2 < (select count(*)
from Deposito as y
where y.rg = x.rg)DDL
Os relacionamentos são definidos através da própria definição da DDL.
create
create table Cliente (
RG varchar(40), -- armazena apenas o tamanho usado
NomeCli char(40), -- tem tamanho fixo
cidade_cli char(40),
ano_nasc integer,
sexo enum {'M', 'F', 'O', 'PN'},
primary key (RG)
)create table Deposito (
num_dept int(8),
RG varchar(40),
cod_ag varchar(40),
saldo numeric(12, 2),
ano_nasc integer,
sexo enum {'M', 'F', 'O', 'PN'},
primary key (num_dept),
foreign key (RG) references cliente,
foreign key (cod_ag) references agencia
)
