consultas basicas sql server 2012

Upload: theguille

Post on 06-Jul-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/18/2019 Consultas Basicas SQL Server 2012

    1/8

    02/03/

    Construir la base de datos

    EmpresaIng. Martín Leiva Castillo

    [email protected]

    1. Abrir el Microsoft SQL Server Management Studio

    2. Conectarse a SQL Server

    3. Abrir el archivo: 1. creaBaseDatosEmpresa_2016.sql

    4. Ejecutar con F5

    5. Cerrar la ventana de consultas

    6. Abrir el archivo: 2. llenaBaseDatosEmpresa_2016.sql

    7. Ejecutar con F5

    8. Cerrar la ventana de consultas

    9. Crear un diagrama de base de datos con las tablas creadas

    10. Abrir una nueva ventana de consultas para ejecutar las

    consultas

    Pasos

    Base de datos

    Empresa

    Consultas básicas con SQL 

  • 8/18/2019 Consultas Basicas SQL Server 2012

    2/8

    02/03/

    Sintaxis básica:

    Listando todas las columnas y todas las filas

    Listando algunas columnas

    SELECT… FROM

    SELECT

    FROM

    WHERE ;

    SELECT *

    FROM Empleado

    SELECT nss_Emp, apellidoPat_Emp, apellidoMat_Emp, nombres_Emp

    FROM Empleado

    Listando algunas columnas y filtrando filas:

    Con más de una condición:

    SELECT… FROM… WHERE

    SELECT nss_Emp, apellidoPat_Emp, apellidoMat_Emp, nombres_Emp

    FROM Empleado

    WHERE situacion_Emp='C' ;

    SELECT nss_Emp, apellidoPat_Emp, apellidoMat_Emp, nombres_Emp

    FROM Empleado

    WHERE situacion_Emp='C' AND sexo_Emp=0 ;

    SELECT nss_Emp, apellidoPat_Emp, apellidoMat_Emp, nombres_Emp

    FROM Empleado

    WHERE estado_Emp IN ('V', 'A') AND telefonos_Emp IS NULL ;

    Listar los empleados que ingresaron a trabajar el 13 de marzo

    de 1995

    Listar los dependientes que nacieron en el año 2000

    Consultas con fechas

    SELECT apellidoPat_Emp,apellidoMat_Emp,nombres_Emp,fechaIng_Emp

    FROM Empleado

    WHERE fechaIng_Emp = '13/03/1995' ;

    SELECT apellidoPat_Depe,apellidoMat_Depe,nombres_Depe,fechaNac_Depe

    FROM Dependiente

    WHERE fechaNac_Depe >= '01/01/2000'  AND fechaNac_Depe

  • 8/18/2019 Consultas Basicas SQL Server 2012

    3/8

    02/03/

    Ordenando por una columna

    Ordenando por más de una columna

    Ejemplo de ordenación

    SELECT nss_Emp, nombres_Emp, apellidoPat_Emp

    FROM Empleado

    ORDER BY nombres_Emp ASC ;

    SELECT nss_Emp, nombres_Emp, apellidoPat_Emp

    FROM Empleado

    ORDER BY nombres_Emp DESC ;

    SELECT nss_Emp, nombres_Emp, apellidoPat_Emp

    FROM Empleado

    ORDER BY nombres_Emp DESC, apellidoPat_Emp  ASC ;

    NULL es un marcador especial usado en SQL para indicar que

    no existe un valor dentro de una base de datos

    Representa información “desconocida” o “no aplicable” , y puede

    ser asignado como valor a cualquier columna de una tabla

    Si el valor de una columna es opcional, quiere decir, que

    podemos insertar una fila en la tabla sin asignarle ningún valor

    a esa columna opcional, así que esa columna tomará el valor

    NULL

    NULL es un valor especial, y por tanto, no se puede comparar

    con los operadores aritméticos normales (=, >,

  • 8/18/2019 Consultas Basicas SQL Server 2012

    4/8

    02/03/

    Listar los empleados cuyo nombre tiene la palabra “ci”

    Listar los proyectos cuyo nombre tenga como tercer carácter la

    letra “o”

    Listar los empleados cuyo apellido paterno tenga sólo tres

    caracteres

    Otros ejemplos con LIKE

    SELECT *

    FROM Empleado

    WHERE nombres_Emp LIKE '%ci%';

    SELECT *

    FROM Proyecto

    WHERE nombre_Pro LIKE '__o%';

    SELECT *

    FROM Empleado

    WHERE apellidoPat_Emp LIKE '___';

    Listar los empleados cuyo nombre NO tiene la palabra “ci”

    Listar los proyectos cuyo nombre NO tenga como tercer carácter

    la letra “o”

    Listar los empleados cuyo apellido paterno NO tenga tres

    caracteres

    Ejemplos con NOT LIKE

    SELECT *

    FROM Empleado

    WHERE nombres_Emp NOT LIKE '%ci%';

    SELECT *

    FROM Proyecto

    WHERE nombre_Pro NOT LIKE '__o%';

    SELECT *

    FROM Empleado

    WHERE apellidoPat_Emp NOT LIKE '___';

    Se utiliza la operación: INNER JOIN

    Consiste en combinar cada fila de una tabla con cada fila de la

    otra tabla, seleccionando aquellas filas que cumplan una

    determinada condición

    La condición recibe el nombre de condición de reunión, a

    diferencia de la condición que se especifica en la cláusula

    WHERE y que recibe el nombre de condición de selección

    La consulta tendrá resultados siempre que haya concordancia

    de valores en un campo común

    Se pueden tener más de una operación INNER JOIN en unacláusula FROM

    Se puede combinar filas de una misma tabla

    Consultas multitabla Combinaciones internas

    SELECT d.numero_Dep, nombre_Dep, nombre_Pro, presupuesto_ProFROM Departamento d INNER JOIN Proyecto p ON d.numero_Dep=p.numero_Dep

    WHERE vigencia_Dep=1

    Aquella en la que los valores de las columnas que se están

    combinando se comparan mediante un operador de

    comparación

  • 8/18/2019 Consultas Basicas SQL Server 2012

    5/8

    02/03/

    Se utilizan para simplificar las sentencias SQL

    Hay dos tipos de alias:

    Alias de columna

    Alias de tabla

    Ejemplo usando alias de columna:

    Uso de Alias

    SELECT Departamento.numero_Dep, nombre_Dep AS departamento, nombre_Pro AS proyecto

    FROM Departamento INNER JOIN Proyecto

    ON Departamento.numero_Dep = Proyecto.numero_Dep

    WHERE estado_Pro='E' ;

    Ejemplo usando alias de columna y de tabla:

    Uso de alias de tabla

    SELECT d.numero_Dep, nombre_Dep AS departamento , nombre_Pro AS proyecto

    FROM Departamento d INNER JOIN Proyecto p ON d.numero_Dep = p.numero_Dep

    WHERE estado_Pro='E' ;

    Se pueden utilizar varios INNER JOIN en la cláusula FROM de una

    consulta

    Cada INNER JOIN reúne dos tablas o resultados de otras reuniones

    y deben estar separadas por paréntesis

    Por ejemplo, listar los apellidos y nombres de los empleados que

    trabajan en el proyecto ProductoX:

    Reuniendo más de dos tablas

    SELECT apellidoPat_Emp,apellidoMat_Emp,nombres_Emp

    FROM (Empleado e INNER JOIN  Asignacion a ON e.nss_Emp=a.nss_Emp)

    INNER JOIN Proyecto p ON a.numero_Pro=p.numero_Pro

    WHERE nombre_Pro='ProductoX';

    Combinaciones externas

    Las combinaciones internas sólo devuelven filas cuando hay una

    fila de ambas tablas, como mínimo, que coincide con la

    condición de la combinación

    Las combinaciones externas devuelven todas las filas de una de

    las tablas mencionadas en la cláusula FROM

    Pueden ser:

    LEFT OUTER JOIN o LEFT JOIN

    RIGHT OUTER JOIN o RIGHT JOIN

    FULL OUTER JOIN o FULL JOIN

  • 8/18/2019 Consultas Basicas SQL Server 2012

    6/8

    02/03/

    Combinación externa izquierda Se recuperarán todas las filas de la tabla izquierda a la que se

    haya hecho referencia en la cláusula FROM

    Si no se encuentra coincidencia con la tabla de la derecha, la

    fila muestra los campos de la segunda tabla seteados a NULL

    SELECT d.numero_Dep, nombre_Dep, nombre_Pro, presupuesto_Pro

    FROM Departamento d LEFT JOIN Proyecto p ON d.numero_Dep=p.numero_Dep

    WHERE vigencia_Dep=1

    Combinación externa derecha Se recuperarán todas las filas de la tabla derecha a la que se

    haya hecho referencia en la cláusula FROM

    Si no se encuentra coincidencia con la tabla de la izquierda, la

    fila muestra los campos de la primera tabla seteados a NULL

    SELECT nombre_Pro, presupuesto_Pro,nombre_Dis

    FROM Proyecto p RIGHT JOIN Distrito d ON p.codigo_Dis=d.codigo_Dis

    WHERE codigo_Prov=1

    Combinación externa completa

    Incluye en el resultado todas las filas de ambas tablas, con

    independencia de que la otra tenga o no un valor coincidente

    SELECT e.nss_Emp,apellidoPat_Emp,apellidoMat_Emp,nombres_Emp,nombre_Dep

    FROM Empleado e FULL JOIN Departamento d ON e.numero_Dep=d.numero_Dep

    Se utiliza la cláusula DISTINCT

    Especifica que los registro con datos duplicados sean obviados

    en el resultado

    Un ejemplo con filas duplicadas:

    Suprimiendo las filas duplicadas:

    Suprimiendo filas duplicadas

    SELECT estado_Emp

    FROM Empleado;

    SELECT DISTINCT estado_Emp

    FROM Empleado;

  • 8/18/2019 Consultas Basicas SQL Server 2012

    7/8

    02/03/

    Se utiliza la cláusula: TOP n

    Permite obtener sólo una cantidad limitada de filas

    Lista las “n” primeras filas del resultado de una consulta

    Lista todas las filas:

    Listas las tres primeras filas, según la columna de ordenamiento:

    Listando los “n” primeros

    SELECT apellidoMat_Emp, apellidoPat_Emp, nombres_Emp, salario_Emp

    FROM Empleado

    WHERE numero_Dep=3

    ORDER BY salario_Emp DESC

    SELECT TOP 3 apellidoMat_Emp, apellidoPat_Emp, nombres_Emp, salario_Emp

    FROM Empleado

    WHERE numero_Dep=3

    ORDER BY salario_Emp DESC

    Su utiliza la cláusula: WITH TIES

    Se aplica con el operador ORDER BY

    Lista las “n” primeras filas del resultado de una consulta, y si

    hay empate en el ordenamiento también lo muestra

     TOP con empate

    SELECT TOP 3 WITH TIES apellidoMat_Emp, apellidoPat_Emp, nombres_Emp, salario_Emp

    FROM Empleado

    WHERE numero_Dep=3

    ORDER BY salario_Emp DESC

    Devuelve el primer porcentaje especificado de las filas del

    conjunto de resultados

     TOP… PERCENT 

    SELECT numero_Pro, nombre_Pro, presupuesto_Pro

    FROM Proyecto

    ORDER BY presupuesto_Pro DESC ;

    SELECT TOP 50 PERCENT numero_Pro, nombre_Pro, presupuesto_Pro

    FROM Proyecto

    ORDER BY presupuesto_Pro DESC ;

    SELECT TOP 50 PERCENT WITH TIES numero_Pro, nombre_Pro, presupuesto_Pro

    FROM Proyecto

    ORDER BY presupuesto_Pro DESC ;

    Se usa el operador +

    Concatena dos o más cadenas de caracteres

    Para eliminar los espacios en blanco entre los apellidos y

    nombres, se usa la función RTRIM (a la derecha) o también

    LTRIM (a la izquierda)

    Concatenación de cadenas

    SELECT e.nss_Emp,

    apellidoPat_Emp + ' ' + apellidoMat_Emp + ' ' + nombres_Emp  AS nombre,

    nombre_Dep

    FROM Empleado e INNER JOIN Departamento d ON e.numero_Dep=d.numero_Dep

    SELECT e.nss_Emp,

    RTRIM(apellidoPat_Emp )+ ' ' + RTRIM(apellidoMat_Emp) + ' ' + nombres_Emp AS nombre,

    nombre_Dep

    FROM Empleado e INNER JOIN Departamento d ON e.numero_Dep=d.numero_Dep

  • 8/18/2019 Consultas Basicas SQL Server 2012

    8/8

    02/03/

    Evalúa una lista de condiciones y devuelve una de las

    expresiones de resultado posible

    Ejemplo 1:

    Uso de CASE

    SELECT RTRIM(apellidoPat_Emp )+ ' ' + RTRIM(apellidoMat_Emp) + ' ' + nombres_Emp AS nombre,

    sexo= CASE sexo_Emp

    WHEN 1 THEN 'Masculino'

    ELSE 'Femenino'

    END

    FROM Empleado

    WHERE estado_Emp IN ('C','V')

    Ejemplo 2:

    Uso de CASE

    SELECT RTRIM(apellidoPat_Emp )+ ' ' + RTRIM(apellidoMat_Emp) + ' ' + nombres_Emp AS nombre,

    CASE estado_Emp

    WHEN 'A' THEN 'Activo'

    WHEN 'V' THEN 'Vacaciones'

    ELSE 'Cesante'

    END AS estado

    FROM Empleado

    WHERE situacion_Emp = 'N'

    Ejemplo 3:

    Uso de CASE

    SELECT RTRIM(apellidoPat_Emp )+ ' ' + RTRIM(apellidoMat_Emp) + ' ' + nombres_Emp AS nombre,

    Salario_Emp,

    salario = CASE

    WHEN salario_Emp 1000 and salario_Emp 3000 and salario_Emp