Você está na página 1de 58

Banco de Dados II

Introdução SQL Utilizando SGBD MySQL


Parte II
Prof. Cristiano Soares de Aguiar
Cristiano.Aguiar@ipog.edu.br
Conteúdo
▪ O que veremos:
• Linguagem SQL utilizando SGBD MySQL.
Linguagem SQL
• SQL – Structured Query Language
Linguagem SQL
▪ Surgiu no início dos anos 70 do século passado, proposto
▪ pelo matemático Edgar Frank Codd, nos laboratórios da IBM;
▪ Linguagem declarativa padrão para banco de dados relacional, ou
seja, banco de dados baseado em tabelas;
▪ A linguagem SQL é subdivida em um conjunto de operações, de
acordo com a finalidade:
▪ DDL - Linguagem de Definição de Dados
▪ DML - Linguagem de Manipulação de Dados
▪ DCL - Linguagem de Controle de Dados
▪ DTL - Linguagem de Transação de Dados
▪ Cada SGBD implementa seu dialeto da linguagem SQL;
Linguagem SQL
▪ SQL
▪ Exemplos de comando DDL (Linguagem de Definição de Dados)
✓ Create
✓ Alter
✓ Drop
Linguagem SQL
▪ SQL
▪ Exemplos de comando DML (Linguagem de Manipulação de Dados)
✓ Insert
✓ Update
✓ Delete
✓ Select
Linguagem SQL
▪ SQL
▪ Exemplos de comando DCL (Linguagem de Controle de Dados)
✓ Grant
✓ Revoke
✓ Deny
Linguagem SQL
▪ SQL
▪ Exemplos de comando DTL (Linguagem de Transação de Dados)
✓ Commit
✓ Rollback
Banco de Dados II
Continuação...
Edição de Scripts, SQL DDL: Usuários e Permissões
Modelagem de Banco de Dados – Estudo de Caso
▪ Dica: Como editar nossos Scripts SQL para MySQL
▪ 1. Editando via Mysql Workbench; Sugestão de pesquisa (youtube):
▪ 2. Editando via PhpMyAdmin; O que é e como funciona:
✓ Workbench
▪ 3. Editando via terminal MySQL; ✓ PhpMyAdmin
▪ 4. Editando via Editor de Texto e “colando” no Terminal;
▪ 5. Importando script via terminal MySQL.
Linguagem SQL - DDL
▪ Construção de um Banco de Dados
create database gerenciaAcademica;
▪ Selecionando um Banco de Dados
use gerenciaAcademica;

▪ Exclusão de um Banco de Dados


drop gerenciaAcademica;

▪ Listando Bancos de Dados existentes


show databases;
Linguagem SQL - DDL
▪ Criando backup de um Banco de Dados:

Ver versão MySQL. Há a opção mysqldump


> mysqldump -u root -p gerenciaacademica > c:/backupsBD/GAbackup.sql";

▪ Restaurando backup de um Banco de Dados:

Ver versão MySQL. Há a opção source


mysql> create database gerenciaacademica;
mysql> use gerenciaacademica;
mysql> source c:/backupsBD/GABackup.sql;
Linguagem SQL - DDL
▪ Usuários e Permissões em Bancos de Dados:
CREATE USER ‘novousuario’@’localhost’ IDENTIFIED BY ‘123456’;
mysql> CREATE USER 'crsaguiar2'@'localhost’ IDENTIFIED BY 'desenv1';

GRANT ALL PRIVILEGES ON *.* TO ‘crsaguiar2’@’localhost’;


mysql> GRANT ALL PRIVILEGES ON *.* TO 'crsaguiar2'@'localhost';

FLUSH PRIVILEGES;

alter user root identified by '123456';


Linguagem SQL - DDL

Principais tipos de permissão:

CREATE – permite que os usuários criem bancos de dados ou tabelas


SELECT – permite que os usuários recuperem dados
INSERT – permite que os usuários adicionem novas entradas em tabelas
UPDATE – permite que os usuários modifiquem entradas existentes em tabelas
DELETE – permite que os usuários excluam entradas da tabela
DROP – permite que usuários excluam tabelas de bancos de dados inteiras
ALL PRIVILEGES – permite que usuários executem todas as operações listadas acima
Linguagem SQL - DDL
CREATE | SELECT | INSERT | UPDATE | DELETE | DROP | ALL PRIVILEGES

CREATE USER ‘novousuario’@’localhost’ IDENTIFIED BY ‘123456’;

GRANT ALL PRIVILEGES ON *.* TO ‘crsaguiar2’@’localhost’;

GRANT CREATE, SELECT ON *. * TO 'nome_de_usuário'@'localhost';

REVOKE [tipo de permissão] ON [nome do banco de dados].[Nome da tabela] FROM


'nome_de_usuário'@'localhost';

REVOKE ALL PRIVILEGES ON nomeBanco.nomeTabela FROM 'nomeUsuario'@'localhost';

DROP USER 'nomeUsuario'@'localhost';

SHOW GRANTS FOR 'nomeUsuario'@'localhost';

FLUSH PRIVILEGES;
Banco de Dados II
Continuação...
Edição de Scripts, SQL DDL: Construção do Esquema (tabelas)
Linguagem SQL - DDL
▪ Criando tabelas em um Banco de Dados
▪ Sintaxe geral
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
....
);
Linguagem SQL - DDL
▪ Principais Tipos de Dados
✓ CHAR(M) – String que ocupa tamanho fixo entre 0 e 255 caracteres
✓ VARCHAR(M) – String de tamanho variável, até 65535 caracteres.
✓ MEDIUMTEXT – Permite armazenar até 16.777.215 caracteres.
✓ BLOB (64KB) / MEDIUMBLOB(16MB)/ LONGBLOB(4GB) – Campo binários ‘Binary Large Objects’, são usados para
armazenar grandes quantidades de dados, como imagens.
✓ DATE – Uma data de 01/01/1000 a 31/12/9999, no formato YYYY-MM-DD
✓ DATETIME – Uma combinação de data e hora de 01/01/1000 00:00:00 a 31/12/9999 23:59:59, no formato YYYY-
MM-DD HH:MM:SS
✓ TIME – Hora apenas, no formato HH:MM:SS
✓ YEAR(M) – Ano nos formatos de 2 ou 4 dígitos; Se forem 2 (YEAR(2)), ano vai de 1970 a 2069; para 4 (YEAR(4)), vai
de 1901 a 2155. O padrão é 4.
Linguagem SQL - DDL
▪ Principais Tipos Inteiros

BIGINT

INT

MEDIUMINT

SMALLINT

TINYINT

• DECIMAL — número decimal, de ponto fixo;


• FLOAT — número de ponto flutuante 4 bytes (32 bits);
• DOUBLE — número de ponto flutuante 8 bytes (64 bits);
• BIT — um campo de um bit.
Linguagem SQL - DDL
▪ Criando tabelas em um Banco de Dados
▪ Sintaxe geral
CREATE TABLE IF NOT EXISTS nomeTabela (
coluna1 datatype,
coluna2 datatype,
....
);

▪ Chaves Primária e Estrangeira:


create table IF NOT EXISTS nomeTabela (
coluna1 INT NOT NULL AUTO_INCREMENT,
coluna2 VARCHAR(100) NOT NULL,
coluna3 VARCHAR(100),
PRIMARY KEY (coluna1),
FOREIGN KEY (coluna2) REFERENCES nomeTabela2(chaveTabela2)
);

mysql> show tables;


mysql> desc nomeTabela;
Linguagem SQL – DDL – Estudo de Caso
Aluno ( foto, matriculaAluno, nome, email, login, senha, logradouro,
bairro, município, estado, cep, codigoCurso, codigoCurso como chave estrangeira
referencia Curso(codigoCurso) );
create table IF NOT EXISTS Aluno (
foto MEDIUMBLOB,
matriculaAluno INT NOT NULL AUTO_INCREMENT,
nome VARCHAR(255) NOT NULL ,
email VARCHAR(255) NOT NULL ,
login VARCHAR(255) NOT NULL ,
senha VARCHAR(255) NOT NULL ,
logradouro VARCHAR(255),
bairro VARCHAR(255),
municipio VARCHAR(255),
estado VARCHAR(100),
cep UNSIGNED INT,
codigoCurso INT NOT NULL ,
PRIMARY KEY (matriculaAluno),
FOREIGN KEY (codigoCurso) REFERENCES Curso(codigoCurso)
);
Linguagem SQL – DDL – Estudo de Caso
Professor ( foto, matriculaProfessor, nome, email, login, senha, codigoDepartamento,
codigoDepartamento como chave estrangeira referencia Departamento(codigoDepartamento) );

create table IF NOT EXISTS Professor (


foto MEDIUMBLOB NOT NULL,
matriculaProfessor INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(255),
email VARCHAR(255),
login VARCHAR(255),
senha VARCHAR(255),
codigoDepartamento INT,
FOREIGN KEY (codigoDepartamento) REFERENCES Departamento(codigoDepartamento)
);
Exercício – Estudo de Caso
Escrever um script SQL para implementação do modelo lógico abaixo (Entidades):

Aluno ( foto, matriculaAluno, nome, email, login, senha, logradouro, bairro, município, estado, cep, codigoCurso,
codigoCurso como chave estrangeira referencia Curso(codigoCurso) );
Professor ( foto, matriculaProfessor, nome, email, login, senha, codigoDepartamento, codigoDepartamento
como chave estrangeira referencia Departamento(codigoDepartamento) );
Departamento ( codigoDepartamento, nomeDepartamento );
Disciplina ( codigoDisciplina, nomeDisciplina, descricaoCurricular );
Curso ( codigoCurso, nomeCurso );
Exercício – Estudo de Caso
Escrever um script SQL para implementação do modelo lógico abaixo (Relacionamentos):
Cursa ( matriculaAluno, codigoDisciplina, notaFinal, matriculaAluno como chave estrangeira referencia
Aluno(matriculaAluno), codigoDisciplina como chave estrangeira referencia Disciplina(codigoDisciplina) );
Realizou ( codigoDisciplina, matriculaAluno, ano, semestre, notaFinal, codigoDisciplina como chave estrangeira
referencia Disciplina(codigoDisciplina), matriculaAluno como chave estrangeira referencia
Aluno(matriculaAluno) );
Possui ( codigoDisciplina, codigoCurso, codigoDisciplina como chave estrangeira referencia
Disciplina(codigoDisciplina), codigoCurso como chave estrangeira referencia Curso(codigoCurso) );
Habilitacao ( codigoProfessor, codigoDisciplina, dataHabilitacao, codigoProfessor como chave estrangeira
referencia Professor(matriculaProfessor), codigoDisciplina como chave estrangeira referencia
Professor(matriculaProfessor) );
Regencia ( codigoProfessor, codigoDisciplina, ano, semestre, codigoProfessor como chave estrangeira referencia
Professor(matriculaProfessor), codigoDisciplina como chave estrangeira referencia
Disciplina(codigoDisciplina) );
preRequisito ( codigoDisciplina, codigoDisciplinaPreRequisito, codigoDisciplina como chave estrangeira referencia
Disciplina(codigoDisciplina), codigoDisciplinaPreRequisito como chave estrangeira referencia
Disciplina(codigoDisciplina) );
Exercício – Estudo de Caso
▪ Dica 1:
✓ Chave Primária Multivalorada;
✓ Mais de uma Chave Estrangeira na mesma Tabela;

Realizou ( codigoDisciplina, matriculaAluno, ano, semestre, notaFinal, codigoDisciplina como chave


estrangeira referencia Disciplina, matriculaAluno como chave estrangeira referencia Aluno(matriculaAluno) )

create table IF NOT EXISTS Realizou (


codigoDisciplina INT NOT NULL ,
matriculaAluno INT NOT NULL,
ano YEAR(4),
semestre UNSIGNED INT NOT NULL,
notaFinal DECIMAL(2,2),
PRIMARY KEY (codigoDisciplina, matriculaAluno),
FOREIGN KEY (codigoDisciplina) REFERENCES Disciplina(codigoDisciplina),
FOREIGN KEY (matriculaAluno) REFERENCES Aluno(matriculaAluno)
);
Exercício – Estudo de Caso
▪ Dica 2:
✓ Implementação de restrição de integridade com FOREIGN KEY
create table IF NOT EXISTS Realizou (
codigoDisciplina INT NOT NULL ,
matriculaAluno INT NOT NULL,
ano YEAR(4),
semestre UNSIGNED INT NOT NULL,
notaFinal DECIMAL(2,2),
PRIMARY KEY (codigoDisciplina, matriculaAluno),
FOREIGN KEY (codigoDisciplina) REFERENCES Disciplina(codigoDisciplina)
ON UPDATE CASCADE
ON DELETE RESTRICT,
FOREIGN KEY (matriculaAluno) REFERENCES Aluno(matriculaAluno),
ON UPDATE CASCADE
ON DELETE RESTRICT
);
▪ Opções de Referência para FOREIGN KEY:
RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
Cursa
matriculaAluno | codigoDisciplina
Aluno
matriculaAluno | codigoCurso Disciplina
codigoDisciplina | codigoDepartamento

Realizou
matriculaAluno | codigoDisciplina Possui
codigoCurso | codigoDisciplina

Curso
codigoCurso | codigoDepartamento Habilitacao Regencia
matriculaProfessor | codigoDisciplina matriculaProfessor | codigoDisciplina

Departamento Professor
codigoDepartamento | nomeDepartamento matriculaProfessor | codigoDepartamento
Sugestão de Leitura

ELMASRI, Ramez, NAVATHE, Shamkant B. Sistemas de banco


de dados. 7a Edição. Pearson, 2019.
→ Capítulo 8. SQL: Definição de Esquema, Restrições Básicas e
Consultas {Queries}
→ Capítulo 15. Algoritmos para Processamento e Otimização de
Consultas
Sugestão de Leitura

DATE, C. J. Introdução a Sistemas de Bancos de Dados


8a Edição. LTC, 2004.

→ Capítulo 4. Uma Introdução à SQL


→ Capítulo 5. Tipos
→Capítulo 6. Relações
Sugestão de Leitura
NIELD, Thomas. Introdução à Linguagem SQL: Abordagem
Prática Para Iniciantes. 8a Edição. Novatec, 2016.

→ Capítulo 1. Por que aprender SQL?


→ Capítulo 2. Bancos de Dados
→ Capítulo 4. SELECT
→ Capítulo 5. WHERE
→ Capítulo 6. GROUP BY e ORDER BY
→ Capítulo 8. JOIN
→ Capítulo 10. Gerenciando Dados
→ Capítulo 11. Seguindo em Frente
Banco de Dados II
Continuação...
Edição de Scripts, SQL DDL e Utilização do Terminal
MySQL

• usuário: root
• senha: desenv1
Instalação MySQL
mysql> SHOW DATABASES;
Instalação MySQL
mysql> SHOW DATABASES;

mysql> DROP DATABASE IF EXISTS pacientes;

mysql> CREATE DATABASE IF NOT EXISTS pacientes;

mysql> SHOW DATABASES;

mysql> USE pacientes;

mysql> SHOW TABLES;


Instalação MySQL

mysql> CREATE TABLE usuarios(codigo INT NOT NULL AUTO_INCREMENT,


nome VARCHAR(255) NOT NULL,
endereco VARCHAR(255),
cep VARCHAR(11),
PRIMARY KEY(codigo)
);

mysql> DROP TABLE IF EXISTS usuários CASCADE;


Instalação MySQL
mysql> USE pacientes;
mysql> SHOW TABLES;
mysql> DESC usuarios;
mysql>
Instalação MySQL

mysql> INSERT INTO usuarios(nome,endereco,cep) VALUES


('Pedro Silveira', 'Rua PS', '202.202-202');
Instalação MySQL

mysql> SELECT * FROM usuarios ORDER BY codigo DESC;

mysql> SELECT * FROM usuarios WHERE nome like '%Maria%' ORDER BY codigo ASC;

mysql> SELECT * FROM usuarios WHERE codigo=4;


Instalação MySQL

mysql> UPDATE usuarios SET nome='Joao Joaquina', endereco='Rua JJ’,


cep='999.999-999' WHERE codigo=1;
Instalação MySQL

mysql> DELETE FROM usuarios WHERE codigo = 3;


Instalação MySQL
▪ Principais comandos MySQL:
• Criar, Excluir e Alterar Permissão de Usuário;
• Criar e Excluir Banco de Dados;
• Listar Bancos de Dados Existentes;
• Selecionar Banco de Dados;
• Listar Tabelas Existentes;
• Descrever Tabela;
• Criar e Excluir Tabela;
• Inserir, Atualizar, Remover e Consultar Registros em Tabela.
Banco de Dados II
Continuação...
Edição de Scripts, SQL DML e Utilização do Terminal
Linguagem SQL - DML
Exemplos de comando DML (Linguagem de Manipulação de Dados)
✓ INSERT (acrescenta novos registros na tabela);
✓ DELETE (exclui registros de uma tabela);
✓ UPDATE (modifica registros já existente na tabela);
✓ SELECT (pesquisa dados de uma ou mais tabelas).
Linguagem SQL - DML
▪ INSERT
▪ Sintaxe geral
INSERT INTO nomeTabela (coluna1, coluna2, coluna3, …, colunaN)
VALUES (‘valor1’, ‘valor2’, valor3, …, valorN);

Aluno ( foto, matriculaAluno, nome, email, login, senha, logradouro, bairro, município, estado, cep, codigoCurso,
codigoCurso como chave estrangeira referencia Curso(codigoCurso) );

Insert into Aluno (foto, matriculaAluno, nome, email, login, senha, logradouro,
bairro, municipio, estado, cep, codigoCurso) values

(imagem, 123, ‘João’, ‘joao@’, ‘joao@’, ‘$%@&!#’, ‘rua X’,


‘centro’, ‘goiânia’, ‘goiás’, 123456, 2468);
Linguagem SQL - DML
▪ INSERT
▪ Sintaxe geral
INSERT INTO nomeTabela (coluna1, coluna2, coluna3, …, colunaN)
VALUES (‘valor1’, ‘valor2’, valor3, …, valorN);

Aluno ( foto, matriculaAluno, nome, email, login, senha, logradouro, bairro, município, estado, cep, codigoCurso,
codigoCurso como chave estrangeira referencia Curso(codigoCurso) );

Insert into Aluno (foto, matriculaAluno, nome, email, login, senha, logradouro,
bairro, municipio, estado, cep, codigoCurso) values

(imagem, 123, ‘João’, ‘joao@’, ‘joao@’, ‘$%@&!#’, ‘rua X’,


‘centro’, ‘goiânia’, ‘goiás’, 123456, 2468),
(imagem, 234, ‘Pedro’, ‘pedro@’, ‘pedro@’, ‘%%@!&&#$’, ‘rua y’,
‘feira’, ‘anapolis’, ‘goiás’, 246357, 2468);
Linguagem SQL - DML
▪ INSERT
Insert into Aluno (foto, matriculaAluno, nome, email, login, senha, logradouro,
bairro, municipio, estado, cep, codigoCurso) values

1 2

(imagem, 123, ‘João’, ‘joao@’, ‘joao@’, ‘$%@&!#’, ‘rua X’,


‘centro’, ‘goiânia’, ‘goiás’, 123456, 2468),
3

(imagem, 234, ‘Pedro’, ‘pedro@’, ‘pedro@’, ‘@!&&#$!’, ‘rua y’,


‘feira’, ‘anapolis’, ‘goiás’, 246357, 2468);

1. Como armazenar imagem em um banco de dados?


2. Como armazenar senha em um banco de dados?
3. Como inserir o código de um curso na tabela, considerando que o campo é uma FK?
Linguagem SQL - DML
▪ DELETE
▪ Sintaxe geral
DELETE FROM nomeTabela WHERE CONDICAO;

Aluno ( foto, matriculaAluno, nome, email, login, senha, logradouro, bairro, município, estado, cep, codigoCurso,
codigoCurso como chave estrangeira referencia Curso(codigoCurso) );

Delete from Aluno;

Delete from Aluno where matriculaAluno = 123;


Delete from Aluno where nome = ‘Pedro’;

Cursa ( matriculaAluno, codigoDisciplina, notaFinal, matriculaAluno como chave estrangeira referencia Aluno(matriculaAluno),
codigoDisciplina como chave estrangeira referencia Disciplina(codigoDisciplina) )

Delete from Cursa where matriculaAluno = 123 AND codigoDisciplina = 246;


Linguagem SQL - DML
▪ UPDATE
▪ Sintaxe geral
UPDATE nomeTabela
SET coluna = novoValor
WHERE coluna = valorFiltro;
Aluno ( foto, matriculaAluno, nome, email, login, senha, logradouro, bairro, município, estado, cep, codigoCurso,
codigoCurso como chave estrangeira referencia Curso(codigoCurso) );

Realizou ( codigoDisciplina, matriculaAluno, ano, semestre, notaFinal, codigoDisciplina como chave estrangeira
referencia Disciplina(codigoDisciplina), matriculaAluno como chave estrangeira referencia
Aluno(matriculaAluno) );

Update Realizou
set notaFinal = notaFinal*0.1
where matriculaAluno = 123 AND codigoDisciplina = 246;

Update Aluno
set email = ’joao@jotmail.com’
where matriculaAluno = 123;
Linguagem SQL - DML
▪ SELECT
▪ Sintaxe geral
SELECT <listaDeCampos>
FROM nomeTabela
WHERE CONDICAO;

Aluno ( foto, matriculaAluno, nome, email, login, senha, logradouro, bairro, município, estado, cep, codigoCurso,
codigoCurso como chave estrangeira referencia Curso(codigoCurso) );

Select * from Aluno;

Select matriculaAluno, nome, codigoCurso from Aluno


where matriculaAluno = 123;

Select matriculaAluno, nome from Aluno


where nome LIKE ‘%Pedro%’;
Linguagem SQL - DML
▪ SELECT
Aluno ( foto, matriculaAluno, nome, email, login, senha, logradouro, bairro, município, estado, cep, codigoCurso,
codigoCurso como chave estrangeira referencia Curso(codigoCurso) );

Curso ( codigoCurso, nomeCurso );

Select Aluno.matriculaAluno, Aluno.nome, Curso.nomeCurso


from Aluno, Curso
where Aluno.codigoCurso = Curso.codigoCurso;
Exercício – Estudo de Caso
▪ INSERT
▪ Escrever um script SQL para inserção de 5 registros em cada tabela do
modelo físico do Estudo de Caso Sistema de Gerência Acadêmica.
Exercício – Estudo de Caso
▪ DELETE
▪ Escrever um script SQL para excluir todos os registros da tabela Aluno
que contenham a substring ‘Pedro’ no atributo nomeAluno;

▪ Escrever um script SQL para excluir o Curso cujo codigoCurso é 2468;

▪ Escrever um script SQL para excluir todos os Alunos com notaFinal


inferior a 5.0;
Exercício – Estudo de Caso
▪ UPDATE
▪ Escrever um script SQL para atualizar a notaFinal de todos os alunos
que já cursaram alguma disciplina, incrementando a em 25%;

▪ Escrever um script SQL para atualizar a notaFinal dos alunos que já


cursaram a Disciplina cujo codigoDisciplina é 13579, reduzindo a nota
em 10%;

▪ Escrever um script SQL para atualizar o campo matriculaAluno para


11223344, visto que esta foi cadastrada erroneamente como 13579;
Exercício – Estudo de Caso
▪ SELECT
▪ Escrever um script SQL para listar todos os dados de todos os Alunos do
banco de dados;

▪ Escrever um script SQL para listar matriculaAluno, nome de todos os


Alunos que cursam o Curso cujo codigoCurso é 2468;

▪ Escrever um script SQL para listar todas as disciplinas já cursadas por


determinado aluno. Neste caso, o relatório deve conter: a matricula do
aluno, seu nome, o código da disciplina cursada, o nome da disciplina,
a nota final obtida, o ano e semestre no qual a disciplina foi cursada.
Sugestão de Leitura

ELMASRI, Ramez, NAVATHE, Shamkant B. Sistemas de banco


de dados. 7a Edição. Pearson, 2019.
→ Capítulo 8. SQL: Definição de Esquema, Restrições Básicas e
Consultas {Queries}
→ Capítulo 15. Algoritmos para Processamento e Otimização de
Consultas
Sugestão de Leitura

DATE, C. J. Introdução a Sistemas de Bancos de Dados


8a Edição. LTC, 2004.

→ Capítulo 4. Uma Introdução à SQL


→ Capítulo 5. Tipos
→Capítulo 6. Relações
Sugestão de Leitura
NIELD, Thomas. Introdução à Linguagem SQL: Abordagem
Prática Para Iniciantes. 8a Edição. Novatec, 2016.

→ Capítulo 1. Por que aprender SQL?


→ Capítulo 2. Bancos de Dados
→ Capítulo 4. SELECT
→ Capítulo 5. WHERE
→ Capítulo 6. GROUP BY e ORDER BY
→ Capítulo 8. JOIN
→ Capítulo 10. Gerenciando Dados
→ Capítulo 11. Seguindo em Frente

Você também pode gostar