SQL


Structured Query Language.

    SQL - Structured Query Language
    • SQL é adotado como linguagem padrão para os bancos de dados relacionais atuais.
    • Exemplo de SGBD: MySQL, PostgreSQL, Microsoft SQL Server, ORACLE.
    • Responsável por: definir, manipular, controlar, transacionar e recuperar dados junto ao SGBD (mySQL, etc.).

    Sub-categorias de Instruções:
    • DDL: Data Definition Language - Linguagem de Definição de Dados.
      Criação, alteração e remoção de estruturas de dados (tabelas constituidas de colunas onde as linhas são constituidas de registros).

    • DML: Data Manipulation Language - Manipulação de Dados.
      Permite a inclusão, atualização e remoção dos registros dentro dessas estruturas de dados.

    • DCL: Data Control Language - Controle de Dados.
      Permite aplicar ou remover acessos aos usuários que se conectam ao SGBD.

    • DTL: Data Transaction Language - Transição de Dados.
      Efetivar ou cancelar transações junto ao SGBD.
      Cada instrução executada em um banco de dados inicia e finaliza uma transação, essa transação pode ser manipulada.
      Podemos desfazer uma sequência de intruções contidas em uma transação em função de uma validação.
      Por exemplo: instruções estavam sendo executadas porém a validação foi negada, então as instruções daquela transição serão desfeitas. (Realizei uma compra, deu baixa no estoque da empresa, cartão de crédito negado, transação revertida, objeto entrou no estoque novamente).

    • DQL: Data Query Language - Consulta de Dados.
      Nos permite recuperar dados através do estabelecimento de cláusulas, operações lógicas, operações relacionais e ou funções de agregação.

    PHPMyAdmin
    • Aplicação web escrita em PHP que serve para acessar e administrar o banco de dados MySQL.
    • Acessado através do navegador, onde digita-se as queries para adição, manipulação, remoção de tabelas, etc.

    Tipos de dados
    • Tabelas são como planilhas de armazenamento de dados.
    • Tipo de variável utilizada por uma coluna de tabela.
      1) ID vai utilizar o tipo INT.
      2) NAME vai utilizar o tipo CHAR curto de 50 caracteres.
    • Tipos de dados:
      • Campos de Texto:
        1) Text: tamanho variável que armazena grande quantidade de texto.
        2) Varchar: tamanho variável (você pode falar que o nome pode ter até 100 caracteres, e o espaço em memória separado vai ser somente o tanto que o nome ocupar) que armazena de 0 a 255 caracteres.
        3) Char: tamanho fixo (se definir que terá 10 caracteres, será separado 10 espaços de memória para esse tipo, mesmo que não usar todos) que armazena de 0 a 255 caracteres.
        Char: otimizado para pesquisa, varchar ocupa menos espaço.
      • Campos de Números:
        1) Int: armazena valores numéricos inteiros: 1, 2, 3.
        2) Float: armazena valores numéricos com fração: 1,25 ou 1,333.
      • Campo de Data e Hora:
        1) Date: armazena uma data.
        2) Time: armazena uma hora.
        3) Datetime: armazena a combinação de data e hora.

    • Exemplo (visual form):

    • Predefinido: none (não pode ficar nulo, precisa ter informação), NULL é que pode ficar sem informação (como o resumo do curso).
    • Predefinido: o que está "As defined: S" significa que ao criar um novo curso, será setado o ativo como S, de "Sim".

    • Exemplo SQL:
    • not null: não pode ser nulo, precisa ter informação.
    • null: pode ser nulo.
    • ativo_sn char(1) default 'S', significa que irá começar com o status 'S'.

    Comandos SQL:

    • ALTER TABLE:
      1) ADD: inclusão de novo campo em uma tabela.
      a) Sintaxe: ALTER TABLE nomeTabela ADD COLUMN nomeColuna VARCHAR(4) NULL;
      b) NOT NULL: obrigatório preencher.
      c) NULL: não é obrigatório o preencher.

      2) CHANGE: alteração do nome do campo e de suas propriedades, como por exemplo o tipo (int, se vai ter valor default, se pode ser NULL ou não).
      a) Sintaxe: ALTER TABLE nomeTabela CHANGE nomeAtualColuna nomeDesejadoColuna+tipos INT NULL; (obrigatório colocar os campos)
      b) Exemplo: ALTER TABLE tb_funcionarios CHANGE cidadde cidade varchar(50)

      3) DROP: remover um campo de uma tabela.

    • INSERT INTO:
      1) Sintaxe: INSERT INTO nomeTabela (colunas) VALUES (valor a ser inserido na coluna, na mesma ordem das colunas).
      Exemplo: INSERT INTO tb_cursos(ativo_sn, carga_horaria, data_inicio, id_curso, investimento, nome_curso, resumo)VALUES('S', 1, '20161003', 2, 40, 'Curso Completo do Dev. WEB', 'Aprenda tudo sobre Desenvolvimento WEB.');
      2) INSERT INTO com diversos values separados por vírgula:
      INSERT INTO tb_pessoas (id,nome,idade,email,estado) VALUES (1,"Reed Knox",37,"augue.Sed@cursus.co.uk","MA"),(2,"Sierra Gilliam",20,"augue@cubiliaCurae.com","SP"),(3,"Tatyana Logan",89,"mail@duiFuscealiquam.com","MA")

    • Recuperar Dados:
      SELECT nomeColuna FROM nomeTabela
      Retornar todos as colunas contidas na tabela: SELECT * FROM nomeTabela.

    • Renomear tabela:
      RENAME TABLE nomeAtual TO nomeDesejado

    • Filtro WHERE
      1) Sintaxe: SELECT * FROM nomeTabela WHERE ...
      2) Operadores de Comparação (<, >, =):
         a) Selecionar todos os cursos com valor abaixo de 50:
              SELECT * FROM tb_cursos WHERE investimento < 50
         b) Selecionar todos os cursos com valor abaixo de 50 e ID > 1:
              SELECT * FROM tb_cursos WHERE investimento < 50 and id_curso > 1
      3) Operadores Lógicos (and, or):
      SELECT * FROM tb_cursos WHERE investimento < 50 or id_curso > 1

    • UPDATE
      1) Sintaxe: UPDATE nomeTabela SET campo = valor WHERE condições
      2) Exemplo: UPDATE tb_pessoas SET nome = 'Gustavo Nogueira' WHERE id = 3
      3) UPDATES em uma linha: UPDATE tb_pessoas SET nome = 'Gustavo Nogueira', idade = 22, interesse = 'Jogos' WHERE id = 14

    • DELETE:
      1) Sintaxe: DELETE FROM nomeTabela WHERE condições
      2) Exemplo: DELETE FROM tb_pessoas WHERE name = 'Gustavo Nogueira'

    Relacionamento entre tabelas
    • Tipos de relacionamentos:
      1) 1 para 1.
      a) Tabela pricipal: tb_funcionarios, as outras tabelas possuem mais informações sobre esse funcionário, contendo a id_funcionario como Foreign Key, linkando essa tabela a tb_funcionarios e também contendo sua própria ID dentro da tabela.
      b) Exemplo:



      2) 1 para Vários.
      a) Nesse caso, podemos ter várias tabelas de pedido com uma Foreign Key referenciando a Primary Key id_cliente da tabela tb_cliente. Portanto, temos uma tabela principal cliente e várias outras porem ser criadas com diferentes pedidos, utilizando a PK id_cliente para linkar a tb_cliente, utilizando id_cliente como FK nas tabelas de pedido.

      3) Vários para Vários.
      a) Visto um aluno poder ter vários cursos, e um curso vários alunos, utilizados uma tabela de ligação/auxiliar. Com isso, conseguimos a partir do curso, encontrar seus alunos e a partir do aluno, encontrar seus cursos.

    • Primary Key:
      - Constituida por um ou mais campos que identificam de forma única um registro de uma tabela, como um ID ou identificador.
      - Essa é uma informação única que irá diferenciar o registro, importante para formar relacionamentos consistentes entre tabelas.
      1) Candidate Key: armazena uma informação única.
      2) Composite Key: composta de mais de uma Candidate Key, para criar uma especificação maior.
      Exemplo: em um database de um banco, temos para uma conta criada, algumas informações. Cada informação dessa é uma Candidate Key, e quando se faz uma composição delas para buscar uma conta específica, temos uma maior uniqueness. Essa seria a Composite Key, formada por mais de uma Candidate Key.

    • Foreign Key:
      - Referência em uma tabela de uma chave primária de uma outra tabela.
      - A partir de uma chave estrangeira, por exemplo, a id_curso na tabela disciplinas, podemos identificar o curso ao qual a disciplina faz referência.

    Junções entre tabelas - JOINS
    • Permitem conectar registros de tabelas diferentes, formando um resultado de pesquisa composto. Ou seja, a nossa consulta retorna registros compostos por diversos atributos em diversas tabelas diferentes, desde que conectadas por um ou alguns atributos em comum.
    • Geralmente utilizamos como referências para nossos JOINS os índices das tabelas (PK, FK).

    • Left Join: junção entre tabelas cujo ponto de ligação será referência a esquerda.
      • a) Exemplo: Visto a tabela da esquerda ser a tb_funcionarios, utilizamos o left join.

      • Código SQL:
        a) tb_funcionarios as f signifca que essa tabela recebe apelido de f.
        b) on (f.id_funcionario = fc.id_funcionario) demonstra qual foreign key utilizar de cada tabela.
        c) Conexão das tabelas: on (campos que se referenciam, amarram as tabelas, no caso na tabela f e fc será id_funcionario).
        d) O resultado final será a exibição de uma pesquisa contendo os dados de todas as tabelas, alinhando por id_funcionario, visto ela estar presente em todas como FK.
        e) Para adicionar mais uma tabela no Left Join:
        f) Também é possível selecionar somente algumas colunas das tabelas a serem pesquisadas:

    • Right Join: junção entre tabelas cujo ponto de ligação será referência a direita.
    • Inner Join: junção entre tabelas cujo ponto de ligação será um ponto em comum.