Sie sind auf Seite 1von 55

SQL

SQL es un lenguaje de consulta estructurada, como todo lenguaje tiene una sintaxis que debe ser respetada para que se pueda interpretar. El SQL esta compuesto por comandos, clausulas, operadores y funciones de agregado. -comandos : se utilizan para crear, actualizar y manipular las bases de dato. Hay dos tipos de comandos, DLL y DML DLL: permite crear y definir nuevas bases de datos, campos e indices, ejemplo create (crear), drop (eliminar) , alter (modificar) DML : generar consultas para ordenar, filtrar y extraer datos de la Base de Datos, ejemplos Select , insert, update, delete Select: consulta datos de la BD con un criterio determinado Insert: carga lotes de datos en la BD en una sola operacin Update: modifica los valores de los campos y registros especificados Delete: elimina los registros de una BD

Clausulas: son condiciones de modificacion utilizadas para definir los datos que se desea seleccionar o manipular. From: especificar la tabla de donde se seleccionan los registros Where: especifica las condiciones que deben reunir los registros que se van a seleccionar Group by: separa los registros en grupos especificos Having: especifica la condicion que debe tener cada grupo Order BY: ordena los registros seleccionados utilizando un orden especifico

OPERADORES Son simbolos que conectan datos para realizar operaciones Pueden ser logicos o de comparacion

-Logicos: puede ser AND (y logico, dara un resultado verdadero solo si las dos expresiones son verdaderas), OR (o logico, dara resultado verdadero solo si alguna de las dos expresiones son verdaderas) y NOT es la negacion lgica, el resultado ser contrario a la expresion De COMPARACION: comparan dos variables Pueden ser <, > ,<>, <=, >=, =, BETWEEN, LIKE, IN < menor que >mayor que <>distinto que <= menor o igual que >=mayor o igual que = igual que BETWEEN: especifica un intervalo de valores LIKE: utilizado para la comparacion de un modelo IN: utilizado para especificar los registros de una BD FUNCIONES DE AGREGADO Se utiliza dentro de una clausula select en grupos de registros para devolver un unico valor que se aplica a un grupo de registros. Ejemplo AVG: calcula el promedio COUNT: el numero de registros de la seleccion SUM: es una suma de los valores de un campo determinado MAX: arroja el valor mas alto de un campo MIN: arroja el valor mas bajo de un campo

TIPO DE DATOS Los datos pueden ser BIT: booleano, si o no, V o F CHAR: secuencia de caracteres de longitud fija VARCHAR: secuencia de caracteres de longitud variable INT: nmero entero

MONEY: dato referido al dinero FLOAT: numero flotante, con coma decimal DATETIME: dato relacionado a una fecha BINARY: secuencia de Bytes PARA CREAR UNA COLUMNA Estructura: NombreColumna TipoDato (tamaodeldato)

*Dato: Infrmacin que una computadora registra y almacena.


Campo: es cada trozo discreto de informacin en un registro. Registro: es la informacin relacionada con una persona, un producto o suceso. En una BdeD un simple archivo es un conjunto de registros. Archivo: es una coleccin de informacin relacionada. En l la informacin se guarda como si fuera un archivero. Consulta: puede ser una bsqueda simple de un registro especfico o una solicitud para seleccionar todos los registros que satisfagan un conjunto de criterios.

Base de datos es un conjunto de datos pertenecientes a un mismo contexto y almacenados para su posterior uso, el uso mas frecuente del lenguaje SQL se da realizando consultas a una BD, extrayendo informacion a una persona o aplicacin.

Crear una base de datos, mediante el SQL manager 2008 se puede crear una base de
datos de dos maneras, la primera es clickeando en la ventana de servidores, donde dice base de datos y luego en nueva base de datos, le damos el nombre que queremos y luego presionamos aceptar. La segunda forma es mediante sentencias, clickeamos en donde dice base de datos, luego nos vamos a la barra de herramientas nueva consulta se despliega un escenario para escribir, escribimos create database nombre_de_basededatos y luego le damos al boton ejecutar, abajo nos saldra un mensaje donde los comandos se han ejecutado exitosamente, luego presionar actualizar arriba de donde dice Base de datos. Tambien podemos dejar comentarios con la siguiente sintaxis, --comentario o /*comentario*/

Creacion de tablas
siguiente sintaxis

para crear una tabla dentro de una base de datos hay que seguir la

USE biblioteca ------------>>> es el nombre de nuestra base de datos CREATE TABLE NombreTabla (campo 1 tipo (tamao) indice 1

--campo2 tipo (tamao) indice2 , , indice multicampo

*Un indice multicampo es aquel que esta indexado por el contenido de multiples campos Esto nos servira para ordenar la tabla y que sea mas rapido encontrar datos en ella Ejemplo de sentecia
USE biblioteca CREATE TABLE libros ( codigo INTEGER NOT NULL , signatura VARCHAR (10) NOT NULL , titulo VARCHAR (40) , autor VARCHAR (40) , disponible CHAR (1) , CONSTRAINT Pk_libros PRIMARY KEY (codigo));

Una vez que hayamos creado la Base de datos y la Tabla, solo queda aplicar, siempre y cuando querramos, restricciones a cada columna por ejemplo En la columna Signatura VARCHAR (10) NOT NULL se puede ingresar una serie de caracteres CONSTRAINT (nombre de la restriccion)

Se puede aplicar el nombre de la restriccion pero es opcional, como tambien es opcional la palabra CONSTRAINT si ya esta aplicada la restriccion en la definicion de la columna y tambien lo es el nombre de la columna asociada, ya que esta es el nombre de donde introducimos la restriccion. Ejemplo

--CONSTRAINT (nombre de la restriccion) tipo --(columna) (clausulas) * el tipo de restriccion es siempre imprescindible y son 5 tipos de restricciones

--PRIMARY KEY --UNIQUE --FOREIGN KEY --CHEK --NOT NULL

PRIMARY KEY: establece la clave primaria lo que conlleva de que el valor no puede ser nulo y debe ser unico, sin repetirse UNIQUE : obliga a que cada valor de la columna sea unico aunque no sea clave primaria

FOREIGN KEY : establece una clave externa de tal forma que la columna afectada solo puede contener uno de los valores existentes en la otra tabla CHEK: asocia a la columna una serie de comprobaciones. NOT NULL: evita que la columna quede sin contenidos

EJERCICIOS:

1. Abre el programa SQL SERVET Management Studio Express o el RDBMS que tengas instalado. 2. Conctate a tu servidor. 3. Abre una nueva consulta. 4. Crea las siguientes tablas en la base de datos biblioteca. a. Tabla socios con los campos i. nif de tipo VARCHAR, tamao 9 y que no admita campos nulos. ii. nombre de tipo VARCHAR, tamao 15 y que no admita campos nulos. iii. apellidos de tipo VARCHAR, tamao 30 y que no admita campos nulos. iv. direccion de tipo VARCHAR, tamao 30 v. cp de tipo CHAR, tamao 5 vi. alta de tipo DATETIME y que no admita campos nulos vii. Y con el campo ndice en el campo nif. b. Tabla prestamos con los campos i. id de tipo INTEGER y que no admita campos nulos. ii. nif de tipo CHAR, tamao 9 y que no admita campos nulos iii. codigo de tipo INTEGER y que no admita campos nulos iv. prestamo de tipo DATETIME y que no admita campos nulos

v. Y con el campo ndice en id 5. Ejecuta la sentencia y comprueba que las tablas se han creado. Para ello recuerda que es posible que tengas que actualizar el explorador de objetos.

USE biblioteca; CREATE TABLE socios ( nif VARCHAR (9) NOT NULL , nombre_de_tipo VARCHAR (15) NOT NULL , apellidos VARCHAR (30) NOT NULL , direccion VARCHAR (30) , cp CHAR (5) , alta_de_tipo DATETIME NOT NULL , CONSTRAINT PK_socios PRIMARY KEY (nif) ); USE biblioteca; CREATE TABLE prestamos ( Id INTEGER NOT NULL , nif CHAR (9)NOT NULL , codigo_de_tipo INTEGER NOT NULL , prestamo_de_tipo DATETIME NOT NULL , CONSTRAINT PK_prestamos PRIMARY KEY (Id) ); El ingreso de datos en una tabla se realiza donde hay un espacio en blanco y no en un lugar especifico, es por eso que si hubiera una cantidad muy grande de datos la busqueda seria bastante lenta, es por eso que se colocan indices Un indice es una secuencia ordenada de datos unicos o no, procedentes de una o mas columnas de una tabla. --CREATE (UNIQUE) INDEX nombreindice ON tabla (campo) *unique indica que no puede tener valores duplicados *index es la clausula que indica que estamos creando un objeto de tipo indice * on expresa la situacion Ejemplo USE biblioteca ; CREATE UNIQUE INDEX indicesignatura ON libros (signatura) ; Una vez creada una tabla podemos querer eliminarla, modificar como tambien a sus campos o indices; para ello tenemos que usar las clausulas adecuadas Ejemplo --ALTER TABLE tabla {ADD {COLUMN tipo de campo --[(tamao)] [CONSTRAINT ndice] -- CONSTRAINT ndice multicampo } DROP --{COLUMN campo I CONSTRAINT nombreindice}}

Creamos una tabla personas CREATE TABLE personas ( ALTER TABLE personas ADD ciudad VARCHAR (30) ;

Entonces se agrega el campo ciudad a la tabla personas, ahora

USE personas ALTER TABLE personas DROP COLUMN ciudad;

*verificar que se haya eliminado la columna ciudad. *tener en cuenta que para aadir un campo solo pusimos ADD campo y no fue necesario poner COLUMN como si sucede en DROP COLUMN campo, que es para eliminar

Para aplicar a un campo que admite valores nulos se coloca NULL al final de la sentencia, tener en cuenta que podemos declarar un campo como identity que esto hace que se inserte el siguiente elemento de la secuencia y genere un campo autoincrementable, a esto se les llama valores por defecto o predeterminados, un valor por defecto se inserta cuando no esta presente al ingresar un registro o en algunos casos en que el dato ingresado es invalido, es decir que para campos que admiten valores nulos, el campo por defecto es null, para campos que no admiten valores nulos (NOT NULL) no existen valores por defecto a menos que se declare explicitamente con la clausula default, para todos los tipos excepto los declarados identity. Podemos establecer valores por defecto para campos cuando creamos la tabla, para ello utilizamos default al definir el campo Ejemplo
USE biblioteca CREATE TABLE libros2 ( Codigo int identity , titulo VARCHAR (40) , autor VARCHAR (30) NOT NULL default 'desconocido' , editorial VARCHAR (20) , precio decimal (5,2) , cantidad tinyint default 0 );

* En MySQL 5.0.3, un tipo de datos BIT est disponible para almacenar valores de un bit. (Antes de 5.0.3, MySQL interpreta BIT como TINYINT(1).
Como extensin de los estndares SQL, MySQL soporta los tipos enteros TINYINT, MEDIUMINT, y BIGINT. La siguiente tablas muestra el almacenamiento requerido y el rango para cada uno de los tipos enteros.
Tipo TINYINT SMALLINT MEDIUMINT INT BIGINT Bytes Valor Mnimo (Con signo/Sin signo) 1 -128 0 2 -32768 0 3 -8388608 0 4 -2147483648 0 8 -9223372036854775808 0 Valor Mximo (Con signo/Sin signo) 127 255 32767 65535 8388607 16777215 2147483647 4294967295 9223372036854775807 18446744073709551615

Vamos a comprobarlo

Ingresaremos el siguiente dato


insert into libros2 (titulo, autor, precio, cantidad) values ('La cenicienta' , default, default, default ); ahora verificamos cuales son los campos afectados select * from libros2

Cuando se ingresan campos nulos si se especifica que el campo tiene un default entonces ese campo se llenara con el deafault en los campos que no tienen default se llenara con NULL siempre y cuando no se haya especificado NOT NULL. Los atributos identity no admiten valores default, si es un atributo fecha y no se especifica valor, el valor por defecto ser 1900/01/01 en el caso de la hora ser 00:00:00 si es un campo que no es identity, no tiene valor por defecto especificado y no se especifica que sea not null entonces arrojara un error y no se ingresara el dato Borramos la tabla libros2

use biblioteca drop table libros2 ;

La clausula CHECK verifica que no se ingresen datos inapropiados


create table libros2 ( codigo int identity, titulo varchar (40), autor varchar (30), editorial varchar (15), preciomin decimal (5,2), preciomay decimal (5,2), ); insert into libros2 values ('uno', 'bach', 'planeta', 22,20); insert into libros2 values ('el quijote', 'cervantes', 'emece', 10,00); insert into libros2 values ('aprenda php', 'mario molina', 'siglo XI', 34,50);

Ahora especificaremos que el campo precios no puede ser negativo a travez de la restriccin check
alter table libros2 add constraint CK_libros_precio_positivo check (preciomin>=0 and preciomay>=0);

ahora bien, si quisiramos insertar campos negativos en precio


insert into libros2 values ( 'la cometa blanca', 'alejandro', 'planeta', -15,20);

Nos saldra el siguiente mensaje de error


Mens. 547, Nivel 16, Estado 0, Lnea 1 Instruccin INSERT en conflicto con la restriccin CHECK "CK_libros_precio_positivo". El conflicto ha aparecido en la base de datos "biblioteca", tabla "dbo.libros2". Se termin la instruccin.

Podemos evitar la restriccin en SQL si el campo ya esta ingresado por ejemplo en este caso si ya hemos cargado datos con el precio negativo para que no chequee los campos anteriores y si los futuros debemos ingresar asi
alter table libros2 with nocheck add constraint CK_libros_precio_positivo check (precio>=0);

Si queremos evitar una restriccin a futuro debemos deshabilitar la comprobacion


alter table libros2 nocheck constraint CK_libros_precio_positivo; insert into libros2 values ('uno', 'bach', 'planeta',22); insert into libros2 values ('el quijote', 'cervantes', 'emece', 15); insert into libros2 values ('aprenda PHP', 'Mario Molina' , 'Siglo XXI', -40);

si quisiramos consultar si hay una restriccin o no, tenemos la clausula sp_helpconstraint


sp_helpconstraint libros2;

Si estuviera deshabilitada la habilitamos asi


alter table libros2 check constraint CK_libros_precio_positivo;

restriccin referencial FOREIGN KEY


con esta restriccin se define un campo o varios valores los cuales coinciden con la clave primaria de la misma tabla o de otra tabla, es decir que se define un campo con una referencia a un campo primarykey de la misma tabla u otra, la entidad referencial asegura que se mantengan las referencias entre las claves primarias y las externas por ejemplo, controla que se agrega un cdigo editorial en la tabla libros tal cdigo exista en la tabla editoriales tambin controla que no se pueda eliminar el registro de una tabla o modificar la clave primaria si una clave externa hace referencia al registro. Por ejemplo que no se pueda eliminar un cdigo de editoriales si existen libros con dicho cdigo ejemplo, una librera almacen su informacin en dos tablas. create table libros2(

codigo int identity, titulo varchar (40), autor varchar (30), codigoeditorial tinyint); create table editoriales ( codigo tinyint, nombre varchar (20), primary key (codigo)); insert into editoriales values (1,'emece'); insert into editoriales values (2,'planeta'); insert into editoriales values (3,'siglo XXI'); insert into libros2 values ('el aleph','Borges',1); insert into libros2 values ('martin fierro','jose Hernandez',2); insert into libros2 values ('aprenda PHP', 'Mario Molina', 2); *ahora implementamos una restriccion foreign key a la tabla libros2 alter table libros2 add constraint FK_libros_codigoeditorial foreign key (codigoeditorial) references editoriales (codigo); para que el campo de la tabla libros (codigoeditorial) este asociado con el campo de la tabla editoriales (codigo) ahora corroboramos que se haya ejecutado la restriccin para ello ejecutamos select* from libros2

Consultamos las restricciones sp_helpconstraint libros2;

Ejercicio: . Abre el programa SQL SERVET Management Studio Express o el RDBMS que tengas instalado. 2. Conctate a tu servidor. 3. Abre una nueva consulta. 4. Crea una nueva base de datos llmala Ejercicios. Utiliza para crearla el comando CREATE. 5. Ejecuta la sentencia y comprueba que la base de datos se ha creado correctamente. Para ello recuerda que es posible que tengas que actualizar el explorador de objetos 6. Inserta la siguiente tabla en la base de datos Ejercicios. a. Tabla empleados con los campos i. nif de tipo VARCHAR, tamao 9 y que no admita campos nulos. ii. nombre de tipo VARCHAR, tamao 15 y que no admita campos nulos. iii. apellidos de tipo VARCHAR, tamao 30 y que no admita campos nulos. iv. direccion de tipo VARCHAR, tamao 30 v. cp de tipo CHAR, tamao 5 vi. Alta de tipo DATETIME y que no admita campos nulos vii. Disponible de tipo CHAR, tamao 1 viii. Y con el campo ndice en el campo nif. 7. Ejecuta la sentencia y comprueba que la tabla se ha creado correctamente. Para ello recuerda que es posible que tengas que actualizar el explorador de objetos.

Solucion: create database ejercicios .. use ejercicios; create table empleados ( NIF varchar (9) NOT NULL, nombres varchar (15) NOT NULL, apellidos varchar (30) NOT NULL, direccion varchar (30), cp char (5), alta datetime NOT NULL, disponible char (1) constraint PK_empleados primary key (NIF) );

CONSULTAS DE SELECCIN
Las consultas de seleccin se utilizan para indicar al motor de datos que devuelva informacin de las bases de datos, esta informacin es devuelta en forma de conjunto de registros que se pueden almacenar en un objeto recordset. Este conjunto de registros es modificable mediante las consultas de accin. La sintaxis bsica de una seleccin es la siguiente select campos from tabla; donde campos sera el campo a consultar y tabla la tabla donde se encuentra el campo

ejemplo use biblioteca select autor,titulo from libros2;

*si quisiramos ver todos los valores de la tabla solo basta con ingresar la siguiente sintaxis use biblioteca select * from libros2;

Tambin se puede incluir la clausula ORDER BY para determinar el orden en el que se requieren obtener los datos Select campo From tabla Order by campo [ASC l DESC] En este caso podemos ordenarlo en forma ascendete a descendente Por defecto siempre se mostrar en forma ascendente Ejemplo: use biblioteca select autor , titulo From libros2 order by autor

Se ordena en base al campo autor y en forma alfabetica Ahora vamos a seleccionar los campos autor titulo y signatura ordenados en base a signatura y autor De manera descendente select autor, titulo, signatura From libros order by signatura, autor DESC; Las consultas de seleccion generan una tabla de resultados o (record set) este conjunto de datos puede o no tener filas repetidas, es decir idnticos valores en los campos seleccionados en la clausula select podemos especificar si queremos todos los datos existentes o todos los datos pero sin repeticiones Para esto tenemos dos clausulas ALL Y DISTINCT. ALL muestra todos los datos sin omitir repeticiones; DISTINCT muestra todos los datos pero sin repeticiones. Ejemplo SELECT ALL DINSTINCT campo FROM tabla; ALL es por defecto la clausula que muestra si no especificamos que no deben repetirse los campos de una fila En determinadas circunstancias es necesario asignarle un nombre a una columna determinada de conjunto devuelto o a veces por un simple capricho o porque estamos recuperando datos de diferentes tablas y resultan tener un campo con igual nombre; para ello tenemos los alias que mediante la palabra AS se encargan de asignar a la columna deseada el nombre que querramos Sintaxis: SELECT campo AS alias del campo FROM tabla *donde alias es el nombre elegido que se le asignara al campo

Tambien podemos asignar alias a las tablas dentro de las consultas de seleccin y ha de tener en cuenta que todas las referencias que hagamos a dicha tabla se ha de utilizar el alias en lugar del nombre, esta tcnica es de gran utilidad cuando se vea vinculacin entre tablas; la sintaxis es la siguiente: SELECT aliastabla1.campo1 aliastabla2.campo2 FROM tabla1 aliastabla1 tabla2 aliastabla2 Ejemplo SELECT s.nif, s.apellidos, p.codigo, p.prestamo FROM socios s , prestamos p; En las tablas socios y prestamos existe un campo nif si no pusieramos a que tabla corresponde el campo nif, el resultado de la consulta nos llevaria a un error de ambigedad.; con la opcion de alias de tablas simplificamos mucho el tamao de la sentencia.

CRITERIOS DE SELECCIN
Los criterios de seleccin se utilizan para filtrar los registros con el fin de recuperar solo aquellos registros que cumplan unas condiciones preestablecidas. Los criterios de seleccin nos permiten filtrar las filas de una tabla a fin de obtener nicamente aquellas que se ajusten a un determinado criterio, asi como buscar una fila que contiene un dato determinado en una o ms de sus columnas. Vamos a ver la sintaxis SELECT columnas FROM tablas WHERE condicin de bsqueda

La condicin tambin conocida como predicado debe de ser de tipo booleano (de valor true, false o null) Si es true, dara resultado, si es false no dara resultado, y si es null no tiene resultado para arrojar Ejemplo,

use biblioteca SELECT codigo,titulo FROM libros WHERE disponible = 'S'; En este caso la consulta devolver solo los campos que cumplan la condicion en la cual disponible sea igual a S Existen diferentes criterios de bsquedas, a nosotros nos interesa establecer una relacin entre una columna de datos y un valor concreto y para ello utilizaremos los operadores de relacin <,>,<>,<=,>=, = < : menor >mayor = igual < > distinto <= menor o igual >= mayor o igual Por ejemplo SELECT campo FROM tabla WHERE colmna operador valor Hay que tener en cuenta que el valor del campo y el valor de comparacion deben pertenecer al mismo tipo, es decir no puede compararse tipo numeric con cadena de caracteres

Ejercicio: SELECT codigo, titulo, signatura, autor FROM libros WHERE autor= 'Ende Michael'; Tambien podemos realizar consultas combinando en la condicion operadores logicos conjuntamente con operadores de relacion Recordemos que los operadores lgicos son AND, OR y NOT Ejemplo de sintaxis SELECT campo FROM tabla WHERE columna operador valor operador logico columna operador valor De esta forma, vemos un ejemplo use biblioteca SELECT codigo, titulo, disponible, autor FROM libros WHERE autor = 'Ende Michael' and disponible ='S' Devuelve un solo resultado Para buscar una columna que esta en un rango de valore especificos o buscar una lista de valores para ello podemos usar los predicados BETWEEN e IN BETWEEN crea un filtro en un rango de valores y es necesario especificar un tope en el rango superior e inferior Ejemplo sintaxis SELECT campo FROM tabla WHERE columna BETWEEN inferior AND superior Ejemplo practico use biblioteca SELECT apellidos, nombre FROM socios WHERE alta BETWEEN '2009-01-01' AND '2009-31-12';

Cuando los valores que queremos extraer no estan en rango de limites, debemos expresarlos en forma de lista, para ello utilizaremos la clausula IN

Ejemplo sintaxis: SELECT campo FROM tabla WHERE columna IN ('valor1', 'valor2', 'valorn') Ejemplo practico SELECT apellido, nombre, cp FROM socios WHERE cp IN ('28009', '28018'); El operador like sirve para comparar una expresion de cadena con un modelo en expresion SQL por ejemplo podemos buscar en todas las filas una determinada palabra o una secuencia de caracteres Ejemplo sintaxis:

SELECT campo FROM tabla WHERE columna LIKE 'patron' EJEMPLO practico: SELECT nombre, apellidos FROM socios WHERE nombre LIKE 'A%'; En este caso arrojaria valores que comiencen con A, el simbolo % representa una secuencia de caracteres y se puede poner en cualquier parte del patron. Otra opcion es el subrayado por ejemplo SELECT nombre, apellidos, cp FROM socios WHERE cp LIKE '280_8'; Nos deja lugar a cualquier caracter pero solo uno

PRACTICA:
1. Abre el programa SQL SERVET Management Studio Express o el RDBMS que tengas instalado. 2. Conctate a tu servidor. 3. Abre una nueva consulta. 4. Ejecuta las siguientes consultas en la tabla empleados de la base de datos Ejercicios. a. Una consulta en la que muestres el nombre y los apellidos de los empleados que estn disponibles. b. Una consulta en la que muestres el nombre, apellido y la disponibilidad del empleado con nombre Andrs. 5. Ejecuta las sentencias y comprueba los resultados. 1: use ejercicios SELECT nombres, apellidos, disponible FROM empleados WHERE disponible = 'S'

2: use ejercicios SELECT nombres, apellidos, disponible FROM empleados WHERE nombres like 'Andres%';

AUTOPRCTICA Tema 4. Ejercicio 2 1. Abre el programa SQL SERVET Management Studio Express o el RDBMS que tengas instalado. 2. Conctate a tu servidor. 3. Abre una nueva consulta. 4. Ejecuta las siguientes consultas en la tabla empleados de la base de datos Ejercicios. a. Una consulta en la que muestres el nombre y los apellidos de los empleados que se dieron de alta en el ao 2009. b. Una consulta en la que muestres en la que muestres el nombre y los apellidos de los empleados cuyo nombre empiece por A. 5. Ejecuta las sentencias y comprueba los resultados.

1: use ejercicios SELECT nombres, apellidos FROM empleados WHERE alta like '%2009%';

2: use ejercicios SELECT nombres, apellidos FROM empleados WHERE nombres like 'A%' and apellidos like 'A%'

CONSULTAS DE ACCION:
Las consultas de accin son aquellas que no devuelven ningn registro, son las encargadas de acciones como aadir y borrar y modificar registros. Tanto las sentencias de actualizacin como las de borrado desencadern (segn el motor de datos) las actualizaciones en cascada, borrados en cascada, restricciones y valores por defecto definidos para los diferentes campos o tablas afectadas por la consulta. Este tipo de consultas estn enfocadas a mantener actualizada la informacin que reside en la base de datos.

CLUASULA INSERT:
Con esta sentencia insertamos valores en una tabla Ejemplo Sintaxis : INSERT INTO tabla (campo1, campo2, , campon) Values ( valor1, valor2, , valorn) U otra opcin

INSERT INTO tabla values (valor1, valor2, , valorN) Ejemplo practico use biblioteca INSERT INTO libros values (3, 'M del Her', ' El hereje', ' Delibes Miguel', 'S');

*en el caso de que no quisieramos ingresar todos los valores de una fila, el resultado sera el valor NULL en los campos que no hayamos definido siempre y cuando ese campo acepte valores nulos

Ejemplo
insert into libros (codigo, signatura, autor, disponible) values (4, 'S lar Hom', 'Larsson Stieg', 'S'); *^en este caso no esta insertado el valor del campo titulo

CLAUSULA DELETE
La sentencia DELETE es una consulta de eliminacin que borra los registros de una o mas de las tablas listadas en la clausula FROM que satisfagan la clausula WHERE, Elimina el registro completo, no es posible eliminar un campo en concreto. Ejemplo sintaxis: DELETE FROM tabla WHERE criterio

Una vez realizada la consulta de borrado no se puede deshacer la operacin, una recomendacin es utilizar una consulta de select con la condicin de borrado para averiguar que registros se borraran y en el caso de que estemos de acuerdo ejecutamos la consulta de borrado.

Ejemplo: queremos borrar registros que sean nulos Para ello primero hacemos una consulta
select * from libros

En este caso solo me arroja un solo valor nulo, entonces aplico la consulta de borrado para ese campo especifiando que sea nulo
DELETE FROM libros WHERE titulo is NULL;

Clausula UPDATE
En nuestras bases de datos nuestras tablas puede variar en el tiempo como por ejemplo en nuestra tabla socios, la direccin puede variar; para esto utilizamos la consulta UPDATE, esta consulta lo que hace es actualizar los datos en una tabla especifica basndose en un criterio especifico. Ejemplo sintaxis: UPDATE tabla SET columna1= dato1, columna2=dato2, columnaN = datoN WHERE condicin Lo ideal es, primero ejecutar una consulta para saber el estado del campo a modificar y si debe o no ser modificado, en el caso de la tabla libros, si un socio ha devuelto un libro debemos ver el estado de la disponibilidad del libro, en el caso de que no este disponible, debemos habilitarlo ya que lo ha devuelto Para ello, ejecutamos la consulta
select* FROM libros

Modificamos para que el campo por ejemplo de matematica donde estas vuelva a estar disponible
UPDATE libros SET disponible = 'S' WHERE titulo = 'matematica donde estas' Luego hacemos una consulta y vemos como estan disponible el libro matematica donde estas

AUTOPRCTICA Tema 5. Ejercicio 1 1. Abre el programa SQL SERVET Management Studio Express o el RDBMS que tengas instalado. 2. Conctate a tu servidor. 3. Abre una nueva consulta. 4. Crea los siguientes registros en las siguientes tablas de la base de datos biblioteca. a. Tabla socios: INSERT INTO socios VALUES( '58873123D', 'Alejandro', 'Arias Torres', 'Buitre 1', '28021', '2010-18-03'); INSERT INTO socios VALUES( '12345678F', 'Teresa', 'Lopez Suarez', 'Orada, 7', '28009', '2008-03-08'); INSERT INTO socios VALUES( '33333333S', 'Angel', 'Estepa Lopez', 'Real, 42', '28018', '2009-28-02'); INSERT INTO socios VALUES( '32165497Z', 'Andrs', 'Ferrer Martin', 'Arroyo Fuentes, 18', '28041', '2009-06-07'); b. Tabla prestamos INSERT INTO prestamos VALUES(1, '58873123D', 5, '2010-07-04'); INSERT INTO prestamos VALUES(2, '12345678F', 7, '2010-14-03'); INSERT INTO prestamos VALUES(3, '32165497Z', 8, '2010-02-02'); 5. Ejecuta las sentencias y comprueba que los registros se han creado.

AGRUPACION DE REGISTROS Y FUNCIONES DE AGREGADO


En ocasiones necesitamos que los datos que queremos obtener de nuestra base de datos estn organizados de una manera concreta, para su posterior tratamiento. Esto podemos hacerlo mediante las funciones de agrupacin y las funciones agregadas de sql. LA CLAUSULA GROUP BY La clausula group by permite asociar una serie de filas en subconjuntos segn el contenido de una o de mas contenidos de la tabla tambin podemos agrupar por la informacin obtenida a partir de las columnas de una tabla; La clausula GROUP BY aparece despus de las clausulas SELECT, FROM y WHERE, utilizamos la estructura normal para realizar una consulta que cumpla una condicin y luego agregamos GROUP BY Ejemplo Sintaxis SELECT campos FROM tabla WHERE criterio GROUP BY campos del grupo *una de las condiciones para usar group by es la que no se pueden poner alias en las columnas, otra condicin es que luego de SELECT no deben aparecer mas columnas que las que aparecen en el criterio de agrupacin Excepto cuando utilizamos funciones de agregado. Por ejemplo, no podramos realizar la siguiente consulta
SELECT titulo, autor <<<< tiene dos campos que no estan en el criterio de agrupacion FROM libros GROUP BY autor

La clausula AVG
La clausula AVG calcula la media aritmtica de un conjunto de valores contenidos en un campo especificado de una consulta Ejemplo sintaxis: SELECT AVG (expr) AS nombrecolumna FROM tabla *expr selecciona el campo que contiene los datos numricos para los que se desea calcular la media o una expresin que utiliza un calculo utilizando los datos de dicho campo *AVG no admite valores nulos en el campo *nombrecolumna es el nombre que le daremos al campo calculado EJEMPLO practico
SELECT avg (gasto) AS promedio FROM compras

LA CLAUSULA COUNT
La clausuka count calcula el nmero de registros devueltos en una consulta Su sintaxis: SELECT count (expr) AS nombrecolumna FROM tabla
Ejemplo practico:

SELECT count (*) AS Numerogastos FROM compras

CUENTA CUALQUIER TIPO DE CAMPO INCLUIDO TEXTO La clausula count no cuenta los campos que tienen valores nulos a no ser que se aplique el comodin *

MAX Y MIN
Devuelven el campo mximo o minimo en un campo especifico de una consulta Sintaxis SELECT Min (expr) AS Nombrecolumna FROM TABLA O SELECT MAX (expr) AS Nombrecolumna FROM TABLA EJEMPLO practico:
SELECT Min (gastos) AS Minimo FROM compras

LAS CLAUSULAS STDEV O STDEVP Devuelven estimaciones de las desviacin estndar para la poblacin es decir el total de los registros de la tabla o una muestra de la poblacin representada, muetra aleatoria La sintaxis es SELECT stdev (expr) as NOMBRECOLUMNA FROM tabla O SELECT stdevp (expr) as NOMBRECOLUMNA FROM tabla Expression representa el nombre del campo que contiene los datos que desean evaluarse o una expresin que realiza un calculo utilizando los datos de dichos campos Los operandos de expresin pueden inculir el nombre de un campo de una tabla, una constante, una funcin que puede ser definida por el usuario o intrnseca pero no otras funciones agregadas de SQL Ejemplo

SELECT stdev (gastos) AS Desviacion FROM compras

CLAUSULA SUM
La clasula Sum arroja la suma del conjunto de valores contenidos en un campo especifico de una consulta Sintaxis: SELECT sum (expr) AS Nombrecolumna From tabla

Los opreandos de expr pueden incluir el nombre del campo de una tabla, una constante o una fucion que puede ser intrnseca o definida por el usuario, pero no otras funciones agregadas de SQL

Ejemplo practico_:
SELECT sum (gasto) AS totalcompras from compras

LA CLAUSULA VAR
La clausula var vuelve una estimacin de la varianza de una poblacin sobre el total de los registros o una muestra de la poblacin o una muestra aleatoria de los registros sobre los valores de un campo Sintaxis: SELECT var (expr) AS Nombrecolumna From tabla O SELECT varp (expr) AS Nombrecolumna From tabla Var evalua una muestra de la poblacin y varp evalua la poblacin. Si la consulta tiene menos de dos registros var y varp devuelven null y esto indica que la varianza no puede calcularse.

Ejemplo practico:
SELECT var (gasto) AS varianza FROM compras

AUTOPRCTICA Tema 6. Ejercicio 1 1. Abre el programa SQL SERVET Management Studio Express o el RDBMS que tengas instalado. 2. Conctate a tu servidor. 3. Abre una nueva consulta 4. Vamos a trabajar con la base de datos Biblioteca y la tabla Libros. 5. Realiza una consulta en la que muestres de la tabla libros el nombre de cada autor y el nmero de libros que le corresponden. 6. Ejecuta las sentencias y comprueba que los registros se han creado.

USE biblioteca SELECT autor, count (titulo) AS numtitulos FROM libros GROUP BY autor;

AUTOPRCTICA Tema 6. Ejercicio 2 1. Abre el programa SQL SERVET Management Studio Express o el RDBMS que tengas instalado. 2. Conctate a tu servidor. 3. Abre una nueva consulta. 4. Vamos a trabajar con la base de datos Biblioteca y la tabla Libros. 5. Realiza una consulta en la que muestres de la tabla libros el mayor y menor cdigo asociado al grupos de libros disponibles o no disponibles respectivamente. 6. Ejecuta las sentencias y comprueba que se han realizado Correctamente

SELECT disponible, min (codigo)as menor , max(codigo)as mayor, count (disponible) as cantidad FROM libros GROUP BY disponible;

SUBCONSULTAS
Introduccin En ocasiones los valores que han de utilizarse como referencia en una expresin condicional, para obtener las filas que se ajustan a un criterio concreto, no pueden obtenerse directamente como valores fijos de una tabla, sino que se encuentran en otra tabla de la base de datos. Es esta situacin lo que se hace es incluir como parte del predicado una subconsulta. Una subconsulta es una instruccin SELECT anidada adentro de otra instruccin select o dentro de otra subconsulta

Sintaxis: SELECT campos FROM tablas Comparacin [ANY l ALL l SOME] (instruccion SQL) Expression [NOT] IN instruccion SQL [NOT] EXISTS (instruccion SQL) Comparacion es una operacion que compara la expresin con el resultado de la subconsulta podemos utilizar ANY, ALL Y SOME EXPRESION es lo que se busca en la subconsulta utilizamos IN

Instruccin SQL es una instruccin SELECT que sigue el mismo formato y reglas que cualquier otra instruccin select, debe ir entre parntesis

Obtenemos libros de la tabla libros que tambin se encuentren en la tabla prestamos Ejemplo practico
Use biblioteca SELECT signatura, titulo FROM libros Where codigo IN (select codigo from prestamos)

Busca los titulos y la signature de los libros que estan en la table libros y en la tabla prestamos con el mismo cdigo

El predicado ANY Any o some recupera registros de la consulta principal que satisfagan la comparacin con cualquier otro registros recuperado en la subconsulta. Ejemplo practico
USE prueba; SELECT * FROM compras WHERE gasto > ANY (SELECT gasto FROM ventas WHERE descuento >= 10);

Va a buscar que gastos sea mayors queel resultado de la subconsulta. (que busca los gastos de la tabla ventas cuyo descuento sea mayor o igual al 10 %) EL PREDICADO EXISTS Este predicado con la palabra opcional NOT se utiliza en comparaciones de verdad falso para determinar si la consulta devuelve algn resgistro Ejemplo: recuperamos todos aquellos empleados que hayan realizado una venta
USE prueba; SELECT nif, nombre, apellido FROM compras AS C WHERE EXISTS (SELECT * FROM ventas AS V WHERE V.nif = C.nif)

OPERACIONES EN CONJUNTOS
Las operaciones con conjuntos en sql son iguales que las operaciones de conjuntos algebraicos. Se dispone de elementos necesarios para realizar uniones, intersecciones y diferencias entre conjuntos de datos, tratando las columnas y las filas de una seleccin como elementos de un conjunto. UNION Para realizar la unin en conjuntos se utiliza la clausula UNION que efectua la unin de todos los elementos del conjunto eliminando eliminando aquellos que estn repetidos excepto que se use la clausula all Sintaxis: SELECT columnas

FROM tabla UNION SELECT columnas FROM tabla Para poder realizar la unin de dos o mas campos de resultados obtenidos de sus respectivas columnas es necesario que todas las filas que actan como elementos tengan las mismas columnas y que aparezcan en la misma posicin para que puedan ser comparadas y determinar si deben o no elimnarse la fila afectada. Las columnas no comunes deberan ser del mismo tipo o ser convertidas al mismo tipo Ejemplo: vamos a unir los elementos nif de la tabla socios con los elementos nif de la tabla prestamos
Use biblioteca; SELECT nif FROM socios UNION SELECT nif FROM prestamos

En el primer conjunto estn los nif de todos los socios y en el segundo conjunto estn nicamente los que tienen un libro en prstamo; la clausula unin, elimina los elementos repetidos, entonces el resultado es el conjunto de los elementos comunes y no comunes pero sin repeticiones, si queremos que no elimine las repeticiones colocamos all al lado de UNION Ejemplo

Use biblioteca; SELECT nif FROM socios UNION all SELECT nif FROM prestamos

INTESECCION
SINTAXIS

Para sacar la inteseccion de dos conjuntos se utiliza la clausula intesect que da como resultado un conjunto con los elementos comunes entre ellos.

SELECT columnas FROM tabla INTERSECT SELECT columnas FROM tabla Ejemplo
Use biblioteca SELECT nif FROM socios INTERSECT SELECT nif FROM prestamos

EXCEPT
Para generar la diferencia de conjuntos se utiliza la clausula except devolviendo los elementos que estn en el primer conjunto y que no estn en el primer conjunto SINTAXIS SELECT columnas FROM tabla EXCEPT SELECT columnas FROM tabla Hay que tener en cuenta el orden de los conjuntos ya que es determinante, no es lo mismo A- B que B A.

Ejemplo
SELECT nif FROM socios EXCEPT SELECT nif FROM prestamos

PRACTICA

1. Abre el programa SQL SERVET Management Studio Express o el RDBMS que tengas instalado. 2. Conctate a tu servidor. 3. Abre una nueva consulta 4. Vamos a trabajar con la base de datos Biblioteca. 5. Realiza una consulta en la que muestres la unin de los campos nif, las fechas de alta y prestamos. Ten en cuenta que si hay alguna coincidencia ambas fechas porque un socio se hubiese dado de alta y el mismo da tomado un libro en prstamo la fila repetida se elimina del conjunto. 6. Ejecuta las sentencias y comprueba que los resultados son correctos. 1. Abre el programa SQL SERVET Management Studio Express o el RDBMS que tengas instalado. Resultado
SELECT nif, alta_de_tipo FROM socios UNION all SELECT nif,prestamo_de_tipo FROM prestamos

Autopractica 2

Abre el programa SQL SERVET Management Studio Express o el RDBMS que tengas instalado. 2. Conctate a tu servidor. 3. Abre una nueva consulta 4. Vamos a trabajar con la base de datos Biblioteca. 5. Realiza una consulta en la que muestres los apellidos y el nombre de los socios que tienen un libro en prstamo. Realzalo a travs de una consulta de interseccin. 6. Ejecuta las sentencias y comprueba que los resultados son correctos. Resultado:
SELECT nombre_de_tipo, apellidos FROM socios WHERE nif in (SELECT nif FROM socios INTERSECT SELECT nif FROM prestamos);

INNER JOIN
La combinacion mas habitual es aquella en la que deseamos obtener las filas de dos o mas tablas que tienen un contenido equivalente en una determinada columna, estas operaciones se realizan mediante la clausula INNERJOIN Sintaxis SELECT campos FROM tabla1 INNER JOIN tabla2 ON tabla1.campo1 comp tabla2.campo2 Select indica los campos que vamos a necesitar, tabla1 y tabla2 son las tablas de donde se combinan los registros, campo1 y campo2 son los nombres de los campos que se combinan, si no son numricos, los campos deben ser del mismo tipo y contener el mismo tipo de datos pero no tienen que tener el mismo nombre; comp es cualquier operador de comparacin relacional (<,>,<>, =,<=, >=). Se puede utilizar una operacin INNER JOIN en cualquier clausula FROM

Ejemplo practico: vamos a obtener el nif, apellido y nombre de todos los socios que tienen un libro en prstamo
Use biblioteca; SELECT socios.nif, apellidos, prestamo FROM socios INNER JOIN prestamos ON socios.nif = prestamos.nif;

Tener en cuenta que si no teniamos la columna prestamo en la table socios la podemos crear, para ello recordemos la sintaxis Alter socios

ADD prstamo datetime; Luego para ingresar los datos tenemos que actualizar los campos que ya estn creados, por defecto va a ingresar null en cada campo de cada columna. Ingresamos los datos de la siguiente manera UPDATE socios Set prestamo = fecha de prestamo WHERE apellido = apellido del campo que queremos modificar; Las clausulas INNERJOIN pueden anidarse relacionando una o mas tablas cuando sea necesario Sintaxis: SELECT campos FROM tabla1 INNER JOIN tabla2 INNER JOIN tabla3 ON tabla2.campo2 comp tabla3.campo3 ON tabla1.campo1 comp tabla2.campo2 Ejemplo
Use biblioteca; SELECT apellidos, nombre_de_tipo, titulo, prestamo FROM socios INNER JOIN prestamos INNER JOIN libros ON libros.codigo =prestamos.codigo_de_tipo ON socios.nif = prestamos.nif

De esta manera especificamos que queremos las columnas apellido, nombre, titulo y prstamo de la tabla socios y especificamos de donde vamos a obtener las filas, con el primer INNER JOIN especificamos lo que queremos de la tabla prestamos y la condicin se ve reflejada en el primer ON (donde el cdigo de la tabla libros debe coincidir con el cdigo de la tabla prestamos, entonces son libros en prstamo) el segundo INNER JOIN especifica que queremos de la tabla libros la segunda condicin ON que el nif de la tabla socios que coincida con el nif de la tabla prestamos, de esa manera tendremos los socios que tienen un prstamo de libro Hemos visto que en las combinaciones por equivalencias excluyen del conjunto de datos las filas que no existe una concordancia entre las columnas seleccionadas por la condicin ON de la clausula INNER JOIN Pero a veces necesitamos la inclusin de todas las filas de una tabla y solo las concordantes de la segunda o todas las filas de las dos tablas pero organizadas de una forma concreta, para ello contamos con las combinaciones o consultas de unin externas, en este caso utilizamos la clausula OUTER JOIN SINTAXIS SELECT campos FROM tabla1 LEFT l RIGHT FULL [OUTER] JOIN tabla2 ON tabla1.campo1 comp tabla2.campo2 Tabla 1 o tabla 2 son los nombres de las tablas desde las que se combinan los registros; tabla1 es la tabla que se considera que se queda a la izquierda de la

combinacin y tabla2 la que queda a la derecha, este concepto es importante ya que si queremos incluir todas las filas de la primera o segunda tabla tendremos que poner OUTER LEFT u OUTER RIGHT respectivamente. Campo1, campo2 son los nombres de los campos que se combinan ; comp es cualquier operador de comparacin relacional (<,>,<>, =,<=, >=). Ejemplo practico Queremos obtener los apellidos de los socios junto con la fecha de prstamo que tengan asociada pero sin excluir los socios que no tengan un libro en prestamo
SELECT apellidos, prestamo FROM socios LEFT OUTER JOIN prestamos ON socios.nif = prestamos.nif

Aquellos campos de la table prestamos que no tienen coincidencias quedaran como null. Si cambiamos LEFT por RIGHT obtendremos todas las filas de la tabla prestamos y solo las filas de la tabla socios que tienen alguna correspondencia Ejercicio: una consulta de tipo outer join anidada - Vamos a mostrar los apellidos de todos los socios y los libros y fechas de prestamos de quellos que tengan libros prestados
USE biblioteca; SELECT apellidos, titulo, prestamo FROM socios LEFT OUTER JOIN prestamos RIGHT OUTER JOIN libros ON libros.codigo = prestamos.codigo_de_tipo ON socios.nif = prestamos.nif

Ejercicio 2 Vamos a trabajar con la base de datos Biblioteca. 5. Realiza una consulta en la que muestres los datos de los socios que tienen en prstamo un libro y el titulo de este. 6. Ejecuta la sentencia y comprueba que la consulta se ha realizado con xito.
USE biblioteca; SELECT nombre_de_tipo, apellidos, titulo, prestamo FROM socios INNER JOIN prestamos INNER JOIN libros ON libros.codigo = prestamos.codigo_de_tipo ON socios.nif = prestamos.nif

Ejercicio 3 Vamos a trabajar con la base de datos Biblioteca y la tabla Libros. 5. Realiza una consulta en la que muestres los apellidos de los socios junto con la fecha de prstamo que tengan asociada, excluyendo aquellos socios que no tengan un libro en prstamo. 6. Ejecuta las sentencias y comprueba que se han realizado correctamente.

USE biblioteca; SELECT apellidos, prestamo_de_tipo FROM socios RIGHT OUTER JOIN prestamos ON socios.nif = prestamos.nif;

FUNCIONES SQL
En unidades anteriores hemos estudiado algunas funciones con las que cuenta el lenguaje SQL. Pero SQL posee otra serie de funciones como son las funciones integradas en SQL que nos devuelven informacin facilitada por el propio RDBMS, las funciones de cadenas de caracteres y funciones numricas que vamos a estudiar en esta unidad. Las funciones integradas nos devuelven informacin facilitada por el propio RDBMS como puede ser la fecha y la hora actual, nombre de usuario etc. Se limitan a dar un valor sin precisar informacin sobre la que operan son las siguientes: CURRENT_DATE (da la fecha actual) CURRENT_TIME (da la hora actual) CURRENT_TIMESTAMP (da la fecha y la hora actuales) CURRENT_USER Y USER (identifica al usuario que esta operand sobre la base de datos) SESSION_USER (facilita la identificacion del usuario si este difiere de current user) SYSTEM_USER (identifica al usuario segun la cuenta del sistema operativo) Estas consultas devuelven los resultados como si se tratase de una columna aunque en realidad no estn almacenados en ninguna tabla el RDBMS de Microsoft que estamos utilizando no cuenta con las funciones CURRENT_DATE Y CURRENT_TIME EJEMPLO
SELECT CURRENT_TIMESTAMP, CURRENT_USER, USER, SESSION_USER, SYSTEM_USER

FUNCIONES DE CADENA
Las funciones de cadena, son funciones que permiten operar sobre secuencias o cadenas de caracteres o el contenido de columnas como titulo o apellido en nuestras tablas de la base de datos El standard de SQL cuenta con otro tipo de funciones de cadena entre las que estn las siguientes: CHAR_LENGHT / CHARACTER_LENGHT (facilita el numero de caracteres existentes en el dato facilitado como argumento, conocido como longitud de la cadena) CONVERT (convierte la cadena original a una representacin distinta utilizando el mismo conjunto de caracteres) LOWER (convierte en minusculas los caracteres que esten en minusculas) POSITION ( facilita la posicion en la que aparece una secuencia de caracteres dentro de otra cadena ) SUBSTRING (extrae parte de una cadena) TRANSLATE (realize una conversion de cadenas entre diferentes conjuntos de caracteres) TRIM (elimina espacios sobrantes en la cadena) UPPER (convierte a mayusculas los caracteres que estan en minsculas) Hay que tener en cuenta que la implementacin de estas funciones depende del RDBMS que se use

Ejemplo : queremos obtener el primer carcter de la signatura de la tabla libros


Use biblioteca; SELECT SUBSTRING (signatura, 1, 1) FROM libros;

1, 1 representa el carcter de inicio y el de fin

Tambin podemos utilizar la funcin SUBSTRING como parte del perdicado de una clausula WHERE EJEMPLO:
SELECT signatura, titulo FROM libros WHERE SUBSTRING (signatura, 1,1)='N'; Queremos obtener la signatura y el titulo de todos los libros cuyo primer carcter de signatura comience con N

Al definir la estructura de una tabla se utilizan diferentes tipos de datos que permiten almacenar secuencias de caracteres donde los dos mas habituales son char y varchar. Ejemplo: mostramos la longitud del titulo de cada libro existente en la biblioteca junto a la longitud media y la diferencia que tiene con esta
SELECT signatura, LEN (titulo) AS longitud, (SELECT AVG (LEN (titulo))FROM libros) AS media, LEN (titulo)- (SELECT AVG (LEN (titulo)) FROM libros) AS diferencia FROM libros;

UPPER Y LOWER
Cambia de maysculas a minsculas (lower) y visceversa (uper) EJEMPLO: vamos a obtener las signaturas en minsculas y el titulo en mayusculas
SELECT LOWER (signatura) , UPPER (titulo) FROM libros;

STR: convierte nmeros a caracteres


EJEMPLO: El primer parmetro indica el valor numrico a convertir, el segundo la longitud del resultado; debe ser igual o mayor a la parte entera del numero mas el signo si lo tuviese y el tercero la cantidad de decimales. El segundo y tercer argumento son opcionales y deben ser positivos, si no se establecen estos, por defecto asigna como longitud predeterminada es 10 y la cantidad de decimales es 0, y se redondea entero

SELECT STR (123.456,7,3); SELECT STR (123.456);

La funcin inserta la cadena enviada como cuarto argumento en la posicin indicada en el segundo argumento reemplazando la cantidad de caracteres indicada por el tercer argumento en la cadena que es el primer parmetro Ejemplo:
SELECT STUFF ('abcde', 3, 2, 'opqrs');

STUFF

Coloca en la posicin 2 la cadena opqrs y reemplaza dos caracteres de la primera cadena. Los argumentos numricos deben ser positivos y de menor o igual tamao que la longitud de la primera cadena, en caso contrario retorna null. Si el tercer argumento es mayor que la primera cadena, se elimina hasta el primer carcter.

La funcin argumento

CHAR nos devuelve el carcter en cdigo ascii del entero enviado como

Por ejemplo:

SELECT CHAR (65);

La funcin retorna la cantidad, longitud de caracteres de la cadena comenzando de la izquierda de la cadena desde el primer carcter. La funcin retorna la cantidad, longitud de caracteres de la cadena comenzando de la derecha de la cadena desde el utlimo carcter.
SELECT LEFT ('buenos dias', 8); SELECT RIGHT('buenos dias', 8);

LEFT

RIGHT

EJEMPLO:

Left nos devuelve los primeros 8 caracteres comenzando desde la izquierda Right nos devuelve los 8 primeros caracteres comenzando desde la derecha

LTRIM cadena retorna la cadena con los espacios de la izquierda eliminados. La funcin RTRIM cadena retorna la cadena con los espacios de la derecha eliminados.
La funcin
SELECT ltrim (' SELECT rtrim (' Hola Hola '); ');

Replace: retorna la cadena con todas las ocurrencias de la subcadena reemplazando la cadena a reemplazar, Ejemplo: vamos a reemplazar la cadena x por el numero 1
SELECT replace ('x.curso de SQL', 'x', '1');

La funcin Ejemplo:

REVERSE devuelve la cadena invirtiendo el orden de los caracteres

SELECT reverse('hola');

La funcin patindex patrn en cadena devuelve la posicin de comienzo de la primera ocurrencia del patrn especificando en la cadena enviada como segundo argumento; si no la encuentra retorna a 0 Ejemplo: vamos a buscar la cadena SQL en la cadena Curso de SQL
SELECT PATINDEX ('%SQL%' , 'Curso de SQL' );

cadena SQL

* nos muestra la posicion en la que se encuentra la

La funcion devuelve la posicion donde comienza la subcadena en la cadena comenzando la busqueda desde la posicion indicada por inicio, si el 3er argumento no se coloca la busqueda se inica desde 0 si no lo encuentra retorna a 0

CHARINDEX

Ejemplo:
SELECT CHARINDEX ('SO', 'Curso de SQL', 3);

Nos indica que la cadena SQL comienza en 4 La funcin REPLICATE repite una cadena la cantidad de veces especificada Ejmeplo: vamos a especificar que aparezca la cadena hola 3 veces
SELECT REPLICATE ('HOLA',3);

La funcin Space: retorna una cadena de espacios de longitud indicada en el argumento 1 que debe ser un valor positivo. Ejemplo:
select 'hola' +space (1) + 'que tal';

La funcin getdate retorna la hora y la fecha actuales


Ejemplo: select getdate ();

La funcin datepart retorna la parte especifica de una fecha, el ao, trimestre, dia, la hora etc. Los valores pueden ser year (ao), quarter (cuarto), month (mes), day (dia), week (semana), hour (hora),
minut (minuto), second (segundos) y mlisecond (milisegundo). Ejemplos: vamos a pedir el mes de la fecha actual select datepart (month, getdate()); pedimos el dia de la fecha actual select datepart (day, getdate()); pedimos la hora de la fecha actual select datepart (hour, getdate()); La funcion datename retorna el nombre de una parte especifica de una fecha; los valores para parte de fecha pueden ser los mismos que se explicaron anteriormente year (ao), quarter (cuarto), month (mes), day (dia), week (semana), hour (hora), minut (minuto), second (segundos) y mlisecond (milisegundo).

Ejemplo: pedimos el nombre del mes de la fecha actual


select datename (month, getdate()); pedimos el dia del mes select datename (day, getdate());

la funcin dateadd agrega un intevalo a la fecha especificada, es decir, retorna una fecha adicionando a la fecha enviada como tercer argumento el intervalo de tiempo indicado por el primer parmetro tantas veces como lo indica el segundo parmetro. Los valores para el primer argumento pueden ser year (ao), quarter (cuarto), month (mes), day (dia), week (semana), hour (hora), minut (minuto), second
(segundos) y mlisecond (milisegundo) ejemplos: select select select select dateadd dateadd dateadd dateadd (day,3,'2010/05/12'); (month,3,'2010/05/12'); (hour,2,'2010/05/12'); (minute,16,'2010/05/12'); estamos estamos estamos estamos agregando agregando agregando agregando 3 dias a la fecha 3 meses a la fecha 2 horas a la fecha 16 minutos a la fehca

FUNCIONES MATEMATICAS: operan con tipos de datos numricos, realizan


operaciones con expresiones numricas y retornan un resultado con tipo de datos numricos. Abs: retorna el valor absoluto del numero pasado como argumento. Ejemplo:

select abs (-20);

La funcin ceiling redondea el numero hacia arriba pasado como argumento Ejemplo:
select ceiling (12.34);

La funcin floor redondea hacia abajo el numero pasado. Ejemplo:


select floor (12.34);

La funcin tanto por ciento nos devuelve el resto de una divisin. Ejemplo:
select 10%3;

La funcin power retorna el valor de un numero pasado como argumento elevado a otro numero Ejemplo:
select power (2,3);

es el numero 2 elevado al cubo La funcin round retorna un numero redondeado a una longitud especificada, la longitud debe ser un numero de tipo entero. Ejemplos
select select select select round round round round (123.456,1); (123.456,2); (123.456,-1); (123.456,-2); redondea redondea redondea redondea desde desde desde desde el el el el primer decimal segundo decimal primer valor entero segundo valor entero

La funcin sign nos devuelve un valor positivo si el numero pasado por argumento es positivo, un 1 si el numero pasado por argumento es negativo y 0 si el numero pasado es 0. Ejemplo:
select sign (-5);

Devuelve un 1 porque el numero pasado como argumento es negativo. La funcin square nos devuelve el cuadrado del argumento. Ejemplo:
select square (3);

La funcin sqrt nos devuelve la raz cuadrada Ejemplo:


select sqrt (16);

Se pueden emplear para estas funciones numericas el nombre de un campo de tipo numerico dentro de estas consultas.

Ejercicio:
Abre el programa SQL SERVET Management Studio Express o el RDBMS que tengas instalado. 2. Conctate a tu servidor. 3. Abre una nueva consulta

4. Genera una consulta que muestre los 8 primeros caracteres de los ttulos de la tabla libros empleando la funcin "substring()". 5. Ejecuta la sentencia y comprueba que la consulta se ha realizado con xito.

Use biblioteca; SELECT SUBSTRING (titulo, 1,8) as titulo FROM libros;

Ejercicio 2
Abre el programa SQL SERVET Management Studio Express o el RDBMS que tengas instalado. 2. Conctate a tu servidor. 3. Abre una nueva consulta. 4. Vamos a trabajar con la base de datos Biblioteca y la tabla Libros. 5. Realiza una consulta en la que muestres el ttulo y el autor de todos los libros poniendo los datos del campo autor en maysculas. 6. Ejecuta las sentencias y comprueba que se han realizado correctamente.
use biblioteca; select titulo, upper (autor) from libros;

Ejercicio 3

1. Abre el programa SQL SERVET Management Studio Express o el RDBMS que tengas instalado. 2. Conctate a tu servidor. 3. Abre una nueva consulta. 4. Vamos a trabajar con la base de datos Biblioteca y la tabla prstamos. 5. Realiza una consulta en la que muestres el cdigo, el nif y el nombre del mes en que se realizo el prstamo del libro. 6. Ejecuta las sentencias y comprueba que se han realizado correctamente.
use biblioteca; select codigo_de_tipo, nif, datename (month,prestamo_de_tipo) from prestamos;

VISTAS:
Una base de datos puede contener, aparte de las tablas donde se aloja la informacin propiamente dicha, otros objetos que facilitan el trabajo con ella o mejoran su rendimiento. Entre esos objetos se encuentran las vistas Las vistas son un recurso muy til para facilitar el acceso a la informacin a aquellos usuarios que no tienen un gran conocimiento del lenguaje SQL, as como un elemento de seguridad al ocultar a dichos usuarios la estructura real de las tablas y ofrecerles nicamente aquellos datos que precisan. Una vista almacena un objeto para utilizarse posteriormente; las tablas consultadas en una vista se llaman tablas base, en general se puede dar un nombre a cualquier consulta y almacenarla como una vista. Una vista suele llamarse tambin tabla virtual porque los resultados que retorna y la manera de referenciarlas es la misma que para una tabla. Las vistas permiten, ocultar informacin, permitiendo el acceso a algunos datos y mantenindolos oculta el resto de la informacin que no se incluye en la vista, el usuario opera con los datos de una vista como si se tratara de una tabla pudiendo modificar tales datos, simplificar la administracin de los permisos de usuarios, se pueden dar permisos para cada usuario para que solamente pueda acceder a los datos a travs de vistas en lugar de concederle permisos para acceder a ciertos campos asi se protegen las tablas base de cambios en su estructura. Mejora el rendimiento, se puede evitar tipear instrucciones repetidamente almacenando en una vista el resultado de una consulta compleja que incluye la informacin de varias tablas. Podemos crear vistas con un subconjunto de registros y campos de una tabla, una unin de varias tablas, combinacin de varias tablas, el resumen estadstico de varias tablas, un subconjunto de otras vistas y tablas. Una tabla se define utilizando un select SINTAXIS: CREATE view NOMBREVISTA as SENTENCIA SELECT From TABLA; El contenido de una vista se muestra con un select *

Select * from NOMBREVISTA; Vamos a crear una vista de la tabla socios cuyo nif aparezca en la tabla prestamos
create view VISTA_SOCIOS as select (apellidos+' '+nombre_de_tipo) as apellidos, nombre_de_tipo from socios as s join prestamos as p on s.nif=p.nif;

vemos el resultado de la vista


select * from vista_socios;

Para distinguir una tabla de una vista podemos fijar una convencin para darle nombres, por ejemplo colocar el sugijo vista y luego el nombre de la tabla consultado en ellas (vista_tabla) Los campos y expresiones que definen una vista deben tener un nombre se debe colocar nombre de campo cuando es un campo calculado o si hay dos campos con el mismo nombre, para ello se aplica un alias para que no haya campos con el mismo nombre. La eliminacin de una vista se lleva a cabo con la sentencia DROP Ejemplo: DROP view vista_socios

Con las vistas tambin se puede realizar filtrado de filas, la composicin de la consulta resulta mas compleja al usar la clausula where con su respectivo condicional de bsqueda. Por ejemplo, vamos a verificar los libros que hay disponibles para atender a la consulta de un socio trabajando directamente sobre la tabla libros se veria forzado a ir verficando la columna disponible fila a fila para saber si esta disponible o no, o si tuviera mas conocimiento podra realizar una consulta con la clausula where con la condicin disponible 's' ; pero seria mas fcil aun usando una vista. Creamos una vista (recuerden que debemos ingresar antes que vamos a utilizar la base de datos bibilioteca: use biblioteca;)
create view librosDisponibles AS select codigo, titulo from libros where disponible = 'S' para consultar los resultados select * from librosDisponibles

Se consulta como si fuese una tabla y por tanto se puede consultar cualquier cosa sobre ella siempre y cuando sus privilegios se lo permitan.

Ejemplo 2: vamos a buscar un libro al que el cdigo corresponda al numero 9


select * from librosDisponibles where codigo=9;

Si consultramos un cdigo que no este en la base de datos nos entregara una fila sin datos. Tambien podramos consultar entre los libros disponibles los que se ajustan a un patrn
select * from librosDisponibles where titulo like 'El%';

El filtrado de filas y columnas puede ser una funcion combinada en una vista, tambin podemos aadir clausulas, join, group by para agrupar las filas etc. Las vistas de de los ejemplos que hemos visto son tomadas de columnas de tablas existentes en la base de datos, ya sean de una nica tabla o de varias de ellas en el caso de que se efectue algn tipo de unin o combinacin, las vistas tambin pueden generar informacin propia a partir de columnas calculadas o derivadas usando para ello los operadores aritmticos y funciones; cuando una vista va a utilizar expresiones que generan columnas adicionales derivadas de las existentes es necesario que en la cabecera que va a asignarse a la vista, facilitemos entre parntesis los nombres de las columnas Ejemplo: CREATE VIEW MIVista(columna1, columna2); Otra opcin para ello es la clausula AS CREATE VIEW MiVista select expresin AS nombrecolumna Vamos a ver un ejemplo que facilita el nombre de cada autor y el numero de libros suyos que tenemos registrados utilizando la funcin COUNT y la clausula GROUP BY
CREATE VIEW LibrosAutor (autor, numtitulos) AS SELECT autor, COUNT (titulo) FROM libros GROUP BY autor Consultamos la vista SELECT * FROM LibrosAutor;

Existen algunas restricciones para el uso de "create view", a saber: - no puede incluir las clusulas "compute" ni "compute by" ni la palabra clave "into"; - no se pueden crear vistas temporales ni crear vistas sobre tablas temporales. - no se pueden asociar reglas ni valores por defecto a las vistas. - no puede combinarse con otras instrucciones en un mismo lote. Se pueden construir vistas sobre otras vistas.

Das könnte Ihnen auch gefallen