EXEMPLOS DE COMANDOS NO SQL SERVER Gerenciando Tabelas: DDL - DATA DEFINITION LANGUAG Criando uma tabela: CREATE TABLE CLIENTES ID VARCHAR4 NOT NULL, NOME VARCHAR30 NOT NULL, PAGAMENTO DECIMAL4,2 NOT NULL; Deletando uma tabela: DROP TABLE CLIENTES; Alterando uma tabela, adicionando uma nova coluna: ALTER TABLE CLIENTES ADD COLUMN TELEFONE VARCHAR10 NOT NULL; Alterando uma tabela, modificando uma coluna: ALTER TABLE CLIENTES MODIFY COLUMN TELEFONE VARCHAR12; Apagando os dados de uma tabela, retornando-a ao estado de origem: TRUNCATE TABLE CLIENTES; Manipulando Dados: DML - DATA MANIPULATION LANGUAGE Inserindo dados: INSERT INTO EMPREGADOS VALUES '1111', 'João da Silva', 100.50; Alterando dados: UPDATE EMPREGADOS SET PAGAMENTO = 120 WHERE ID = '1111'; Deletando dados: DELETE FROM EMPREGADOS WHERE ID = '1111'; COMMIT; ROLLBACK; SAVEPOINT S1; ROLLBACK TO S1; Selecionando Dados: DQL - DATA QUERY LANGUAGE SELECT column1, column2,... FROM table1, table2,... [ WHERE column1 = 'value1' AND column2 = 'value2' OR column1 = 'value3'
AND column2 = 'value4'] [GROUP BY column1, column2,...] [HAVING function = 'value'] [ORDER BY column1, column2,...]; SELECT COUNT* FROM EMPREGADOS; SELECT CIDADE, AVGPAGAMENTO FROM EMPREGADOS GROUP BY CIDADE HAVING AVGPAGAMENTO > 100; SELECT E.NOME, PE.PAGAMENTO FROM EMPREGADOS E, PAGAMENTO_EMPREGADOS PE WHERE E.EID = PE.EID; SELECT ID, NOME FROM EMPREGADOS WHERE PAGAMENTO > SELECT AVGPAGAMENTO FROM EMPREGADOS; Controlando o Acesso aos Dados: DCL - DATA CONTROL LANGUAGE GRANT SELECT, INSERT, UPDATE, DELETE ON EMPREGADOS TD USER12; REVOKE DELETE ON EMPREGADOS FROM USER12; Gerenciando Índices: DDL - DATA DEFINITION LANGUAGE CREATE INDEX EMPREGADOS_IDX ON EMPREGADOSNOME; CREATE UNIQUE INDEX EMPREGADOS_IDX ON EMPREGADOSNOME; CREATE INDEX EMPREGADOS_IDX ON EMPREGADOSNOME, PAGAMENTO; DROP INDEX EMPREGADOS IDX; Gerenciando Visões views: DDL - DATA DEFINITION LANGUAGE CREATE VIEW MAIOR_PAGAMENTO_EMPREGADOS AS SELECT FROM EMPREGADOS WHERE PAGAMENTO > 150; CREATE VIEW NOMES AS SELECT NOME FROM EMPREGADOS; DROP VIEW NOMES; Funções de Agregação:
COUNT - Retorna o número de linhas SUM - Retorna a soma de uma coluna específica AVG - Retorna o valor médio de uma coluna específica MAX - Retorna o valor máximo de uma coluna específica MIN - Retorna o valor mínimo de uma coluna específica SELECT AVGPAGAMENTO FROM EMPREGADOS; SELECT COUNT* FROM EMPREGADOS; Operadores Lógicos: IS NULL BETWEEN IN LIKE EXISTS UNIQUE ALL and ANY SELECT * FROM EMPREGADOS WHERE PAGAMENTO BETWEEN 100 AND 150; SELECT NOME, PAGAMENTO FROM EMPREGADOS WHERE EID IN '1111', '2222', '3333'; Negando Condições com o Operador NOT: NOT EQUAL NOT BETWEEN NOT IN NOT LIKE NOT EXISTS NOT UNIQUE SELECT * FROM EMPREGADOS WHERE PAGAMENTO NOT BETWEEN 100 AND 150; SELECT NOME, PAGAMENTO FROM EMPREGADOS WHERE EID NOT IN '1111', '2222', '3333';
SELECT NOME FROM EMPREGADOS WHERE NOME NOT LIKE 'S%'; Para os exemplos seguintes, criei três tabelas, chamadas PEDIDO, CLIENTE e ITENSPEDIDO, que reproduzem o clássico relacionamento pai-filho: CREATE TABLE PEDIDO PED_COD INT NOT NULL, PED_DATA SMALLDATETIME NOT NULL, PED_CLI INT NOT NULL CREATE TABLE CLIENTE CLI_COD INT NOT NULL, CLI_NOME VARCHAR50 NOT NULL CREATE TABLE ITENSPEDIDO PED_COD INT NOT NULL, ITEN_COD INT NOT NULL, ITEN_QTD NUMERIC5,2 NOT NULL A tabela PEDIDO possui uma relação de um-para-muitos com a tabela ITENSPEDIDO, através do campo PED_COD. A tabela PEDIDO possui uma relação de um-para-um com a tabela CLIENTE, através do campo CLI_COD. Percebam que neste exemplo não estou utilizando contraints declarativas de integridade referencial DRI como chaves primárias ou chaves estrangeiras, pois quis montar um exemplo simples. Também não me preocupei com cardinalidade da relação e normalização do modelo. Antes de continuar, aconselho ao leitor incluir alguns registros nestas tabelas para tornar os exemplos a seguir mais compreensíveis. Agora vamos ver os três tipos básicos de joins e como implementá-los:
1. Inner Join O Inner Join, que geralmente é a maneira mais utilizada de se retornar dados espalhados entre tabelas, funciona seguindo o princípio de que para os registros retornados de uma tabela, deve haver algum tipo de relação com os registros da outra tabela. No caso da igualdade, somente os registros das duas tabelas, que possuírem o mesmo valor para um determinado campo, são retornados. Um exemplo: SELECT PED.PED_COD, PED. PED_DATA, ITEN. ITEN_COD, ITEN. ITEN_QTD FROM PEDIDO PED, ITENSPEDIDO ITEN WHERE PED.PED_COD = ITEN.PED_COD Percebam no exemplo acima que somente os registros que contiverem o mesmo valor para o campo PED_COD nas duas tabelas são retornados. Apesar de existir outra maneira de se fazer o INNER JOIN, eu recomendo a maneira com o WHERE, pois torna o código da instrução mais legível. Em termos de desempenho, as duas instruções se equivalem. Outra maneira, que retorna os mesmos resultados: SELECT PED.PED_COD, PED. PED_DATA, ITEN. ITEN_COD, ITEN. ITEN_QTD FROM PEDIDO PED INNER JOIN ITENSPEDIDO ITEN ON PED.PED_COD = ITEN.PED_COD É importante lembrar também que o Inner join permite o uso de outros operadores que não sejam somente o igual =.