Repository: leticiadasilva/notas-de-aula
Branch: master
Commit: 6ef7217e5656
Files: 24
Total size: 105.2 KB
Directory structure:
gitextract_7o4d0ob8/
├── ACIEPE: análise e visualização de dados do coronavírus usando R/
│ └── readme.md
├── Banco de dados/
│ ├── Curso SQL Server 2017 Developer Expert SQL e T-SQL.md
│ ├── Ordem lógica de processamento de queries.md
│ └── sql_server.md
├── Code Like a Fullstack Girl/
│ ├── Fundamentos da arquitetura de sistemas/
│ │ ├── Módullo 3 - Arquitetura de dados essencial.md
│ │ ├── Módulo 1 - Conceitos de arquitetura em aplicações para Internet.md
│ │ ├── Módulo 2 - A arquitetura de aplicações móveis e internet das coisas.md
│ │ └── Módulo 4 - Conceitos de responsividade e experiência do usuário.md
│ └── Lógica de programação/
│ ├── Módulo 1 - Introdução à lógica e à programação.md
│ └── Módulo 2.md
├── Curso de UX/
│ └── Aula 1 - Brainstorming.md
├── Dados 360/
│ ├── 1.2 - O que são dados.md
│ ├── 1.3 - Métodos de obtenção de dados.md
│ ├── 1.4 - Descubra novas fontes de dados.md
│ ├── 1.5 Introdução a Open Source Intelligence.md
│ └── readme.md
├── Git e Github/
│ └── anotações-github.md
├── Markdown/
│ └── anotaçoes-markdown.md
├── Readme.md
├── banco_de_dados/
│ ├── Curso SQL Server 2017 Developer Expert SQL e T-SQL.md
│ ├── Ordem lógica de processamento de queries.md
│ └── sql_server.md
├── git e github/
│ └── anotações-github.md
└── markdown/
└── anotaçoes-markdown.md
================================================
FILE CONTENTS
================================================
================================================
FILE: ACIEPE: análise e visualização de dados do coronavírus usando R/readme.md
================================================
# Análise e visualização de dados usando R - Coronavírus
### Profa Dra Andreza Palma
### UFSCar - Campus Sorocaba
---
- **Sobre o R**
- R é uma plataforma madura e estável, continuamente melhorada e
utilizada intensamente na indústria e na academia;
- Aprender R é facil e pode ser divertido!
- Comunidade extremamente ativa;
- R é free para todos.
---
- **Como instalar o R?**
- R: clique [aqui](https://cloud.r-project.org/);
- RStudio: clique [aqui](https://rstudio.com/products/rstudio/download/);
- Para usar o RStudio é preciso instalar o R antes. Vantagem do
RStudio: interface;
- É possível usar o R na nuvem também. Gratuitamente para 10
projetos clicando [aqui](https://login.rstudio.cloud/register).
---
================================================
FILE: Banco de dados/Curso SQL Server 2017 Developer Expert SQL e T-SQL.md
================================================
# Curso SQL Server 2017 Developer Expert SQL e T-SQL
Esse curso pode ser encontrado [aqui](https://www.udemy.com/course/sqlserver-2017-developer-expert/).
Segundo a definição de Korth, banco de dados "é uma coleção de dados inter-relacionados, representando informações sobre um domínio específico". Isso significa que, sempre que for possível agrupar informações que se relacionam e falam de um mesmo tema, pode-se dizer que há um banco de dados.
Eles são repositórios que permitem ao computdor manusear grades volumes de dados com quais empresas e pessoas precisam lidar no dia a dia.
Exemplos comuns de banco de dados: agenda, lista telefônica.
Hoje em dia, graças a tecnologia, bancos de dados são armazenados de forma digital.
Existe uma necessidade absurda de armazenar, organizar e recuperar informações. Um BD é utilizado para fazer isso.
| Acrescentar | Localizar | Alterar | Apagar |
| ----------- | --------- | ------- | ------ |
| Insert | Select | Update| Delete |
As informações de um banco são armazenadas em tabelas. Tabelas são uma maneira de organizar informações em listas e colunas;
Cada linha pode ser chamada de *registro* e *tupla* também.
Um *campo* é um espaço dentro de uma linha da tabela que guarda algum tipo de dado.
## Conceitos de um banco de dados relacional
* Permite o controle de redundância de dados (evita a criação de dados repetidos);
* Garante a integridade dos dados;
* Garante a privacidade, através de mecanismos de segurança dos dados;
* Possibilita a otimização do espaço de armazenamento;
* Controle automático de relacionamento entre tabelas de dados;
* Possibilita criar bancos com performance de acesso a informação;
* Dentro de um banco de dados, cada tabela deve ter um nome único;
* Cada coluna tem um nome único (um nome de coluna só pode ser repetido em outra tabela);
* Colunas possuem atributos e todos devem ser do mesmo domínio;
* Linhas armazenam informações de um registro (ou tupla) da tabela;
* Cada célula pode conter no máximo um item de dado;
* A ordem das linhas e colunas é irrelevante (nomes e chaves primárias costumam ser os primeiros campos criados);
* Nunca existem duas linhas iguais;
* Chave primária é um registro sequencial que garante que nunca hajam duas linhas idênticas;
* ID's servem para fazer relacionamentos entre tabelas (é a notação comumente utilizada para as chaves primárias);
## MER: Modelo entidade-relacionamento
* É um modelo conceitual utilizado na Engenharia de Software, que serve para fazer a descrição dos objetos (entidades) envolvidos em um modelo de negócios, com suas características (atributos), e seus relacionamentos (maneira que elas se relacionam entre si);
* Em geral, apresenta de forma abstrata como será estruturado o banco de dados da aplicação. Esse banco também pode conter outras entidades, chaves e tabelas intermediárias, que só fazem sentido no contexto de bases de dados relacionais;
### Entidades
* Os objetos ou partes envolvidas num domínio, também chamados de entidades, podem ser classificados como _físicos_ ou _lógicos_.
+ **Entidade física**: aquelas realmente tangíveis, existentes e visíveis no mundo real, como um cliente (uma pessoa, uma empresa) ou um produto (um carro, um computador, uma roupa);
+ **Entidades lógicas**: existem normalmente em decorrência da interação entre entidades físicas ou com elas. Isso faz sentido dentro de um determinado domínio de negócios, mas no mundo real não são objetos físicos (ou seja, não ocupam lugar no espaço). Exemplos: venda, classificação por modelo, espécie, função/cargo;
* Entidades são nomeadas com substantivos que representem de forma clara sua função dentro do domínio;
### Tipos de entidade
* **Forte**: são aquelas que possui existência independente de outras entidades. Exemplo: num sistema de vendas, a entidade *produto* independe de qualquer outra para existir;
* **Fraca**: são aquelas que dependem de outra entidade para existirem, pois individualmente elas não fazem sentido. Exemplo: a entidade venda depende da entidade produto, pois uma venda é composta por itens;
* **Associativa**: surge quando há a necessidade de associar uma entidade a um relacionamento que já existe;
### Cardinalidade
* **1 para 1 (1-1)**: Cada uma das duas entidades envolvidas referenciam, *obrigatoriamente*, apenas uma unidade da outra.
Exemplo: em um banco de dados de currículos, cada usuário cadastrado pode possuir apenas um currículo na base, ao mesmo tempo em que cada currículo só pertence a um único usuário cadastrado.
* **1 para muitos (1-N)**: Uma das entidades envolvidas pode referenciar várias unidades da outra, porém, do outro lado cada uma das várias unidades referenciadas só pode estar ligada a uma unidade da outra entidade.
Exemplo: num sistema de plano de saúde, um usuário pode ter vários dependentes, mas cada dependente só pode estar ligado a um usuário principal. Há apenas duas entidades envolvidas: *usuário* e *dependente*. O que muda é a quantidade de unidades envolvidas em cada lado;
Uma pessoa pode ter muitos carros.
* **Muitos para muitos (N-N)**: Aqui cada entidade, independente do lado, pode referenciar múltiplas unidades da outra.
Exemplo: em um sistema de biblioteca, um título pode ser escrito por vários autores, ao mesmo tempo em que um autor pode escrever vários títulos. Assim, um objeto do tipo *autor* pode referenciar múltiplos objetos do tipo *título*, e vice versa.
## Propriedades das transações
### ACID
* **Atomicidade**: uma transação é uma unidade atômica de processamento. Ou ela é executada em sua totalidade, ou então nada é executado;
* **Consistência**: a execução de uma transação precisa manter a consistência de um banco de dados;
* **Isolamento**: uma transação não deve disponibilizar para outras transações as modificações feitas em um banco de dados até que essa seja encerrada com sucesso;
* **Durabilidade**: uma vez executada com sucesso, as alterações devem ser gravadas no banco de dados;
### CRUD
* **Create**: cria os objetos do banco de dados;
* **Read**: lê os objetos do banco de dados (*select*);
* **Update**: atualiza os objetos do banco de dados;
* **Delete**: apaga os objetos do banco de dados;
## SQL (Structured Query Language)
A primeira versão da linguagem, antigamente chamada SEQUEL, surgiu em 1972 nos laboratórios da IBM, na Califórnia. Entre 1976 e 1977 foi melhorada e ampliada, sendo chamada de SQL.
Em 1982, a ANSI (American National Standard Institute) SQL se tornou a linguagem padrão para manipulação de dados em ambiente relacional.
* **Usos**:
* Linguagem interativa de consulta (query AdHoc): atravpes de comandos SQL, os usuários podem montar consultas poderosas sem precisar criar um programa;
* Linguagem de programação para acesso às bases de dados: Comandos SQL que são embutidos em programas de aplicação (desenvolvidos em Python, .Net, Java, etc.) podem acessar as informações armazenadas em uma base de dados relacional;
### Microsoft SQL Server
Sistema gerenciador de banco de dados relacional desenvolvido pela Microsoft (popularmente conhecido como SGBD);
* Serviços
| Serviço do SQL Server | Principal Função |
| --------------------- | -----------------|
| Database Engine | Armazenamento de dados OLTP |
| Reporting Services | Relatório de dados |
| Analysis Services | Análise de dados OLAP |
| Integration Services | Fluxos de dados |
| Data Quality Services | Limpeza de dados |
| Master Data Services | Repositório único de dados |
| Replicação | Replicação de dados entre servidores|
## Tipos de dados
O tipo de dado se dá pelo formato em que a informação será armazenada no banco de dados.
* Cadeias de caracteres:
+ **char(n)**: Sequência de caracteres de tamanho fixo. Máximo 8000 caracteres;
+ **varchar(n)**: Sequência de caracteres de tamanho variável. Máximo 8000 caracteres;
+ **varchar(max)**: Sequência de caracteres de tamanho variável. Máximo 1.073.741.824 caracteres;
+ **text**: Sequência de caracteres de tamanho variável. Máximo 2gb de dados de texto;
* Cadeias de caracteres unicode:
+ **nchar(n)**: Sequência de caracteres de tamanho fixo. Máximo 4000 caracteres;
+ **nvarchar(n)**: Sequência de caracteres de tamanho variável. Máximo 4000 caracteres;
+ **nvarchar(max)**: Sequência de caracteres de tamanho variável. Máximo 536.870.912 caracteres;
+ **ntext()**: Sequência de caracteres de tamanho variável. Máximo de 2gb de dados de texto;
* Cadeias de caracteres binárias:
+ **binary**: Dados binários de comprimento fixo com um comprimento de n bytes, em que n é um valor de 1 a 8000. O tamanho de armazenamento é em bytes;
+ **image**: Dados binários do comprimento variável de 0 a 2^31-1 (2.147.483.647) bytes;
+ **varbinary**: Dados binários de comprimento vari´vel, n pode ser um valor de 1 a 8000. Max indica que o tamanho de armazenamento máximo é 2^31-1 bytes.
* Data e hora:
* Números exatos:
* Números aproximados:
---
## Constraints
São utilizadas para especificar regras de armazenamentos de dados nas tabelas e garantir integridade.
Tipos:
* **Not null**: garante que uma coluna não receberá valor NULL;
* **Unique**: Garante que os valores em uma coluna sejam diferentes;
* **Primary key**: Chave única, linha exclusiva com, combinação com
* **Foreign key**: Referencia o vlaor de um campo em determinada linha a outra tabela;
* **Default**: Define um valor padrão para uma coluna quando nenhum valor é especificado;
* **Index**: Usado para criar e recuperar dados do banco de dados com melhor performance;
* **Check**: Valida o valor
---
## Definições da linguagem SQL (DML, DDL, DCL, TCL)
* **DML** (Data Manipulation Language): manipulação da linguagem.
*Comandos*:
+ SELECT: recupera dados do banco de dados;
+ INSERT: insere dados em uma tabela;
+ CREATE: para criar objetos no banco de dados, o próprio banco de dados, tabelas, indexes, views, functions e triggers;
+ UPDATE: atualiza os dados existentes em uma tabela;
+ DELETE: exclui registros da tabela.
* **DDL** (Data Definition Language): criação dos objetos da linguagem.
*Comandos*:
+ ALTER: altera a estrutura da base de dados, o próprio banco de dados, tabelas, indexes, procedures, views, functions e triggers;
+ DROP: apaga objeto do banco de dados,
+ TRUNCATE: remove todos os registros de uma tabela, incluindo todos os espaços alocados para os registros que são removidos.
* **DCL** (Data Control Language): controle de acesso aos objetos.
*Comandos*:
+ GRANT:, REVOKE, GRANY.
* **TCL** (Transaction Control Language): controle de transação da linguagem.
*Comandos*: BEGIN TRANSACTION, COMMIT, SAVE, SAVE TRANSACTION, ROLLBACK.
================================================
FILE: Banco de dados/Ordem lógica de processamento de queries.md
================================================
# Ordem lógica de execução de uma query (Logical Query Processing Phase)
Acostumados frequentemente com linguagens de programação que possuem uma ordem de execução linear, quando nos deparamos com SQL a coisa muda de figura. Aparentemente, a ordem é bem clara quando vemos uma consulta, não? Pois é.
Para entendermos melhor, vamos visualizar como a sintaxe do _**SELECT**_ é estruturada no SQL SERVER:
SELECT DISTINCT TOP ()
FROM
JOIN
ON
WHERE
GROUP BY
HAVING
ORDER BY
### Tá Lê, mas o que isso tem a ver?
Repare na forma como a consulta está estruturada. Ela possui os comandos *Select*, *From*, *Where*, *Group By*, *Having* e *Order By*. Acontece que, no SQL, a ordem de leitura desses comandos ocorre de maneira distinta das outras linguagens de programação frequentemente utilizadas. Cada clásula no SQL gera uma saída, podendo ser ela uma tabela virtual, ou um cursor (estrutura que permite o processamento das linhas retornadas por uma consulta **-SELECT-**, através de estruturas complexas de programação, como repetições ou comandos condicionais).
### Okay, mas como isso interfere na minha consulta?
A ordem de execução dos comandos muda (em relação ao que estamos acostumados). Entender essa prioridade nos ajuda a construir queries mais robustas e aplicáveis ao que desejamos retornar. A ordem seria a seguinte:
* **FROM:** Onde os _**Joins**_ são processados. Aqui é a primeira coisa que será levada em consideração quando uma consulta for executada.
Os filtros da clásula _**ON**_ (se houverem) também serão levados em consideração, e isso irá gerar uma tabela virtual;
* **WHERE:** É o responsável por filtrar e aplicar esses filtros na tabela gerada pelo _**FROM**_. Uma nova tabela virtual é gerada aqui;
* **GROUP BY:** É a clásula que pega a tabela virtual que foi gerada pelo comando _**WHERE**_ e a agrupa como foi solicitado. Gera outra tabela virtual;
* **HAVING:** É nessa clásula que filtros baseados em funções agregadas (_**AVG, SUM, MIN, MAX**_) são aplicados. Outra tabela virtual composta pelas colunas trazidas nessa filtro é gerada;
* **SELECT:** Aqui, todas as expressões contidas dentro do SELECT são avaliadas. Isso também inclui _**ALIAS**_, _**DISTINCT**_ e _**TOP**_. Uma tabela virtual é gerada;
* **ORDER BY:** Promove a ordenação dos registros para que estes sejam apresentados. Sua saída é um _**cursor**_ que é retornado ao cliente quando a query é executada.
================================================
FILE: Banco de dados/sql_server.md
================================================
# Curso de Introdução ao SQL com Microsoft SQL Server 2017 + T-SQL com SQL Server 2012 Express
> Resumo dos conteúdos vistos do curso de SQL Server da Alura e do livro do autor Rodrigo Ribeiro Gonçalves.
## SQL
* Linguagem de programação que é utilizada para realizar consultas de banco de dados;
* Foi criada em 1974;
* É utilizada no mundo todo e sempre há demanda de mão de obra;
* Possibilita aos desenvolvedores recuperar informações no menor tempo possível.
## Banco de Dados
* São conjuntos de arquivos que se relacionam entre si e armazenam informações;
* Há vários tipos de SGBD's (Sistema de Gerenciamento de Banco de Dados) existentes, como o Microsoft SQL Management Studio, PostgreSQL, ORACLE, etc.;
#### Más-práticas comuns no SQL
* instruções mal-escritas;
* colunas mal definidas e ocupando espaços desnecessários;
* banco de dados no mesmo disco do sistema;
* tabelas sem índices;
* índices mal dimensionados;
* instalação e configuração do SO;
* dimensionamento errado do disco;
* instalação errada/mal configurada do gerenciador do banco de dados;
## Por que implantar um banco de dados?
* aumento da masa de dados;
* crescimento do número de aplicações e usuários;
* aumento do número de servidores na mesma máquina.
## Definições
+ Tabela: representação lógica de um dado. Tipo de objeto que serve para alocar dados (campos e seus tipos);
+ Toda tabela, por default, é criada num esquema chamado **_dbo_**. Ela pode ser criada em outro esquema também;
+ Chave primária: campo que permite identificar uma tabela com mais de 2 milhões de linhas. Costuma ser do tipo de dado **_int_**;
+ Quando um campo é chave primária, ele também é índice;
+ Índice: estrutura na tabela que facilita a busca;
+ Chave estrageira: uma coluna é chamada de chave estrangeira quando faz referência à dados de uma coluna que é declarada **chave primária** em outra tabela. Ela pode conter dados nulos, porém todos os seus registros que estão preenchidos devem ter correspondência numa tabela.
+ references: recebe como argumento a tabela e o campo em que a receptiva chave primária foi definida. Dessa forma, todos os valores atribuídos aquela coluna devem ter correspondência em outra tabela.
_Sempre que criamos uma chave estrangeira, o SQL Server cria uma constraint para assegurar a integridade daquela chave estrangeira._
+ Consulta: visualização de uma determinada ou de um conjunto de tabelas.
+ Não é necessário o uso de ponto e vírgula;
+ View: estrutura lógica que é uma consulta (também lógica) a outras tabelas físicas;]
+ Procedures: processos que acontecem no BD;
+ Exemplo: manipulação de dados, cálculos, funções;
+ É necessário o uso de ponto e vírgula;
+ Triggers: comando único ou conjunto de comandos/funções que serão executados quando algo acontece numa tabela. Servem para manipular dados;
+ Precisa ser armazenada em alguma tabela ou view;
+ Página de dados: menor alocação de dados (possui o tamanho de 8 kbytes). É exclusiva de um objeto de alocação;
+ Extent: agrupamento lógico de página de dados. Tem exatamente 8 páginas de dados e possui o tamanho de 64 kbytes;
+ Extent misto: páginas de dados que são de objetos de alocações diferentes;
+ Extent uniforme: páginas de dados exclusivas de um único objeto de alocação;
É regra do SQL Server começar com um Extent misto!!!
O SQL Server acessa muito mais rápido a memória do que o disco.
+ Buffer: área de 8kbytes na memória onde o SQL Server armazena as páginas de dados lidas dos objetos de alocação que estão no disco (papel do Gereciador de Buffer).
+ O dado permanece no Buffer, até que o Gerenciador de Buffer precise de mais áreas para carregar novas páginas de dados. As áreas do Buffer mais antigas e com dados modificados são gravadas em discos e liberadas para as novas páginas.
+ Quando o SQL Server necessita de um dado que é o mesmo que está no Buffer, ele faz uma leitura lógica desse dado. Se o dado não estiver no Buffer, o SQL Server faz uma leitura física do dado em disco para o Buffer Pool.
+ File Group: agrupamento lógico de arquivos de dados para distribuir melhor a alocação de dados entre os discos, agrupar dados de acordo com os contexros ou arquivamentos, e também permitir ao DBA (Administrador do Banco de Dados) uma melhor forma de administração.
+ Integridade Referencial: é uma propriedade referente aos valores de uma coluna de uma tabela de banco de dados. Todos os valores dessa coluna tem correspondência em outra coluna de outra tabela. Se essa condição for atendida, há integridade entre as tabelas.
## Normalização
### Primeira Forma Normal (1FN)
* É parte da definição formal da relação;
* Foi definida para não permitir atributos multivalorados, atributos compostos e suas combinações;
"Uma relação só está na 1FN se seus atributos contêm apenas valores atômicos (simples, indivisíveis)."
### Segunda Forma Normal (2FN)
* Dependência parcial: ocorre quando uma coluna depende apenas de uma parte de uma chave primária composta;
* Uma relação para estar na 2FN não deve possuir atributos não-chave funcionalmente determinado por parte da chave primária;
"Uma relação encontra-se na 2FN se e somente se estiver na 1FN e não contêm dependências parciais."
### Terceira Forma Normal (3FN)
* Dependência transitiva: ocorre quando uma coluna, além de depender da chave primária de uma tabela, depende de outra coluna ou conjunto de colunas da tabela;
* Uma relação, para não estar na 3FN deve ter um atributo não chave funcionalmente determinado por outro atributo não-chave;
"Uma relação está na 3FN se e somente se não estiver na 2FN e nenhum atributo primo (isto é, que não seja membro de uma chave) for transitivamente dependente da chave primária."
## Tipos de dados
São os tipos de dados que armazenam o tamanho do que foi declarado ou definido para o tipo de de dado, sem aumentar ou diminuir o número de bytes de acordo com o dado inserido.
+ int: número exato, armazena sempre 4 bytes para representar números entre -2.147.483.648 e 2.147.483.648.
+ deve-se evitar o uso para valores pequenos (idade). Utilize para armazenar valores de cálculos, por exemplo.
+ smallint: número exato, que armazena sempre 2 bytes para representar números inteiros entre -32.768 e 32.768.
+ utilizado para identificar linhas em tabelas que há certeza que não ultrapassarão de 30.000 linhas;
+ utilizado para contagem ou para armazenar pequenas quantidades;
+ tinyint: número exato, armazena 1 byte para representar números inteiros positivos entre 0 e 255.
utilizado para pequenos valores, tipificar colunas, contagens pequenas, número de dependentes;
+ bigint: número exato, armazena 8 bytes para representar números entre -9.223.372.036.854.755.808 até 9.223.372.036.854.755.807.
+ char(n): caractere, aceita 'n' bytes. Vai aceitar o total de bytes declarados, e ele terá o mesmo tamanhao para o armazenamento, independente da quantidade de caracteres associados.
+ Ex: Em um char(10), por exemplo, mesmo que você inclua a palavra "José" (4 bytes), o SQL Server irá gravar 10 bytes;
+ nchar(n): dado unicode, que aceita 'n' bytes, mas armazena 2 elevado a n bytes. Utiliza 2 bytes para representar um caractere.
+ É necessário colocar a letra "N" na frente do termo, seguido por aspas simples, para que seja identificado como unicode (N'termo aqui');
+ date: grava a data, sem hora, no formato DD/MM/AAAA. Armazena 3 bytes.
+ datetime: grava a data e a hora, no formato DD/MM/AAAA HH:MM:SS.SSS. Armazena 8 bytes, e não é padrão ANSI.
+ datetimeoffset: grava a data, hora, minuto, segundo e fuso horário.
+ smalldatetime: grava a data e a hora no formato DD/MM/AAAA HH:MM:SS.SSS. Armazena 4 bytes. Os segundos gravados são sempre zerados. Vai de 1970 até 2079.
+ time: grava a hora. Não armazena datas acumuladas.
+ money: representa um valor monetário e utiliza 8 bytes de armazenamento.
+ Pode ser utilizado para grandes quantias ou quando o armazenamento na linha for superior ao valor monetário de 241.718,3647.
+ smallmoney: representa o valor monetário. Utiliza 4 bytes de memória. Para representar acréscimos, descontos ou valores unitários, por exemplo.
+ decimal: dado com precisão decimal, no formato (0,0).
+ varchar(n): dado do tipo unicode que aceita no máximo n bytes e grava 2 bytes para cada caracter informado, e acrescenta mais 2 bytes para considerar o cálculo para gravar e recuperar os dados.
Tipos de dados unicode somente devem ser utilizados se você realmente precisa gravar algum caracter com o código unicode acima de 255;
Código de caracter de 0 até 255 são representados com 1 byte;
Código de caracter de 256 até 65554 são representados com 2 bytes.
## Comandos
+ create database: cria o banco de dados;
+ drop database: apaga o banco de dados;
Uso de [] - é utilizada quando um campo/entidade possui caracteres especiais.
+ cast: comando utilizado para convereter uma variável **int** em **varchar**.
Declare
@valor int
set@valor = 1000
print 'valor é' + cast(@valor as varchar)
Esse código também poderia ser escrito usando o comando **convert**, da seguinte forma:
Declare
@valor int
set@valor = 1000
print 'valor é' + convert(varchar, @valor)
Com o **convert** é necessário informar primeiro o tipo de dado e depois o valor a ser convertido.
A diferença entre os comandos é que o convert permite a existência de um terceiro argumento opcional, muito utilizado na conversão de datas.
+ SP_HELP: Serve para visualizar a estrutura de uma tabela.
+ alter table: altera tabelas, seja adicionando ou removendo conteúdos.
ALTER TABLE Clientes
ALTER TABLE column DataNascimento DATETIME not null
+ Adicionando um campo:
ALTER TABLE Clientes
ADD Codigo INT IDENTITY(1,1)
Primary key
*caso o campo seja chave primária*
+ insert: insere novos registros numa tabela.
INSERT INTO Clientes(
Nome,
Endereço,
Numero,
Cidade,
Cep
)
VALUES
('Joana Maria da Silva', 'Rua das Cerejeiras, 133, Laranjais, 12456-890)
(Para inserir múltiplos valores com o comando, é só separar entre "()" as informações de cada nova inserção).
+ select: serve para retornar algum campo que você queira visualizar.
SELECT * FROM Clientes
(ou)
SELECT
Codigo,
Nome,
GETDATE() AS [DataAtual]
+ where: serve para filtrar registros com base em alguns critérios. Você determina o que vai visualizar, comparando os campos com determinadas condições estabelecidas. Usa os operadores de comparação.
SELECT
Codigo,
Nome,
Endereco,
Telefone,
Email,
DataNascimento
FROM
Clientes
WHERE
Codigo > 1
### Operadores
+ and: envolve duas condições, pelo menos, que desejam ser visualizadas.
+ or: retorna valores que satisfazem uma ou outra condição.
+ between: exiibe uma faixa de comparação (um valor entre **x** ou **y**, por exemplo).
+ like: utilizado para buscar por uma determinada string dentro de um campo de caracteres.
+ registros com o primeiro caractere do campo **nome** igual a "A", por exemplo).
+ like com colchetes []: serve para pesquisas mais complexas.
+ Uma pesquisa pelos nomes Paula ou Paulo, por exemplo, ficaria da seguinte forma:
SELECT * FROM Clientes
WHERE LIKE 'Paul[ao]%'
+ top: limita a quantidade de registros que serão exibidos no **select**.
SELECT
TOP 2
Codigo
FROM
Clientes
+ order by: dispõe os registros numa determinada ordem. Como argumento, espera apenas a indicação das colunas em que se deseja ordenar a seleção desejada.
+ Por exemplo, para colocar os registros da tabela **Clientes** por ordem alfabética do campo nome:
SELECT
Codigo,
Nome,
Endereco,
Telefone,
Email,
DataNascimento
FROM
Clientes
ORDER BY
Nome
+ update: permite atualizar registros em tabelas de um banco de dados.
UPDATE
Clientes
SET
Endereco = 'Rua da Saudade', 'Florianópolis', 'SC', Telefone = '48625976'
WHERE
Codigo = 1
+ isNull: é utilizado para tratar campos com valores nulos.
ALTER TABLE Clientes
ADD Cep VARCHAR(10)
SELECT
Codigo,
Nome,
Endereco,
Telefone,
Email,
DataNascimento,
ISNULL (Cep, 'Sem Cep') as Cep
FROM
Clientes
+ coalesce: tem o mesmo propósito que a função **ISNULL**, porém a Coalesce faz parte do padrão ANSI, estando presente também em outros bancos de dados, diferente do **ISNULL** que é uma expressão do SQL Server.
Pode receber mais de dois parâmetros.
+ delete: serve para apagar um registro que foi inserido numa tabela.
DELETE Clientes
WHERE Codigo = 5
+ truncate table: serve para excluir todos os registros de uma tabela sem nenhuma discriminação.
TRUNCATE TABLE Clientes
**_ATENÇÃO_**: o comando dá um **reset** na coluna **IDENTITY**, ou seja, a tabela tem todos os seus registros excluídos, e o primeiro registro a ser inserido tem o valor de **IDENTITY** igual a 1.
+ tabelas temporárias: são tabelas comuns, mas que existem apenas no escopo da seesão em que foram criadas, ou seja, não estão armazenadas fisicamente no banco de dados de maneira definitiva. Para criar uma, é só adicionar uma **#** antes de escreve o nome da tabela no momento da sua criação.
CREATE TABLE #Clientes
Há outra forma de criar tabelas temporárias, com o uso de **SELECT** e **INTO**. A técnica cria uma **TABLE** temporária implicitamente já com os dados da tabela pré-existente.
SELECT *
INTO #Clientes
FROM Clientes
+ Tabelas temporárias se dividem em dois tipos:
+ Tabelas Locais: são criadas utilizando um **#**;
+ Tabelas Globais: utilizam dois **##** na frente do nome quando estão sendo criadas.
+ select into: permite a criação de tabelas físicas também. É só remover o **#**.
+ campo calculado: colunas virtuais que, por padrão, não estão armazenadas fisicamente no banco de dados. Estão dispostas apenas de maneira lógica.
Uma coluna ou campo calculado tem várias aplicações, como listar uma data por extenso ou calcular operações aritméticas entre tabelas.
ALTER TABLE Vendas
ADD TotalVendas AS (Quantidade * ValorVenda)
+ joins: clásula da linguagem SQL que permite criar consultas combinando resultados de uma ou duas tabelas por meio de valores comuns entre tabelas. É possível visualizar os conjuntos existentes, intersecções, uniões e diferenças.
+ inner join: consulta os registros de duas tabelas e verifica todos os registros de cada uma, selecionando os que têm valores em comum, com base no critério estabelecido no **Join**.
SELECT
Nome,
DataVenda
FROM
Clientes c
INNER JOIN Vendas V ON (C.Codigo = V.Clientes)
+ left join: permite obter não apenas os dados relacionados de duas tabelas, mas também os dados não relacionados na tabela à esquerda da clásula **Join**, marcado pelo sinal **=**.
SELECT
Nome,
DataVenda
FROM
Clientes c
LEFT JOIN Vendas V ON (C.Codigo = V.Clientes)
* right join: retorna os dados encontrados na tabela à direita do **Join** (=). Caso não existam dados associados entre às tabelas às esquerda e à direita de **Join**, serão retornados valores nulos.
SELECT
Descricao,
DataVenda
FROM
Produtos p
LEFT JOIN Vendas V ON (P.Codigo = V.Produto)
+ case: avalia uma lista de condições verificadas em um ou mais campos, e retorna apenas um de vários resultados possíveis.
SELECT
CASE
WHEN
THEN
WHEN
THEN
ELSE
END
FROM
+ group by: permite agrupar registros baseados em um critério estabelecido no argumento da instrução posicionado logo após o comando.
SELECT
Nome,
DataVenda
FROM
Clientes c
INNER JOIN Vendas V ON (V.Cliente = C.Codigo)
GROUP BY
Nome,
DataVenda
+ funções de agregação: fazem cálculos com um conjunto de valores determinados pela condição estabelecidas em clásulas **GROUP BY**.
+ count: conta os números de registros em uma condição **GROUP BY**.
SELECT
Nome,
DataVenda
COUNT (*) AS TotalVenda
FROM
Clientes c
INNER JOIN Vendas V ON (V.Cliente = C.Codigo)
GROUP BY
Nome,
DataVenda
+ sum: soma valores numéricos em um cojunto de valores estabelecidos pelo **GROUP BY**.
SELECT
Nome,
DataVenda,
SUM (ValorVenda AS TotalVenda)
FROM
Clientes c
INNER JOIN Vendas V ON (V.Cliente = C.Codigo)
GROUP BY
Nome,
DataVenda
+ avg: calcula a média de valores em um conjunto estabelecido pelo comando **GROUP BY**.
SELECT
Descricao,
SUM (quantidade * V.ValorVenda) AS TotalVenda,
SUM (quantidade * V.ValorVenda),
SUM (quantidade * P.ValorVenda) as Desconto - AVG ((quantidade * V.ValorVenda) - (quantidade * P.ValorVenda)) as Desconto
FROM
Clientes c
INNER JOIN Vendas V ON (V.Cliente = C.Codigo)
INNER JOIN Produtos P ON (V.Produto = P.Codigo)
GROUP BY
Descricao
================================================
FILE: Code Like a Fullstack Girl/Fundamentos da arquitetura de sistemas/Módullo 3 - Arquitetura de dados essencial.md
================================================
================================================
FILE: Code Like a Fullstack Girl/Fundamentos da arquitetura de sistemas/Módulo 1 - Conceitos de arquitetura em aplicações para Internet.md
================================================
================================================
FILE: Code Like a Fullstack Girl/Fundamentos da arquitetura de sistemas/Módulo 2 - A arquitetura de aplicações móveis e internet das coisas.md
================================================
================================================
FILE: Code Like a Fullstack Girl/Fundamentos da arquitetura de sistemas/Módulo 4 - Conceitos de responsividade e experiência do usuário.md
================================================
================================================
FILE: Code Like a Fullstack Girl/Lógica de programação/Módulo 1 - Introdução à lógica e à programação.md
================================================
# Entendendo o que é lógica
## Lógica de programação
"Significa apenas contextualiar a lógica na programação de computadores, buscando a melhor sequência de ações para solucionar um problema."
## Metacognição
"Pensar como você pensa."
## Abstração
"Habilidade de concentrar nos aspectos essenciais de um contextos qualquer, ignorando características menos importantes ou acidentais."
# Algoritmo e pseudocódigo
## O que é um algoritmo?
"Sequência de passos que resolve um problema."
# Aprendendo fluxograma, variáveis e constantes
## O que é um Fluxograma?
"Ferramenta utilizada para representar graficamente o algoritmo, isto é, a sequência lógica e coerente do fluxo de dados."
"Espécie de diagrama e pode ser entendido como uma representação esquemática de um processo. Podemos entendê-lo, na prática, como a documentação dos passos necessários para a execução de um processo qualquer."
## Diagrama de blocos
É utilizado para representar o método do fluxograma.
## Variáveis e constantes
### O que são variáveis?
" É um objeto (uma posição, frequentemente localizada na memória), capaza de guardar e representar um valor ou expressão."
" Espaço na memória do computador destinado a um dado que é alterado durante a execução do algoritmo."
### Tipos de variáveis
Elas podem ser classificadas, basicamente, em quatro tipos:
* Numéricas;
* Caracteres;
* Alfanuméricas;
* Lógicas.
### O que é uma constante?
Valores que não podem ser alterados durante a cida útil do programa.
# Tomadas de decisão e expressões
## Expressões aritméticas
"Expressões que utilizam operadores aritméticos e funções aritméticas envolvendo constantes e variáveis."
### Operadores aritméticos
| Operação | Símbolo |
| ---- | ---- |
| Soma | + |
| Subtração | - |
| Multiplicação | * |
| Divisão | / |
| Potenciação | ^ |
| Porcentagem | % |
### Operadores relacionais
| Símbolo | Nome do Operador | Exemplo | Significado |
| ------- | ---------------- | ------- | ----------- |
| > | maior que | x > y | x é maior que y? |
| >= | maior ou igual a | x >= y | x é maior ou igual a y? |
| < | menor que | x < y | x é menor que y? |
| <= | menor ou igual | x <= y | x é menor ou igual a y? |
| == | igualdade | x == y | x é igual a y? |
| != | diferente de | x != y | x é diferente de y? |
## Tomada de decisão
"Quando escrevemos programas, geralmente ocorre a necessidade de decidir o que fazer dependendo de alguma condição encontrada durante a execução."
================================================
FILE: Code Like a Fullstack Girl/Lógica de programação/Módulo 2.md
================================================
================================================
FILE: Curso de UX/Aula 1 - Brainstorming.md
================================================
# Curso de UX
## Aula 1 - Brainstorming
* O que é UI?
**UI** vem de User Interface (interface de usuário), onde os elementos gráficos, cores, layout ou qualquer componente visual, é estudado e aplicado de forma competente.
* O que é UX?
**UX** vem de User Experience (Experiência do Usuário), em que a usabilidade, fluidez e o contato que o usuário tem com as telas de um app, são estudados e implementados de forma competente.
* Criação de portfólio
Um portfólio é a junção dos trabalhos feitos por você. Ele é a sua "carta de apresentação" e possui mais importância que o currículo em si.
Invista tempo e procure inspirações para sempre manter atualizado e produzir novos materiais.
* Design Thinking
**Design thinking** não é uma metodologia, é uma abordagem que procura a solução de problemas de forma coletiva e colaborativa.
* Double Diamond
É a base do design thinking, e consiste em:
* Gerir ideias de forma estruturada;
* Aguçar a criatividade;
* Trabalhar em equipe para construir conhecimento;
* Entender o que as pessoas precisam de verdade.

* **Discover**: descobrir coisas, pensar em ideias, encontrar o problema;
* **Define**: desenha o que será feito de acordo com as pesquisas feitas e ideias tidas. Deixa isso bem claro e definido;
* **develop**: vai desenvolver a solução que foi pensada. É a parte onde os protótipos são criados com base em tudo o que foi feito até agora;
* **delivery**: é a entrega. Aqui todos os protótipos são filtrados e agrupados de acordo com o seu objetivo. Se estiver dentro e de acordo com o escopo do projeto, é entregue.
* Design Sprint
É uma metodologia ágil desenvolvida pela Google Ventures, feita pelo designer Jake Knaap.
* A metodologia é baseada em cinco etapas, que são divididas exatamente em cinco dias, para conceber uma ideia em algo tangível e testável.
* Antes de partir para as cinco etapas, é necessário definir o problema ou desafio a ser solucionado, e também é preciso selecionar uma equipe de profissionais, de preferência multidisciplinar.
* Comunidades, eventos e grupos que podem ajudar:
================================================
FILE: Dados 360/1.2 - O que são dados.md
================================================
# O que são dados?
## Afinal, o que são dados?
> Tudo o que está ao nosso redor pode virar dados.
Dados são um valor que você atribui a um aspecto de um objeto;
* Valores podem ser numéricos ou descritivos.
Dados são construções/criações humanas;
Dados podem ser:
* Categóricos: fatias utilizadas para compreender melhor um fenômeno/objeto;
* Discretos: usados para contar (são números inteiros);
* Contínuos: são dados de medição;
### Formas mais comuns que os dados podem assumir:
* Sequências ordenadas (*arrays*);
* Tabelas;
* Microdados (cada linha é um caso);
* Redes e grafos (foco nas relações). É composto por **nós** e **arestas**;
* Dados geográficos (representado por coordenadas geográficas);
* Textos;
* Imagens;
================================================
FILE: Dados 360/1.3 - Métodos de obtenção de dados.md
================================================
# Metodos de obtenção de dados
## Formas de obtenção:
| | Métodos comuns | Formatos comuns | Dificuldade técnica para acessar | Dificuldade para atualizar ou filtrar os dados | Dificuldade para acessar a base completa|
|-------|--------|----------|-----------|------------|-------------|
|Dados tabulares| download manual de bases de dados, raspagens de dados | HTML, XLS, CSV | Baixa | Média | Baixa |
| API | Scripts e programas | XML, JSON | Média | Média | Alta |
| Dados não estruturados| Raspagem de dados, download, OCR | PDF, HTML | Média | Alta | Alta |
---
## Raspagem de dados
É a coleta de conteúdos de um site por meio de ferramentas de interface gráfica ou por meio de códigos;
Conhecimentos necessários: HTML, CSS, JavaScript, XPath.
Dicas de ferramentas para ajudar na raspagem de dados:
[WebScraper](https://webscraper.io/);
[Google Sheets](https://docs.google.com/spreadsheets/u/0/);
[BeautifulSoup](https://www.crummy.com/software/BeautifulSoup/bs4/doc/) (Python);
[rvest](https://github.com/tidyverse/rvest) (R);
## APIs
Sigla para Interface de programação de aplicações, em inglês. São interfaces que facilitam o consumo e obtenção de dados para máquinas;
Conhecimentos necessários: Python, R ou outra linguagem de programação.
+ Exemplos de APIs:
[APIs do Portal da Transparência](http://www.portaltransparencia.gov.br/api-de-dados) (Controladoria Geral da União);
[API da Câmara e do Senado Federal](https://dadosabertos.camara.leg.br/swagger/api.html) (Câmara dos Deputados);
[Graph API](https://developers.facebook.com/docs/graph-api/) (Facebook);
[Twitter API](https://developer.twitter.com/en/docs) (Twitter);
[Waze API](https://www.waze.com/pt-BR/sdk) (Waze);
[OMDb API The Open Movie Database](https://www.omdbapi.com/) (RESTful);
### Referências:
[Open Knowledge Brasil](https://www.ok.org.br/);
[Escola de Dados](https://escoladedados.org/);
[Ferramentas simples e gratuitas de raspagem](https://escoladedados.org/tutoriais/ferramentas-simples-e-gratuitas-de-raspagem/) (Escola de Dados);
[Todos Contra Corona](https://todoscontraocorona.net.br/) (Sergipe);
[ALESP](https://www.al.sp.gov.br/alesp/presenca-plenario/);
[presenca_em_plenario.ipynb](https://github.com/priscilaportela/opendataday2020/blob/master/presenca-em-plenario-alesp/presenca_em_plenario.ipynb) (Open Data Day);
[Tabula](https://tabula.technology/);
================================================
FILE: Dados 360/1.4 - Descubra novas fontes de dados.md
================================================
# 1.4 - Descubra novas fontes de dados

| Acesso interno | Acesso nomeado | Acesso baseado em grupo | Dados públicos | Dados governamentais |
| :--------------: | :----------------: | :--------------: | :-------------: | :---------------: |
| Contrato de trabalho + políticas | Atribuído explicitamente por contrato | Via autenticação | Licença com uso limitado | Licença aberta |
| Relatórios de vendas | Carteira de habilitação | Pesquisa médica | Feed do Twitter | Grade horária do Transporte público |
| Fechado |Fechado| Compartilhado | Compartilhado | Aberto |
## Volume crescente de dados nos episódios de vazamento

## Portais de dados abertos
* O que são dados abertos?
São dados que podem ser livremente utilizados, reutilizados e redistribuídos por qualquer pessoa. Eles podem exigir atribuição de fonte e compartilhamento de fonte pelas mesmas regras.
São legíveis por máquina.
### Referências
- [O espectro dos dados]() (Open Data Institute);
- [O volume crescente de dados de cada episódio de vazamento](https://panamapapers.sueddeutsche.de/articles/56febff0a1bb8d3c3495adf4/) (Süddeutsche Zeitung);
- [Portal Brasileiro de Dados Abertos](http://www.dados.gov.br/);
- [Índice de Qualidade de Água – Média da Série Disponível](http://www.dados.gov.br/dataset/indice-de-qualidade-de-agua-media-da-serie-disponivel) (Portal Brasileiro de Dados Abertos);
- [Dados Abertos](http://dados.prefeitura.sp.gov.br/pt_PT/) (Prefeitura de São Paulo);
- [DATA.GOV](https://www.data.gov/) (Governo dos EUA);
- [data.gov.au](https://data.gov.au/) (Governo da Austrália);
- [Dados Recife](http://dados.recife.pe.gov.br/) (Prefeitura do Recife);
- [Portal de Dados Abertos do Estado de Santa Catarina](http://dados.sc.gov.br/) (Controladoria-Geral do Estado);
- [datos.gob.es](https://datos.gob.es/) (Governo da Espanha);
- [data.world](https://data.world/) (data.world Inc.);
- [Google DataSet Search](https://datasetsearch.research.google.com/) (Google);
- [Lei de Acesso à Informação](http://www.planalto.gov.br/ccivil_03/_ato2011-2014/2011/lei/l12527.htm) (Planalto);
- [Fiquem Sabendo](https://fiquemsabendo.com.br/);
- [Achados e Pedidos](http://www.achadosepedidos.org.br/) (ABRAJI);
- [TransparênciaBrasil](https://www.transparencia.org.br/) (ABRAJI);
================================================
FILE: Dados 360/1.5 Introdução a Open Source Intelligence.md
================================================
# 1.5 Introdução a Open Source Intelligence
## Open source = Código aberto
Um programa ou tecnologia tem código aberto quando temos a liberdade de executá-lo para qualquer propósito e é possível reconhecer como ele funciona por dentro.
## Open source inteligence (OSINT)
Significa Inteligência com fontes abertas. Significa a utilização de fontes abertas de dados e informações que estão publicamente acessíveis para a tomada de tomadas de decisão estratégicas.
A prática começou nos setores de inteligência do estado, passou a ser incorporada por empresas, e hoje envolve profissionais de áreas como jornalismo, segurança da informação, investigação e comunicação.
## Algumas técnicas que são utilizadas:
- Busca avançada em buscadores *(Google dorkings)* e redes sociais;
- Buscas reservas de imagens ([Yandex](https://yandex.com/images/), [Bing](https://www.bing.com/?scope=images&nr=1&FORM=NOFORM), Google);
- Uso de imagens de satélites;
- Modelagem de cenas panorâmicas ou em 3D;
- Geolocalização e técnicas de análise forense de imagens (metadados, assinaturas visuais, etc.);
## Referências
- [Visual Investigations do NYTimes](https://www.nytimes.com/video/investigations);
- [Forensic Architecture](https://forensic-architecture.org/);
## Outras técnicas muito utilizadas:
- Raspagem, produção ou modelagem de dados (*Python*);
- Análise de redes;
- Produção de mapas e cartografias;
- Ferramentas e conceitos de segurança da informação;
- Pesquisa em arquivos, cartórios, acervos, bibliotecas, etc.
## Conceito: Pegadas Digitais
São rastros que deixamos em cadastros, posts, registros, etc., encontradas na internet. Isso pode ser de grande valor para a geração de bases de dados, entendimento de assuntos, se coletadas e sistematizadas.
Tudo é uma fonte de informação!
### Exemplos:
- [Fogo Cruzado](https://fogocruzado.org.br/)
Plataforma digital e laboratório de dados desenvolvida para alertar as pessoas sobre conflitos armados.
É feito através do monitoramento das redes sociais, que permite a identificação de posts públicos que indiquem essas ocorrências.
[Palestra Cecília Oliveira](https://www.youtube.com/watch?v=MlBDcO2272s) - criadora do Fogo Cruzado.
- [Especial Catraca](https://apublica.org/especial/especial-catraca/)
Série de reportagens da Agência Pública sobre o transporte público rodoviário no Rio de Janeiro.
Reforça a importância que os dados têm na construção de evidências quando são coletados e organizados de forma sistemática para servir como base para a investigação.
- [Bellingcat toolkit](https://docs.google.com/document/d/1BfLPJpRtyq4RFtHJoNpvWQjmGnyVkfE2HYoICKOGguA/edit)
O grupo com atuação internacional, que repúne pesquisadores, investigadores e jornalistas cidadãos que usam fontes abertas em investigações.
Disponibiliza investigações, recursos e tutoriais sobre OSINT, mostrando como os trabalhos foram desenvolvidos.
- [OSINT framework](https://osintframework.com/)
Permite a seleção tipos de informação e lista recursos disponíveis para esse tipo de dado.
Em OSINT, toda informação estruturada pode ser transformada em uma base de dado útil.
================================================
FILE: Dados 360/readme.md
================================================
# Dados 360
## Escola de Dados
> bolsista na [Escola de Dados](https://escoladedados.org/)
---
- **Tópicos abordados no curso:**
- Descrever de maneira técnica os principais conceitos e tecnologias utilizados para trabalhar com dados no campo da comunicação, bem como reconhecer e criticar decisões técnicas nesta área;
- Identificar oportunidades de uso de dados no campo da comunicação para criar ou responder perguntas em diferentes contextos;
- Utilizar técnicas de análise e visualização para explorar e descrever um conjunto de dados;
- Comunicar de forma profissional os resultados do trabalho, por meio de visualizações, tabelas e textos de impacto, produzindo investigações baseadas em dados;
- Utilizar ferramentas gratuitas e de código-aberto para trabalhar com as diferentes etapas de um projeto de comunicação baseado em dados;
- Desenvolver sua própria trilha de aperfeiçoamento profissional nos diferentes campos de trabalho da comunicação baseada em dados.
================================================
FILE: Git e Github/anotações-github.md
================================================
# História do Git
A BitKeeper era uma empresa que armazenava todo o código do kernel do Linux em seu sistema, ou seja,todo o código do Linux era versionado dentro desse sistema. Houve uma quebra entre a BitKeeper e a Linux Foundation, que fez com que a BitKeeper retirasse o direito do Linux de ser isento (o que vai em contrapartida a proposta do SO). Linus Torvalds decidiu que não iria manter contrato com a empresa e resolveu criar seu próprio sistema de versionamento, incrementando melhorias que ele sentia falta no sistema da BitKeeper. Foram elas:
- velocidade;
- simplicidade de uso;
- suporte robusto a desenvolvimento não linear;
- totalmente distribuído;
- eficiência para lidar com grandes projetos como o kernel do Linux;
O Git é um sistema de controle de versionamento de código.
---
# Controle de versão
* É responsável por versionar os arquivos do seu projeto, facilitando para que você não precise fazer isso manualmente;
* Os outros sistemas (SVM, Mercurial) trabalham com as diferenças dos arquivos, enquanto o Git trabalha com os estados deles (tira fotos _"snapshots"_ dos estados);
* Todo estado sempre leva todos os arquivos daquele momento;
---
# Github
* É um local na web que serve para guardar projetos versionados pelo Git.
---
# Instalação
Acessar o [site](https://git-scm.com/download/win);
### Linux
* Não é necessário, pois já vem instalado;
### Windows
* Acesse o site, baixe e instale o programa. Você também pode seguir esse manual [aqui](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git);
### MacOs
* Se você instalar o XCode, o Git já vem junto. Também está disponível para ser baixado no site e você também pode consultar como instalá-lo pela linha de comando [aqui](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git).
---
# Configurações inciais do Git
O Git guarda as suas informações em três lugares:
* No git config do sistema como um todo;
* O git config do usuário;
* E o git config do projeto;
---
* Configurando o usuário:
git config --global user.name "Seu nome"
* Configurando o email:
git config --global user.email "seuemail@email.com"
* Configurando o seu editor:
git config --global core.editor "nome_do_seu_editor"
+ Para descobrir os valores atrabuídos a cada uma dessas configurações, é só digitar "git config" seguido do parâmetro que você deseja saber. Exemplo:
git config user.name
* E para saber tudo, digite:
git config --list
---
# Criando um repositório
### Criando uma pasta
* Linux
mkdir "nome da pasta"
* Windows
md "nome da pasta"
* MacOS
mkdir "nome da pasta"
### Entrando dentro da pasta
* Todos
cd "nome da pasta"
* Para voltar a uma pasta acima da que vocẽ está, basta digitar:
cd ..
### Para iniciar um repositório
git init
### Listar os arquivos da pasta
* Linux e Mac
ls
* Windows
dir
---
### Usando o editor no terminal
O **Vim** é um editor de texto muito utilizado para quem gosta de trabalhar pelo terminal. Ele está disponível para Windows, Mac e Linux e caso o seu computador não tenha ele instalado, você pode encontrá-lo [aqui](https://www.vim.org/download.php).
* Para editar um arquivo:
vi "nome do arquivo"
ou
vim "nome do arquivo"
* Para começar a inserir texto, aperte a letra
i
que significa inserção;
* Digite o texto desejado;
* Pressione a tecla
esc
serve para sair do modo de inserção;
* Depois, digite:
:
que indica que vai iniciar algum comando;
w
que significa que você deseja escrever/salvar;
q
que significa sair.
* E agora aperte
enter
você sai do modo de edição e seu arquivo está salvo;
================================================
FILE: Markdown/anotaçoes-markdown.md
================================================
> As anotações foram baseadas nesse curso [aqui](https://www.udemy.com/aprenda-markdown/). do [Roberto Achar](https://twitter.com/RobertoAchar).
* [ ] Criando títulos
Existem seis tamanhos de títulos. Quanto menor na proporção ele for, mais **#** são adicionadas;
# Título 1
# Título 1
---
## Título 2
## Título 2
---
### Título 3
### Título 3
---
#### Título 4
#### Título 4
---
##### Título 5
##### Título 5
---
###### Título 6
###### Título 6
---
Para separá-los, você pode usar " **=** " ou " **-** ".
---
* "Título 1
========"
Título 1
========
* "Título 2
--------"
Título 2
--------
---
* [ ] Parágrafos
Podem ser quebrados de duas formas:
* dando dois espaços após o final da linha;
* apertando duas vezes o botão **enter** após o final do parágrafo.
---
* [ ] Ênfase
- ### Negrito 1
**Teste**
**Teste**
---
- ### Negrito 2
__Teste__
__Teste__
---
- ### Itálico 1
*Teste*
*Teste*
---
- ### Itálico 2
_Teste_
_Teste_
---
- ### Negrito e Itálico 1
***Teste***
***Teste***
---
- ### Negrito e Itálico 2
**_Teste_**
**_Teste_**
---
- ### Negrito e Itálico 3
__*Teste*__
__*Teste*__
---
- ### Riscado
~~Teste~~
~~Teste~~
---
- ### Citação
> Teste
> Teste
---
- ### Citação com negrito e Itálico
> **Teste** _Teste_
> **Teste** _Teste_
---
* [ ] Linhas horizontais
- ### Exemplo 1
Podem ser feitas com asteriscos:
***
***
Ou com traços:
---
---
- ### Exemplo 2
Sejam juntos ou espaçados:
* * *
* * *
- - -
- - -
- ### Exemplo 3
a única regra é colocar no mínimo três de cada símbolo.
***************
****************
---------------
----------------
* [ ] Listas Não-Ordenadas
- ### Exemplo 1
Um novo item é criado com " __*__ ".
* Item 1
* Item 2
* Item 3
---
- ### Exemplo 2
Utiliza-se o " **-** " para inserir um novo item.
- Item 1
- Item 2
- Item 3
---
- ### Exemplo 3
Utiliza-se o " **+** " para criar um novo item.
+ Item 1
+ Item 2
+ Item 3
---
- ### Exemplo 4
Para criar um Subitem, crie um Item, dê dois **ESPAÇOS**, vá para a próxima linha, e aperte a tecla **TAB**.
* Item 1
* Subitem 01
* Item 2
* Subitem 02
* Item 3
* Subitem 03
---
- ### Exemplo 5
Para deixar os itens espaçados, é só dar **ENTER** entre eles.
* Item 1
* Item 2
* Item 3
- - -
* [ ] Listas Ordenadas
- ### Exemplo 1
Uma lista é criada através de números em ordem crescente, seguidos de um ponto final.
1. Item 01
2. Item 02
3. Item 03
1. Item 01
2. Item 02
3. Item 03
---
- ### Exemplo 2
Uma lista é criada atráves de números repetidos. O Markdown entende que a intenção é que esses números estivessem em ordem crescente.
1. Item 01
1. Item 02
1. Item 03
1. Item 01
1. Item 02
1. Item 03
---
- ### Exemplo 3
Mesmo que os números sejam colocados em fora de ordem, eles seguirão a ordem crescente a partir do primeiro número.
8. Item 01
3. Item 02
1. Item 03
8. Item 01
3. Item 02
1. Item 03
---
- ### Exemplo 4
Quer escolher os números da sua lista? Não tem problema! Faça da seguinte forma:
1980\. Juliana
1998\. Letícia
2000\. Priscila
1980\. Juliana
1998\. Letícia
2000\. Priscila
- - -
* [ ] Links
- ### Exemplo 1
O texto do link vai dentro de " **[]** ", e o link dentro de " **()** ".
[clique aqui](https://www.google.com)
[clique aqui](https://www.google.com)
---
- ### Exemplo 2
O texto do link vai dentro de " **[]** ", e o link dentro de " **()** ", porém um texto alternativo é inserido após o link através de **" "**. Esse texto será mostrado quando você parar seu mouse sobre o link.
[Clique aqui](https://www.google.com "blog")
[Clique aqui](https://www.google.com "blog")
---
- ### Exemplo 3
Nesse exemplo, é criado uma espécie de variável, para qual o link será atribuído.
[Clique aqui][site-url]
[site-url]: (https://www.google.com/)
[Clique aqui][site-url]
[site-url]: (https://www.google.com/)
- - -
* [ ] Imagens
É bem parecido com o formato dos links, mas sempre tem um " **!** " antes.
- ### Exemplo 1
O nome da imagem vai dentro de " **[]** ", e o link dentro de " **()** "


---
- ### Exemplo 2
Aqui também é utilizado o esquema de variáveis.
![Markdown][image]
[image]: https://cdn.pixabay.com/photo/2019/06/28/03/07/camping-4303359_960_720.jpg
![Markdown][image]
[image]: https://cdn.pixabay.com/photo/2019/06/28/03/07/camping-4303359_960_720.jpg
---
- ### Exemplo 3 - Imagem com link
Se você colocar o mouse em cima da imagem, verá seu link e poderá ser redirecionado para o mesmo.
[](https://cdn.pixabay.com/photo/2018/12/08/11/03/escalators-3863163_960_720.jpg)
[]
(https://cdn.pixabay.com/photo/2018/12/08/11/03/escalators-3863163_960_720.jpg)
---
- ### Exemplo 4 - Imagem com link (2)
Nesse exemplo, está sendo usado imagem, link e variável, tudo junto.
Variáveis: [image-thumbs], com o endereço da imagem, e [image-url], com o endereço do link.
[![Markdown][image-thumbs]][image-url]
[image-thumbs]: https://cdn.pixabay.com/photo/2019/06/27/03/42/beach-4301479_960_720.jpg
[image-url]: https://pixabay.com/pt/photos/praia-shell-de-mar-shell-f%C3%A9rias-4301479/
[![Markdown][image-thumbs]][image-url]
[image-thumbs]: https://cdn.pixabay.com/photo/2019/06/27/03/42/beach-4301479_960_720.jpg
[image-url]: https://pixabay.com/pt/photos/praia-shell-de-mar-shell-f%C3%A9rias-4301479/
- - -
* [ ] Tabelas
- ### Exemplo 1
As tabelas são separadas por pipe " **|** ". Quando se deseja criar uma linha, utiliza-se " **-** ", para separar os dados.
| Nome |Idade |
|------|------|
| Joana |40 |
| Nome |Idade |
|------|------|
| Joana |40 |
---
- ### Exemplo 2
Mesmo não existindo alinhamento, o Markdown identifica isso como uma tabela.
| Nome | Idade| Profissão |
| ---- | ---- | --------- |
| Lua | 21 | Cientista de dados|
| Isabela | 32 | Dançarina |
| Raissa | 20 | Psicóloga comportamental|
| Nome | Idade| Profissão |
| ---- | ---- | --------- |
| Lua | 21 | Cientista de dados|
| Isabela | 32 | Dançarina |
| Raissa | 20 | Psicóloga comportamental|
---
- ### Exemplo 3
Por padrão, o alinhamento das células é a esquerda. Para alinhar uma tabela:
+ A esquerda: **:---**
+ A direita: **---:**
+ Centralizada: **:---:**
| Nome | Idade| Profissão |
| :---- | :----: | ---------: |
| Igor | 36 | Professor |
| Carla | 29 | Advogada |
| Diogo | 15 | Estudante |
| Nome | Idade| Profissão |
| :---- | :----: | ---------: |
| Igor | 36 | Professor |
| Carla | 29 | Advogada |
| Diogo | 15 | Estudante |
- - -
* [ ] Códigos
- ### Exemplo em linha
Informe os parâmetros `username` e `password` para a função `login ()`.
Para destacar partes do texto/código, utilize a crase. Os parâmetros username e password foram destacados da seguinte forma:
`username` e `password`
---
``const message = `My name is $ {name}`;``
Quando a declaração da variável não for código e for necessário transformar em código como na linha acima, faça da seguinte forma:
``const message = `My name is $ {name}`;``
---
- ### Exemplo em bloco 1
É só colocar um **TAB** antes de toda linha de código que se deseja inserir no bloco.
// login.js
const username = 'gatinho99';
const password = 'secret';
login(username, password);
---
- ### Exemplo em bloco 2
É inserido com três crases antes (**```**) e três depois.
```
// login.js
const username = 'gatinho99';
const password = 'secret';
login(username, password);
```
```
// login.js
const username = 'gatinho99';
const password = 'secret';
login(username, password);
```
---
- ### Syntax hightlighting
Serve para mostrar ("acender") a sintaxe do código. Auxilia na identificação de valores da linguagem em questão.
Para usar o recurso, deve-se colocar o trecho de código entre crases, da seguinte forma:
```javascript
//login.js
const username = 'gatinho99';
const password = 'secret';
login (username, password);
```
O resultado será esse:
```javascript
//login.js
const username = 'gatinho99';
const password = 'secret';
login (username, password);
```
---
Outra forma de fazer é assim:
```js
//login.js
const username = 'gatinho99';
const password = 'secret';
login (username, password);
```
Resultado:
```js
//login.js
const username = 'gatinho99';
const password = 'secret';
login (username, password);
```
- - -
* [ ] Github
### Colocar 'caixinhas' nos ícones de uma lista:
* Item 01
* Item 02
* Item 03
* Item 01
* Item 02
* Item 03
Colocando **[ ]** com um espaço no meio, ficará assim:
* [ ] Item 01
* [ ] Item 02
* [ ] Item 03
* [ ] Item 01
* [ ] Item 02
* [ ] Item 03
Caixinhas assinaladas
- [x] item 01
- [ ] Item 02
- [ ] Item 03
- [x] Write the press release
- [ ] Update the website
- [ ] Contact the media
---
### Relacionar pr com issue:
Só colocar uma #;
---
## Emojis
:smile:
:heart:
:smile:
:heart:
Mais emojis [aqui](https://www.webfx.com/tools/emoji-cheat-sheet/) :D
================================================
FILE: Readme.md
================================================
# Notas de Aula
Esse repositório tem o objetivo de compartilhar anotações de cursos já feitos por mim e auxiliar em dúvidas recorrentes sobre os assuntos aqui encontrados.
Qualquer dúvida, favor entrar em contato com [@dii_lua](https://twitter.com/dii_lua).
================================================
FILE: banco_de_dados/Curso SQL Server 2017 Developer Expert SQL e T-SQL.md
================================================
# Curso SQL Server 2017 Developer Expert SQL e T-SQL
Esse curso pode ser encontrado [aqui](https://www.udemy.com/course/sqlserver-2017-developer-expert/).
Segundo a definição de Korth, banco de dados "é uma coleção de dados inter-relacionados, representando informações sobre um domínio específico". Isso significa que, sempre que for possível agrupar informações que se relacionam e falam de um mesmo tema, pode-se dizer que há um banco de dados.
Eles são repositórios que permitem ao computdor manusear grades volumes de dados com quais empresas e pessoas precisam lidar no dia a dia.
Exemplos comuns de banco de dados: agenda, lista telefônica.
Hoje em dia, graças a tecnologia, bancos de dados são armazenados de forma digital.
Existe uma necessidade absurda de armazenar, organizar e recuperar informações. Um BD é utilizado para fazer isso.
| Acrescentar | Localizar | Alterar | Apagar |
| ----------- | --------- | ------- | ------ |
| Insert | Select | Update| Delete |
As informações de um banco são armazenadas em tabelas. Tabelas são uma maneira de organizar informações em listas e colunas;
Cada linha pode ser chamada de *registro* e *tupla* também.
Um *campo* é um espaço dentro de uma linha da tabela que guarda algum tipo de dado.
## Conceitos de um banco de dados relacional
* Permite o controle de redundância de dados (evita a criação de dados repetidos);
* Garante a integridade dos dados;
* Garante a privacidade, através de mecanismos de segurança dos dados;
* Possibilita a otimização do espaço de armazenamento;
* Controle automático de relacionamento entre tabelas de dados;
* Possibilita criar bancos com performance de acesso a informação;
* Dentro de um banco de dados, cada tabela deve ter um nome único;
* Cada coluna tem um nome único (um nome de coluna só pode ser repetido em outra tabela);
* Colunas possuem atributos e todos devem ser do mesmo domínio;
* Linhas armazenam informações de um registro (ou tupla) da tabela;
* Cada célula pode conter no máximo um item de dado;
* A ordem das linhas e colunas é irrelevante (nomes e chaves primárias costumam ser os primeiros campos criados);
* Nunca existem duas linhas iguais;
* Chave primária é um registro sequencial que garante que nunca hajam duas linhas idênticas;
* ID's servem para fazer relacionamentos entre tabelas (é a notação comumente utilizada para as chaves primárias);
## MER: Modelo entidade-relacionamento
* É um modelo conceitual utilizado na Engenharia de Software, que serve para fazer a descrição dos objetos (entidades) envolvidos em um modelo de negócios, com suas características (atributos), e seus relacionamentos (maneira que elas se relacionam entre si);
* Em geral, apresenta de forma abstrata como será estruturado o banco de dados da aplicação. Esse banco também pode conter outras entidades, chaves e tabelas intermediárias, que só fazem sentido no contexto de bases de dados relacionais;
### Entidades
* Os objetos ou partes envolvidas num domínio, também chamados de entidades, podem ser classificados como _físicos_ ou _lógicos_.
+ **Entidade física**: aquelas realmente tangíveis, existentes e visíveis no mundo real, como um cliente (uma pessoa, uma empresa) ou um produto (um carro, um computador, uma roupa);
+ **Entidades lógicas**: existem normalmente em decorrência da interação entre entidades físicas ou com elas. Isso faz sentido dentro de um determinado domínio de negócios, mas no mundo real não são objetos físicos (ou seja, não ocupam lugar no espaço). Exemplos: venda, classificação por modelo, espécie, função/cargo;
* Entidades são nomeadas com substantivos que representem de forma clara sua função dentro do domínio;
### Tipos de entidade
* **Forte**: são aquelas que possui existência independente de outras entidades. Exemplo: num sistema de vendas, a entidade *produto* independe de qualquer outra para existir;
* **Fraca**: são aquelas que dependem de outra entidade para existirem, pois individualmente elas não fazem sentido. Exemplo: a entidade venda depende da entidade produto, pois uma venda é composta por itens;
* **Associativa**: surge quando há a necessidade de associar uma entidade a um relacionamento que já existe;
### Cardinalidade
* **1 para 1 (1-1)**: Cada uma das duas entidades envolvidas referenciam, *obrigatoriamente*, apenas uma unidade da outra.
Exemplo: em um banco de dados de currículos, cada usuário cadastrado pode possuir apenas um currículo na base, ao mesmo tempo em que cada currículo só pertence a um único usuário cadastrado.
* **1 para muitos (1-N)**: Uma das entidades envolvidas pode referenciar várias unidades da outra, porém, do outro lado cada uma das várias unidades referenciadas só pode estar ligada a uma unidade da outra entidade.
Exemplo: num sistema de plano de saúde, um usuário pode ter vários dependentes, mas cada dependente só pode estar ligado a um usuário principal. Há apenas duas entidades envolvidas: *usuário* e *dependente*. O que muda é a quantidade de unidades envolvidas em cada lado;
Uma pessoa pode ter muitos carros.
* **Muitos para muitos (N-N)**: Aqui cada entidade, independente do lado, pode referenciar múltiplas unidades da outra.
Exemplo: em um sistema de biblioteca, um título pode ser escrito por vários autores, ao mesmo tempo em que um autor pode escrever vários títulos. Assim, um objeto do tipo *autor* pode referenciar múltiplos objetos do tipo *título*, e vice versa.
## Propriedades das transações
### ACID
* **Atomicidade**: uma transação é uma unidade atômica de processamento. Ou ela é executada em sua totalidade, ou então nada é executado;
* **Consistência**: a execução de uma transação precisa manter a consistência de um banco de dados;
* **Isolamento**: uma transação não deve disponibilizar para outras transações as modificações feitas em um banco de dados até que essa seja encerrada com sucesso;
* **Durabilidade**: uma vez executada com sucesso, as alterações devem ser gravadas no banco de dados;
### CRUD
* **Create**: cria os objetos do banco de dados;
* **Read**: lê os objetos do banco de dados (*select*);
* **Update**: atualiza os objetos do banco de dados;
* **Delete**: apaga os objetos do banco de dados;
## SQL (Structured Query Language)
A primeira versão da linguagem, antigamente chamada SEQUEL, surgiu em 1972 nos laboratórios da IBM, na Califórnia. Entre 1976 e 1977 foi melhorada e ampliada, sendo chamada de SQL.
Em 1982, a ANSI (American National Standard Institute) SQL se tornou a linguagem padrão para manipulação de dados em ambiente relacional.
* **Usos**:
* Linguagem interativa de consulta (query AdHoc): atravpes de comandos SQL, os usuários podem montar consultas poderosas sem precisar criar um programa;
* Linguagem de programação para acesso às bases de dados: Comandos SQL que são embutidos em programas de aplicação (desenvolvidos em Python, .Net, Java, etc.) podem acessar as informações armazenadas em uma base de dados relacional;
### Microsoft SQL Server
Sistema gerenciador de banco de dados relacional desenvolvido pela Microsoft (popularmente conhecido como SGBD);
* Serviços
| Serviço do SQL Server | Principal Função |
| --------------------- | -----------------|
| Database Engine | Armazenamento de dados OLTP |
| Reporting Services | Relatório de dados |
| Analysis Services | Análise de dados OLAP |
| Integration Services | Fluxos de dados |
| Data Quality Services | Limpeza de dados |
| Master Data Services | Repositório único de dados |
| Replicação | Replicação de dados entre servidores|
## Tipos de dados
O tipo de dado se dá pelo formato em que a informação será armazenada no banco de dados.
* Cadeias de caracteres:
+ **char(n)**: Sequência de caracteres de tamanho fixo. Máximo 8000 caracteres;
+ **varchar(n)**: Sequência de caracteres de tamanho variável. Máximo 8000 caracteres;
+ **varchar(max)**: Sequência de caracteres de tamanho variável. Máximo 1.073.741.824 caracteres;
+ **text**: Sequência de caracteres de tamanho variável. Máximo 2gb de dados de texto;
* Cadeias de caracteres unicode:
+ **nchar(n)**: Sequência de caracteres de tamanho fixo. Máximo 4000 caracteres;
+ **nvarchar(n)**: Sequência de caracteres de tamanho variável. Máximo 4000 caracteres;
+ **nvarchar(max)**: Sequência de caracteres de tamanho variável. Máximo 536.870.912 caracteres;
+ **ntext()**: Sequência de caracteres de tamanho variável. Máximo de 2gb de dados de texto;
* Cadeias de caracteres binárias:
+ **binary**: Dados binários de comprimento fixo com um comprimento de n bytes, em que n é um valor de 1 a 8000. O tamanho de armazenamento é em bytes;
+ **image**: Dados binários do comprimento variável de 0 a 2^31-1 (2.147.483.647) bytes;
+ **varbinary**: Dados binários de comprimento vari´vel, n pode ser um valor de 1 a 8000. Max indica que o tamanho de armazenamento máximo é 2^31-1 bytes.
* Data e hora:
* Números exatos:
* Números aproximados:
---
## Constraints
São utilizadas para especificar regras de armazenamentos de dados nas tabelas e garantir integridade.
Tipos:
* **Not null**: garante que uma coluna não receberá valor NULL;
* **Unique**: Garante que os valores em uma coluna sejam diferentes;
* **Primary key**: Chave única, linha exclusiva com, combinação com
* **Foreign key**: Referencia o vlaor de um campo em determinada linha a outra tabela;
* **Default**: Define um valor padrão para uma coluna quando nenhum valor é especificado;
* **Index**: Usado para criar e recuperar dados do banco de dados com melhor performance;
* **Check**: Valida o valor
---
## Definições da linguagem SQL (DML, DDL, DCL, TCL)
* **DML** (Data Manipulation Language): manipulação da linguagem.
*Comandos*:
+ SELECT: recupera dados do banco de dados;
+ INSERT: insere dados em uma tabela;
+ CREATE: para criar objetos no banco de dados, o próprio banco de dados, tabelas, indexes, views, functions e triggers;
+ UPDATE: atualiza os dados existentes em uma tabela;
+ DELETE: exclui registros da tabela.
* **DDL** (Data Definition Language): criação dos objetos da linguagem.
*Comandos*:
+ ALTER: altera a estrutura da base de dados, o próprio banco de dados, tabelas, indexes, procedures, views, functions e triggers;
+ DROP: apaga objeto do banco de dados,
+ TRUNCATE: remove todos os registros de uma tabela, incluindo todos os espaços alocados para os registros que são removidos.
* **DCL** (Data Control Language): controle de acesso aos objetos.
*Comandos*:
+ GRANT:, REVOKE, GRANY.
* **TCL** (Transaction Control Language): controle de transação da linguagem.
*Comandos*: BEGIN TRANSACTION, COMMIT, SAVE, SAVE TRANSACTION, ROLLBACK.
================================================
FILE: banco_de_dados/Ordem lógica de processamento de queries.md
================================================
# Ordem lógica de execução de uma query (Logical Query Processing Phase)
Acostumados frequentemente com linguagens de programação que possuem uma ordem de execução linear, quando nos deparamos com SQL a coisa muda de figura. Aparentemente, a ordem é bem clara quando vemos uma consulta, não? Pois é.
Para entendermos melhor, vamos visualizar como a sintaxe do _**SELECT**_ é estruturada no SQL SERVER:
SELECT DISTINCT TOP ()
FROM
JOIN
ON
WHERE
GROUP BY
HAVING
ORDER BY
### Tá Lê, mas o que isso tem a ver?
Repare na forma como a consulta está estruturada. Ela possui os comandos *Select*, *From*, *Where*, *Group By*, *Having* e *Order By*. Acontece que, no SQL, a ordem de leitura desses comandos ocorre de maneira distinta das outras linguagens de programação frequentemente utilizadas. Cada clásula no SQL gera uma saída, podendo ser ela uma tabela virtual, ou um cursor (estrutura que permite o processamento das linhas retornadas por uma consulta **-SELECT-**, através de estruturas complexas de programação, como repetições ou comandos condicionais).
### Okay, mas como isso interfere na minha consulta?
A ordem de execução dos comandos muda (em relação ao que estamos acostumados). Entender essa prioridade nos ajuda a construir queries mais robustas e aplicáveis ao que desejamos retornar. A ordem seria a seguinte:
* **FROM:** Onde os _**Joins**_ são processados. Aqui é a primeira coisa que será levada em consideração quando uma consulta for executada.
Os filtros da clásula _**ON**_ (se houverem) também serão levados em consideração, e isso irá gerar uma tabela virtual;
* **WHERE:** É o responsável por filtrar e aplicar esses filtros na tabela gerada pelo _**FROM**_. Uma nova tabela virtual é gerada aqui;
* **GROUP BY:** É a clásula que pega a tabela virtual que foi gerada pelo comando _**WHERE**_ e a agrupa como foi solicitado. Gera outra tabela virtual;
* **HAVING:** É nessa clásula que filtros baseados em funções agregadas (_**AVG, SUM, MIN, MAX**_) são aplicados. Outra tabela virtual composta pelas colunas trazidas nessa filtro é gerada;
* **SELECT:** Aqui, todas as expressões contidas dentro do SELECT são avaliadas. Isso também inclui _**ALIAS**_, _**DISTINCT**_ e _**TOP**_. Uma tabela virtual é gerada;
* **ORDER BY:** Promove a ordenação dos registros para que estes sejam apresentados. Sua saída é um _**cursor**_ que é retornado ao cliente quando a query é executada.
================================================
FILE: banco_de_dados/sql_server.md
================================================
# Curso de Introdução ao SQL com Microsoft SQL Server 2017 + T-SQL com SQL Server 2012 Express
> Resumo dos conteúdos vistos do curso de SQL Server da Alura e do livro do autor Rodrigo Ribeiro Gonçalves.
## SQL
* Linguagem de programação que é utilizada para realizar consultas de banco de dados;
* Foi criada em 1974;
* É utilizada no mundo todo e sempre há demanda de mão de obra;
* Possibilita aos desenvolvedores recuperar informações no menor tempo possível.
## Banco de Dados
* São conjuntos de arquivos que se relacionam entre si e armazenam informações;
* Há vários tipos de SGBD's (Sistema de Gerenciamento de Banco de Dados) existentes, como o Microsoft SQL Management Studio, PostgreSQL, ORACLE, etc.;
#### Más-práticas comuns no SQL
* instruções mal-escritas;
* colunas mal definidas e ocupando espaços desnecessários;
* banco de dados no mesmo disco do sistema;
* tabelas sem índices;
* índices mal dimensionados;
* instalação e configuração do SO;
* dimensionamento errado do disco;
* instalação errada/mal configurada do gerenciador do banco de dados;
## Por que implantar um banco de dados?
* aumento da masa de dados;
* crescimento do número de aplicações e usuários;
* aumento do número de servidores na mesma máquina.
## Definições
+ Tabela: representação lógica de um dado. Tipo de objeto que serve para alocar dados (campos e seus tipos);
+ Toda tabela, por default, é criada num esquema chamado **_dbo_**. Ela pode ser criada em outro esquema também;
+ Chave primária: campo que permite identificar uma tabela com mais de 2 milhões de linhas. Costuma ser do tipo de dado **_int_**;
+ Quando um campo é chave primária, ele também é índice;
+ Índice: estrutura na tabela que facilita a busca;
+ Chave estrageira: uma coluna é chamada de chave estrangeira quando faz referência à dados de uma coluna que é declarada **chave primária** em outra tabela. Ela pode conter dados nulos, porém todos os seus registros que estão preenchidos devem ter correspondência numa tabela.
+ references: recebe como argumento a tabela e o campo em que a receptiva chave primária foi definida. Dessa forma, todos os valores atribuídos aquela coluna devem ter correspondência em outra tabela.
_Sempre que criamos uma chave estrangeira, o SQL Server cria uma constraint para assegurar a integridade daquela chave estrangeira._
+ Consulta: visualização de uma determinada ou de um conjunto de tabelas.
+ Não é necessário o uso de ponto e vírgula;
+ View: estrutura lógica que é uma consulta (também lógica) a outras tabelas físicas;]
+ Procedures: processos que acontecem no BD;
+ Exemplo: manipulação de dados, cálculos, funções;
+ É necessário o uso de ponto e vírgula;
+ Triggers: comando único ou conjunto de comandos/funções que serão executados quando algo acontece numa tabela. Servem para manipular dados;
+ Precisa ser armazenada em alguma tabela ou view;
+ Página de dados: menor alocação de dados (possui o tamanho de 8 kbytes). É exclusiva de um objeto de alocação;
+ Extent: agrupamento lógico de página de dados. Tem exatamente 8 páginas de dados e possui o tamanho de 64 kbytes;
+ Extent misto: páginas de dados que são de objetos de alocações diferentes;
+ Extent uniforme: páginas de dados exclusivas de um único objeto de alocação;
É regra do SQL Server começar com um Extent misto!!!
O SQL Server acessa muito mais rápido a memória do que o disco.
+ Buffer: área de 8kbytes na memória onde o SQL Server armazena as páginas de dados lidas dos objetos de alocação que estão no disco (papel do Gereciador de Buffer).
+ O dado permanece no Buffer, até que o Gerenciador de Buffer precise de mais áreas para carregar novas páginas de dados. As áreas do Buffer mais antigas e com dados modificados são gravadas em discos e liberadas para as novas páginas.
+ Quando o SQL Server necessita de um dado que é o mesmo que está no Buffer, ele faz uma leitura lógica desse dado. Se o dado não estiver no Buffer, o SQL Server faz uma leitura física do dado em disco para o Buffer Pool.
+ File Group: agrupamento lógico de arquivos de dados para distribuir melhor a alocação de dados entre os discos, agrupar dados de acordo com os contexros ou arquivamentos, e também permitir ao DBA (Administrador do Banco de Dados) uma melhor forma de administração.
+ Integridade Referencial: é uma propriedade referente aos valores de uma coluna de uma tabela de banco de dados. Todos os valores dessa coluna tem correspondência em outra coluna de outra tabela. Se essa condição for atendida, há integridade entre as tabelas.
## Normalização
### Primeira Forma Normal (1FN)
* É parte da definição formal da relação;
* Foi definida para não permitir atributos multivalorados, atributos compostos e suas combinações;
"Uma relação só está na 1FN se seus atributos contêm apenas valores atômicos (simples, indivisíveis)."
### Segunda Forma Normal (2FN)
* Dependência parcial: ocorre quando uma coluna depende apenas de uma parte de uma chave primária composta;
* Uma relação para estar na 2FN não deve possuir atributos não-chave funcionalmente determinado por parte da chave primária;
"Uma relação encontra-se na 2FN se e somente se estiver na 1FN e não contêm dependências parciais."
### Terceira Forma Normal (3FN)
* Dependência transitiva: ocorre quando uma coluna, além de depender da chave primária de uma tabela, depende de outra coluna ou conjunto de colunas da tabela;
* Uma relação, para não estar na 3FN deve ter um atributo não chave funcionalmente determinado por outro atributo não-chave;
"Uma relação está na 3FN se e somente se não estiver na 2FN e nenhum atributo primo (isto é, que não seja membro de uma chave) for transitivamente dependente da chave primária."
## Tipos de dados
São os tipos de dados que armazenam o tamanho do que foi declarado ou definido para o tipo de de dado, sem aumentar ou diminuir o número de bytes de acordo com o dado inserido.
+ int: número exato, armazena sempre 4 bytes para representar números entre -2.147.483.648 e 2.147.483.648.
+ deve-se evitar o uso para valores pequenos (idade). Utilize para armazenar valores de cálculos, por exemplo.
+ smallint: número exato, que armazena sempre 2 bytes para representar números inteiros entre -32.768 e 32.768.
+ utilizado para identificar linhas em tabelas que há certeza que não ultrapassarão de 30.000 linhas;
+ utilizado para contagem ou para armazenar pequenas quantidades;
+ tinyint: número exato, armazena 1 byte para representar números inteiros positivos entre 0 e 255.
utilizado para pequenos valores, tipificar colunas, contagens pequenas, número de dependentes;
+ bigint: número exato, armazena 8 bytes para representar números entre -9.223.372.036.854.755.808 até 9.223.372.036.854.755.807.
+ char(n): caractere, aceita 'n' bytes. Vai aceitar o total de bytes declarados, e ele terá o mesmo tamanhao para o armazenamento, independente da quantidade de caracteres associados.
+ Ex: Em um char(10), por exemplo, mesmo que você inclua a palavra "José" (4 bytes), o SQL Server irá gravar 10 bytes;
+ nchar(n): dado unicode, que aceita 'n' bytes, mas armazena 2 elevado a n bytes. Utiliza 2 bytes para representar um caractere.
+ É necessário colocar a letra "N" na frente do termo, seguido por aspas simples, para que seja identificado como unicode (N'termo aqui');
+ date: grava a data, sem hora, no formato DD/MM/AAAA. Armazena 3 bytes.
+ datetime: grava a data e a hora, no formato DD/MM/AAAA HH:MM:SS.SSS. Armazena 8 bytes, e não é padrão ANSI.
+ datetimeoffset: grava a data, hora, minuto, segundo e fuso horário.
+ smalldatetime: grava a data e a hora no formato DD/MM/AAAA HH:MM:SS.SSS. Armazena 4 bytes. Os segundos gravados são sempre zerados. Vai de 1970 até 2079.
+ time: grava a hora. Não armazena datas acumuladas.
+ money: representa um valor monetário e utiliza 8 bytes de armazenamento.
+ Pode ser utilizado para grandes quantias ou quando o armazenamento na linha for superior ao valor monetário de 241.718,3647.
+ smallmoney: representa o valor monetário. Utiliza 4 bytes de memória. Para representar acréscimos, descontos ou valores unitários, por exemplo.
+ decimal: dado com precisão decimal, no formato (0,0).
+ varchar(n): dado do tipo unicode que aceita no máximo n bytes e grava 2 bytes para cada caracter informado, e acrescenta mais 2 bytes para considerar o cálculo para gravar e recuperar os dados.
Tipos de dados unicode somente devem ser utilizados se você realmente precisa gravar algum caracter com o código unicode acima de 255;
Código de caracter de 0 até 255 são representados com 1 byte;
Código de caracter de 256 até 65554 são representados com 2 bytes.
## Comandos
+ create database: cria o banco de dados;
+ drop database: apaga o banco de dados;
Uso de [] - é utilizada quando um campo/entidade possui caracteres especiais.
+ cast: comando utilizado para convereter uma variável **int** em **varchar**.
Declare
@valor int
set@valor = 1000
print 'valor é' + cast(@valor as varchar)
Esse código também poderia ser escrito usando o comando **convert**, da seguinte forma:
Declare
@valor int
set@valor = 1000
print 'valor é' + convert(varchar, @valor)
Com o **convert** é necessário informar primeiro o tipo de dado e depois o valor a ser convertido.
A diferença entre os comandos é que o convert permite a existência de um terceiro argumento opcional, muito utilizado na conversão de datas.
+ SP_HELP: Serve para visualizar a estrutura de uma tabela.
+ alter table: altera tabelas, seja adicionando ou removendo conteúdos.
ALTER TABLE Clientes
ALTER TABLE column DataNascimento DATETIME not null
+ Adicionando um campo:
ALTER TABLE Clientes
ADD Codigo INT IDENTITY(1,1)
Primary key
*caso o campo seja chave primária*
+ insert: insere novos registros numa tabela.
INSERT INTO Clientes(
Nome,
Endereço,
Numero,
Cidade,
Cep
)
VALUES
('Joana Maria da Silva', 'Rua das Cerejeiras, 133, Laranjais, 12456-890)
(Para inserir múltiplos valores com o comando, é só separar entre "()" as informações de cada nova inserção).
+ select: serve para retornar algum campo que você queira visualizar.
SELECT * FROM Clientes
(ou)
SELECT
Codigo,
Nome,
GETDATE() AS [DataAtual]
+ where: serve para filtrar registros com base em alguns critérios. Você determina o que vai visualizar, comparando os campos com determinadas condições estabelecidas. Usa os operadores de comparação.
SELECT
Codigo,
Nome,
Endereco,
Telefone,
Email,
DataNascimento
FROM
Clientes
WHERE
Codigo > 1
### Operadores
+ and: envolve duas condições, pelo menos, que desejam ser visualizadas.
+ or: retorna valores que satisfazem uma ou outra condição.
+ between: exiibe uma faixa de comparação (um valor entre **x** ou **y**, por exemplo).
+ like: utilizado para buscar por uma determinada string dentro de um campo de caracteres.
+ registros com o primeiro caractere do campo **nome** igual a "A", por exemplo).
+ like com colchetes []: serve para pesquisas mais complexas.
+ Uma pesquisa pelos nomes Paula ou Paulo, por exemplo, ficaria da seguinte forma:
SELECT * FROM Clientes
WHERE LIKE 'Paul[ao]%'
+ top: limita a quantidade de registros que serão exibidos no **select**.
SELECT
TOP 2
Codigo
FROM
Clientes
+ order by: dispõe os registros numa determinada ordem. Como argumento, espera apenas a indicação das colunas em que se deseja ordenar a seleção desejada.
+ Por exemplo, para colocar os registros da tabela **Clientes** por ordem alfabética do campo nome:
SELECT
Codigo,
Nome,
Endereco,
Telefone,
Email,
DataNascimento
FROM
Clientes
ORDER BY
Nome
+ update: permite atualizar registros em tabelas de um banco de dados.
UPDATE
Clientes
SET
Endereco = 'Rua da Saudade', 'Florianópolis', 'SC', Telefone = '48625976'
WHERE
Codigo = 1
+ isNull: é utilizado para tratar campos com valores nulos.
ALTER TABLE Clientes
ADD Cep VARCHAR(10)
SELECT
Codigo,
Nome,
Endereco,
Telefone,
Email,
DataNascimento,
ISNULL (Cep, 'Sem Cep') as Cep
FROM
Clientes
+ coalesce: tem o mesmo propósito que a função **ISNULL**, porém a Coalesce faz parte do padrão ANSI, estando presente também em outros bancos de dados, diferente do **ISNULL** que é uma expressão do SQL Server.
Pode receber mais de dois parâmetros.
+ delete: serve para apagar um registro que foi inserido numa tabela.
DELETE Clientes
WHERE Codigo = 5
+ truncate table: serve para excluir todos os registros de uma tabela sem nenhuma discriminação.
TRUNCATE TABLE Clientes
**_ATENÇÃO_**: o comando dá um **reset** na coluna **IDENTITY**, ou seja, a tabela tem todos os seus registros excluídos, e o primeiro registro a ser inserido tem o valor de **IDENTITY** igual a 1.
+ tabelas temporárias: são tabelas comuns, mas que existem apenas no escopo da seesão em que foram criadas, ou seja, não estão armazenadas fisicamente no banco de dados de maneira definitiva. Para criar uma, é só adicionar uma **#** antes de escreve o nome da tabela no momento da sua criação.
CREATE TABLE #Clientes
Há outra forma de criar tabelas temporárias, com o uso de **SELECT** e **INTO**. A técnica cria uma **TABLE** temporária implicitamente já com os dados da tabela pré-existente.
SELECT *
INTO #Clientes
FROM Clientes
+ Tabelas temporárias se dividem em dois tipos:
+ Tabelas Locais: são criadas utilizando um **#**;
+ Tabelas Globais: utilizam dois **##** na frente do nome quando estão sendo criadas.
+ select into: permite a criação de tabelas físicas também. É só remover o **#**.
+ campo calculado: colunas virtuais que, por padrão, não estão armazenadas fisicamente no banco de dados. Estão dispostas apenas de maneira lógica.
Uma coluna ou campo calculado tem várias aplicações, como listar uma data por extenso ou calcular operações aritméticas entre tabelas.
ALTER TABLE Vendas
ADD TotalVendas AS (Quantidade * ValorVenda)
+ joins: clásula da linguagem SQL que permite criar consultas combinando resultados de uma ou duas tabelas por meio de valores comuns entre tabelas. É possível visualizar os conjuntos existentes, intersecções, uniões e diferenças.
+ inner join: consulta os registros de duas tabelas e verifica todos os registros de cada uma, selecionando os que têm valores em comum, com base no critério estabelecido no **Join**.
SELECT
Nome,
DataVenda
FROM
Clientes c
INNER JOIN Vendas V ON (C.Codigo = V.Clientes)
+ left join: permite obter não apenas os dados relacionados de duas tabelas, mas também os dados não relacionados na tabela à esquerda da clásula **Join**, marcado pelo sinal **=**.
SELECT
Nome,
DataVenda
FROM
Clientes c
LEFT JOIN Vendas V ON (C.Codigo = V.Clientes)
* right join: retorna os dados encontrados na tabela à direita do **Join** (=). Caso não existam dados associados entre às tabelas às esquerda e à direita de **Join**, serão retornados valores nulos.
SELECT
Descricao,
DataVenda
FROM
Produtos p
LEFT JOIN Vendas V ON (P.Codigo = V.Produto)
+ case: avalia uma lista de condições verificadas em um ou mais campos, e retorna apenas um de vários resultados possíveis.
SELECT
CASE
WHEN
THEN
WHEN
THEN
ELSE
END
FROM
+ group by: permite agrupar registros baseados em um critério estabelecido no argumento da instrução posicionado logo após o comando.
SELECT
Nome,
DataVenda
FROM
Clientes c
INNER JOIN Vendas V ON (V.Cliente = C.Codigo)
GROUP BY
Nome,
DataVenda
+ funções de agregação: fazem cálculos com um conjunto de valores determinados pela condição estabelecidas em clásulas **GROUP BY**.
+ count: conta os números de registros em uma condição **GROUP BY**.
SELECT
Nome,
DataVenda
COUNT (*) AS TotalVenda
FROM
Clientes c
INNER JOIN Vendas V ON (V.Cliente = C.Codigo)
GROUP BY
Nome,
DataVenda
+ sum: soma valores numéricos em um cojunto de valores estabelecidos pelo **GROUP BY**.
SELECT
Nome,
DataVenda,
SUM (ValorVenda AS TotalVenda)
FROM
Clientes c
INNER JOIN Vendas V ON (V.Cliente = C.Codigo)
GROUP BY
Nome,
DataVenda
+ avg: calcula a média de valores em um conjunto estabelecido pelo comando **GROUP BY**.
SELECT
Descricao,
SUM (quantidade * V.ValorVenda) AS TotalVenda,
SUM (quantidade * V.ValorVenda),
SUM (quantidade * P.ValorVenda) as Desconto - AVG ((quantidade * V.ValorVenda) - (quantidade * P.ValorVenda)) as Desconto
FROM
Clientes c
INNER JOIN Vendas V ON (V.Cliente = C.Codigo)
INNER JOIN Produtos P ON (V.Produto = P.Codigo)
GROUP BY
Descricao
================================================
FILE: git e github/anotações-github.md
================================================
# História do Git
A BitKeeper era uma empresa que armazenava todo o código do kernel do Linux em seu sistema, ou seja,todo o código do Linux era versionado dentro desse sistema. Houve uma quebra entre a BitKeeper e a Linux Foundation, que fez com que a BitKeeper retirasse o direito do Linux de ser isento (o que vai em contrapartida a proposta do SO). Linus Torvalds decidiu que não iria manter contrato com a empresa e resolveu criar seu próprio sistema de versionamento, incrementando melhorias que ele sentia falta no sistema da BitKeeper. Foram elas:
- velocidade;
- simplicidade de uso;
- suporte robusto a desenvolvimento não linear;
- totalmente distribuído;
- eficiência para lidar com grandes projetos como o kernel do Linux;
O Git é um sistema de controle de versionamento de código.
---
# Controle de versão
* É responsável por versionar os arquivos do seu projeto, facilitando para que você não precise fazer isso manualmente;
* Os outros sistemas (SVM, Mercurial) trabalham com as diferenças dos arquivos, enquanto o Git trabalha com os estados deles (tira fotos _"snapshots"_ dos estados);
* Todo estado sempre leva todos os arquivos daquele momento;
---
# Github
* É um local na web que serve para guardar projetos versionados pelo Git.
---
# Instalação
Acessar o [site](https://git-scm.com/download/win);
### Linux
* Não é necessário, pois já vem instalado;
### Windows
* Acesse o site, baixe e instale o programa. Você também pode seguir esse manual [aqui](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git);
### MacOs
* Se você instalar o XCode, o Git já vem junto. Também está disponível para ser baixado no site e você também pode consultar como instalá-lo pela linha de comando [aqui](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git).
---
# Configurações inciais do Git
O Git guarda as suas informações em três lugares:
* No git config do sistema como um todo;
* O git config do usuário;
* E o git config do projeto;
---
* Configurando o usuário:
git config --global user.name "Seu nome"
* Configurando o email:
git config --global user.email "seuemail@email.com"
* Configurando o seu editor:
git config --global core.editor "nome_do_seu_editor"
+ Para descobrir os valores atrabuídos a cada uma dessas configurações, é só digitar "git config" seguido do parâmetro que você deseja saber. Exemplo:
git config user.name
* E para saber tudo, digite:
git config --list
---
# Criando um repositório
### Criando uma pasta
* Linux
mkdir "nome da pasta"
* Windows
md "nome da pasta"
* MacOS
mkdir "nome da pasta"
### Entrando dentro da pasta
* Todos
cd "nome da pasta"
* Para voltar a uma pasta acima da que vocẽ está, basta digitar:
cd ..
### Para iniciar um repositório
git init
### Listar os arquivos da pasta
* Linux e Mac
ls
* Windows
dir
---
### Usando o editor no terminal
O **Vim** é um editor de texto muito utilizado para quem gosta de trabalhar pelo terminal. Ele está disponível para Windows, Mac e Linux e caso o seu computador não tenha ele instalado, você pode encontrá-lo [aqui](https://www.vim.org/download.php).
* Para editar um arquivo:
vi "nome do arquivo"
ou
vim "nome do arquivo"
* Para começar a inserir texto, aperte a letra
i
que significa inserção;
* Digite o texto desejado;
* Pressione a tecla
esc
serve para sair do modo de inserção;
* Depois, digite:
:
que indica que vai iniciar algum comando;
w
que significa que você deseja escrever/salvar;
q
que significa sair.
* E agora aperte
enter
você sai do modo de edição e seu arquivo está salvo;
================================================
FILE: markdown/anotaçoes-markdown.md
================================================
> As anotações foram baseadas nesse curso [aqui](https://www.udemy.com/aprenda-markdown/). do [Roberto Achar](https://twitter.com/RobertoAchar).
* [ ] Criando títulos
Existem seis tamanhos de títulos. Quanto menor na proporção ele for, mais **#** são adicionadas;
# Título 1
# Título 1
---
## Título 2
## Título 2
---
### Título 3
### Título 3
---
#### Título 4
#### Título 4
---
##### Título 5
##### Título 5
---
###### Título 6
###### Título 6
---
Para separá-los, você pode usar " **=** " ou " **-** ".
---
* "Título 1
========"
Título 1
========
* "Título 2
--------"
Título 2
--------
---
* [ ] Parágrafos
Podem ser quebrados de duas formas:
* dando dois espaços após o final da linha;
* apertando duas vezes o botão **enter** após o final do parágrafo.
---
* [ ] Ênfase
- ### Negrito 1
**Teste**
**Teste**
---
- ### Negrito 2
__Teste__
__Teste__
---
- ### Itálico 1
*Teste*
*Teste*
---
- ### Itálico 2
_Teste_
_Teste_
---
- ### Negrito e Itálico 1
***Teste***
***Teste***
---
- ### Negrito e Itálico 2
**_Teste_**
**_Teste_**
---
- ### Negrito e Itálico 3
__*Teste*__
__*Teste*__
---
- ### Riscado
~~Teste~~
~~Teste~~
---
- ### Citação
> Teste
> Teste
---
- ### Citação com negrito e Itálico
> **Teste** _Teste_
> **Teste** _Teste_
---
* [ ] Linhas horizontais
- ### Exemplo 1
Podem ser feitas com asteriscos:
***
***
Ou com traços:
---
---
- ### Exemplo 2
Sejam juntos ou espaçados:
* * *
* * *
- - -
- - -
- ### Exemplo 3
a única regra é colocar no mínimo três de cada símbolo.
***************
****************
---------------
----------------
* [ ] Listas Não-Ordenadas
- ### Exemplo 1
Um novo item é criado com " __*__ ".
* Item 1
* Item 2
* Item 3
---
- ### Exemplo 2
Utiliza-se o " **-** " para inserir um novo item.
- Item 1
- Item 2
- Item 3
---
- ### Exemplo 3
Utiliza-se o " **+** " para criar um novo item.
+ Item 1
+ Item 2
+ Item 3
---
- ### Exemplo 4
Para criar um Subitem, crie um Item, dê dois **ESPAÇOS**, vá para a próxima linha, e aperte a tecla **TAB**.
* Item 1
* Subitem 01
* Item 2
* Subitem 02
* Item 3
* Subitem 03
---
- ### Exemplo 5
Para deixar os itens espaçados, é só dar **ENTER** entre eles.
* Item 1
* Item 2
* Item 3
- - -
* [ ] Listas Ordenadas
- ### Exemplo 1
Uma lista é criada através de números em ordem crescente, seguidos de um ponto final.
1. Item 01
2. Item 02
3. Item 03
1. Item 01
2. Item 02
3. Item 03
---
- ### Exemplo 2
Uma lista é criada atráves de números repetidos. O Markdown entende que a intenção é que esses números estivessem em ordem crescente.
1. Item 01
1. Item 02
1. Item 03
1. Item 01
1. Item 02
1. Item 03
---
- ### Exemplo 3
Mesmo que os números sejam colocados em fora de ordem, eles seguirão a ordem crescente a partir do primeiro número.
8. Item 01
3. Item 02
1. Item 03
8. Item 01
3. Item 02
1. Item 03
---
- ### Exemplo 4
Quer escolher os números da sua lista? Não tem problema! Faça da seguinte forma:
1980\. Juliana
1998\. Letícia
2000\. Priscila
1980\. Juliana
1998\. Letícia
2000\. Priscila
- - -
* [ ] Links
- ### Exemplo 1
O texto do link vai dentro de " **[]** ", e o link dentro de " **()** ".
[clique aqui](https://www.google.com)
[clique aqui](https://www.google.com)
---
- ### Exemplo 2
O texto do link vai dentro de " **[]** ", e o link dentro de " **()** ", porém um texto alternativo é inserido após o link através de **" "**. Esse texto será mostrado quando você parar seu mouse sobre o link.
[Clique aqui](https://www.google.com "blog")
[Clique aqui](https://www.google.com "blog")
---
- ### Exemplo 3
Nesse exemplo, é criado uma espécie de variável, para qual o link será atribuído.
[Clique aqui][site-url]
[site-url]: (https://www.google.com/)
[Clique aqui][site-url]
[site-url]: (https://www.google.com/)
- - -
* [ ] Imagens
É bem parecido com o formato dos links, mas sempre tem um " **!** " antes.
- ### Exemplo 1
O nome da imagem vai dentro de " **[]** ", e o link dentro de " **()** "


---
- ### Exemplo 2
Aqui também é utilizado o esquema de variáveis.
![Markdown][image]
[image]: https://cdn.pixabay.com/photo/2019/06/28/03/07/camping-4303359_960_720.jpg
![Markdown][image]
[image]: https://cdn.pixabay.com/photo/2019/06/28/03/07/camping-4303359_960_720.jpg
---
- ### Exemplo 3 - Imagem com link
Se você colocar o mouse em cima da imagem, verá seu link e poderá ser redirecionado para o mesmo.
[](https://cdn.pixabay.com/photo/2018/12/08/11/03/escalators-3863163_960_720.jpg)
[]
(https://cdn.pixabay.com/photo/2018/12/08/11/03/escalators-3863163_960_720.jpg)
---
- ### Exemplo 4 - Imagem com link (2)
Nesse exemplo, está sendo usado imagem, link e variável, tudo junto.
Variáveis: [image-thumbs], com o endereço da imagem, e [image-url], com o endereço do link.
[![Markdown][image-thumbs]][image-url]
[image-thumbs]: https://cdn.pixabay.com/photo/2019/06/27/03/42/beach-4301479_960_720.jpg
[image-url]: https://pixabay.com/pt/photos/praia-shell-de-mar-shell-f%C3%A9rias-4301479/
[![Markdown][image-thumbs]][image-url]
[image-thumbs]: https://cdn.pixabay.com/photo/2019/06/27/03/42/beach-4301479_960_720.jpg
[image-url]: https://pixabay.com/pt/photos/praia-shell-de-mar-shell-f%C3%A9rias-4301479/
- - -
* [ ] Tabelas
- ### Exemplo 1
As tabelas são separadas por pipe " **|** ". Quando se deseja criar uma linha, utiliza-se " **-** ", para separar os dados.
| Nome |Idade |
|------|------|
| Joana |40 |
| Nome |Idade |
|------|------|
| Joana |40 |
---
- ### Exemplo 2
Mesmo não existindo alinhamento, o Markdown identifica isso como uma tabela.
| Nome | Idade| Profissão |
| ---- | ---- | --------- |
| Lua | 21 | Cientista de dados|
| Isabela | 32 | Dançarina |
| Raissa | 20 | Psicóloga comportamental|
| Nome | Idade| Profissão |
| ---- | ---- | --------- |
| Lua | 21 | Cientista de dados|
| Isabela | 32 | Dançarina |
| Raissa | 20 | Psicóloga comportamental|
---
- ### Exemplo 3
Por padrão, o alinhamento das células é a esquerda. Para alinhar uma tabela:
+ A esquerda: **:---**
+ A direita: **---:**
+ Centralizada: **:---:**
| Nome | Idade| Profissão |
| :---- | :----: | ---------: |
| Igor | 36 | Professor |
| Carla | 29 | Advogada |
| Diogo | 15 | Estudante |
| Nome | Idade| Profissão |
| :---- | :----: | ---------: |
| Igor | 36 | Professor |
| Carla | 29 | Advogada |
| Diogo | 15 | Estudante |
- - -
* [ ] Códigos
- ### Exemplo em linha
Informe os parâmetros `username` e `password` para a função `login ()`.
Para destacar partes do texto/código, utilize a crase. Os parâmetros username e password foram destacados da seguinte forma:
`username` e `password`
---
``const message = `My name is $ {name}`;``
Quando a declaração da variável não for código e for necessário transformar em código como na linha acima, faça da seguinte forma:
``const message = `My name is $ {name}`;``
---
- ### Exemplo em bloco 1
É só colocar um **TAB** antes de toda linha de código que se deseja inserir no bloco.
// login.js
const username = 'gatinho99';
const password = 'secret';
login(username, password);
---
- ### Exemplo em bloco 2
É inserido com três crases antes (**```**) e três depois.
```
// login.js
const username = 'gatinho99';
const password = 'secret';
login(username, password);
```
```
// login.js
const username = 'gatinho99';
const password = 'secret';
login(username, password);
```
---
- ### Syntax hightlighting
Serve para mostrar ("acender") a sintaxe do código. Auxilia na identificação de valores da linguagem em questão.
Para usar o recurso, deve-se colocar o trecho de código entre crases, da seguinte forma:
```javascript
//login.js
const username = 'gatinho99';
const password = 'secret';
login (username, password);
```
O resultado será esse:
```javascript
//login.js
const username = 'gatinho99';
const password = 'secret';
login (username, password);
```
---
Outra forma de fazer é assim:
```js
//login.js
const username = 'gatinho99';
const password = 'secret';
login (username, password);
```
Resultado:
```js
//login.js
const username = 'gatinho99';
const password = 'secret';
login (username, password);
```
- - -
* [ ] Github
### Colocar 'caixinhas' nos ícones de uma lista:
* Item 01
* Item 02
* Item 03
* Item 01
* Item 02
* Item 03
Colocando **[ ]** com um espaço no meio, ficará assim:
* [ ] Item 01
* [ ] Item 02
* [ ] Item 03
* [ ] Item 01
* [ ] Item 02
* [ ] Item 03
Caixinhas assinaladas
- [x] item 01
- [ ] Item 02
- [ ] Item 03
- [x] Write the press release
- [ ] Update the website
- [ ] Contact the media
---
### Relacionar pr com issue:
Só colocar uma #;
---
## Emojis
:smile:
:heart:
:smile:
:heart:
Mais emojis [aqui](https://www.webfx.com/tools/emoji-cheat-sheet/) :D