Introdução a linguagem SQL Vandeclécio Lira da Silva Bacharel em Ciência da Computação - UERN
Introdução a SQL SQL (Structured Query Language) Linguagem Estruturada de Consulta; Criado no Inicio dos 70, pela IBM; É uma linguagem de altíssimo nível, bem próxima da linguagem humana (inglês); Linguagem declarativa, detalha a forma do resultado; Novos dialetos surgiram, derivando e evoluindo o SQL;
Introdução a SQL Padronização American National Standards Institute (ANSI) em 1986 International Organization for Standardization (ISO) em 1987 É a linguagem utilizada em praticamente todos os SGBDs do mercado. Mesmo com a padronização cada fabricante tem suas características
Introdução a SQL Formada pelo conjunto das linguagens: DDL (Data Definition Language): Liguagem de definição de dados DML (Data Manipulation Language): Linguagem de Manipulação de dados DQL (Data Query Language): Linguagem de consulta de Dados DCL (Data Control Language): Linguagem de Controle de Dados DTL (Data Transaction Language): Linguagem de Transação de Dados SQL DDL DML DQL DCL DTL
DDL Linguagem de Definição de Dados CREATE: Cria uma estrutura ALTER: Altera uma estrutura DROP: Exclui uma estrutura SQL DDL DML DQL DCL DTL
DML Linguagem de Manipulação de Dados INSERT: Insere dados UPDATE: Altera dados DELETE: Deleta dados SQL DDL DML DQL DCL DTL
DQL Linguagem de Consulta de Dados SELECT: Retorna dados Ordenação de dados Agrupamento de dados Funções aritméticas Filtros de seleção SQL DDL DML DQL DCL DTL
DCL Linguagem de Controle de Dados GRANT: Habilita acesso a dados e operações REVOKE: Revoga acesso a dados e operações SQL DDL DML DQL DCL DTL
DQL Linguagem de Transação de Dados START TRANSACTION: Inicia a transação COMMIT: Concretiza a transação ROLLBACK: Anula a transação SQL DDL DML DQL DCL DTL
Tipo de dados Boleano e Numérico Nome MySQL Postgre SQL Server Oracle FireBird intervalo Bytes BOOLEAN TINYINT SIM ENUM SMALLINT 0 ou 1 (FALSE ou TRUE) 1 bit NUMBER -128 à 127 1 -32,768 à 32,767 0 à 65,535 se UNSIGNED 2 INT -2,147,483,648 à 2,147,483,647 0 à 4,294,967,295 se UNSIGNED 4 BIGINT INT64 -9,223,372,036,854,775,808 à +9,223,372,036,854,775,807 0 à 18,446,744,073,709,551,615 se UNSIGNED 8 FLOAT REAL -3.402823466E+38 à -1.17544351E-38 1.175494351E-38 à 3.402823466E+38 se UNSIGNED DOUBLE DOUBLE PRECISION -1.7976931348623157E+308 à -2.2250738585072014E-308, 2.2250738585072014E-308 à 1.7976931348623157E+308 se UNSIGNED
"-838:59:59" – "838:59:59" (horas, minutos, segundos) Tipo de dados String Nome MySQL 5 SQL Server Oracle FireBird Bytes Char SIM X Varchar X + 1 Data e Hora Nome MySQL Postgre SQL Server Oracle FireBird Intervalo (MySQL) Bytes DATA SIM TIMESTAMP "1000-01-01" – "9999-12-31" (ano, mês, dia) 3 TIME "-838:59:59" – "838:59:59" (horas, minutos, segundos) DATATIIME "1000-01-01 00:00:00" - "9999-12-31 23:59:59" 8 19700101000000 – 2037+ 4
Atributos NULL / NOT NULL Unsigned / Signed Auto-increment Zerofill Permite ou não valores nulos, NULL != vazio Unsigned / Signed Permite ou não números negativos Auto-increment Sequências, contadores Zerofill Preenche o valor numérico completando com zeros a esquerda
Criando um banco de dados DDL – Linguagem de Definição de Dados CREATE DATABASE AulaSQL USE AulaSQL;
Criando tabelas CREATE TABLE nomeTabela(campo tipo atributo, ... campo tipo atributo) CREATE TABLE CLIENTE ( codigo int NOT NULL PRIMARY KEY, nome varchar(30) NOT NULL, cpf int UNIQUE, uf char(2) default null, nascimento date default ’0000-00-00’, telefone char(8) default null, sexo char(1)); codigo nome cpf uf nascimento telefone sexo
Criando tabelas Restrição UNIQUE e PRIMARY KEY: Asseguram que os valores inseridos em uma ou mais colunas são únicos para cada linha da tabela. Uma ou mais colunas definidas com essas restrições devem também ser definidas com o atributo NOT NULL Uma coluna pode ser definida com o atributo NOT NULL. Esse atributo não permite valores nulos na coluna onde é definida e é obrigatório em colunas com restrições PRIMARY KEY ou UNIQUE.
Criando tabelas Restrição FOREIGN KEY: Chave estrangeira é uma ou mais colunas em uma tabela que corresponde exatamente a uma ou mais colunas definida(s) como chave primária em outra tabela. CREATE TABLE PRODUTO( codigo int NOT NULL PRIMARY KEY, produto varchar(30) NOT NULL, preco decimal(5,2) NOT NULL, ); CREATE TABLE PEDIDO( cod_pedido int NOT NULL PRIMARY KEY, data date, cod_cliente int, cod_produto int, FOREIGN KEY (cod_produto) REFERENCES PRODUTO (codigo) ON DELETE SET NULL, FOREIGN KEY (cod_cliente) REFERENCES CLIENTE (codigo) ON DELETE SET NULL ON UPDATE CASCADE codigo produto preco cod_pedido data cod_cliente cod_produto
Alterar uma tabela Apagar uma tabela Exemplos: Incluir nova coluna ALTER TABLE CLIENTE ADD email VARCHAR(20); ALTER TABLE CLIENTE ADD fax VARCHAR(18) AFTER uf; Eliminar uma coluna existente ALTER TABLE CLIENTE DROP fax; Alterar o tipo de dado de uma coluna ALTER TABLE CLIENTE MODIFY email VARCHAR(40); DROP TABLE [nome da tabela]; Apagar uma tabela
Manipulando dados DML – Linguagem de Manipulação de Dados Exercício INSERT INTO Tabela VALUES (valores) Exemplo: INSERT INTO CLIENTE VALUE (‘007’, ‘Bond’, ‘11111111111’, ‘UK’, ’1111-11- 11’, ‘1111111’, ’M’, ’james@email.com’ ); INSERT INTO CLIENTE (nome, cpf) VALUE (‘Maria’, ‘22222222222’); LOAD DATA LOCAL INFILE 'arquivo.txt' INTO TABLE Tabela; Exercício Carregar os arquivos nas tabelas;
Manipulando dados com filtro UPDATE Tabela SET Campo = Valor WHERE Condição UPDATE CLIENTE SET nome = ‘Camila’ WHERE cpf = ‘22222222222’; UPDATE CLIENTE SET nome = ‘James Bond’ WHERE nome = ‘Mario’; DELETE FROM Tabela WHERE Condição DELETE FROM CLIENTE WHERE cpf = ‘2222222222’ DELETE FROM CLIENTE WHERE nome = ‘Bonde’
Consulta de dados DQL – Linguagem de Consulta de Dados SELECT : retorna dados Ordenação de dados Agrupamento de dados Filtros de seleção Funções aritméticas
Consulta de dados SELECT campos FROM Tabela Condição; SELECT * FROM CLIENTE; ‘ * ’ imprime todos os campos da tabela SELECT nome, cpf FROM CLIENTE;
Consulta de dados Filtros de seleção (WHERE) Operadores relacionais Igual ( = ), Diferente ( != ) Maior ( > ), Maior ou igual ( >= ) Menor ( < ), Menor ou igual (<= ) Nulo (IS NULL), Não nulo ( IS NOT NULL) Entre intervalo ( BETWEEN ) Valor parcial ( LIKE ) Operadores lógicos AND, OR, NOT
Consulta de dados SELECT nome FROM CLIENTE WHERE sexo = ‘f’; SELECT * FROM PRODUTO WHERE preco > 50; SELECT produto FROM PRODUTO WHERE preco BETWEEN 10 AND 30; SELECT nome FROM CLIENTE WHERE nome NOT LIKE ‘A%’; SELECT * FROM CLIENTE WHERE telefone IS NOT NULL;
Consulta de dados Uso da cláusula ORDER BY Uso da cláusula GROUP BY SELECT * FROM CLIENTE ORDER BY nome; ASC, DESC Uso da cláusula GROUP BY SELECT * FROM CLIENTE GROUP BY uf ; Exercício Mostrar o nome dos clientes do mais velho ate os mais novos, agrupados por estado;
Consulta de dados Uso de funções AVG COUNT MAX MIN DISTINCT SELECT AVG(preco) FROM PRODUTO; COUNT SELECT COUNT(*) FROM CLIENTE; MAX SELECT MAX(preco) FROM PRODUTO; MIN SELECT MIN(preco) FROM PRODUTO; DISTINCT SELECT DISTINCT nome FROM CLIENTE;
Consulta de dados Relacionamento entre tabelas Quais as datas dos pedidos de cada cliente? SELECT CLIENTE.nome, PEDIDO.data from CLIENTE, PEDIDO WHERE PEDIDO.cod_cliente = CLIENTE.codigo; Inserindo apelido nas tabela SELECT C.nome, P.data from CLIENTE ASC, PEDIDO ASP WHERE P.cod_cliente = C.codigo;
Consulta de dados Relacionamento entre tabelas UNION IN SELECT nome FROM CLIENTE UNION SELECT produto FROM PRODUTO; IN SELECT nome FROM CLIENTE WHERE codigo IN (SELECT codigo FROM PEDIDO);
Armazém -- Exercicos -- 1) Alterar a tabela produto, agregando um campo preço. -- 2) Listar todos os produtos/funcionarios ordenados pelo codigo e alfabeticamente. -- 3) Listar os nomes dos funcionarios que geraram solicitaçõe -- 4) Listar todas as solicitações efectuadas no mes de fevereiro. -- 5) Actualice os preços de cada produto. -- 6) Que funcionarios executaram mais solicitações. -- 7) Que funcionario vendio mais nos primeiros 15 dias do mes de fevereiro.