8th Jul 2022 12 minutos de leitura Perguntas (e Respostas) avançadas de Entrevista SQL Tihomir Babic sql aprender sql empregos e carreira Índice 10 SQL Avançado Entrevista de emprego Perguntas e Respostas Pergunta 1: O que é um índice? Quais são os dois principais tipos de índices? Pergunta 2: Qual é o código para criar um índice? Pergunta 3: Como você adiciona ranking às linhas usando RANK()? Pergunta 4: Qual é a diferença entre RANK() e DENSE_RANK()? Pergunta 5: O que é um auto-incremento? Pergunta 6: O que é uma subconsulta? Pergunta 7: O que o seguinte código retornará? Pergunta 8: Existe uma diferença entre um valor NULL e zero? Pergunta 8: Como você filtraria os dados usando JOIN? Pergunta 10: Como você extrairia os últimos quatro caracteres de uma string? Pergunta 11: O que é uma visão? Como você cria uma? Você acha que está pronto para um emprego SQL Avançado? Você quer mudar para um trabalho que usa SQL? Você não tem certeza sobre o que esperar durante a entrevista de emprego ou como comparar seus conhecimentos? Este artigo lhe dará uma boa idéia de onde você está. Se você se sente preso em seu emprego, você não é o único. A divisão moderna do trabalho empurra as pessoas a realizar tarefas muito específicas, esperando que elas não olhem para o que está do outro lado. Os trabalhadores só precisam estar concentrados em suas responsabilidades (muitas vezes repetitivas e enfadonhas) e não devem questionar nada além disso. Muitas vezes pode parecer que você está trabalhando em uma linha de montagem. Sim, uma linha de montagem - mesmo em um escritório agradável com janelas enormes e café e frutas frescas de graça. Mas ainda assim, uma linha de montagem. Ou talvez você só queira fazer seu trabalho mais rápido, não perdendo tempo com o manuseio ineficiente de dados. Mudar seu trabalho ou melhorar seu desempenho pode aumentar significativamente a sensação de fazer algo útil. Este artigo listará algumas perguntas SQL avançadas que você poderá obter em uma entrevista. E nós também lhe daremos as respostas! Dessa forma, você pode comparar seus conhecimentos atuais e talvez aprender algo novo. Se você aplica isto ao seu novo ou atual emprego, é com você! Vamos começar nossa 'entrevista de emprego'! (Você está procurando por perguntas SQL de nível básico? Este artigo é o que você precisa). 10 SQL Avançado Entrevista de emprego Perguntas e Respostas Pergunta 1: O que é um índice? Quais são os dois principais tipos de índices? Um índice é uma estrutura em um banco de dados que pode ajudar a recuperar os dados mais rapidamente. Quando você pesquisa os dados da tabela com uma consulta SQL, ele pesquisará a tabela inteira e retornará o resultado. Uma tabela não indexada é chamada de heap. Os dados armazenados em tais tabelas geralmente não são organizados de nenhuma forma em particular. Eles são armazenados na ordem em que foram inseridos. Portanto, a busca de dados pode ser muito lenta e frustrante. Quando você consulta uma tabela indexada, o banco de dados vai primeiro ao índice e recupera os registros correspondentes diretamente. Os dois principais tipos de índices são: Clustered Não incluído Um índice agrupado define a ordem exata dos dados armazenados na tabela. Só pode haver um índice agrupado por tabela, já que a tabela só pode ser ordenada de uma forma. Um índice não agrupado simplesmente aponta para os dados, sendo que a ordem dos dados no índice não é a mesma que a ordem física dos dados reais. Os dados são armazenados em um local, enquanto o índice é armazenado em outro local. Pergunta 2: Qual é o código para criar um índice? Agora chegamos a um exemplo prático! Suponhamos que temos a mesa employeeque tem as seguintes colunas: name - O primeiro nome do funcionário. surname - O sobrenome do funcionário. nin - O número de identificação nacional do empregado (por exemplo, número do seguro social). Sua tarefa é criar um índice agrupado na coluna nin e um índice não agrupado na coluna surname. Como você faz isso? Para criar o índice agrupado, o código será: CREATE CLUSTERED INDEX CL_nin ON employee(nin); Isto criará o índice agrupado com o nome CL_nin, sobre a tabela employee e a coluna nin. Para criar o índice não agrupado, o código será: "Para criar o índice não agrupado, o código será:": CREATE NONCLUSTERED INDEX NCL_surname ON employee(surname); Execute este código e você criará um índice não incluído com o nome NCL_surname na coluna sobrenome na tabela. employee. Importante: Se você não especificar um tipo (agrupado ou não agrupado), você irá criar um índice não agrupado por padrão. Pergunta 3: Como você adiciona ranking às linhas usando RANK()? O monitoramento dos números de vendas é essencial para cada empresa. Tomemos o exemplo de um revendedor de automóveis. Pode haver muitos vendedores vendendo carros todos os dias. Imagine que a gerência da concessionária esteja interessada em comparar seus vendedores. Eles querem saber quem está se saindo bem e quem simplesmente fica por perto. Você tem a mesa salespeople com as seguintes informações: first_name - O primeiro nome do funcionário. last_name - O sobrenome do funcionário. cars_sold - O número de carros vendidos por este funcionário. Como você coloca uma classificação nesta tabela, mostrada abaixo? first_namelast_namecars_sold ClarabelleHanmer77 ChristianoOverstall51 WilhelmKopec38 RubieDing72 ArtemusWoolward100 EmileeNanetti84 RainaBedinn57 GlendonKnowlys116 CarlottaDytham106 JolyTschierasche114 O código para este problema é: SELECT RANK() OVER(ORDER BY cars_sold DESC) AS rank_sales, first_name, last_name, cars_sold FROM salespeople; O código usa a função da janela RANK(). Como nenhuma janela é definida, a função utilizará a tabela inteira. Ela classificará os dados de acordo com a coluna cars_sold e a classificação será adicionada à nova coluna rank_sales. Execute o código e você terá uma boa tabela - o que lhe dará um ponto em sua entrevista! rank_salesfirst_namelast_namecars_sold 1GlendonKnowlys116 2JolyTschierasche114 3CarlottaDytham106 4ArtemusWoolward100 5EmileeNanetti84 6ClarabelleHanmer77 7RubieDing72 8RainaBedinn57 9ChristianoOverstall51 10WilhelmKopec38 Escrevi um artigo mais detalhado sobre as funções da janela e seu uso (com exemplos) se você quiser cavar mais fundo. Há também o útil LearnSQL.com.br livro de receitas do qual eu roubei este código. Você também pode fazer isso! A seção de livros de receitas é basicamente uma lista de problemas comuns resolvidos com o uso de SQL. Você pode encontrar uma solução muito rapidamente, ler a explicação e obter um trecho de código que você pode usar para resolver suas tarefas. Pergunta 4: Qual é a diferença entre RANK() e DENSE_RANK()? A principal diferença é que RANK() dará a todas as linhas com os mesmos valores (no critério de classificação) a mesma classificação. Ele também saltará postos se mais de uma linha tiver o mesmo posto; o número de postos pulados dependerá do número de linhas que compartilham o mesmo valor. Isto cria postos não consecutivos. Com DENSE_RANK(), as linhas com os mesmos valores também serão classificadas da mesma forma. No entanto, esta função não irá pular nenhuma fileira, portanto, levará a fileiras consecutivas. Aqui está um exemplo para ajudar a esclarecer a diferença. Vamos modificar a tabela a partir do exemplo anterior. A tabela é parecida com esta: first_namelast_namecars_sold ClarabelleHanmer72 ChristianoOverstall84 WilhelmKopec38 RubieDing72 ArtemusWoolward100 EmileeNanetti84 RainaBedinn72 GlendonKnowlys116 CarlottaDytham106 JolyTschierasche114 Se você executar o código a partir do exemplo anterior, RANK() lhe dará este resultado: rank_salesfirst_namelast_namecars_sold 1GlendonKnowlys116 2JolyTschierasche114 3CarlottaDytham106 4ArtemusWoolward100 5EmileeNanetti84 5ChristianoOverstall84 7ClarabelleHanmer72 7RubieDing72 7RainaBedinn72 10WilhelmKopec38 Você notará que o ranking 5 é atribuído duas vezes, então o ranking pula o 6 e vai diretamente para o 7. O Rank 7 é alocado três vezes, depois do qual o ranking vai diretamente para 10. Se você quiser ver como DENSE_RANK() classifica as fileiras, execute o seguinte código: SELECT RANK() OVER(ORDER BY cars_sold DESC) AS rank_sales, DENSE_RANK () OVER (ORDER BY cars_sold DESC) AS dense_rank_sales, first_name, last_name, cars_sold FROM salespeople; Ele lhe dará um resultado que se parece com este: rank_salesdense_rank_salesfirst_namelast_namecars_sold 11GlendonKnowlys116 22JolyTschierasche114 33CarlottaDytham106 44ArtemusWoolward100 55EmileeNanetti84 55ChristianoOverstall84 76ClarabelleHanmer72 76RubieDing72 76RainaBedinn72 107WilhelmKopec38 O conhecimento das funções de janela é essencial para qualquer trabalho que exija conhecimento avançado de SQL. Para praticar mais SQL e ver como as funções de janela podem ajudá-lo, sinta-se à vontade para experimentar o curso LearnSQL.com.br's de Funções de Janela. Pergunta 5: O que é um auto-incremento? Qualquer tipo de trabalho com banco de dados exigirá este conhecimento. A auto-incrementação é uma função SQL que cria automática e sequencialmente um número único sempre que um novo registro é adicionado à tabela. A palavra-chave que lhe dará esta função é AUTO_INCREMENT. Aqui está o exemplo. O código abaixo irá criar a tabela names com os valores definidos por INSERT INTO: create table names ( id INT NOT NULL AUTO_INCREMENT, first_name VARCHAR(50), last_name VARCHAR(50) ); INSERT INTO names(first_name, last_name) VALUES ('Kristen', 'Yukhnev'); INSERT INTO names(first_name, last_name) VALUES ('Angelica', 'Hulson'); A tabela terá este aspecto: idfirst_namelast_name 1KristenYukhnev 2AngelicaHulson Para ver como a função de auto-incremento funciona, adicione um novo registro à tabela acima: INSERT INTO names (first_name, last_name) VALUES ('Rosalia', 'O''Towey'); Isto adicionará um novo registro a uma tabela. Selecione todos os dados para ver como a tabela mudou: SELECT * FROM names; Agora a tabela terá o seguinte aspecto: idfirst_namelast_name 1KristenYukhnev 2AngelicaHulson 3RosaliaO'Towey Quando adicionamos um novo registro à tabela, AUTO_INCREMENT adicionou automaticamente um novo número seqüencial. Como 1 e 2 existiam anteriormente na tabela, com AUTO_INCREMENT o banco de dados sabe que o próximo valor será 3. Pergunta 6: O que é uma subconsulta? Uma subconsulta (também chamada de consulta interna ou consulta aninhada) é uma consulta colocada dentro de uma consulta. Ela retorna dados que serão utilizados pela consulta principal. Normalmente, você a encontrará na cláusula WHERE. Pergunta 7: O que o seguinte código retornará? O código abaixo é um exemplo de uma subconsulta: SELECT first_name, last_name, cars_sold FROM cars WHERE cars_sold > (SELECT AVG (cars_sold) FROM cars); A execução do código retornará as colunas first_name, last_name, e cars_sold da tabela carsmas somente onde cars_sold é maior do que a média de carros vendidos. Pergunta 8: Existe uma diferença entre um valor NULL e zero? Sim! Um valor NULL é a ausência dos dados/informações. Ele tem um caráter quantitativo no sentido de representar a ausência da quantidade. Simplificando, NULL em SQL significa que o valor é desconhecido ou ausente; não sabemos qual é o valor. Por outro lado, zero significa que há um valor que é igual a, bem, zero. Portanto, zero tem um caráter qualitativo. Pergunta 8: Como você filtraria os dados usando JOIN? O significado básico por trás do JOIN é que ele retornará dados de uma tabela quando esses dados forem iguais aos dados de uma segunda tabela. Se você combiná-lo com a cláusula WHERE, o JOIN pode ser usado para filtrar dados. Aqui está um exemplo de outra concessionária de carros. A primeira tabela é chamada carse consiste nos seguintes dados: model_id - O número de identificação do modelo do carro. model_name - O nome desse modelo. brand_id - O ID da marca do carro. brand_name - O nome da marca do carro. year_id - O ano em que o modelo foi produzido. (Utiliza os dados da tabela production_year.) A segunda tabela é production_yearque contém as seguintes colunas: year_id - Um número de identificação para cada ano. year - O ano real da produção. O que você faria se lhe pedissem para encontrar todos os modelos que foram produzidos antes de 2016? Aqui está o código: SELECT model_name, brand_name FROM cars JOIN production_year ON cars.year_id = production_year.year_id WHERE year_id < 2016; Deixe-me explicar o código. Ele seleciona a coluna model_name e brand_name a partir da tabela cars. Esta mesa está unida à tabela production_year utilizando a coluna year_id, que é uma conexão entre o cars e o production_year tabelas. Devido à cláusula WHERE, este código devolve apenas os carros que são produzidos antes de 2016, ou seja, WHERE year_id < 2016. Se você estiver interessado em aprender mais sobre JOINs ou se você quiser praticar o que aprendeu, o LearnSQL.com.br SQL Practice Track pode ajudá-lo com isso. Pergunta 10: Como você extrairia os últimos quatro caracteres de uma string? Para fazer isso, você precisaria da função RIGHT(). Por exemplo, há o products tabela, que consiste nos seguintes dados: product - O nome do produto. manufacturer - A empresa que fabrica o produto. A tabela tem este aspecto: productmanufacturer X278 Hammer 2018Sledge Hammer M+S Tyres Z348 2020Goodtyre Paint red pearly 9R458PT12 2019PaintItBlack Você precisa encontrar o ano em que cada produto foi produzido. Mas quem criou o banco de dados fez um péssimo trabalho. Não há coluna com o ano de produção! Não há tais dados disponíveis - exceto como os quatro últimos caracteres do nome do produto. Para extrair o ano desse campo, aqui está o código que você usaria: SELECT product, manufacturer, RIGHT(product,4) AS year_produced FROM products; E aqui está o resultado! Simples, certo? productmanufactureryear_produced X278 Hammer 2018Sledge Hammer2018 M+S Tyres Z348 2020Goodtyre2020 Paint red pearly 9R458PT12 2019PaintItBlack2019 Deixe-me explicar o que acabamos de fazer. O código, é claro, seleciona as colunas product e manufacturer. Então, usando a função RIGHT(), instruímos a consulta para pegar as cordas no produto da coluna e retornar os últimos quatro caracteres a partir da direita. Colocaremos estes resultados mostrados na nova coluna year_produced. Pergunta 11: O que é uma visão? Como você cria uma? Uma view é uma tabela virtual ou uma instrução SQL armazenada que utiliza dados de uma ou mais tabelas existentes. A view é chamada de 'tabela virtual' porque os dados são usados como uma tabela, mas é recuperada sempre que a view é executada. (O resultado de uma visualização não é armazenado como uma tabela). Digamos que há uma tabela chamada salary que contém as seguintes colunas: first_name - O primeiro nome do funcionário. last_name - O sobrenome do funcionário. salary - O salário do funcionário. first_namelast_namesalary MikeHammer2780 JohnJohnson1600 KateWilliams3000 As informações sobre salário dos funcionários não estão disponíveis para todos na empresa. No entanto, nesta empresa todos precisam ter acesso à lista de empregados. Como você permitiria que eles fizessem isso e, ao mesmo tempo, não quebrar nenhuma regra de confidencialidade? Você não lhes permitiria o acesso a toda a tabela, mas poderia criar uma visão para eles. Dessa forma, eles poderiam sempre acessar os últimos dados sem ver nada confidencial. Veja como fazer isso: CREATE VIEW employee_list AS SELECT first_name, last_name FROM salary; A execução deste código criará uma visualização chamada employee_list, que recuperará as informações de first_name e last_name da tabela salary. É simples, não é? Você o cria usando o comando CREATE VIEW, então você apenas escreve uma consulta regular. OK, mas isto acabou de criar uma visão. Criá-la não recuperou nenhum dado. Então, como você executa a visualização? Você simplesmente finge que é uma tabela regular. O código abaixo irá executar a visualização: SELECT * FROM employee_list; E a tabela resultante está aqui! Lindo! Nenhum salário é mostrado, então você não estragou nada! first_namelast_name MikeHammer JohnJohnson KateWilliams Você acha que está pronto para um emprego SQL Avançado? A extensão do artigo não nos permite cobrir todos os tópicos SQL avançados que você possa encontrar em uma entrevista de emprego. Entretanto, eu tentei lhe dar uma boa visão geral do que você pode esperar ao candidatar-se a um emprego que usa SQL. Este deve ser apenas um lugar para você começar a pesquisar e ver onde seus conhecimentos precisam ser melhorados. Se você estiver interessado em aprender mais, há um curso SQL avançado interativo que você pode usar enquanto se prepara para a entrevista. Esteja à vontade para comentar na seção de comentários! Compartilhe seus pensamentos e suas experiências em entrevistas! Tags: sql aprender sql empregos e carreira