
Transcription
Tutorial SQL básicoEl Structured Query Language, (Lenguaje Estructurado de búsqueda) el un lenguaje estándar utilizado porlos sistemas de gestión de bases de datos para realizar operaciones sobre los datos. Está formado porórdenes, cláusulas, operadores y funciones de agregados que se combinan para crear, extraer, manipular yactualizar las bases de datos. El lenguaje tiene dos partes bien diferenciadas el DDL (Data DefinitionLanguage), enfocado a la creación de las bases de datos, tablas, etc., y el DML (Data ManipulationLanguage), dedicado al trabajo con los datos ya creados. Este tutorial se dedicará sólo al DML.1. Selección de registrosLa recuperación de datos se hace con la sentencia SELECT. Su formato básico es el siguiente:SELECT { * ónBY listaColumnas [{ASC DESC}]1En los ejemplos del tutorial se utilizarán las siguientes tablas de ejemplo eJuanAnaBenitoMaríaMiriamLuisJuan JoséMaría ernardinaBartoloClientesApellidosCiudadEsteban Monterías AlicanteJiménez de la Calle MadridNoriega PérezAlicanteRamírez SalleCarchelejoRuíz BermudezPiedrahitaSanjosé de María SalamancaPons GómezGuadalajaraHerman VillaMedina del CampoFuertes AbrilMataróClavo GonzálezBarcelonaRoman PinoToledoRobles MontesMadridRiofrío Sepúlveda MóstolesSilla ValenciaIllescasCasas de JuánSevillaLamadrid CobosDos HermanasTomé 1280272893145200410044170128912PedidosIdPedido IdClienteFecha Producto Cantidad Precio Pagado110101 30/12/200273 14,75Sí210101 02/01/20038116No310101 01/07/2002194125Sí410101 30/06/20023158Sí510101 18/08/20025118,3No610101 08/03/200318288,7Sí710298 01/04/200311112,5Sí810298 01/12/20024122No910298 19/09/20028229No1010298 18/03/2003101 22,38Sí1Un ejemplo de la base de datos en formato Access se puede encontrar en el archivo ejemplo.mdb delcampus virtual o de www.colimbo.net.Luís Rodríguez Baena (UPSAM), 20061
Tutorial SQL básicoPedidosIdPedido IdClienteFecha Producto Cantidad Precio Pagado1110298 01/07/200215133Sí1210299 18/01/20036138Sí1310299 06/07/2002131 1250No1410315 02/02/2003318Sí1510330 01/01/20038428Sí1610330 30/06/200210128No1710330 19/04/2003121 16,75Sí1810339 27/07/20021414,5Sí1910410 28/10/2002181 89,22Sí2010410 30/01/200391 192,5SíProductosIdProductoProducto1 Almohada2 Bicicleta3 Canoa4 Casco5 Chubasquero6 Colchón inflable7 Hoola Hoop8 Linterna9 Monociclo10 Navaja11 Orejeras12 Pala13 Paracaidas14 Paraguas15 Patines16 Piolet17 Raquetas de nieve18 Saco de dormir19 Salvavidas20 Tienda1.1. SELECT básicoLa sentencia de recuperación básica esSELECT {* listaColumnas} FROM tablatabla es alguna de las tablas de la base de datos. La lista columnas será una o más columnas de latabla separadas por comas El carácter * se utilizará para recuperar todos los campos.SELECT * FROM ClientesRecupera todas las columnas de la tabla isJuan JoséMaría JoséDoloresVicenteApellidosEsteban MonteríasJiménez de la CalleNoriega PérezRamírez SalleRuíz BermudezSanjosé de MaríaPons GómezHerman VillaFuertes AbrilClavo drahitaSalamancaGuadalajaraMedina del CampoMataróBarcelonaLuís Rodríguez Baena (UPSAM), 03008231920550037008190044740008302080072
Tutorial SQL toloApellidosRoman PinoRobles MontesRiofrío SepúlvedaSilla ValenciaCasas de JuánLamadrid CobosTomé Dos 128912SELECT Nombre, Apellidos, Ciudad FROM ClientesRecupera las columnas Nombre, Apellidos y Ciudad de la tabla ClientesNombreJuanAnaBenitoMaríaMiriamLuisJuan JoséMaría ernardinaBartoloApellidosEsteban MonteríasJiménez de la CalleNoriega PérezRamiréz SalleRuíz BermudezSanjosé de MaríaPons GómezHerman VillaFuertes AbrilClavo GonzálezRoman PinoRobles MontesRiofrío SepúlvedaSilla ValenciaCasas de JuánLamadrid CobosTomé rahitaSalamancaGuadalajaraMedina del SevillaDos HermanasLeganésFiltrado de filasLa cláusula WHERE se utiliza para filtrar las columnas seleccionadas. Su formato básico es WHEREcondiciónSelección, donde condiciónSeleccion está formado por uno o mas test unidos mediantelos operadores lógicos OR, AND o NOT.Test de comparaciónUtiliza los operadores de relación ( , , , , , ) para comparar dos expresiones.SELECT Apellidos, nombre, Ciudad FROM Clientes Where Ciudad 'Madrid'Recupera las columnas Apellido, Fecha y Ciudad de la tabla Clientes para aquellos clientes cuya ciudad seaMadridApellidosJiménez de la CalleRobles MontesNombreAnaEstebanCiudadMadridMadridSELECT Producto, Fecha, Precio FROM Pedidos WHERE Precio 100Recupera las columnas Producto, Fecha y Precio de la tabla Pedidos para los productos cuyo precio seamayor que 100 euros.Producto19139Fecha01/07/2002 0:00:0006/07/2002 0:00:0030/01/2003 0:00:00SELECT ís Rodríguez Baena (UPSAM), 2008Fecha,PrecioFROMPedidosWHEREFecha 3
Tutorial SQL básicoRecupera las columnas IdPedido, Producto, Fecha y Precio de la tabla Pedidos para los pedidos cuya fechasea posterior o igual al 19 de marzo de 2003 (Nota: el formato de fechas puede variar dependiendo delgestor de bases de datos utilizado, en Access , los literales de fecha se separan por el carácter # mientrasque en SQL Express se utilizan las comillas simples como separador).IdPedido717Producto1112Fecha01/04/2003 0:00:0019/04/2003 0:00:00Precio12,516,75Test de rangoExamina si el valor de una expresión se encuentra dentro de un rango determinado:expresión [NOT] BETWEEN expr1 AND expr2SELECT IdCliente, Apellidos,Nombre FROM ClientesWHERE IdCliente BETWEEN 10200 AND 10300Recupera los clientes cuyo identificador sea mayor o igual que 10200 y menor o igual que 10300IdCliente1029810299ApellidosJiménez de la CalleNoriega PérezNombreAnaBenitoTest de pertenencia a un conjuntoExamina si la expresión es alguno de los valores incluidos en la lista de valores.expresión IN (listaValores)dónde listaValores está formada por uno o más valores separados por comas.SELECTApellidos,Nombre, Ciudad FROM ClientesWHERE Ciudad IN ('Madrid','Barcelona')Recupera los clientes de Madrid o BarcelonaApellidosJiménez de la CalleClavo GonzálezRobles MadridLa lista de valores también puede recoger una consulta SELECT SQL para realizar subconsultas.SELECTApellidos,Nombre, Ciudad FROM ClientesWHERE IdCliente IN(SELECT IdCliente FROM Pedidos WHERE Precio 100)Recupera el apellido, nombre y ciudad de los clientes que tuvieran pedidos con un precio superior a 100euros.ApellidosEsteban MonteríasNoriega PérezRoman edoTest de valor nuloExamina las filas para averiguar si algún campo tiene valor nulo.columna IS [NOT] NULLSELECT * FROM Pedidos WHERE Precio IS NULLRecupera todos los campos de la tabla Pedidos de aquellas filas que no tengan valor en el campo Test de correspondencia con patrón (comodines)Examina el valor de una columna y lo compara con un patrón. Un patrón es una expresión de cadena quepuede contener comodines. Los comodines utilizados en ANSI SQL son el símbolo de porcentaje (%) que,Luís Rodríguez Baena (UPSAM), 20084
Tutorial SQL básicosituado al comienzo o final de una cadena, sustituye a cualquier número de caracteres, el guión bajo ( ) quesustituye a un único carácter (Nota: el SQL de Access utiliza como comodines el asterisco (*) para sustituira cualquier carácter y la interrogación (?) para sustituir a un único carácter. El formato del test decorrespondencia es:columna [NOT] LIKE patrónSELECT Apellidos, Nombre, Ciudad FROM Clientes WHERE Ciudad LIKE 'M%'Recupera las filas de la tabla Clientes cuyo campo ciudad comience por la letra MApellidosJiménez de la CalleHerman VillaFuertes AbrilRobles MontesRiofrío SepúlvedaNombreAnaMaría JoséDoloresEstebanGonzaloCiudadMadridMedina del CampoMataróMadridMóstolesSELECT Apellidos, Nombre, Ciudad FROM Clientes WHERE Ciudad LIKE '%a'Recupera las filas de la tabla Clientes cuyo campo ciudad termine por la letra aApellidosRuíz BermudezSanjosé de MaríaPons GómezClavo GonzálezCasas de JuánNombreMiriamLuisJuan araBarcelonaSevillaSELECT Apellidos, Nombre, Ciudad FROM Clientes WHERE Ciudad LIKE 'Ma 'Recupera las filas de la tabla Clientes cuyo campo ciudad comience por la cadena Ma y tenga cuatro letrasmás.ApellidosJiménez de la CalleFuertes AbrilRobles dridOrdenación de filasPara ordenar los resultados de la consulta según algún criterio determinado se utiliza la cláusula ORDER BY.ORDER BY columna [{ASC DESC}] De forma predeterminada el criterio de ordenación es ascendente, aunque es posible cambiarlo mediante lapalabra DESC.Es posible ordenar por varias columnas separándolas por comas, indicando por cada una si la ordenaciónse hará de forma ascendente o descendente.SELECT * FROM Clientes WHERE Ciudad LIKE 'M%' ORDER BY ApellidosRecupera las filas de la tabla Clientes cuyo campo ciudad empiece por la letra M y ordenando el resultadode forma ascendente por la columna oloresMaría JoséAnaGonzaloEstebanApellidoFuertes AbrilHerman VillaJiménez de la CalleRiofrío SepúlvedaRobles MontesCiudadMataróMedina del MadridMadridMadridSELECT * FROM Clientes WHERE Ciudad LIKE 'M%' ORDER BY Ciudad, ApellidosRecupera las filas de la tabla Clientes cuyo campo ciudad empiece por la letra M y ordenando el resultadode forma ascendente por las columnas Ciudad y ApellidoIdCliente10298NombreAnaApellidoJiménez de la CalleLuís Rodríguez Baena (UPSAM), 2008CiudadMadridProvinciaMadrid5
Tutorial SQL oloresMaría JoséGonzaloApellidoRobles MontesFuertes AbrilHerman VillaRiofrío SepúlvedaCiudadMadridMataróMedina del SELECT * FROM PedidosWHERE IdCliente 10300ORDER BY IdCliente ASC, Precio DESCRecupera las filas de la tabla Pedidos cuyo campo IdCliente sea menor que 10300 y ordenando losresultados de forma ascendente por el identificador de cliente y descendente por el campo 10299Fecha01/07/2002 0:00:0008/03/2003 0:00:0030/06/2002 0:00:0018/08/2002 0:00:0002/01/2003 0:00:0030/12/2002 0:00:0001/07/2002 0:00:0019/09/2002 0:00:0018/03/2003 0:00:0001/12/2002 0:00:0001/04/2003 0:00:0006/07/2002 0:00:0018/01/2003 seTrueFalseTrue1.2. Uso de expresiones en las columnasEn la lista de columnas también se pueden incluir expresiones. En estos casos el resultado de la columnaaparecerá el resultado de la expresión.SELECT IdCliente, Fecha, Producto, Cantidad*Precio FROM PedidosWHERE IdCliente 10101Recupera los campos IdCliente, Fecha, Producto y el valor de multiplicar la columna Cantidad por lacolumna Precio de la tabla de Pedidos del cliente 0/12/2002 0:00:0002/01/2003 0:00:0001/07/2002 0:00:0030/06/2002 0:00:0018/08/2002 0:00:0008/03/2003 a cabecera de la columna resultante lo genera el gestor de bases de datos, aunque es posible dar unnombre mediante la cláusula AS.nombreColumna AS cabeceraColumnaSELECT IdCliente, Fecha, Producto, Cantidad*Precio AS Total FROM PedidosWHERE IdCliente 0/12/2002 0:00:0002/01/2003 0:00:0001/07/2002 0:00:0030/06/2002 0:00:0018/08/2002 0:00:0008/03/2003 sta cláusula también se puede utilizar para cambiar la cabecera de columna de cualquier campo.Luís Rodríguez Baena (UPSAM), 20086
Tutorial SQL básicoSELECT IdCliente AS [Identificador cliente], Fecha, Producto,Cantidad*Precio AS Total FROM PedidosWHERE IdCliente 10101Identificador 02 0:00:0002/01/2003 0:00:0001/07/2002 0:00:0030/06/2002 0:00:0018/08/2002 0:00:0008/03/2003 .3. Funciones de agregadoEn los nombres de columnas también se pueden utilizar funciones de agregado que realizan un cálculosobre el total de las filas seleccionadas. Las funciones que se pueden utilizar DescripciónCuenta el número de valores distintos de nulo que hay en la columnaCuenta el numero de filasRealiza la suma de todas los valores devueltos por la expresiónRealiza la media de todos los valores devueltos por la expresiónDevuelve el valor máximo de la expresiónDevuelve el valor mínimo de la expresiónSELECT COUNT(Precio) FROM PedidosDevuelve el número de filas cuyo campo precio es distinto de nuloExpr120SELECT COUNT(*) FROM PedidosDevuelve el número de filas total de la tabla PedidosExpr120SELECT SUM(Precio*Cantidad) FROM Pedidos WHERE IdCliente 10101Devuelve la suma del Precio * Unidad para el cliente 10101Expr1813,95SELECT AVG(Precio) FROM PedidosDevuelve el precio medio de la tabla PedidosExpr1104,73SELECT MAX(Fecha) FROM PedidosDevuelve la fecha del último pedidoExpr119/04/2003 0:00:001.4. Unión de tablasLas bases de datos relacionales se caracterizan, precisamente, por su capacidad para relacionar sus tablasa partir de campos comunes (en las tablas de ejemplo el campo común sería la columna IdCliente).Partiendo de esto, sería posible obtener información a partir el contenido de diversas tablas yrelacionándolas por su campo común. Para relacionar varias tablas sería necesario especificar en lacláusula FROM las tablas que se van a relacionar y especificar la relación en la cláusula WHERE.Luís Rodríguez Baena (UPSAM), 20087
Tutorial SQL básicoSELECT listaColumnasFROM tabla1,tabla2, WHERE tabla1.campoRelación tabla2.campoRelación Obsérvese que en la relación se han especificado las columnas con el cualificadortabla1.campoRelación. Esto es necesario si el nombre del campo que relaciona las dos tablas tiene elmismo nombre en ambas. El cualificador también será necesario si en la listaColumnas aparece algúncampo con un nombre común.SELECT Clientes.IdCliente, Apellidos, Nombre, Ciudad,IdPedido, Fecha, Productos.ProductoFROM Clientes, Pedidos, ProductosWHERE Clientes.IdCliente Pedidos.IdClienteAND Pedidos.Producto Productos.IdProductoORDER BY Fecha, Pedidos.IdClienteDevuelve las columnas IdCliente, Apellidos, Nombre, y Ciudad de la tabla Clientes; las columnas IdPedido,Fecha de la tabla Pedidos, y la columna Producto de la tabla productos sacando la información de las filasen las que coincida el campo IdCliente y el producto del pedido coincida con el identificador de producto dela tabla pedidos, ordenando el resultado por las columnas Fecha e IdCliente de la tabla 01102981029810330ApellidoEsteban MonteríasPons GómezEsteban MonteríasJiménez de la CalleNoriega PérezFuertes AbrilEsteban MonteríasJiménez de la CalleRoman PinoJiménez de la CalleEsteban MonteríasPons GómezEsteban MonteríasNoriega PérezRoman PinoRamiréz SalleEsteban MonteríasJiménez de la CalleJiménez de la CallePons GómezNombreJuanJuan JoséJuanAnaBenitoDoloresJuanAnaJaimeAnaJuanJuan JoséJuanBenitoJaimeMaríaJuanAnaAnaJuan 610717Fecha30/06/2002 0:00:0030/06/2002 0:00:0001/07/2002 0:00:0001/07/2002 0:00:0006/07/2002 0:00:0027/07/2002 0:00:0018/08/2002 0:00:0019/09/2002 0:00:0028/10/2002 0:00:0001/12/2002 0:00:0030/12/2002 0:00:0001/01/2003 0:00:0002/01/2003 0:00:0018/01/2003 0:00:0030/01/2003 0:00:0002/02/2003 0:00:0008/03/2003 0:00:0018/03/2003 0:00:0001/04/2003 0:00:0019/04/2003 dasParaguasChubasqueroLinternaSaco de dormirCascoHoola HoopLinternaLinternaColchón inflableMonocicloCanoaSaco de dormirNavajaOrejerasPala2. Actualización de datos2.1. Modificar filasLa sentencia UPDATE modifica los registros de una tabla, asignando a una o más columnas un valor distinto.La sentencia actuará en todas las filas a no ser que se utilice una cláusula WHERE.UPDATE nombreTabla SET (nombreColumna expresión, ) [WHERE condiciónSelección]El tipo de dato de la expresión debe coincidir con el tipo de dato de la columna.UPDATE Pedidos SET Precio Precio * 1.01Actualiza todas las filas de la tabla Pedidos, aumentando el Precio en un 10%.UPDATE Clientes SET Provincia 'Madrid',Ciudad 'Alcobendas'WHERE IdCliente 10101Actualiza los datos del cliente 10101, modificando el valor de sus columnas Provincia y CiudadLuís Rodríguez Baena (UPSAM), 20088
Tutorial SQL básico2.2. Añadir filasLa sentencia INSERT se utiliza para añadir registros en una tabla. Para ello, habrá que proporcionar elnombre de la tabla mediante la cláusula INTO, la lista de campos entre paréntesis y la lista de valores en lacláusula VALUES.INSERT INTO nombreTabla (listaColumnas) VALUES (listaExpresiones)La listaColumnas puede contener todos o sólo algunos de los nombre de las columnas de la tabla. Si latabla tiene definidos campos obligatorios (cómo por ejemplo, una clave primaria), será necesario incluirlos.La lista de expresiones contendrá una serie de expresiones separados por comas con los valores quetendrán las columnas de la nueva fila. La asignación entre la columna y los valores se hace por posición y eltipo de dato deberá ser el mismo.INSERT INTO Clientes (IdCliente, Nombre, Apellidos) VALUES(20202,'John','Smith')Inserta una nueva fila en la tabla Clientes con el IdCliente 20202, el Nombre ‘John’ y el Apellidos ‘Smith’. Elresto de campos los dejará vacíos.2.3. Eliminar filasLa instrucción DELETE se utiliza para eliminar filas de una tabla. La cláusula WHERE es opcional, aunquenormalmente se utilizará ya que, en caso contrario, se eliminarían todas las filas.DELETE FROM nombreTabla [WHERE condiciónSelección]DELETE FROM Pedidos WHERE IdCliente 10101Elimina todos los pedidos del cliente 10101Luís Rodríguez Baena (UPSAM), 20089
Tutorial SQL básico El Structured Query Language, (Lenguaje Estructurado de búsqueda) el un lenguaje estándar utilizado por los sistemas de gestión de bases de datos para realizar operaciones sobre los datos. Está formado por órdenes, cláusulas, operadores y funciones de agregados que se combinan para crear, extraer, manipular y