Linguagem de Consulta Estruturada é uma linguagem padrão de base de dados que é utilizada para criar, manter e recuperar a base de dados relacional. Seguem-se alguns factos interessantes sobre SQL.

  • SQL é insensível a maiúsculas e minúsculas. Mas é uma prática recomendada utilizar palavras-chave (como SELECT, UPDATE, CREATE, etc) em maiúsculas e utilizar coisas definidas pelo utilizador (como nome de tabela, nome de coluna, etc) em letras pequenas.
  • Podemos escrever comentários em SQL usando “-“. (hífen duplo) no início de qualquer linha.
  • SQL é a linguagem de programação para bases de dados relacionais (explicada abaixo) como MySQL, Oracle, Sybase, SQL Server, Postgre, etc. Outras bases de dados não relacionais (também chamadas NoSQL) como MongoDB, DynamoDB, etc. não utilizam SQL
  • Embora exista uma norma ISO para SQL, a maioria das implementações varia ligeiramente em termos de sintaxe. Assim, podemos encontrar consultas que funcionam no SQL Server mas não funcionam no MySQL.
  • O que é Base de Dados Relacional?

    Base de Dados Relacional significa que os dados são armazenados assim como recuperados sob a forma de relações (tabelas). A tabela 1 mostra a base de dados relacional com apenas uma relação chamada STUDENT que armazena ROLL_NO, NAME, ADDRESS, PHONE e IDADE dos estudantes.

    STUDANTE

    ROLLL_NO NAME ADDRESS PHONE AGE
    1 RAM DELHI 9455123451 18
    2 RAMESH GURGAON 9652431543 18
    3 SUJIT ROHTAK 9156253131 20
    4 SURESH DELHI 9156768971 18

    TABELA 1

    p> Estas são algumas terminologias importantes que são utilizadas em termos de relação.

    Attributo: Atributos são as propriedades que definem uma relação. por exemplo; ROLL_NO, NAME etc.

    Tuple: Cada linha na relação é conhecida como tuple. A relação acima contém 4 tuple, um dos quais é mostrado como:

    1 RAM DELHI 9455123451 18

    Degree: O número de atributos na relação é conhecido como grau da relação. A relação ESTUDANTE definida acima tem grau 5.

    Cardinalidade: O número de tuplos numa relação é conhecido como cardinalidade. A relação ESTUDANTE definida acima tem cardinalidade 4.

    Coluna: Coluna representa o conjunto de valores para um determinado atributo. A coluna ROLL_NO é extraída da relação STUDENT.

    ROLLL_NO

    br>>>br>>br>>br>>br>>p>p>As consultas para lidar com a base de dados relacional podem ser categorias como:

    Linguagem de Definição de Dados: É utilizada para definir a estrutura da base de dados. por exemplo: CREATE TABLE, ADD COLUMN, DROP COLUMN e assim por diante.

    >p>Linguagem de Manipulação de Dados: É utilizada para manipular dados nas relações. e.g.; INSERIR, APAGAR, ACTUALIZAR e assim por diante.

    Linguagem de Consulta de Dados: É utilizada para extrair os dados das relações. por exemplo; SELECT

    P>P>Primeiro consideraremos a Linguagem de Consulta de Dados. Uma consulta genérica a recuperar de uma base de dados relacional é:

    1. SELECT Attribute_List FROM R1,R2….RM
    2. ]
    3. ];

Parte da consulta representada pela declaração 1 é obrigatória se se pretender recuperar de uma base de dados relacional. As declarações escritas no interior são opcionais. Analisaremos a possível combinação de consulta sobre a relação mostrada na Tabela 1.

Caso 1: Se quisermos recuperar os atributos ROLL_NO e NOME de todos os estudantes, a consulta será:

SELECT ROLL_NO, NAME FROM STUDENT;
ROLLL_NO NAME
1 RAM
2 RAMESH
3 SUJIT
4 SURESH

Casa 2: Se quisermos recuperar ROLL_NO e NOME dos alunos cujo ROLL_NO é superior a 2, a consulta será

SELECT ROLL_NO, NAME FROM STUDENT WHERE ROLL_NO>2;
ROLLL_NO NAME
3 SUJIT
4 SURESH

CASE 3: Se quisermos recuperar todos os atributos dos estudantes, podemos escrever * no lugar de escrever todos os atributos como:

SELECT * FROM STUDENT WHERE ROLL_NO>2;
ROLLL_NO NAME ADDRESS PHONE AGE
3 SUJIT ROHTAK 9156253131 20
4 SURESH DELHI 9156768971 18

CASE 4: Se quisermos representar a relação em ordem ascendente por IDADE, podemos usar a cláusula ORDER BY como:

SELECT * FROM STUDENT ORDER BY AGE;
ROLLL_NO NAME ADDRESS PHONE AGE
1 RAM DELHI 9455123451 18
2 RAMESH GURGAON 9652431543 18
4 SURESH DELHI 9156768971 18
3 SUJIT ROHTAK 9156253131 20

Nota: ORDEM POR IDADE é equivalente à ORDEM POR IDADE ASC. Se quisermos recuperar os resultados por ordem decrescente de IDADE, podemos usar ORDEM POR IDADE DESC.

CASE 5: Se pretendemos recuperar valores distintos de um atributo ou grupo de atributos, DISTINCT é utilizado como em:

SELECT DISTINCT ADDRESS FROM STUDENT;

ADDRESS

br>>p>DELHIbr>>p>GURGAONbr>>p>>ROHTAKbr>>p>Se o DISTINCT não for utilizado, o DELHI será repetido duas vezes no conjunto de resultados. Antes de compreender GROUP BY e HAVING, precisamos de compreender as funções de agregação em SQL.

FUNÇÕES DEAGRAVAÇÃO: As funções de agregação são utilizadas para realizar operações matemáticas sobre valores de dados de uma relação. Algumas das funções de agregação comuns utilizadas em SQL são:

    li> COUNT: A função de contagem é utilizada para contar o número de linhas numa relação. por exemplo;
SELECT COUNT (PHONE) FROM STUDENT;

p>COUNT(PHONE)br>>>br>>>ul>>>li> SUM: A função SUM é utilizada para adicionar os valores de um atributo numa relação. Por exemplo;

SELECT SUM (Age) FROM STUDENT;

br>>p>>SUM(AGE)br>>>br>>p> da mesma forma, MIN, MAX e AVG podem ser utilizados. Como vimos acima, todas as funções de agregação retornam apenas 1 fila.

AVERAGE: Fornece os valores médios dos tupples. Também é definido como soma dividida por valores de contagem.
Sintax:AVG(attributename)
OR
Syntax:SUM(attributename)/COUNT(attributename)
A sintaxe acima mencionada também recupera o valor médio dos tupples.

p>MAXIMUM:Extrai o valor máximo entre o conjunto de tupples.
Sintaxe:MAX(attributename)p>MINIMUM:Extrai o valor mínimo entre o conjunto de todos os tupples.
Sintaxe:MIN(attributename)p>GRUPO POR: Agrupar por é utilizado para agrupar os tupples de uma relação baseada num atributo ou grupo de atributo. É sempre combinado com a função de agregação que é calculada em grupo. por exemplo;

SELECT ADDRESS, SUM(AGE) FROM STUDENTGROUP BY (ADDRESS);

Nesta consulta, SUM(AGE) será calculado mas não para toda a tabela mas para cada endereço. ou seja; soma de AGE para endereço DELHI(18+18=36) e de forma semelhante também para outros endereços. A saída é:

ADDRESS SUM(AGE)
DELHI 36
GURGAON 18
ROHTAK 20

Se tentarmos executar a consulta indicada abaixo, resultará em erro porque embora tenhamos calculado SUM(AGE) para cada endereço, há mais de 1 ROLL_NO para cada endereço que agrupámos. Portanto, não pode ser exibido no conjunto de resultados. Precisamos de utilizar funções agregadas nas colunas após a declaração SELECT para dar sentido ao conjunto resultante sempre que utilizarmos GROUP BY.

SELECT ROLL_NO, ADDRESS, SUM(AGE) FROM STUDENTGROUP BY (ADDRESS); 

NOTE: Um atributo que não faça parte da cláusula GROUP BY não pode ser utilizado para selecção. Qualquer atributo que faça parte da cláusula GROUP BY CLAUSE pode ser utilizado para selecção, mas não é obrigatório. Mas poderíamos utilizar atributos que não fazem parte da cláusula GROUP BY numa função agregada.
Quiz em SQL

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *