Computación e Informatica Transact-SQL • • • SQL es un lenguaje de consulta para los sistemas de bases de datos relaciónales, pero que no posee la potencia de los lenguajes de programación. No permite el uso de variables, estructuras de control de flujo, bucles ... y demás elementos característicos de la programación. No es de extrañar, SQL es un lenguaje de consulta, no un lenguaje de programación. EL EMENTO S DE Tran sact-S QL Al escribir y ejecutar sentencias Transact-SQL usará: Declaraciones del Data Control Language (DCL) que se utilizan para determinar quién ve o modifica los datos. Declaraciones del Data Definition Language (DDL) que se usan para crear los objetos en la base de datos. Declaraciones del Data Manipulation Language (DML) que se usan para consultar y modificar los datos. Elementos adicionales del lenguage como: variables, operadores, funciones, sentencias de control de flujo, y comentarios. 1. Declaraciones del Data Control Language (DCL) Las declaraciones del DCL se usan para cambiar los permisos o roles asociados con un usuario de la base de datos. La tabla siguiente describe las declaraciones de DCL. Sentencia Descripción GRANT Crea una entrada en la seguridad del sistema que le permite a un usuario trabajar con los datos o ejecutar ciertas sentencias Transact-SQL. DENY Crea una entrada en la seguridad del sistema negando un permiso de una cuenta de seguridad y evita que el usuario, grupo, o rol herede el permiso a través de su grupo y rol. REVOKE Quita un permiso previamente concedido o negado. Por defecto, sólo miembros con roles sysadmin, dbcreator, db_owner o db_securityadmin pueden ejecutar las declaraciones DCL. 2. Declaraciones del Data Definition Language (DDL) Las declaraciones de DDL permiten crear bases de datos, tablas, y tipos de datos definidos por usuarios. También se usan para manejar los objetos de la base de datos. Algunas declaraciones de DDL son: CREATE DATABASE ALTER DATABASE CREATE TABLA ALTER TABLA DROP DATABASE DROP TABLA CREATE INDEX DROP INDEX - crea una nueva base de datos modifica una base de datos crea una nueva tabla modifica una tabla Borra una Base de Datos Borra una tabla crea un índice borra un índice Por defecto, solo miembros de los roles sysadmin, dbcreator, db_owner, o db_ddladmin pueden ejecutar las declaraciones DDL. En general, se recomienda que ninguna otra cuenta se use para crear los objetos de la base de datos. Si diferentes usuarios crean sus propios objetos en una base de datos, cada Curso: Base de Datos - 1- Ing. Fabián Silva Alvarado Computación e Informatica dueño de objeto debe conceder los permisos apropiados a cada usuario de esos objetos. Esto causa una sobrecarga administrativa y debe evitarse. Ej e m pl o DROP TABLE La sentencia DROP TABLE sirve para eliminar una tabla. No se puede eliminar una tabla si está abierta, tampoco la podemos eliminar si el borrado infringe las reglas de integridad referencial (si interviene como tabla padre en una relación y tiene registros relacionados). Curso: Base de Datos - 2- Ing. Fabián Silva Alvarado Computación e Informatica 3. Declaraciones del Data Manipulation Language (DML) Las declaraciones DML trabajan con la data de la base de datos. Las declaraciones DML incluyen: SELECT INSERT INTO UPDATE DELETE – – – – extrae los datos de la Base de datos inserta nuevos datos en una base de datos modifica los datos de la Base de datos borras los datos de la Base de datos Por defecto solamente miembros de los roles sysadmin, dbcreator, db_owner o db_datawriter pueden ejecutar sentencias DML. La sentencia SELECT La sentencia SELECT es utilizada para extraer datos de una base de datos. El resultado es almacenado en una tabla de resultados, llamada el resultado-set. Sintaxis SELECT column_name(s) FROM tabla_name y SELECT * FROM tabla_name Note: SQL no es sensible a las mayúsculas. SELECT es lo mismo que select. TABLA: DIRECTOR Ejemplo SELECT column_name(s) Se seleccionará el contenido de las columnas llamadas "dir_nomb" y "dir_fnac" de la tabla. Se usa la siguiente sentencia SELECT: El conjunto de resultados es: Curso: Base de Datos - 3- Ing. Fabián Silva Alvarado Computación e Informatica Ejemplo SELECT * Seleccionaremos todas las columnas de la tabla “DIRECTOR”. Se usa la siguiente sentencia SELECT: Tip: el asterisco (*) es el camino rápido para seleccionar todas las columnas El conjunto de resultados es: La navegación por el set de resultados La sentencia SELECT DISTINCT En una tabla, algunas de las columnas podrían contener valores duplicados. Este no es un problema, sin embargo, a veces, usted querrá lista sólo los diferentes (distintos) valores de una tabla. La palabra clave DISTINCT puede ser utilizada para regresar sólo distintos (diferentes) valores. Sintaxis: SELECT DISTINCT column_name(s) FROM tabla_name Ejemplo: La Tabla “DIRECTOR”: Se seleccionarán solo los valores distintos de la columna llamada "pai_codi" desde la tabla. Se usa la siguiente sentencia SELECT: El conjunto de resultados es: Curso: Base de Datos - 4- Ing. Fabián Silva Alvarado Computación e Informatica La cláusula TOP La cláusula TOP es usada para especificar la cantidad de registros que retornara la consulta. Nota: No todos los sistemas de Base de datos soportan la cláusula top. SQL Server Sintaxis SELECT TOP number|percent column_name(s) FROM tabla_name Ejemplo: La Tabla “DIRECTOR” Se pedirá solo los dos primeros registros de la tabla. Se usa la siguiente sentencia SELECT: El conjunto de resultados es: Se seleccionará solo el 50% de los registros de la tabla. Se usa la siguiente sentencia SELECT: El conjunto de resultados es: Curso: Base de Datos - 5- Ing. Fabián Silva Alvarado Computación e Informatica ORDER BY La palabra clave ORDER BY es utilizada para ordenar el set de resultado por una columna específica. La palabra clave ORDER BY ordenar los registros en orden ascendente por defecto. Si usted quiere ordenar los registros en un orden descendente, se usa el DESC clave. Sintaxis SELECT column_name(s) FROM tabla_name ORDER BY column_name(s) ASC|DESC Ejemplo La Tabla “DIRECTOR”: Se seleccionará todos los directores desde la tabla y se ordenará la lista por su apellido. Se usa la siguiente sentencia SELECT: El conjunto de resultados es: Ejemplo ORDER BY DESC Se seleccionará todas las personas desde la tabla y se ordenará la lista por su apellido de manera descendente. Se usa la siguiente sentencia SELECT: El conjunto de resultados es: Curso: Base de Datos - 6- Ing. Fabián Silva Alvarado Computación e Informatica La cláusula WHERE La cláusula WHERE es utilizada para extraer sólo los registros que cumplen un criterio. Sintaxis SELECT column_name(s) FROM tabla_name WHERE column_name operator value Ejemplo: La Tabla “Director”: Se seleccionará solo los directores que sean del país con código 502 Se usa la siguiente sentencia SELECT: El conjunto de resultados es: También podemos emplear la cláusula WHERE para hacer una consulta empleando 2 tablas: Ejemplo Se seleccionará los campos dir_codi, dir_nomb, dir_tele de la Tabla “Director” y el campo pai_nomb de la tabla “PAIS” Se usa la siguiente sentencia SELECT: El conjunto de resultados es: También podemos utilizar Alias para las tablas: Curso: Base de Datos - 7- Ing. Fabián Silva Alvarado Computación e Informatica Comillas en los campos de textos SQL usa comillas simples en los valores de los campos de textos . Mientras tanto los valores numéricos no están encerrados entre comillas. Se seleccionará solo los directores que sean del país EEUU Operadores permitidos en la cláusula WHERE OPERADOR = <> > < >= <= BETWENN LIKE IN DESCRIPCION Igual Distinto Mayor que Menor que Mayor o igual Menor o igual Incluido en un rango Filtrado por un patrón Utilizado cuando se conoce exactamente los valores que se espera que retorne de una columna Note: En algunas versiones el símbolo de distinto no es e <> sino que podría escribirse como != El operador LIKE Es usado para buscar por un patrón en una columna. SQL LIKE Sintaxis SELECT column_name(s) FROM tabla_name WHERE column_name LIKE pattern EJEMPLO: Se seleccionará los directores cuyos nombres comiencen con “C”. Se usa la siguiente sentencia SELECT: El signo "%" puede ser usado para definir un patrón que puede ser usado antes y después del patrón El conjunto de resultados es: Curso: Base de Datos - 8- Ing. Fabián Silva Alvarado Computación e Informatica Se seleccionará los directores cuyos nombres terminen con “C”. Se usa la siguiente sentencia SELECT: El conjunto de resultados es: Se seleccionarán los directores cuyos nombres contiene un patrón “los” Se usa la siguiente sentencia SELECT: El conjunto de resultados es: Se seleccionarán los directores cuyos nombres no contiene un patrón “los”, para ello se utiliza la palabra NOT Se usa la siguiente sentencia SELECT: El conjunto de resultados es: Comodines Los comodines pueden sustituir uno o más caracteres cuando se busca en una base de datos. Son usados con el operador SQL LIKE. Lista de comodines usados: COMODIN % Un sustituto para cero o más caracteres _ Un sustituto para estrictamente un carácter [charlist] [^charlist] Curso: Base de Datos DESCRIPCION Algún carácter en la lista mostrada Algún carácter que no está en la lista mostrada - 9- Ing. Fabián Silva Alvarado Computación e Informatica Usando el comodín _ Se seleccionará los directores cuyos nombres comiencen con un carácter y continúa con “_a”. Se usa la siguiente sentencia SELECT: El conjunto de resultados es: Se seleccionará el Director cuyo nombre comienza con “c” y continúa con un carácter, sigue con “rl” otro carácter y continúa con “s”. Se usa la siguiente sentencia SELECT: El conjunto de resultados es: Usando los comodines de una lista Se seleccionará las personas con los apellidos que comienzan con „c‟ , „d‟ o „e‟. Se usa la siguiente sentencia SELECT: El conjunto de resultados es: Se seleccionará las personas con el nombre que no comienzan con „c‟ , „d‟ o „e‟. Se usa la siguiente sentencia SELECT: El conjunto de resultados es: Curso: Base de Datos - 10 - Ing. Fabián Silva Alvarado Computación e Informatica El operador IN El operador IN permite especificar múltiples valores en una cláusula WHERE SELECT column_name(s) FROM tabla_name WHERE column_name IN (value1,value2,...) Ejemplo Se seleccionará los Directores con código igual “DI003" o "DI005". Se usa la siguiente sentencia SELECT: El conjunto de resultados es: El operador BETWEEN Selecciona un rango de datos entre dos valores. El valor puede ser números, textos, o fechas. SELECT column_name(s) FROM tabla_name WHERE column_name BETWEEN value1 AND value2 Ejemplo Se seleccionarán los Directores con código entre "DI003" y"DI005". Se usa la siguiente sentencia SELECT: El conjunto de resultados es: Curso: Base de Datos - 11 - Ing. Fabián Silva Alvarado Computación e Informatica De acuerdo a los sistemas de base de datos utilizados los valores mostrados pueden incluir los valores solicitados o excluirlos, o puede incluir el primero y excluir el último. Se seleccionarán los Directores que están fuera del rango entre "DI003" y"DI005". El conjunto de resultados es: Se seleccionarán los Directores cuya fecha de nacimiento este comprendida en los años 1970 y 1975. Operador AND & OR El operador AND muestra un registro si la primera y la segunda condición son verdaderas. El operador OR muestra un registro en donde la primera condición o la segunda condición son verdaderas. Ejemplo AND Seleccionar sólo los directores que su nombre empiece con “C” y sea de sexo “F” Se usa la siguiente sentencia SELECT: El conjunto de resultados es: Ejemplo OR Seleccionar solo los Directores cuyos nombres comiencen con “D” o “C” Se usa la siguiente sentencia SELECT: El conjunto de resultados es: Curso: Base de Datos - 12 - Ing. Fabián Silva Alvarado Computación e Informatica Seleccionar los Directores que no tienen registrado teléfono ni Email Se usa la siguiente sentencia SELECT: El conjunto de resultados es: Seleccionar los Directores que no tienen registrado teléfono o Email. Se usa la siguiente sentencia SELECT: El conjunto de resultados es: Combinando AND & OR Se puede combinar AND y OR (usar paréntesis parar formar expresiones complejas). Seleccionar solo las Directores cuyos apellidos comiencen con “d” o “r” registrado un número telefónico. y que no tengan Se usa la siguiente sentencia SELECT: El conjunto de resultados es: Curso: Base de Datos - 13 - Ing. Fabián Silva Alvarado Computación e Informatica JOIN La palabra clave JOIN es usada en las sentencias SQL para consultar tablas de dos o más tablas, basada sobre una relación entre columnas de estas tablas Una tabla en la base de datos menudo son relacionadas a otra con una clave (PK, FK) Una Clave Primaria PK es una columna ( o combinación de columnas) con un único valor distinto para cada fila. Cada valor de la PK debe ser único en cada tabla. El propósito es el de vincular datos juntos cruzando tablas, sin repetir todos los datos en cada tabla. La Tabla “PAIS”: Notar que la columna pai_codi es la clave primaria en la tabla “Pais”. Esto significa que dos filas no pueden tener el mismo pai_codi. La Tabla “DIRECTOR”: Notar que la columna dir_codi es la clave primaria en la tabla Director y que la columna pai_codi hace referencia a los países en la tabla Director sin usar sus nombres. La relación entre las dos tablas está dada por la columna "pai_codi". Diferentes tipos de SQL JOINs Antes de continuar con ejemplos, se listaran los tipos de JOIN que pueden ser usados y la diferencia entre ellos. JOIN: Retorna las filas cuando hay al menos una concordancia entre ambas tablas LEFT JOIN: Retorna todas las filas desde la tabla de la izquierda, aunque no haya coincidencias en la tabla derecha RIGHT JOIN: Retorna todas las filas desde la tabla de la derecha ,aunque no haya coincidencias en la tabla izquierda FULL JOIN: Retorna filas cuando hay una coincidencia en una de las tablas Curso: Base de Datos - 14 - Ing. Fabián Silva Alvarado Computación e Informatica Palabra clave INNER JOIN La palabra clave INNER JOIN retorna filas cuando hay al menos una coincidencia en ambas tablas. Sintaxis SELECT column_name(s) FROM tabla_name1 INNER JOIN tabla_name2 ON tabla_name1.column_name=tabla_name2.column_name PS: INNER JOIN es lo mismo que JOIN. SQL INNER JOIN Ejemplo Se listara los países que tengan al menos un director registrado. Se usa la siguiente sentencia SELECT: El conjunto de resultados es: La palabra clave INNER JOIN retorna las filas si hay al menos una coincidencia en ambas tablas. Si hay filas en "Pais" que no tienen coincidencias en "Director", estas filas NO serán listadas. Palabra clave LEFT JOIN La palabra clave LEFT JOIN retorna todas las filas desde la tabla de la izquierda (tabla_name1), siempre que no haya coincidencias en la tabla derecha (tabla_name2). Sintaxis SELECT column_name(s) FROM tabla_name1 LEFT JOIN tabla_name2 ON tabla_name1.column_name=tabla_name2.column_name Nota: En algunas bases de datos la palabra clave LEFT JOIN es llamada LEFT OUTER JOIN. Curso: Base de Datos - 15 - Ing. Fabián Silva Alvarado Computación e Informatica LEFT JOIN Ejemplo Se listara todos los países y Directores, si este existe. Se usa la siguiente sentencia SELECT: El conjunto de resultados es: La palabra clave LEFT JOIN retorna todas las filas desde la tabla izquierda (Personas), aunque no haya coincidencia en la tabla derecha (Orden). Palabra clave RIGHT JOIN La palabra clave RIGHT JOIN retorna todas las filas desde la tabla derecha (tabla_name2), aunque no haya coincidencia en la tabla izquierda (tabla_name1). RIGHT JOIN Sintaxis SELECT column_name(s) FROM tabla_name1 RIGHT JOIN tabla_name2 ON tabla_name1.column_name=tabla_name2.column_name Nota: En algunas bases de datos la palabra calve RIGHT JOIN es llamada RIGHT OUTER JOIN. RIGHT JOIN Ejemplo Se listara todos los Directores y países contenidos si estas existen. Se usa la siguiente sentencia SELECT: El conjunto de resultados es: La palabra clave RIGHT JOIN retorna todas las filas desde la tabla derecha (Orden), aunque no existan coincidencias en la tabla izquierda (Personas). Curso: Base de Datos - 16 - Ing. Fabián Silva Alvarado