TECNOLOGIA EM SISTEMAS PARA INTERNET PROJETO DE BANCO DE DADOS Exemplos de Scripts SQL (PostgreSQL) Pizzaria 1 TECNOLOGIA EM SISTEMAS PARA INTERNET PROJETO DE BANCO DE DADOS 2 TECNOLOGIA EM SISTEMAS PARA INTERNET PROJETO DE BANCO DE DADOS Criação de BANCO DE DADOS CREATE DATABASE nome_do_banco; CREATE DATABASE pizzaria; Criação de TABELAS SOMENTE COM CHAVE PRIMÁRIA CREATE TABLE nome_da_tabela ( nome_campo tipo_de_dado NOT NULL, outros_campos tipo_de_dado NOT NULL, CONSTRAINT pk_nome_chave PRIMARY KEY (nome_campo) ); CREATE TABLE pizzaria ( id SERIAL NOT NULL, nome VARCHAR (50) NOT NULL, endereco VARCHAR (100) NOT NULL, telefone CHAR (15) NOT NULL, CONSTRAINT pk_pizzaria PRIMARY KEY (id) ); Ou CREATE TABLE pizzaria ( id SERIAL PRIMARY KEY NOT NULL, nome VARCHAR (50) NOT NULL, endereco VARCHAR (100) NOT NULL, telefone CHAR (15) NOT NULL ); CREATE TABLE pizza ( numero_item SERIAL PRIMARY KEY NOT NULL, nome VARCHAR (20) NOT NULL, preco_peq NUMERIC (15,2) NOT NULL, preco_med NUMERIC (15,2) NOT NULL, preco_grd NUMERIC (15,2) NOT NULL ); CREATE TABLE ingrediente ( id SERIAL PRIMARY KEY NOT NULL, nome VARCHAR (20) NOT NULL, unidade_medida VARCHAR (10) NOT NULL ); Criação de TABELAS COM CHAVE ESTRANGEIRA 3 TECNOLOGIA EM SISTEMAS PARA INTERNET PROJETO DE BANCO DE DADOS CREATE TABLE nome_da_tabela ( nome_campo tipo_de_dado NOT NULL, outros_campos tipo_de_dado NOT NULL, CONSTRAINT pk_nome_chave PRIMARY KEY (nome_campo), CONSTRAINT fk_nome_chave FOREIGN KEY (nome_campo) REFERENCES nome_tabela ); CREATE TABLE cardapio ( id SERIAL NOT NULL, nome VARCHAR (15) NOT NULL, id_pizzaria INT NOT NULL, CONSTRAINT pk_cardapio PRIMARY KEY (id), CONSTRAINT fk_cardapio_pizzaria FOREIGN KEY (id_pizzaria) REFERENCES pizzaria ); Ou CREATE TABLE cardapio ( id SERIAL PRIMARY KEY NOT NULL, nome VARCHAR (15) NOT NULL, id_pizzaria INT NOT NULL REFERENCES pizzaria (id) ); Criação de TABELAS DE RELACIONAMENTO CREATE TABLE nome_da_tabela ( campo_1 tipo_de_dado NOT NULL, campo_2 tipo_de_dado NOT NULL, CONSTRAINT pk_nome_chave PRIMARY KEY (campo1, campo_2), CONSTRAINT fk_nome_chave_1 FOREIGN KEY (campo1) REFERENCES nome_tabela_1 CONSTRAINT fk_nome_chave_2 FOREIGN KEY (campo_2) REFERENCES nome_tabela_2 ); CREATE TABLE composicao ( numero_item INT NOT NULL, id_cardapio INT NOT NULL, CONSTRAINT pk_composicao PRIMARY KEY (numero_item, id_cardapio), CONSTRAINT fk_pizza FOREIGN KEY (numero_item) REFERENCES pizza, CONSTRAINT fk_cardapio FOREIGN KEY (id_cardapio) REFERENCES cardapio ); 4 TECNOLOGIA EM SISTEMAS PARA INTERNET PROJETO DE BANCO DE DADOS Ou CREATE TABLE composicao ( numero_item INT NOT NULL REFERENCES pizza (numero_item), id_cardapio INT NOT NULL REFERENCES cardapio (id), CONSTRAINT pk_composicao PRIMARY KEY (numero_item, id_cardapio) ); CREATE TABLE ingrediente_pizza ( numero_item INT NOT NULL REFERENCES pizza (numero_item), id_ingrediente INT NOT NULL REFERENCES ingrediente (id), quantidade NUMERIC (15,2) NOT NULL, CONSTRAINT pk_ingrediente_pizza PRIMARY KEY (numero_item, id_ingrediente) ); DML – Data Manipulation Language 2.1 Inclusão de dados - INSERT INSERT INTO tabela (campo1, campo2 ...) VALUES (valor1, valor2...); INSERT INTO pizzaria (nome, endereco, telefone) VALUES ('Minha Pizzaria', 'Rua da Pizza', '04712345678'); OBS.: O campo id não foi adicionado pois ele é gerado automaticamente pelo BD (SERIAL). OBS.: Campos do tipo string ou date devem vir entre apóstrofo. INSERT INTO pizza (nome, preco_peq, preco_med, preco_grd) VALUES ('Calabresa', 10.00, 15.00, 20.00); OBS.: Campos numéricos aparecem SEM ASPAS. INSERT INTO cardapio (nome, id_pizzaria) VALUES ('Primavera', 10) OBS.: Os valores de chave-estrangeira devem ser iguais a valores existentes na tabela referenciada. 2.2 Consulta simples - SELECT 5 TECNOLOGIA EM SISTEMAS PARA INTERNET PROJETO DE BANCO DE DADOS SELECT * FROM tabela; SELECT campo1, campo2 ... FROM tabela; SELECT * FROM tabela WHERE campo = valor; SELECT * FROM pizzaria; SELECT nome, telefone FROM pizzaria; SELECT id, nome, telefone FROM pizzaria; SELECT nome, telefone FROM pizzaria WHERE id = 3; 2.3 Alteração de dados – UPDATE UPDATE tabela SET campo1 = valor1, campo2 = valor2 ... WHERE campo = valor; UPDATE pizzaria SET nome = 'Pizza da Nona' WHERE id = 1; OBS.: Na cláusula WHERE são colocados um ou mais campos para seleção dos registros a serem alterados. Normalmente se usa a chave primária. 2.4 Exclusão de registros – DELETE DELETE FROM tabela WHERE campo = valor; DELETE FROM pizzaria WHERE id = 20; OBS.: Cuidado ao usar o DELETE. Não esquecer de colocar a cláusula WHERE, indicando os campos de seleção do registro a ser excluído. 2.5 Consulta com mais de um campo seletor – SELECT, UPDATE e DELETE 6 TECNOLOGIA EM SISTEMAS PARA INTERNET PROJETO DE BANCO DE DADOS SELECT * FROM tabela WHERE campo1 = valor1 AND campo2 = valor2; // Pode usar AND ou OR SELECT * FROM pizza WHERE preco_peq > 10.00 AND preco_grd < 30.00; SELECT * FROM pizza WHERE preco_peq >= 10.00 AND preco_grd <= 30.00; SELECT * FROM pizza WHERE preco_peq >= 10.00 OR preco_grd <= 30.00; 2.6 Seleção envolvendo mais de uma tabela Pesquise o use de JOIN Ou, use da seguinte forma: SELECT campos FROM tabela1, tabela2 ... WHERE pk_tabela1 = fk_tabela2; -- Seleciona todos os cardápios de todas as pizzarias SELECT * FROM pizzaria, cardapio WHERE pizzaria.id = cardapio.id_pizzaria; -- Seleciona todas as pizzas, de todos os cardápios, de todas as pizzarias SELECT * FROM pizzaria, cardapio, composicao, pizza WHERE pizzaria.id = cardapio.id_pizzaria AND cardapio.id = composicao.id_cardapio AND pizza.numero_item = composicao.numero_item; SELECT * FROM pizzaria p, cardapio ca, composicao co, pizza pi WHERE p.id = ca.id_pizzaria AND ca.id = co.id_cardapio AND pi.numero_item = co.numero_item; 2.7 Consulta com ORDENAÇÃO 7 TECNOLOGIA EM SISTEMAS PARA INTERNET PROJETO DE BANCO DE DADOS SELECT * FROM tabela ORDER BY campo1, campo2; SELECT * FROM pizzaria pi, cardapio ca WHERE pi.id = ca.id_pizzaria ORDER BY pi.nome; 8