SQL Server é um sistema de gerenciamento de banco de dados relacional. Um dos princípios básicos de um banco relacional é que os dados ficam distribuídos em várias tabelas.
Para extrair os dados de que precisamos, vamos precisar juntar tabelas. Usamos chaves primary e foreign para relacioná-las.
Primary Key
Uma chave primária é uma coluna usada para identificar de forma única cada linha de uma tabela. Essa exclusividade pode ser obtida usando um inteiro sequencial como coluna de identidade. Ou, às vezes, colunas existentes já contêm valores únicos e podem ser usadas.
No exemplo abaixo, vemos as primeiras linhas da tabela artist. Ela tem duas colunas, artist_id e name. A coluna artist_id funciona como chave primária dessa tabela: é uma coluna inteira e cada valor é diferente.
+-----------+-------------------+| artist_id | name ||-----------+-------------------||1|AC/DC||2| Accept ||3| Aerosmith ||4| Alanis Morissette ||5| Alice In Chains |+-----------+-------------------+Tecnologia
Agora vamos olhar a tabela album. Consegue identificar a chave primária? Sim, é a coluna album_id. É comum a chave primária seguir o padrão "nome-da-tabela" + "underline" + "id". Mas você também deve ter notado a coluna artist_id. Ela também é composta por inteiros e tem o mesmo nome da coluna artist_id na tabela artist. O que isso significa?
+----------+-------------------------+-----------+| album_id | title | artist_id ||----------+-------------------------+-----------||1| For Those About To Rock |1||2| Balls to the Wall |2||3| Restless and Wild |2||4| Let There Be Rock |1||5| Big Ones |3|+----------+-------------------------+-----------+Tecnologia
Foreign Keys
Pelo resultado anterior, fica claro que o artist_id na tabela artist atua como uma Foreign_key para a tabela album. A restrição FOREIGN KEY é usada para evitar ações que quebrem os vínculos entre tabelas.
tabela artist
+-----------+-------------------+| artist_id | name ||-----------+-------------------||1|AC/DC||2| Accept ||3| Aerosmith ||4| Alanis Morissette ||5| Alice In Chains |+-----------+-------------------+Tecnologia
tabela album
+----------+-------------------------+-----------+| album_id | title | artist_id ||----------+-------------------------+-----------||1| For Those About To Rock |1||2| Balls to the Wall |2||3| Restless and Wild |2||4| Let There Be Rock |1||5| Big Ones |3|+----------+-------------------------+-----------+Tecnologia
Isso significa que, quando o artist_id na tabela album coincide com o artist_id na tabela artist, essas linhas podem ser vinculadas com um JOIN.
Juntando album e artist
As linhas 1 e 4 da tabela artist têm artist_id igual a 1. O artist_id 1 na tabela artist é AC/DC. Então, quando juntamos as duas tabelas, retornamos os detalhes do álbum a partir da tabela album e os detalhes correspondentes do artista a partir da tabela artist — unidos pelo campo artist_id, que é comum às duas tabelas.
Isso é conhecido como um inner join.
SELECT
album_id,
title,
album.artist_id,
name AS artist_name
FROM album
INNERJOIN artist ON artist.artist_id = album.artist_id
WHERE album.artist_id =1;Tecnologia
+----------+-------------------------+-----------+-------------+| album_id | title | artist_id | artist_name ||----------+---------------------------------------+-----------||1| For Those About To Rock |1|AC/DC||4| Let There Be Rock |1|AC/DC|+----------+-------------------------+-----------+-------------+Tecnologia
Juntamos as tabelas album e artist igualando o artist_id da tabela artist ao artist_id da tabela album.
Ao selecionar colunas com o mesmo nome em tabelas diferentes, você precisa qualificar totalmente o nome da coluna. Caso contrário, o SQL Server não saberá de qual tabela deve SELECT a coluna.
Para qualificar uma coluna, basta prefixá-la com o nome da tabela correspondente, seguido de um ponto.
Sintaxe de inner join
Aqui vai um exemplo genérico para relembrar a sintaxe. Primeiro selecionamos as colunas relevantes da tabela principal, neste caso a table_A, e depois qualquer coluna adicional que queremos juntar, aqui da table_B. Em seguida, definimos o join usando as palavras-chave INNER JOIN e ON, informando as colunas-chave necessárias de ambas as tabelas.
Neste exemplo, não especificamos uma cláusula WHERE, então retornamos TODAS as combinações de TODOS os matches entre as tabelas artist e album, novamente com base na coluna artist_id, que é comum às duas.
SELECT
album_id,
title,
album.artist_id,
name AS artist_name
FROM album
INNERJOIN artist on artist.artist_id = album.artist_id;Tecnologia
+----------+---------------------------------------+-----------+| album_id | title | artist_id | artist_name ||----------+---------------------------------------+-----------||1| For Those About To Rock |1|AC/DC||4| Let There Be Rock |1|AC/DC||2| Balls To The Wall |2| Accept ||3| Restless and Wild |2| Accept |+----------+---------------------------------------+-----------+Tecnologia
Vários inner joins
Você também pode juntar mais de duas tabelas usando INNER JOINS. Basta adicionar um INNER JOIN extra para cada combinação de tabelas. No código abaixo, juntamos as tabelas A e B e também B e C.
SELECT
table_A.columnX,
table_A.columnY,
table_B.columnZ table_C columnW
FROM table_A
INNERJOIN table_B ON table_B.foreign_key = table_A.primary_key
INNERJOIN table_C ON table_C.foreign_key = table_B.primary_key;Tecnologia
Se você deseja começar a usar o SQL, nós o ajudamos. Neste tutorial de SQL, apresentaremos as consultas SQL, uma ferramenta poderosa que nos permite trabalhar com os dados armazenados em um banco de dados. Você verá como escrever consultas SQL, aprenderá sobre
Explore o gerenciamento de dados com nosso tutorial do SQL Server. Do básico ao uso avançado, aprimore suas habilidades e navegue no SQL Server com confiança.
SQL Server é um sistema de gerenciamento de banco de dados relacional. Um dos princípios básicos de um banco relacional é que os dados ficam distribuídos em várias tabelas.
Para extrair os dados de que precisamos, vamos precisar juntar tabelas. Usamos chaves
primaryeforeignpara relacioná-las.Primary Key
Uma chave primária é uma coluna usada para identificar de forma única cada linha de uma tabela. Essa exclusividade pode ser obtida usando um inteiro sequencial como coluna de identidade. Ou, às vezes, colunas existentes já contêm valores únicos e podem ser usadas.
No exemplo abaixo, vemos as primeiras linhas da tabela
artist. Ela tem duas colunas,artist_idename. A colunaartist_idfunciona como chave primária dessa tabela: é uma coluna inteira e cada valor é diferente.Agora vamos olhar a tabela
album. Consegue identificar a chave primária? Sim, é a colunaalbum_id. É comum a chave primária seguir o padrão "nome-da-tabela" + "underline" + "id". Mas você também deve ter notado a colunaartist_id. Ela também é composta por inteiros e tem o mesmo nome da colunaartist_idna tabela artist. O que isso significa?Foreign Keys
Pelo resultado anterior, fica claro que o
artist_idna tabela artist atua como umaForeign_keypara a tabela album. A restriçãoFOREIGN KEYé usada para evitar ações que quebrem os vínculos entre tabelas.artistalbumIsso significa que, quando o
artist_idna tabela album coincide com oartist_idna tabela artist, essas linhas podem ser vinculadas com umJOIN.Juntando album e artist
As linhas 1 e 4 da tabela artist têm
artist_idigual a 1. Oartist_id1 na tabela artist é AC/DC. Então, quando juntamos as duas tabelas, retornamos os detalhes do álbum a partir da tabela album e os detalhes correspondentes do artista a partir da tabela artist — unidos pelo campoartist_id, que é comum às duas tabelas.Isso é conhecido como um
innerjoin.Juntamos as tabelas album e artist igualando o
artist_idda tabela artist aoartist_idda tabela album.Ao selecionar colunas com o mesmo nome em tabelas diferentes, você precisa qualificar totalmente o nome da coluna. Caso contrário, o SQL Server não saberá de qual tabela deve
SELECTa coluna.Para qualificar uma coluna, basta prefixá-la com o nome da tabela correspondente, seguido de um ponto.
Sintaxe de inner join
Aqui vai um exemplo genérico para relembrar a sintaxe. Primeiro selecionamos as colunas relevantes da tabela principal, neste caso a
table_A, e depois qualquer coluna adicional que queremos juntar, aqui datable_B. Em seguida, definimos o join usando as palavras-chaveINNER JOINeON, informando as colunas-chave necessárias de ambas as tabelas.Sem usar a cláusula
WHERENeste exemplo, não especificamos uma cláusula
WHERE, então retornamos TODAS as combinações de TODOS os matches entre as tabelas artist e album, novamente com base na colunaartist_id, que é comum às duas.Vários inner joins
Você também pode juntar mais de duas tabelas usando
INNER JOINS. Basta adicionar umINNER JOINextra para cada combinação de tabelas. No código abaixo, juntamos as tabelas A e B e também B e C.Para saber mais sobre como juntar tabelas, veja este vídeo do nosso curso Introduction to SQL Server.
Este conteúdo foi extraído do curso Introduction to SQL Server da DataCamp, por John MacKintosh.