└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # Guia Básico de consultas para o Comando SELECT :D 2 | 3 | Este guia foi criado para auxiliar iniciantes que desejem aprender a realizar consultas básicas em banco de dados SQL. 4 | 5 | ## O que significa a sigla SQL? 6 | 7 | A sigla SQL significa, Linguagem de Consulta Estruturada ou em inglês, Structured Query Language. É uma linguagem de consulta para Banco de Dados Relacional, você pode checar mais informações [aqui](https://pt.wikipedia.org/wiki/Banco_de_dados_relacional). Para saber mais sobre o que é o SQL, você pode dar uma olhada nas [referências](#referências) no final ou clicando neste [link](https://www.alura.com.br/artigos/o-que-e-sql). 8 | 9 | ## Conteúdo 10 | 11 | * [SQL SELECT](#sql-select) 12 | * [SQL SELECT Distinct](#sql-distinct) 13 | * [SQL WHERE](#sql-where) 14 | * [Operadores em Where](#operadores-em-where) 15 | * [SQL AND, OR e NOT](#sql-and-or-e-not) 16 | * [SQL ORDER BY](#sql-order-by) 17 | * [SQL SELECT TOP](#sql-select-top) 18 | * [SQL MIN() e MAX()](#sql-min-e-max) 19 | * [SQL Count, Avg, Sum](#sql-count-avg-sum) 20 | * [SQL LIKE](#sql-like) 21 | * [SQL BETWEEN](#sql-between) 22 | * [SQL ALIASES](#sql-aliases) 23 | * [SQL JOINS](#sql-joins) 24 | * [Diferentes tipos de JOINS](#diferentes-tipos-de-joins) 25 | * [Para praticar](#para-praticar) 26 | * [Referências](#referências) 27 | 28 | ## SQL SELECT 29 | 30 | O SELECT é utilizado para selecionar dados a partir de um banco de dados. Você pode especificar as colunas que serão selecionadas ou utilizar o asterisco para selecionar todas as colunas da tabela em que você deseja realizar uma consulta. 31 | 32 | ~~~~sql 33 | SELECT coluna1, coluna2 FROM nome_tabela 34 | ~~~~ 35 | ~~~~sql 36 | SELECT * FROM nome_tabela 37 | ~~~~ 38 | 39 | ## SQL DISTINCT 40 | 41 | O SELECT DISTINCT é utilizado para retornar somente valores distintos/diferentes de uma tabela, a coluna pode ter dados duplicados; e algumas vezes você só quer que seja listado os dados distintos. 42 | 43 | ~~~~sql 44 | SELECT DISTINCT coluna1, coluna2 FROM nome_tabela 45 | ~~~~ 46 | 47 | ## SQL WHERE 48 | 49 | O WHERE é utilizado para realizar filtros específicos a partir de uma condição. 50 | 51 | Nos dois últimos exemplos está sendo feita uma seleção de todas as colunas da tabela **Clientes**, com alguns filtros aplicados, onde primeiramente é filtrado todos os clientes que possuem o valor do País igual a Brasil e no ultimo exemplo, um filtro onde o cliente possui o código identificador igual a 1. 52 | 53 | Sintaxe WHERE 54 | 55 | ~~~~sql 56 | SELECT coluna1, coluna2 FROM nome_tabela WHERE condicao 57 | ~~~~ 58 | ~~~~sql 59 | SELECT * FROM Clientes WHERE País = 'Brasil' 60 | ~~~~ 61 | ~~~~sql 62 | SELECT * FROM Clientes WHERE ClienteID = 1 63 | ~~~~ 64 | 65 | Com o WHERE você pode utilizar operadores lógicos para buscar por informações distintas ou definir uma range de pesquisa. 66 | Segue abaixo uma tabela com os operadores: 67 | 68 | ### Operadores em WHERE 69 | 70 | | Operador | Descrição | 71 | | --- | --- | 72 | | = | Igual | 73 | | > | Maior que | 74 | | < | Menor que | 75 | | >= | Maior igual | 76 | | <= | Menor igual | 77 | | <> | Não igual. Em algumas versões do SQL, o operador pode ser escrito como != | 78 | | BETWEEN | Especifica um range | 79 | | LIKE | Específica um pattern | 80 | | IN | Específica múltiplos possíveis valores para uma coluna | 81 | 82 | Sintaxe com o uso dos operadores 83 | 84 | ~~~~sql 85 | SELECT ClienteID, NomeCliente FROM Clientes 86 | WHERE ClienteID >= 15 AND ClienteID <= 50 87 | ~~~~ 88 | 89 | ## SQL AND, OR e NOT 90 | 91 | O WHERE ainda pode ser combinado com os operados AND, OR e NOT. 92 | Os operadores AND e OR são utilizados para filtrar resultados baseados em mais de uma condição. Esses dois operadores retornarão os resultados, quando eles forem verdadeiros. O NOT, irá retornar o resultado quando a condição não for verdadeira. 93 | 94 | 95 | Sintaxe AND, OR e NOT 96 | ~~~~sql 97 | SELECT coluna1, coluna2 FROM nome_tabela 98 | WHERE condicao1 AND condicao2 99 | ~~~~ 100 | ~~~~sql 101 | SELECT * FROM Clientes 102 | WHERE Cidade = 'Sao Paulo' AND Cep = 01000-123 103 | ~~~~ 104 | ~~~~sql 105 | SELECT ClienteID, NomeCliente FROM Clientes 106 | WHERE UF = 'MG' OR (UF = 'SP' AND ClienteAtivo = 'N') 107 | ~~~~ 108 | ~~~~sql 109 | SELECT * FROM Clientes 110 | WHERE Cidade = 'Sao Paulo' OR Cidade = 'Campinas' 111 | ~~~~ 112 | ~~~~sql 113 | SELECT * FROM Clientes 114 | WHERE NOT Cidade = 'Sao Paulo' 115 | ~~~~ 116 | 117 | ## SQL ORDER BY 118 | 119 | A palavra-chave ORDER BY é usada para ordenar um resultado de maneira ascendente ou descendente. Por padrão, os resultados retornam de maneira ascendente. Sendo assim, para ordenar de maneira descendente é necessário usar a palavra-chave DESC após o nome da coluna que será ordenada. 120 | 121 | Sintaxe 122 | 123 | ~~~~sql 124 | SELECT coluna1, coluna2 FROM nome_tabela 125 | ORDER BY coluna1, coluna2 126 | ~~~~ 127 | 128 | Sintaxe Descendente DESC 129 | 130 | ~~~~sql 131 | SELECT * FROM Clientes 132 | ORDER BY NomeCliente DESC 133 | ~~~~ 134 | 135 | Sintaxe Ascendente e Descendente 136 | 137 | ~~~~sql 138 | SELECT * FROM Clientes 139 | ORDER BY Pais ASC, NomeCliente DESC 140 | ~~~~ 141 | 142 | ## SQL SELECT TOP 143 | 144 | O SELECT TOP é utilizado quando você deseja limitar a quantidade de registros que serão retornados em uma consulta. Seu uso é útil quando você possui uma base de dados com milhares de registros. Nem todos os bancos de dados possuem suporte para esse comando. 145 | 146 | Sintaxe 147 | ~~~~sql 148 | SELECT TOP 3 * FROM Clientes 149 | ~~~~ 150 | 151 | Sintaxe TOP n PERCENT 152 | 153 | A seguinte sintaxe permite selecionar 50% dos registros da tabela "Clientes" 154 | ~~~~sql 155 | SELECT TOP 50 PERCENT * FROM Clientes 156 | ~~~~ 157 | 158 | ## SQL MIN e MAX 159 | 160 | A função MIN() retorna o menor valor da coluna selecionada. Enquanto a função MAX(), retorna o maior valor da coluna selecionada. 161 | 162 | Sintaxe MIN() 163 | ~~~~sql 164 | SELECT MIN(coluna_nome) 165 | FROM tabela_nome 166 | WHERE condição 167 | ~~~~ 168 | ~~~~sql 169 | SELECT MIN(Precos) 170 | FROM Produtos 171 | ~~~~ 172 | 173 | Sintaxe MAX() 174 | ~~~~sql 175 | SELECT MAX(coluna_nome) 176 | FROM tabela_nome 177 | WHERE condição 178 | ~~~~ 179 | ~~~~sql 180 | SELECT MAX(Precos) 181 | FROM Produtos 182 | ~~~~ 183 | 184 | ## SQL Count, Avg, Sum 185 | 186 | A função COUNT() é utilizada para retornar o número de linhas a partir de uma determinada condição. Já a função AVG() retorna a média aritmética de uma coluna numérica. 187 | E por último, a função SUM() retorna o total de uma coluna numérica. 188 | 189 | Vale lembrar que para a função COUNT(), valores nulos não são considerados. Já para as outras duas funções, os valores nulos são ignorados. 190 | 191 | Sintaxe COUNT() 192 | ~~~~sql 193 | SELECT COUNT(nome_coluna) 194 | FROM nome_tabela 195 | WHERE condicao 196 | ~~~~ 197 | ~~~~sql 198 | SELECT COUNT(ProdutoID) 199 | FROM Produtos 200 | ~~~~ 201 | 202 | Sintaxe AVG() 203 | ~~~~sql 204 | SELECT AVG(nome_coluna) 205 | FROM nome_tabela 206 | WHERE condicao 207 | ~~~~ 208 | ~~~~sql 209 | SELECT AVG(Preco) 210 | FROM Produtos 211 | ~~~~ 212 | 213 | Sintaxe SUM() 214 | ~~~~sql 215 | SELECT SUM(nome_coluna) 216 | FROM nome_tabela 217 | WHERE condicao 218 | ~~~~ 219 | ~~~~sql 220 | SELECT SUM(Quantidade) 221 | FROM DetalhePedidos 222 | ~~~~ 223 | 224 | ## SQL LIKE 225 | 226 | O operador LIKE é usado com o WHERE para pesquisar por específicos resultados em uma coluna com informações do tipo **texto**. Por exemplo, se você deseja obter um resultado de 227 | todos os clientes que comecem ou terminem com uma letra específica, você deve usar o LIKE. 228 | 229 | | Operador | Descrição | 230 | | --- | --- | 231 | | WHERE NomeCliente LIKE 'a%' | Encontra qualquer valor que comece com a letra "a" | 232 | | WHERE NomeCliente LIKE '%a' | Encontra qualquer valor que termine com a letra "a | 233 | | WHERE NomeCliente LIKE '%ou%' | Encontra qualquer valor que possua "ou" em qualquer posição | 234 | | WHERE NomeCliente LIKE '_m%' | Encontra qualquer valor que "m" na secunda posição | 235 | | WHERE NomeCliente LIKE 'a_%' | Encontra qualquer valor que comece com a letra "a" e possui pelo menos o tamanho de dois caracteres | 236 | | WHERE NomeCliente LIKE 'a__%' | Encontra qualquer valor que comece com a letra "a" e possui pelo menos o tamanho de três caracteres | 237 | | WHERE NomeCliente LIKE 'a%r' | Encontra qualquer valor que comece com a letra "a" e termine com a letra "r"| 238 | 239 | Sintaxe 240 | 241 | ~~~~sql 242 | SELECT * FROM Clientes 243 | WHERE NomeCliente LIKE 'a%' 244 | ~~~~ 245 | 246 | O exemplo abaixo, seleciona todos os clientes da tabela NomeCliente que não comecem com a letra "a". E o último por sua vez, seleciona todos os Clientes que possuem a Cidade em que as iniciais sejam as letras, A, C e S. 247 | 248 | ~~~~sql 249 | SELECT * FROM Clientes 250 | WHERE NomeCliente NOT LIKE 'a%' 251 | ~~~~ 252 | ~~~~sql 253 | SELECT * FROM Clientes 254 | WHERE Cidade LIKE '[acs]%' 255 | ~~~~ 256 | 257 | ###### *Observação: para alguns bancos de dados, a máscara do filtro não é representada pelo símbolo %* 258 | 259 | ## SQL BETWEEN 260 | 261 | O operador BETWEEN seleciona valores dentro de um range especificado. Os valores podem ser numéricos, texto ou datas. 262 | 263 | Sintaxe 264 | ~~~~sql 265 | SELECT NomeCliente 266 | FROM TabelaNome 267 | WHERE NomeCliente BETWEEN valor1 AND valor2 268 | ~~~~ 269 | ~~~~sql 270 | SELECT * FROM Produtos 271 | WHERE Preco BETWEEN 10 AND 20 272 | ~~~~ 273 | ~~~~sql 274 | SELECT * FROM Produtos 275 | WHERE NomeProduto BETWEEN 'Abacaxi' AND 'Manteiga' 276 | ORDER BY NomeProduto 277 | ~~~~ 278 | ~~~~sql 279 | SELECT * FROM Pedidos 280 | WHERE DataPedido BETWEEN #4/01/2021# AND #4/31/2021# 281 | ~~~~ 282 | 283 | NOT BETWEEN retorna como resultado os preços que estão foram da range 10 e 20 284 | 285 | ~~~~sql 286 | SELECT * FROM Produtos 287 | WHERE Preco NOT BETWEEN 10 AND 20 288 | ~~~~ 289 | 290 | ## SQL ALIASES 291 | 292 | O Aliases é utilizado para dar a uma tabela/coluna em uma tabela, um nome temporário. Normalmente utilizado para tornar o nome das colunas mais legíveis. 293 | Esse nome temporário, só existe durante a execução da query. A palavra-chave que representa o ALIASES é **AS**. 294 | 295 | Sintaxe 296 | ~~~~sql 297 | SELECT ClienteID AS ID, NomeCliente AS Cliente 298 | FROM Clientes 299 | ~~~~ 300 | ~~~~sql 301 | SELECT NomeCliente AS Cliente, NomeContato AS [Contato Pessoal] 302 | FROM Clientes 303 | ~~~~ 304 | 305 | ## SQL JOINS 306 | 307 | O JOIN é utilizado para combinar colunas de duas ou mais tabelas, baseada na relação que existem entre elas. 308 | 309 | Por exemplo, uma tabela chamada **"Pedidos"**: 310 | 311 | | PedidoID | ClienteID | DataPedido | 312 | | --- | --- | --- | 313 | | 2021001 | 50 | 01-06-2021 | 314 | | 2021002 | 14 | 16-06-2021 | 315 | | 2021003 | 1 | 17-06-2021 | 316 | 317 | E uma outra tabela chamada **"Clientes"**: 318 | 319 | | ClienteID | NomeCliente | NomeContato | Pais | 320 | | --- | --- | --- | --- | 321 | | 1 | Restaurante X | Maria Silva | Brasil | 322 | | 5 | Lanchonete Brasil | Jose Souza | Colombia | 323 | | 6 | Bar do Beto | Carla Moreno | Brasil | 324 | 325 | Repare que "ClienteID" é uma coluna comum entre as tabelas "Pedidos" e "Cliente". Sendo assim, a relação entre essas duas tabelas se dá através dessa coluna "ClienteID". 326 | Podemos criar a seguinte query para selecionar registros que combinem os valores das duas tabelas: 327 | 328 | ~~~~sql 329 | SELECT Pedidos.PedidoID, Clientes.NomeCliente, Pedidos.DataPedido 330 | FROM Pedidos 331 | INNER JOIN Clientes ON Pedidos.ClienteID = Clientes.ClienteID 332 | ~~~~ 333 | 334 | Essa query irá resultar em: 335 | 336 | | PedidoID | NomeCliente | DataPedido | 337 | | --- | --- | --- | 338 | | 2021001 | Restaurante Baixo | 02-02-2021 | 339 | | 2021052 | Ana Sorveteria | 16-06-2021 | 340 | | 2021003 | Restaurante X | 17-06-2021 | 341 | | 2021010 | HotDog Maia | 01-05-2021 | 342 | | 2021035 | Acai Belem | 27-04-2021 | 343 | 344 | ### Diferentes tipos de JOINS 345 | 346 | Existem diferentes tipos de Joins no SQL: 347 | 348 | * (INNER) JOIN - retorna resultados em que combinam valores em ambas tabelas 349 | * LEFT (OUTER) JOIN - retorna todos os resultados da tabela da esquerda e combina os resultados a partir da tabela da direita 350 | * RIGHT (OUTER) JOIN - retorna todos os resultados da tabela da direita e combina os resultados a partir da tabela da esquerda 351 | * FULL (OUTER) JOIN - retorna todos os resultados quando existir uma combinação do lado direito ou esquerdo da tabela. 352 | 353 | 354 | ![image](https://user-images.githubusercontent.com/33867110/124308083-1c59c580-db3f-11eb-9baf-ed29e5347d53.png) 355 | 356 | 357 | Sintaxe INNER JOIN 358 | 359 | ~~~~sql 360 | SELECT nome_coluna(s) 361 | FROM tabela1 362 | INNER JOIN tabela2 ON tabela1.nome_coluna = tabela2.nome_coluna 363 | ~~~~ 364 | ~~~~sql 365 | SELECT Pedidos.PedidoID, Clientes.NomeCliente, Pedidos.DataPedido 366 | FROM Pedidos 367 | INNER JOIN Clientes ON Pedidos.ClienteID = Clientes.ClienteID 368 | ~~~~ 369 | 370 | Sintaxe LEFT JOIN 371 | 372 | ~~~~sql 373 | SELECT nome_coluna(s) 374 | FROM tabela1 375 | LEFT JOIN tabela2 ON tabela1.nome_coluna = tabela2.nome_coluna 376 | ~~~~ 377 | 378 | Sintaxe RIGHT JOIN 379 | 380 | ~~~~sql 381 | SELECT nome_coluna(s) 382 | FROM tabela1 383 | RIGHT JOIN tabela2 ON tabela1.nome_coluna = tabela2.nome_coluna 384 | ~~~~ 385 | 386 | Sintaxe FULL OUTER JOIN 387 | 388 | ~~~~sql 389 | SELECT nome_coluna(s) 390 | FROM tabela1 391 | FULL OUTER JOIN tabela2 ON tabela1.nome_coluna = tabela2.nome_coluna 392 | WHERE condicao 393 | ~~~~ 394 | 395 | ~~~~sql 396 | SELECT Clientes.NomeCliente, Pedidos.PedidoID 397 | FROM Clientes 398 | FULL OUTER JOIN Pedidos ON Clientes.ClienteID = Pedidos.ClienteID 399 | ORDER BY Clientes.ClienteNome 400 | ~~~~ 401 | 402 | ## Para praticar 403 | 404 | * [Exercícios para praticar todos os comandos acima](https://www.w3schools.com/sql/default.asp) 405 | 406 | ## Referências 407 | 408 | * [O que é o SQL? - Alura](https://www.alura.com.br/artigos/o-que-e-sql) 409 | * [Introdução ao SQL - W3Schools](https://www.w3schools.com/sql/sql_intro.asp) 410 | * [SQL Tutorial - TutorialPoint](https://www.tutorialspoint.com/sql/index.htm) 411 | * [SQL - Wikipédia](https://pt.wikipedia.org/wiki/SQL) 412 | * [SQL Count - Alura](https://www.alura.com.br/artigos/select-count-count1-e-countnome-a-batalha-dos-counts-de-sql?gclid=CjwKCAjwuIWHBhBDEiwACXQYsUlRjVAu0JFsXU8CRXxGwMftxYT6hTJn3-3FgAME9tI7zPXcZtRO1hoCRWkQAvD_BwE) 413 | --------------------------------------------------------------------------------