Conceitos Básicos SQL
Conceitos Básicos SQL
Versões:
◦ SQL-87 – primeiro padrão ANSI SQL aceito pela ISO, em
1987.
◦ SQL-92 – padrão ANSI SQL aceito pela ISO, em 1992.
◦ SQL-99 – padrão ANSI SQL aceito pela ISO em 1999,
também conhecido como SQL-3.
É uma linguagem de definição, manipulação e
controle de dados, definida pela Microsoft
Corporation.
Se dividem em:
◦ Restrição de coluna: quando a restrição se aplica a uma única
coluna da tabela.
◦ Restrição de tabela: quando a restrição faz referência a várias
colunas da tabela, mesmo que não faça referência a todas elas.
Sintaxe:
◦ Constraint UNIQUE
◦ [ CONSTRAINT nome da constraint ] UNIQUE
Constraint CHECK:
◦ É utilizada para definir restrições de domínio para
as colunas de uma tabela.
◦ Uma coluna pode possuir uma única restrição
CHECK, podendo ter várias expressões lógicas
combinadas com AND e OR.
Sintaxe:
◦ [ CONSTRAINT nome da constraint ]
◦ CHECK (expressão)
O comando SELECT permite consultar dados
em uma ou mais tabelas e retorna um
conjunto de linhas e colunas, de acordo com
as cláusulas especificadas.
Cláusulas:
Sintaxe:
select
cd_paciente as codigo,
nm_paciente as nome,
'PACIENTE PREMIUM' AS TIPO
from dbamv.paciente p
Sintaxe:
SELECT
c.cd_convenio as codigo ,
c.nm_convenio as "Convênio",
c.ds_enderco as "Endereço"
FROM dbamv.convenio c
order by c.nm_convenio asc
ou order by 2 asc
A filtragem deve ser feita utilizando-se a cláusula
WHERE.
A cláusula WHERE filtra as linhas com base em uma
condição que deve ser especificada.
A condição é representada por uma ou mais
expressões condicionais, separadas pelos operadores
lógicos AND, OR e NOT.
O formato de cada expressão condicional é:
<coluna> <operador> <valor>
Podem ser utilizados diversos operadores para
compor as expressões condicionais utilizadas.
Sintaxe:
◦ SELECT
◦ pr.cd_produto as codigo,
◦ pr.ds_produto as "Descrição",
◦ PR.QT_ULTIMA_ENTRADA as Qtde
◦ FROM
◦ DBAMV.PRODUTO PR
◦ WHERE
◦ PR.QT_ULTIMA_ENTRADA >= 100 and PR.QT_ULTIMA_ENTRADA <=200
◦ order by 3 asc
select
cd_paciente as codigo,
nm_paciente as nome,
p.nm_bairro
from dbamv.paciente p
where
p.nm_bairro = 'CENTRO'
AND P.tp_sexo = 'F'
Sintaxe:
SELECT
pr.cd_produto as codigo,
pr.ds_produto as "Descrição",
PR.QT_ULTIMA_ENTRADA as Qtde
FROM
DBAMV.PRODUTO PR
WHERE
pr.cd_produto BETWEEN 100 AND 3000
Sintaxe:
SELECT <lista de colunas>
FROM <tabela>
WHERE <coluna> IS [NOT] NULL
Exemplo 1: Exibir todos os pacientes que não
tenham email, ordenando pelo nome em
ordem descendente.
select
cd_paciente as codigo,
nm_paciente as nome,
p.dt_nascimento as "Data de Nascimento",
p.email
from dbamv.paciente p
where
p.email is null
order by 2 desc;
Exemplo 2: Exibir todos os pacientes que
tenham email, ordenando pelo nome em
ordem descendente.
select
cd_paciente as codigo,
nm_paciente as nome,
p.dt_nascimento as "Data de Nascimento",
p.email
from dbamv.paciente p
where
p.email is not null
order by 2 desc;
Sintaxe:
select
cd_paciente as codigo,
nm_paciente as nome
from
dbamv.paciente p
where
nm_paciente like 'W%'
order by 2;
Exemplo 2: Exibir os dados dos pacientes que
tenham o nome terminando por “Silva‟,
ordenados pelo nome.
select
cd_paciente as codigo,
nm_paciente as nome,
from dbamv.paciente p
where
nm_paciente like '%SILVA'
order by 2
Exemplo 3: Exibir os dados do paciente que
tenham “GABRIEL‟ em qualquer parte do
nome, ordenados pelo nome.
select
cd_paciente as codigo,
nm_paciente as nome,
from dbamv.paciente p
where
nm_paciente like '%GABRIEL%'
order by 2
As funções agregadas:
◦ Operam na coleta de valor em coluna da tabela;
◦ Produzem um resultado único;
◦ Não atua sobre valor nulo.
SELECT COUNT(*)
FROM <tabela>
Exemplo 1: Exibir a quantidade de pacientes
cadastrados.
◦ SELECT COUNT(*) FROM DBAMV.PACIENTE
SELECT SUM(<coluna>)
FROM <tabela>
Exemplo 1: Exibir a soma do custo médio dos
produtos.
SELECT SUM(PR.VL_CUSTO_MEDIO) FROM DBAMV.PRODUTO PR
SELECT AVG(<coluna>)
FROM <tabela>
Exemplo 1: Exibir o valor médio de todos os
produtos.
◦ SELECT
◦ avg( PR.VL_CUSTO_MEDIO ) AS "Custo Médio "
◦ FROM DBAMV.PRODUTO PR
SELECT MAX(<coluna>)
FROM <tabela>
Exemplo 1: Exibir o maior custo do produto da
espécie 1 da empresa
◦ SELECT
◦ MAX( PR.VL_CUSTO_MEDIO ) AS "Custo Médio "
◦ FROM DBAMV.PRODUTO PR
WHERE pr.cd_especie = 1
SELECT MIN(<coluna>)
FROM <tabela>
Exemplo 1: Exibir o menor custo do produto
da espécie 1 da empresa.
◦ SELECT
◦ MIN( PR.VL_CUSTO_MEDIO ) AS "Custo Médio "
◦ FROM DBAMV.PRODUTO PR
WHERE pr.cd_especie = 2
◦ select
◦ p.nm_bairro,
◦ count(p.cd_paciente)
◦ from dbamv.paciente p
◦ group by
◦ p.nm_bairro
◦ having count(p.cd_paciente) >1000
A junção de várias tabelas permite consultar, em um único
SELECT, informações contidas em diferentes tabelas.
UNION [ALL]
select
p.cd_paciente, p.nm_paciente
from
dbamv.paciente p
where
p.cd_cidade in (
select c.cd_cidade from dbamv.cidade c
where c.cd_uf ='PB'
and c.nm_cidade in ('MULUNGU', 'POMBAL') )
Subconsulta de Valor Único
Sintaxe:
E x e m p l o 1 : E x i b i r o n o me e o v al o r d o p r o d u d o ( s ) d a
especialidade 1 com maior custo médio.
select
p.cd_produto, p.ds_produto, p.vl_custo_medio
from dbamv.produto p
where p.cd_especie = 1
and p.vl_custo_medio = (select max( p1.vl_custo_medio)
from dbamv.produto p1
where p1.cd_especie = 1
)
Usando Subconsulta Correlacionada
select
p.cd_paciente, p.nm_paciente,
(select count(*) from dbamv.atendime aa
where aa.cd_paciente = p.cd_paciente) as "Qtde Atendimento"
from
dbamv.paciente p
where
p.cd_cidade in (
select c.cd_cidade from dbamv.cidade c
where c.cd_uf ='PB'
and c.nm_cidade in ('MULUNGU', 'POMBAL') )
O operador IN verifica se um valor existe no resultado
da subconsulta e devolve VERDADEIRO ou FALSO.
O operador EXISTS verifica se a execução da
subconsulta gerou alguma linha como resultado e
devolve VERDADEIRO ou FALSO.
O operador EXISTS só pode ser utilizado para avaliar o
resultado de subconsultas.
O operador EXISTS nunca é precedido por qualquer
coluna ou expressão.
Normalmente as consultas associadas ao operador
EXISTS são correlacionadas.
Exemplo 1: Exibir o código e nome dos pacientes que geraram conta de
internação no ano 2000 por ordem ascendente de nome.
select
p.cd_paciente,
p.nm_paciente,
a.cd_atendimento,
a.dt_atendimento,
trunc(a.dt_atendimento) as dt_atendimento2
from
dbamv.atendime a,
dbamv.paciente p
where
a.cd_paciente = p.cd_paciente
and a.cd_atendimento in (
select r.cd_atendimento from dbamv.reg_fat r
where to_char(r.dt_inicio, 'yyyy') = '2020'
)
order by 2
Exemplo 2: Exibir o código e nome dos pacientes que
geraram conta de internação no ano 2000 por ordem
ascendente de nome.
select
p.cd_paciente,
p.nm_paciente,
a.cd_atendimento,
a.dt_atendimento,
trunc(a.dt_atendimento) as dt_atendimento2
from
dbamv.atendime a,
dbamv.paciente p
where
a.cd_paciente = p.cd_paciente
and exists (
select 1 from dbamv.reg_fat r
where to_char(r.dt_inicio, 'yyyy') = '2020'
and r.cd_atendimento = a.cd_atendimento
)
order by 2 asc
A lista de atributos é usada para indicar que campos da
tabela devem ser preenchidos, e com que valores.
Treinem um pouco!
Como deve ser feito este mesmo insert sem a declaração dos
campos?
E se eu mudar a ordem dos dados o que é preciso ser feito?
Se uma coluna aceitar valores nulos ou
possuir um valor default, é possível omiti-la
em uma instrução INSERT.
UPDATE <tabela>
SET <coluna> = <expressão>
[WHERE <condição>]
UPDATE produto
SET venda = venda*1.12
WHERE código IN (2,3)
Exemplo 2: Dar um aumento de 10% para produtos
que tenham seu nome iniciado por “A”, use uma lista.
UPDATE TREINAMETOSQL.produto
SET valor= valor * 1.10
WHERE codigo IN
( SELECT código FROM TREINAMETOSQL.produto
WHERE nome LIKE 'A%'
)
A cláusula WHERE também é opcional no comando
delete. Se não for informada, a deleção será realizada
em toda a tabela.
Sintaxe: