Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Introdução às Subqueries no SQL: Exemplos e Sintaxe, Notas de estudo de Informática

Saiba como utilizar subqueries no sql para realizar consultas complexas em bancos de dados. Este documento fornece exemplos e sintaxe para diferentes tipos de subqueries, incluindo igualdade, in, exists, correlated subqueries e unions. Além disso, aprenderá a utilizar subqueries para encontrar autores com o mesmo sobrenome, listar autores e livros, encontrar editores e livros, calcular vendas por loja e encontrar livros mais caros e mais baratos.

Tipologia: Notas de estudo

2013

Compartilhado em 28/08/2013

Garoto
Garoto 🇪🇸

4.6

(121)

1 / 14

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
(completo e correto)
select a1.au_lname, a1.au_fname
from authors a1, authors a2
where a1.au_lname = a2.au_lname and
a1.au_id != a2.au_id
(que autores possuem o mesmo sobrenome?)
Unindo mais de duas tabelas
A cláusula from deve listar todas tabelas envolvidas.
A cláusula where deve listar condições “joins” suficientes para reunir todas as
tabelas em cadeia.
Você não precisa mostrar as colunas de cada tabela envolvida no “join”
Exemplo:
select au_lnane, au_fnarne, titles.title_id, title
from authors, titleauthor, titles
where authors.au_id = titleauthor.au_id
and titleauthor.title_id = titles.title_id
(Liste os autores de cada livro.)
Outer joins (joins externos)
Inclui linhas não combinadas no resultado, como também as combinadas.
Operadores do outer join (*6)
*= Inclui no resultado todas as linhas da primeira tabela, e não somente
aquelas que combinaram, nas colunas reunidas.
=* Inclui no resultado todas as linhas da segunda coluna, e não somente
aquelas que combinaram, nas colunas reunidas.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe

Pré-visualização parcial do texto

Baixe Introdução às Subqueries no SQL: Exemplos e Sintaxe e outras Notas de estudo em PDF para Informática, somente na Docsity!

(completo e correto) select a1.au_lname, a1.au_fname from authors a1, authors a where a1.au_lname = a2.au_lname and a1.au_id != a2.au_id (que autores possuem o mesmo sobrenome?)

Unindo mais de duas tabelas

  • A cláusula from deve listar todas tabelas envolvidas.
  • A cláusula where deve listar condições “joins” suficientes para reunir todas as tabelas em cadeia.
  • Você não precisa mostrar as colunas de cada tabela envolvida no “join”

Exemplo: select au_lnane, au_fnarne, titles.title_id, title from authors, titleauthor, titles where authors.au_id = titleauthor.au_id and titleauthor.title_id = titles.title_id (Liste os autores de cada livro.)

Outer joins (joins externos)

  • Inclui linhas não combinadas no resultado, como também as combinadas.
  • Operadores do outer join (*6)
    • *= Inclui no resultado todas as linhas da primeira tabela, e não somente aquelas que combinaram, nas colunas reunidas.
    • =* Inclui no resultado todas as linhas da segunda coluna, e não somente aquelas que combinaram, nas colunas reunidas.

Sintaxe simplificada: select lista_do_select from [[banco_de_dados.] owner .] {tabela1}, [[banco_de_dados.] owner .] {tabela2} [[...]] [ where tabela1.nome_de_coluna {= | =} tabela2.nome_de_coluna]

Exemplo: select stor_name, sum(qty) from salesdetail, stores where stores.stor_id *= salesdetail.stor_id group by stor_name

(assuma que esta sendo aberta uma nova loja, que ainda não vendeu, liste a venda total de cada loja incluindo esta nova loja)

Escrevendo subqueries

  • Um subquery é um comando de seleção, usado como uma expressão, como parte de outro select, update, insert ou comando delete.
  • O subquery é resolvido e os resultados são substituidos para dentro do query mais externo.
  • Se a cláusula where do query mais externo inclui o nome da coluna, a coluna deve ser compativel com a coluna nomeada no select do subquery
  • Subquery não pode ter “order by” ou “cláusula” compute ou palavra chave “into”

Sintaxe simplificada: select lista_do_select from lista_de_tabelas [ where condição_de_pesquísa] = ( select lista_do_select from lista_de_tabelas [ where condição_de_pesquisa] [ group by expressão_agregada]

Exemplo: (dois níveis) select title from titles where title_id = (select title_id from titleauthor where au_id = (select au_id from authors where au_lname = ‘Blotchet-Halls’)) (Que livros Blotchet-Halls escreveu?)

select pub_name, pub_id from publishers where pub_id = (select pub_id from titles where price = (select max(price) from titles) (que editor publicou o livro mais caro?)

Subqueries retornando múltiplas linhas

  • Subqueries usadas com “in” or “not in” ao invés de uma igualdade na cláusula “where”, pode retomar zero ou mais valores.

Sintaxe simplificada: select lista_do_select from lista_de_tabelas [ where condições_de_pesquisa] [ not ] in (subquery)

Exemplo: select distinct stor_id, title_id from salesdetail where stor_id in (select stor_id from stores where state = “CA”) (Que livros foram vendidos na Califórnia CA?)

select distinct stor_name from stores where stor_id in (select stor_id from salesdetail where title_id in (select title_id from titles where title= ‘The Busy Executive’s Database Guide’)) (Que lojas venderam o livro ‘The Busy Executive’s Database Guide?)

select distinct pub_name from publishers where pub_id not in (select pub_id from titles where type = ‘business’) (Que editores não editaram livros da categoria ‘business’?)

Subqueries com operadores de comparação

  • O subquery deve retornar só um valor, ao contrário deve existir algum erro

Sintaxe simplificada: select lista_do_select from lista_de_tabelas [ where expressão {= | != | < | > | <= | >= }] (subquery)

  • Normalmente, a lista_do_select do subquery será “*“, desde que a função exists retome verdadeiro ou falso e não dados reais.
  • exists (subquery) True se linhas são retomadas False se linhas não são retornadas
  • not exists (subqueries) True se linhas não são retornadas False se linhas são retornadas

Sintaxe simplificada: select lista_do_select from lista_de_tabelas [where {exists | not exists}] (subquery) (intersecção entre autores e editores)

select distinct city from authors where exists (select * from publishers where authors.city = publisliers.cíty) (Que autores moram na mesma cidade que editores?)

(diferença entre autores e editores) select distinct city from authors where not exists (select * from publishers where authors.cíty = publishers.city) (Que autores não moram na mesma cidade que editores?)

Unions

  • Deixa você combinar os resultados de mais de um select

Exemplo: select city, state from publishers union select city, state from stores union select city, state from stores order by state, city

  • Descarta as linhas duplicadas (a não ser que você use a opção “all “) Sintaxe geral: Query 1 [ union [ all ] Query n]… [ order by cláusula] [ compute cláusula] onde Query 1 é: select lista_do_select [ into cláusula] from lista_de_tabelas [ where clausula] [ group by cláusula] [ having cláusula] onde Query n é: select lista_do_select from lista_de_tabelas [ wbere cláusula] [ group by cláusula] [ having cláusula]
  • Qualquer número de operadores de uniões podem aparecer no comando transact- SQL.

Exemplo: (criação de tabela carregando os dados) select * into new_titles from titles

(criação de tabela não carregando os dados) select * into new_pubs from publishers where 1 = 2

(criação de tabela com carga limitada de dados) select * into pub_1389_titles from titles where pub_id = ‘1389’

(criação de tabela eliminando colunas) select pub_name, pub_id into short_pubs frorn publishers

Modificando dados – incluindo dados

  • A cláusula insert adiciona dados numa tabela existente
    • O SQL server verifica em tempo de entrada de dados, se o valor inserido é do tipo de dados correto.
      • Se o valor é maior (muito longo) o SQL trunca para o tamanho especificado; não da mensagem de warning (aviso).
    • Algumas colunas são definidas para permitir valores nulos.
      • Para que uma coluna permita valores nulos, especifique null para inserir um valo nulo.
  • Entrar com datatime e todos valores de caractere entre aspas simples ou duplas.
    • Para entrar com um string de caracteres maior que uma linha use uma barra invertida () antes de ir para próxima linha.
    • Para entrar com aspas como se fossem um literal use o tipo oposto de aspas,isto é, se uma aspa simples é o literal, use aspas duplas para delimitar o valor de dados total a ser inserido.

Sintaxe simplificada: insert [into] tabela [(lista_de_colunas)] { values (constantes) | comando_select} (Adiciona uma linha simples.)

Exemplo: (linha completa) insert into new_pubs value (‘9945’,’Mysteries Galore’,’Kansas City’, ‘KS’)

(inserindo uma aspa) insert into new_pubs value (‘4444’, “O’bryan Publishing House”, ‘Washington’,’DC’)

  • Qualquer coluna não incluída deve permitir nulos. Exemplo: (linha parcial) insert into new_pubs(pub_id,pub_nane) values (‘3333’,”Jardin’s mc”)
  • Se a lista de colunas é omitida, os valores devem estar na mesma ordem que os nomes de coluna no comando create table.

(alteração de dados para as linhas que satisfaçam a condição) update new_titles set contract = 0 where pub_id = ‘1389’

(alteração para todas as linhas incondicionalmente) update new_titles set advance = 0

(alteração dos dados de uma tabela baseados nos dados de outra tabela) update new_titlies set contract = 0 from new_titles, publishers where new_titles.pub_id = publishers.pub_id and pub_name = ‘New Age Books’

(alteração usando sub quety,) update new_titlies set total_sales = (select sum(qty) from salesdetail where title_id = ‘BU1032’)

Modificando dados – deletando dados

  • A cláusula “delete” exclui dados selecionados de unia tabela.
    • A palavra chave from (depois do delete) é opcional
    • A palavra chave from (sintaxe de extensão) permite que dados sejam deletados de uma tabela baseados em dados guardados em outras tabelas.
    • A cláusula where determina que linhas serão deletadas; se omitida todas as linhas serão deletadas.

Sintaxe simplificada: delete [from] tabela [from tabela] [,...] [wbere condições_de_pesquisa]

Exemplo: (remove dados de uma tabela baseados em uma constante) delete from new_pubs where pub_name = ‘Mysteri’

delete from new_titles where price > $

(remove dados de uma tabela baseados em outra tabela) delete new_titles from new_titles, new_pubs where new_titles.pub_id = new_pubs.pub_id and pub_name = “Jardin’s”

(remove dados de uma tabela usando subqueries) delete from new_titles where title)id in (select title_id from titleauthor where au_id in (select au_id from authors where state = ‘UT’))

Removendo definições de dados

  • Drop table remove a definição de uma tabela e todos os dados do BD

Sintaxe simplificada: drop table tabela