Está en la página 1de 26

Lenguaje SQL

Clase 3
SQL: STRUCTURED QUERY LANGUAGE
◼ Los ejemplos anteriores muestran un ejemplo sencillo del SQL, para
hacer consultas más elaboradas se requiere conocer la
sintaxis del SQL:

SELECT [DISTINCT | ALL]


{* | [columnExpression [AS newName]] [,...] }
FROM TableName [alias] [, ...]
[WHERE condition]
[GROUP BY columnList]
[HAVING condition]
[ORDER BY columnList]
El estatuto SELECT
SELECT
Especifica las columnas a mostrar en el resultado
FROM
Especifica la(s) tabla(s) a utilizar.
WHERE
Filtra renglones de acuerdo a la condición especificada.
GROUP BY
Forma grupos de renglones con el mismo valor en la columna
HAVING
Filtra grupos de acuerdo a la condición especificada.
ORDER BY
Especifica como ordenar el resultado.
Evitar tuplas duplicadas
Mostrar en que ciudades
hay clientes

Se repiten las ciudades

Usar DISTINCT
No se repiten
Verificando valores NULL
◼ Obtener Id del cliente, nombre de la compañía y la Region
para aquellos clientes cuya Region sea NULL

Null
Valor que significa
que al atributo no
se le asignó un valor
o se le asignó NULL
Verificando valores NOT NULL
◼ Obtener Id del cliente, nombre de la compañía y la Region
para aquellos clientes cuya Region tenga un valor asignado
Uso de Funciones

IMPORTANTE

◼ Las funciones COUNT, MIN, MAX, SUM, AVG


sólo
pueden usarse en
◼ SELECT

◼ HAVING (se verá más adelante)


Count y Group by
◼ Se obtiene el número de productos que existen de cada categoría
ID o nombre?
◼ El tener un número de categoría no indica nada, es mejor poner el
nombre de la categoría como en el resultado siguiente:

◼ Pero, como se escribe el query? Con un JOIN entre la llave foránea FK


IDCategory y la llave Primaria Categories(IDCategory)
Join
◼ El nombre de la categoría está en la
tabla Categories y nuestra consulta
utiliza la tabla de Productos
◼ Poner en el query las 2 tablas y
especificar una condición donde
la FK=PK
Join entre 2 tablas
Nombre del producto, Id de categoría y Nombre de la categoría

FK

PK
Count, Group by, Having
◼ número de productos existentes de cada categoría para los
que el número de productos sea menor a 10
Count, Group by, Having, alias
◼ número de productos existentes de cada categoría para los
que el número de productos sea menor a 10
◼ Se utilizan alias para las tablas
Union
◼ Obtener todos los países donde hay un cliente o un
proveedor
Interseccion
◼ Obtener todos los países donde hay proveedores y clientes
Diferencia (Except)
◼ Obtener los países donde hay ◼ Obtener los países donde sólo
proveedores, pero no hay hay clientes y no hay provedores
clientes
Queries Anidados
◼ Encuentre los alumnos que tienen una especialidad (major) en
computer science y en electrical engineering.

select id, name


from cse_majors
where id in
( select id
from eee_majors)

Evaluacion:
(1) query anidado
(2) query externo utilizando los resultados del query interno
Subqueries
◼ Encuentre los empleados que no han tomado algun curso
◼ SQL: select name
from emp E emp(id, name)
where not exists takes( id, crsid, date)
(select * course(crsid, name)
from takes T
where T.id = E.id)
Para cada tupla de empleado, el query anidado selecciona todas las
tuplas de TAKES cuyo ID es igual al ID del empleado; Si el resultado
del subquery está vacío, entonces significa que el empleado no ha
tomado algun curso y entonces esa tupla se incluye en el resultado.

EXISTS subquery: VERDADERO si el subquery SI regresa tuplas


FALSO si el subquery no regresa tuplas

NOT EXISTS subquery = NOT(EXISTS subquery)


Tipos de datos - categorías

Numéricos exactos

Numéricos aproximados

Fecha y hora

Cadenas de caracteres

Cadenas binarias

Cadenas de caracteres Unicode

Otros tipos de datos

◼ Tipos de datos de valores


grandes: varchar(max), nvarchar(max) y varbinary(max)
◼ Tipos de datos de objetos
grandes: text, ntext, image, varchar(max), nvarchar(ma
x), varbinary(max) y xml
Tipos de datos - categorías
Numéricos exactos

bigint

numeric

bit

smallint

decimal

smallmoney

INT

tinyint

Money

Numéricos aproximados

float

real
Tipos de datos - categorías
Fecha y hora

date

datetimeoffset

datetime2

smalldatetime

datetime

time

Cadenas de caracteres

char

varchar

text
Tipos de datos - categorías
Cadenas binarias

binary

varbinary

image

Otros tipos de datos



cursor

timestamp

hierarchyid

uniqueidentifier

sql_variant

xml

tabla
Tipos de datos - categorías
◼ Bit
◼ Tipo de datos entero que puede aceptar los valores 1, 0 o NULL.
◼ decimal
◼ decimal [ (p[ ,s] )] y numeric[ (p[ ,s] )]Números de precisión y

escala fijas. Cuando se utiliza la precisión máxima, los valores


válidos se sitúan entre - 10^38 +1 y 10^38 - 1
◼ p (precisión)El número total máximo de dígitos decimales que
almacenará, tanto a la izquierda como a la derecha del separador
decimal.
◼ s (escala)El número de dígitos decimales que se almacenará a la
derecha del separador decimal.
Tipos de datos - categorías
◼ Money / smallmoney


INT
Tipos de datos - categorías

Unicode es el estándar de codificación de caracteres universal
utilizado para la representación de texto. Proporciona una manera
consistente de codificación de texto multilingüe y facilita el
intercambio de archivos de texto internacionales.

nchar

nvarchar

ntext

◼ text
◼ Datos no Unicode de longitud variable y con una longitud máxima

de cadena de 2^31-1 (2.147.483.647).


Tipos de datos - categorías
◼ char [ ( n ) ]
◼ Datos de cadena no Unicode de longitud fija. n define la longitud

de la cadena y debe ser un valor entre 1 y 8.000. El tamaño de


almacenamiento es de n bytes.
◼ varchar [ ( n | max ) ]
◼ Datos de cadena no Unicode de longitud variable. n define la

longitud de la cadena y puede ser un valor entre 1 y


8.000. max indica que el tamaño máximo de almacenamiento es de
2^31-1 bytes (2 GB). El tamaño de almacenamiento es la longitud
real de los datos especificados + 2 bytes.

◼ Date / Datetime / time

También podría gustarte