Você está na página 1de 8

SQL structured query language

linguagem comercial e completa de definio e manipulao de banco de dados SQL1: aprovado pelo grupo ANSI, em 1986 SQL2: aprovado em 1992 SQL3: est em andamento

Sistemas de Banco de Dados

SQL DDL: data definition language

SQL Conceitos bsicos


LINGUAGEM

Linguagem de definio de dados Instrues de definio do esquema da base de dados

SQL DML: data manipulation language


Linguagem de manipulao de dados Instrues de Programao de consultas e transaes de manipulao de banco de dados

Outras instrues
SQL embutida em linguagens de programao Definio de vises, autorizao de acesso, controle de transaes e concorrncia, restries de integridade, ...
JTS SQL bsico 1 JTS SQL bsico 2

SQL: DDL
Criao de banco de dados
O padro SQL no instrues para criao do BD. Alguns produtos tm:
CREATE DATABASE: cria uma base de dados vazia DROP DATABASE: elimina uma base de dados

SQL DDL: Criao de Tabelas


O comando CREATE TABLE: cria a tabela solicitada CREATE TABLE <nome da tabela> ( <descrio_das_colunas> ) ( <descrio_das_restries> )
<tabela>: nome da nova tabela a ser criada <descrio_das_colunas> : lista de colunas (campos) e seus respectivos tipos de dados ( char, integer, decimal, date, ...) <descrio_das_restries>: lista de colunas (campos) que so tratadas como chave estrangeira.
JTS SQL bsico 4

Definio do esquema da base de dados


CREATE TABLE
Cria uma tabela vazia definindo a estrutura de uma tabela e suas restries

DROP TABLE
Elimina uma tabela

ALTER TABLE
Altera a definio de uma tabela

CREATE INDEX
Permite a criao de ndices (em tabelas) na base de dados
JTS SQL bsico 3

SQL DDL: Criao de Tabelas


Conjunto de domnios de valores de atributos fixo Desejvel:
domnio definvel pelo usurio (ex.: sigla de estados, meses do ano)

SQL DDL: Criao de Tabelas


Nome da tabela

SGBDs comerciais oferecem domnios adicionais aos do padro (CHAR, VARCHAR, INTEGER, REAL, ...) como: DATE BLOB (at 2 gigabytes) para conter imagens, sons, vdeos, ...

Clusula NOT NULL requerida para colunas que faam parte da chave primria colunas de uma tabela so ordenadas pela sua ordem de definio (linhas no tem ordenao)
JTS SQL bsico 5

CREATE TABLE PACIENTE ( CodPac CHAR(5) NOT NULL, Nome CHAR(40) NOT NULL, Cidade CHAR(25) PRIMARY KEY (Codigo) )
Chave primria
JTS SQL bsico 6

SQL DDL: Criao de Tabelas


CREATE TABLE CONSULTA ( CodMed CHAR(3) NOT NULL, CodPac CHAR(3) NOT NULL, Dia CHAR(30) NOT NULL, Hora INTEGER, PRIMARY KEY (CodMed, CodPac, Dia) FOREIGN KEY (CodMed) references MEDICO(CodMed), FOREIGN KEY (CodPac) references PACIENTE(CodPac) )
Chave estrangeira
JTS SQL bsico 7

SQL DDL: Criao de Tabelas Restries de Integridade


FOREIGN KEY <coluna> references <tabela> [<clusula>] Clusula DELETE
ON DELETE RESTRICT (default) ON DELETE CASCADE
propagao da excluso linha para as linhas que a referenciam

ON DELETE SET NULL (p/chave estrangeira que admitem NULL)

Clusula UPDATE: semelhante a DELETE


ON UPDATE RESTRICT ON UPDATE CASCADE
JTS SQL bsico 8

SQL DDL: Remoo de Tabelas


DROP TABLE <tabela> [<clusula>] Clusula RESTRICT
Exclui a tabela somente se no existirem objetos definidos com base na tabela

SQL DDL: Alterao de Tabelas


ALTER TABLE <tabela> <clusula> Nem todas as alteraes so permitidas Clusula de colunas:
ADD MODIFY

Clusula DELETE
No permite

DROP COLUMN (no existe)

Clusula de restries de chave:


DROP PRIMARY KEY DROP FOREIGN KEY
Para excluir uma chaves estrangeira necessrio ter dado um nome a ela (tratar como uma CONSTRAINT)
JTS SQL bsico 10

DROP TABLE PACIENTE


remove completamente uma tabela da base de dados (vazia ou no)
JTS SQL bsico 9

SQL DDL: Alterao de Tabelas


Exemplo ADD
ALTER TABLE PACIENTE ADD (ENDERECO VARCHAR(30)) adiciona nova coluna com valor vazio para todas as linhas no pode ter especificao NOT NULL

SQL DDL: Alterao de Tabelas


Exemplo DROP FOREIGN KEY
ALTER TABLE PACIENTE DROP FOREIGN KEY nome_chave_estrangeira

Como dar nome a uma chave estrangeira?


... FOREIGN KEY fk_ConsultaMedico (CodMed) references MEDICO(CodMed)
ex.: ALTER TABLE PACIENTE DROP FOREIGN KEY fk_ConsultaMedico

Exemplo MODIFY
ALTER TABLE PACIENTE MODIFY (ENDERECO ALTER TABLE PACIENTE DROP PRYMARY KEY
JTS SQL bsico 11

VARCHAR(50))

Exemplo DROP PRYMARY KEY

... CONSTRAINT fk_ConsultaMedico FOREIGN KEY (CodMed) references MEDICO(CodMed)


ex.: ALTER TABLE PACIENTE DROP CONSTRAINT fk_ConsultaMedico
JTS SQL bsico 12

SQL DDL: ndices


Criao de ndices: CREATE [UNIQUE] INDEX <nome do ndice> ON <nome da tabela> (< coluna(s) >)
Exemplos: CREATE UNIQUE INDEX ipNome ON PACIENTE (Nome) CREATE INDEX icPaciente ON CONSULTA (CodPac)
JTS SQL bsico 13

SQL DDL: ndices


REMOO DE NDICES DROP INDEX <nome_do_ndice> Exemplos: DROP INDEX icPACIENTE DROP INDEX ipNOME
JTS SQL bsico 14

SQL DML: atualizaes


SQL apresenta trs comandos para atualizaes das tabelas definidas no banco de dados: INSERT, DELETE e UPDATE

SQL DML: INSERT


Comando INSERT INSERT INTO <nome da tabela> <nome da(s) coluna(s)> VALUES <valores> Forma 1 INSERT INTO MEDICO VALUES (M1, Joo, Pediatra)
os valores devem ser informados exatamente na mesma ordem em que foram definidos os atributos (create table)
15 JTS SQL bsico 16

INSERT
insere uma ou mais tuplas (linhas, registros) em uma tabela

DELETE
remove uma ou mais tuplas em uma tabela

UPDATE
modifica os dados de uma ou mais tuplas de uma tabela
JTS SQL bsico

SQL DML: INSERT


Forma 2 INSERT INTO MEDICO (codmed, nome) VALUES (M2, Maria)
ordem dos atributos na definio da tabela no precisa ser seguida. Atributos com valores nulos podem ser omitidos.

SQL DML: INSERT


Forma 3 INSERT INTO MEDICO (codmed, nome, Especialidade) VALUES (M2, Maria, Cardiologia )
ordem dos atributos na definio da tabela no precisa ser seguida. Atributos com valores nulos podem ser omitidos.

JTS

SQL bsico

17

JTS

SQL bsico

18

SQL DML: INSERT


Inserir vrias tuplas
usado normalmente para criar uma tabela com o resultado de uma consulta
CREATE TABLE CONSULTAS_06_MAIO { NomeMed CHAR (20), NumConsultas INTEGER}; INSERT INTO CONSULTAS_06_MAIO SELECT MEDICO.nome, COUNT(*) FROM MEDICO, CONSULTA WHERE Dia = 06/05/98 AND MEDICO.Cod_Med=CONSULTA.cod_med GROUP BY MEDICO.nome
JTS SQL bsico 19

SQL DML: DELETE


DELETE FROM <nome da tabela> WHERE <condio>
Excluir o paciente Jos DELETE FROM PACIENTE WHERE nome = Jos
Excluso s ser efetivada se no violar restries de integridade (chave estrangeira)

Excluir todas as consultas DELETE FROM CONSULTA


remove todas as tuplas de uma tabela (tabela fica vazia) para remover a tabela completamente, deve ser usado o comando DROP TABLE
JTS SQL bsico 20

SQL - DML: UPDATE


UPDATE <nome da tabela> SET <nome da(s) coluna(s)> = novo valor WHERE <condio> Modificar o dia e a hora da consulta do mdico M2 com o paciente P3, de 21/9/2000 s 11h para 25/9/2000 s 14h UPDATE CONSULTA SET Dia=21/5/2000 AND Hora = 14 WHERE Codmed=M2 AND Codpac = P3 AND Dia=25/9/2000 AND Hora=11
JTS SQL bsico 21

SQL - DML: UPDATE


Alterar a cidade do paciente P1 de Soledade para Passo Fundo Alterar a especialidade do mdico M1 para Cardiologia. Alterar o dia das consultas do mdico M5 com todos os pacientes, de 24/09/2000 para 25/09/2000

JTS

SQL bsico

22

SQL DML: Consultas


Estrutura bsica de uma consulta SELECT lista de colunas FROM lista de tabelas [WHERE condio]
Exemplos: Obter cdigo e nome de todos os PACIENTES SELECT Codigo, Nome FROM PACIENTE Obter todos os dados de PACIENTES SELECT * FROM PACIENTE
JTS SQL bsico 23

SQL DML: Consultas


Obter cdigo e nome das PACIENTES que residem em SOLEDADE SELECT Codigo, Nome FROM PACIENTE WHERE Cidade = SOLEDADE

Obter todas as Cidades de todos os PACIENTES


SELECT Cidade FROM PACIENTE com eliminao de duplicatas SELECT DISTINCT Cidade FROM PACIENTE
JTS SQL bsico 24

SQL DML: Consultas/Juno


MEDICO (codmed, nome, especialidade) PACIENTE (codpac, nome) CONSULTA (codmed, codpac, data, hora) Obter os nomes dos mdicos e dias de suas consultas
SELECT FROM WHERE MEDICO.Nome, Dia MEDICO, CONSULTA MEDICO.codmed = CONSULTA.codmed

SQL DML: modelo completo


Uma consulta SQL pode apresentar at seis clusulas distintas, sendo apenas as duas primeiras obrigatrias

Obter os nomes dos mdicos e de seus pacientes


SELECT FROM WHERE MEDICO.Nome, PACIENTE.nome MEDICO, PACIENTE, CONSULTA MEDICO.codmed = CONSULTA.codmed AND CONSULTA.codpac = PACIENTE.codpac

Ordem das clusulas: SELECT lista de colunas FROM lista de tabelas [WHERE condio sobre linhas] [GROUP BY lista de colunas p/agrupamento [HAVING condio sobre grupo] ] [ORDER BY lista de colunas]
25 JTS SQL bsico 26

JTS

SQL bsico

SQL DML: Funes de Agregao


SQL permite computar funes sobre grupos de tuplas, usando a clusula GROUP BY. Funes de agregao permitem computar valores: COUNT : contagem de linhas SUM : soma MAX : mximo MIN : mnimo AVG : mdia funes de agregao podem ser aplicadas sobre toda a tabela ou sobre um grupo de linhas Obter o nmero de mdicos SELECT COUNT(*) FROM MEDICO Obter o nmero de consultas por mdico SELECT codmed, COUNT(*) FROM CONSULTA GROUP BY codmed
JTS SQL bsico 27

SQL DDL: Vises


Uma viso em SQL uma tabela VIRTUAL, que no est armazenada fisicamente na base de dados Vises so utilizadas
como mecanismos de segurana, quando combinadas com mecanismos de controle de acesso; para aumentar a independncia de dados; para diminuir a complexidade das consultas para ter uma viso particular de uma tabela (no precisa utilizar toda a tabela)

so utilizadas como tabelas normais


JTS SQL bsico 28

SQL DDL: Vises


Criar uma viso (view)
CREATE VIEW <NOME DA VISO> [LISTA DE ATRIBUTOS] AS CONSULTA onde: CONSULTA = SELECT <NOME DA(S) COLUNA(S)> FROM <NOME DA(S) TABELA(S) WHERE <CONDIO>

SQL DDL: Vises


Viso em que aparecem somente os mdicos pediatras
CREATE VIEW MedicosPediatras (CodMed, Nome) AS SELECT CodMed, Nome FROM MEDICO WHERE Especialidade = PEDIATRIA

Viso em que aparecem os mdicos, seus pacientes e dados das suas consultas
CREATE VIEW Med_Cons_Pac (Nome_Med, Nome_Pac, Dia, Hora) AS SELECT m.Nome, p.Nome, Dia, Hora FROM MDICO m, PACIENTE p, CONSULTA c WHERE M.codmed = C.codmed AND P.codpac = C.codpac
29 JTS SQL bsico 30

Apagar uma viso (view)


DROP VIEW <NOME DA VISO>
JTS SQL bsico

SQL DDL: Vises


Uma viso atualizvel se:
definida a partir de uma nica tabela da base de dados cada linha da viso corresponde a um nica linha da tabela base cada coluna da viso corresponde a uma nica coluna da tabela base

Bibliografia
DATE, C.J. Introduo a Sistemas de Bancos de Dados: traduo (4 edio americana). Rio de Janeiro: Campus, 1994 GOLENDZINER, Lia Goldstein. Conceitos de Bancos de Dados. Porto Alegre: CPGCC/UFRGS, 1996 (notas de aula) HEUSER, Carlos A. Fundamentos de Banco de Dados. Porto Alegre: CPGCC/UFRGS, 2000 (notas de aula) KROENKE, DAVID M. Banco de Dados: Fundamentos, projeto e implementao. Sexta edio (traduo). LTC Livros Tcnicos e Cientficos, 1999 SILBERSCHATZ, Abraham.; KORTH, Henry F.; SUDARRSHAN, S. Sistemas de Banco de Dados. 3 ed. So Paulo: MAKRON BOOKS, 1999
31 JTS SQL bsico 32

Uma viso para ser atualizvel no pode:


ser definida sobre mltiplas tabelas utilizar projeo com eliminao de duplicatas utilizar GROUP BY ou funes de agregao
JTS SQL bsico

Você também pode gostar