Database
 sql >> Base de Dados >  >> RDS >> Database

SQL SELECT para iniciantes


O SELECT A instrução é quase sem dúvida a instrução mais usada em SQL.

O SELECT A instrução é usada para recuperar dados do banco de dados. Você pode especificar quais linhas deseja retornar e quais colunas.

Exemplo


Aqui está um exemplo para demonstrar o SELECT demonstração.
SELECT * 
FROM Pets;

Resultado:
+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

Neste exemplo usamos o asterisco (* ) curinga para retornar todas as colunas. Também usamos o FROM cláusula para especificar de qual tabela obter dados.

Portanto, esta consulta retorna todas as linhas e todas as colunas do Pets tabela.

Especifique as colunas


Você pode especificar as colunas que deseja retornar.

Para fazer isso, substitua o curinga asterisco pelos nomes das colunas, cada um separado por uma vírgula, na ordem em que deseja que sejam retornados.
SELECT PetId, PetName, DOB 
FROM Pets;

Resultado:
+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 2       | Fetch     | 2019-08-16 |
| 3       | Scratch   | 2018-10-01 |
| 4       | Wag       | 2020-03-15 |
| 5       | Tweet     | 2020-11-28 |
| 6       | Fluffy    | 2020-09-17 |
| 7       | Bark      | NULL       |
| 8       | Meow      | NULL       |
+---------+-----------+------------+

Geralmente, é considerado uma boa prática fazer isso dessa maneira e retornar apenas as colunas que você realmente precisa. Usar o curinga asterisco para retornar todas as colunas pode ter um impacto adverso no desempenho, especialmente em bancos de dados maiores.

Especifique as linhas


Há muitas maneiras de filtrar os resultados apenas para as linhas em que você está interessado. A maneira mais comum é usar o WHERE cláusula. Esta cláusula permite especificar uma condição que uma linha deve satisfazer para se qualificar.

Aqui está um exemplo para demonstrar.
SELECT PetId, PetName, DOB 
FROM Pets
WHERE PetName = 'Fluffy';

Resultado:
+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 6       | Fluffy    | 2020-09-17 |
+---------+-----------+------------+

No nosso caso, havia duas linhas que satisfizeram nossa condição de pesquisa.

Nossa condição de pesquisa usa o operador igual (= ) para especificar que o valor do PetName a coluna deve corresponder ao valor especificado (Fluffy ) exatamente.

Existem muitos outros operadores que você pode usar em suas condições de pesquisa. Por exemplo, você pode usar o LIKE operador para devolver animais de estimação cujo nome comece com F ou Fluff como queiras.

Você pode adicionar mais condições ao WHERE cláusula usando operadores como o AND e OR operadores.

Aqui está um exemplo.
SELECT PetId, PetName, DOB 
FROM Pets
WHERE PetName = 'Fluffy'
OR DOB < '2020-01-01';

Resultado:
+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 2       | Fetch     | 2019-08-16 |
| 3       | Scratch   | 2018-10-01 |
| 6       | Fluffy    | 2020-09-17 |
+---------+-----------+------------+

Neste exemplo retornamos todas as linhas onde o nome do pet é Fluffy ou onde a data de nascimento do animal de estimação (especificada no DOB coluna) é inferior a uma determinada data. Usamos o operador menor que (< ) para especificar isso.

Retornando dados que não são de tabela


O SELECT também pode ser usada para retornar dados que não estão armazenados em uma tabela. Por exemplo, é perfeitamente legal fazer isso:
SELECT 'Hey there!';

Resultado:
+--------------------+
| (No column name)   |
|--------------------|
| Hey there!         |
+--------------------+

Observe que quando fazemos isso, a coluna não tem nome. Poderíamos usar um alias para dar um nome ao campo resultante.

Aqui estão mais alguns exemplos de como selecionar dados que não são de tabela e fornecer um alias para cada campo retornado:
SELECT 
    2 + 3 AS "2 + 3",
    'Fluffy' + ' ' + 'Smith' AS FullName,
    SYSDATETIME() AS "Date/time";

Resultado:
+---------+--------------+-----------------------------+
| 2 + 3   | FullName     | Date/time                   |
|---------+--------------+-----------------------------|
| 5       | Fluffy Smith | 2020-12-04 23:58:55.8483734 |
+---------+--------------+-----------------------------+

Aqui está um resumo rápido:
  • A primeira coluna simplesmente adicionou dois números.
  • A segunda coluna concatenou três strings (incluindo um caractere de espaço). Você também pode concatenar strings com números, se necessário.
  • A terceira coluna usou o SYSDATETIME() função para retornar a data e hora atuais. Esta função está disponível no SQL Server. Outros SGBDs têm suas próprias funções de data e hora. Consulte Funções de data/hora do SQLite, Funções de data/hora do SQL Server e Funções de data/hora do PostgreSQL para obter uma lista de funções de data e hora disponíveis nesses SGBDs.

Subconsultas


É possível ter vários SELECT declarações em uma única consulta. Podemos fazer isso usando uma subconsulta.
SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );

Resultado:
+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
+-------------+-----------+

Neste exemplo, usamos o IN operador para especificar uma subconsulta. Essa subconsulta selecionou dados de outra tabela e o IN O operador o relacionou de volta à consulta externa.

Ordenando os resultados


Você pode usar o ORDER BY cláusula para classificar os resultados.

Por exemplo, poderíamos classificar os resultados anteriores pelo PetTypeId coluna em ordem decrescente:
SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets )
ORDER BY PetTypeId DESC;

Resultado:
+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 3           | Dog       |
| 2           | Cat       |
| 1           | Bird      |
+-------------+-----------+

Veja SQL ORDER BY Cláusula para Iniciantes para mais exemplos e uma explicação detalhada.

Mais avançado SELECT Declarações


O SELECT declaração é uma declaração muito simples, mas pode ser usada para criar consultas muito complexas.

Aqui está uma consulta que é um pouco mais complexa do que as anteriores.
SELECT 
    PetTypes.PetType,
    COUNT(Pets.PetTypeId) AS Count
FROM Pets 
LEFT JOIN PetTypes 
ON Pets.PetTypeId = PetTypes.PetTypeId
GROUP BY PetTypes.PetType
ORDER BY Count DESC;

Resultado:
+-----------+---------+
| PetType   | Count   |
|-----------+---------|
| Dog       | 4       |
| Cat       | 3       |
| Bird      | 1       |
+-----------+---------+

No mundo das consultas SQL, isso ainda é bastante simples, no entanto, contém muitos dos elementos frequentemente vistos em consultas mais complexas.

Por exemplo, essa consulta usa uma junção para recuperar dados de várias tabelas. Ele também usa o GROUP BY cláusula para dividir as linhas em grupos.

Veja SQL GROUP BY Cláusula para Iniciantes para mais exemplos do GROUP BY cláusula.

Consulte Tutorial de junções de SQL para ver como recuperar dados de várias tabelas e retorná-los como um conjunto de resultados.

O SELECT INTO Declaração


Alguns DBMSs suportam o SELECT INTO demonstração. Isso é um pouco diferente dos exemplos anteriores, pois afeta os dados no banco de dados.

O SELECT INTO A instrução cria uma nova tabela e insere dados de outra tabela nela.

Basicamente, fica assim:
SELECT * INTO Table2
FROM Table1;

Neste exemplo, criamos uma nova tabela chamada Table2 , e insira todos os dados de Table1 afim disso. Table2 terá a mesma definição que Table1 .

Veja SQL SELECT INTO Declaração para mais exemplos.

Como mencionei, nem todos os SGBDs suportam esta afirmação. Se o seu DBMS não suportar o SELECT INTO instrução, tente usar o CREATE TABLE ... AS SELECT declaração em vez disso.

Essas instruções criam uma nova tabela como parte de sua operação. Para inserir dados em uma tabela que já existe, tente usar o INSERT INTO ... SELECT declaração em vez disso.