universidad capitán general gerardo barrios facultad … · use select para declaraciones de...
TRANSCRIPT
Universidad Capitán General Gerardo Barrios
Facultad de Ciencia y Tecnología
Guía práctica II - Base de Datos I
Sentencias avanzadas de SQL, utilizadas en MySql - MariaDb,
con la base de datos Northwind.
Docente: Lic.Ms. William Alexander Flores Cardona
Fecha de Entrega: Miércoles, 2 de Abril de 2014
SELECCIÓN AVANZADA
Use SELECT para declaraciones de recuperación de valores calculados.
Trabajar con funciones agregadas y agrupación.
Trabajar con las funciones de la manipulación de datos del SQL.
A. Campos calculados:
Los campos calculados son campos que no existen en una tabla, pero se crean en la declaración del
SELECT. Por ejemplo, podría querer crear el nombre completo (Nombre y apellidos juntos) de
FirstName y LastName.
Eso se puede hacer de la siguiente forma:
Concatenación:
Es una palabra de fantasía que sirve para insertar palabras juntas con diferentes caracteres.
Ejemplo.
Para SQL SERVER, se utiliza el signo + en la concatenación.
SELECT FirstName + ' ' + LastName FROM Employees;
Para MySql, se utiliza la función CONCAT()
SELECT CONCAT(FirstName, ' ', LastName) FROM Employees;
Cálculos matemáticos:
Los cálculos matemáticos en SQL son similares a aquellos en otros lenguajes.
Operadores Matemáticos
Operador Descripción
+ Adición
- Substracción
* Multiplicación
/ División
% Módulo
Ejemplo:
Si el costo del flete es mayor o igual a 500,00 dólares, que ahora se graven en un 10%. Cree un informe que muestra la Identificación del pedido, flete, costos de flete con este impuesto para todos los pedidos de $ 500 o más.
/* If the cost of freight is greater than or equal to $500.00,it will now be taxed by 10%. Create a report that shows the order id, freight cost, reight cost with this tax for all orders of $500 or more. */
SELECT OrderID, Freight, Freight * 1.1 FROM Orders WHERE Freight >= 500;
Notará que la última columna (No column name), no
tiene nombre, para colocarle un nombre se utiliza la
palabra reservada AS.
Ej.
SELECT OrderID, Freight, Freight * 1.1 AS FreightTotal FROM Orders WHERE Freight >= 500;
B. Funciones agregadas y de agrupación:
Las funciones agregadas son usadas para calcular resultados usando datos de campo de
archivos múltiples. Hay cinco funciones agregadas comunes.
Funciones agregadas comunes
Función agregada Descripción
COUNT() Devuelve el número de filas que contienen valores no nulos en el campo
especificado.
SUM() Devuelve la suma de los valores no nulos en el campo especificado.
AVG() Devuelve el promedio de los valores no nulos en el campo especificado.
MAX() Devuelve el máximo de los valores no nulos en el campo especificado.
MIN() Devuelve mínimo de los valores no nulos en el campo especificado.
EJEMPLOS: COUNT, SUM, AVG,
Encontrar cuántos empleados, de la tabla empleados.
-- Find the Number of Employees SELECT COUNT(*) AS NumEmployees FROM Employees;
-- Find the Total Number of Units Ordered of Product ID 3 /****************************** SQL Server ******************************/ SELECT SUM(Quantity) AS TotalUnits FROM "Order Details" WHERE ProductID=3;
/****************************** Oracle and MySQL ******************************/ SELECT SUM(Quantity) AS TotalUnits FROM Order_Details WHERE ProductID=3;
-- Find the Average Unit Price of Products SELECT AVG(UnitPrice) AS AveragePrice FROM Products;
-- Find the Earliest and Latest Dates of Hire
SELECT MIN(HireDate) AS FirstHireDate, MAX(HireDate) AS LastHireDate FROM Employees;
La declaración ESCOGIDA devolverá el 1 de abril de 1992 y el 15 de noviembre de 1994 como el
FirstHireDate y LastHireDate, respectivamente. El formato de la fecha variará de la base de
datos a la base de datos.
C. Agrupación de Datos
- Group by.
Con la cláusula GROUP BY, las funciones agregadas se pueden aplicar a grupos de archivos basados en
valores de la columna. Por ejemplo, el código siguiente devolverá el número de empleados en cada
ciudad.
--Retrieve the number of employees in each city SELECT City, COUNT(EmployeeID) AS NumEmployees FROM Employees GROUP BY City;
- HAVING
La cláusula Having es usada para filtrar datos agrupados. Por ejemplo, el código siguiente
especifica que sólo queremos la información sobre ciudades que tienen más de un empleado.
/* Retrieve the number of employees in each city in which there are at least 2 employees. */ SELECT City, COUNT(EmployeeID) AS NumEmployees FROM Employees GROUP BY City HAVING COUNT(EmployeeID) > 1;
El orden de las cláusulas de la estructura SQL, es el siguiente:
1. SELECT
2. FROM
3. WHERE
4. GROUP BY
5. HAVING
6. ORDER BY
Ejemplo:
/* Find the number of sales representatives in each city that contains at least 2 sales representatives. Order by the number of employees. */
SELECT City, COUNT(EmployeeID) AS NumEmployees FROM Employees WHERE Title = 'Sales Representative' GROUP BY City HAVING COUNT(EmployeeID) > 1 ORDER BY NumEmployees;
Reglas en la agrupación de datos:
- Cada columna no agregada que aparece en la cláusula SELECT también debe aparecer en la
cláusula GROUP BY.
- Usted no puede usar los alias en la cláusula HAVING.
- Puede utilizar alias en la cláusula ORDER BY.
- Sólo podrá utilizar los campos calculados en la cláusula HAVING.
- Puede utilizar alias de campos calculados o campos reales en la cláusula ORDER BY.
D. DISTINCT (Selección de registros distintos)
La palabra clave DISTINCT es usada para seleccionar combinaciones distintas de valores de la
columna de una tabla. Por ejemplo, el ejercicio siguiente muestra cómo encontraría todas las ciudades
distintas en las cuales Northwind tiene empleados.
/* Find all the distinct cities in which Northwind has employees. */ SELECT DISTINCT City FROM Employees ORDER BY City
DISTINCT a menudo se usa con funciones agregadas. El ejemplo siguiente muestra cómo DISTINCT
puede ser usado para averiguar en cuantas ciudades diferentes Northwind tiene empleados.
/* Find out in how many different cities Northwind has employees. */ SELECT COUNT(DISTINCT City) AS NumCities FROM Employees
E. Funciones integradas de manipulación de datos
En esta sección, hablaremos de algunas funciones de la manipulación de datos integradas más
comunes. Lamentablemente, las funciones se diferencian enormemente entre bases de datos,
por tanto seguramente comprobaría su documentación de la base de datos usando estas
funciones.
Las tablas debajo muestran algunas funciones matemáticas más comunes, cadenas y funciones
de la fecha.
Funciones matemáticas comunes
Descripción Servidor de SQL Oráculo MySQL
Valor absoluto ABS ABS ABS
El número entero más
pequeño> = valor CEILING CEIL CEILING
Redondee al número
entero más cercano FLOOR FLOOR FLOOR
Poder POWER POWER POWER
Por ahí ROUND ROUND ROUND
Raíz cuadrada SQRT SQRT SQRT
El formateo de
números a dos sitios
decimales
CAST(num AS
decimal(8,2)) CAST(num AS
decimal(8,2))
FORMAT(num,2) o CAST(num AS
decimal(8,2))
Ejemplo:
/* Select freight as is and freight rounded to the first decimal (e.g, 1.150 becomes 1.200) from the Orders tables */ SELECT Freight, ROUND(Freight,1) AS ApproxFreight FROM Orders;
/* Select the unit price as is and unit price as a CHAR(10) from the Products tables */
SELECT UnitPrice, CAST(UnitPrice AS CHAR(10)) FROM Products;
/****************************** ADD CONCATENATION ******************************/
/****************************** MySQL ******************************/
SELECT UnitPrice, CONCAT('$',CAST(UnitPrice AS CHAR(10))) FROM Products;
Note que el CHAR(10) crea el espacio para 10 caracteres y si el precio unitario requiriera más de 10
caracteres lo tendría que aumentar en consecuencia.
F. Funcions de Cadena (Stirng) comunes:
Funciones de cadena (String) comunes
Descripción Servidor de SQL Oráculo MySQL
Convertir caracteres a minúscula LOWER LOWER LOWER
Convertir caracteres a mayúscula UPPER UPPER UPPER
Quite el rastreo de espacios en blanco RTRIM RTRIM RTRIM
Quite espacios en blanco principales LTRIM LTRIM LTRIM
Funciones de cadena (String) comunes
Descripción Servidor de SQL Oráculo MySQL
Subcadena SUBSTRING SUBSTR SUBSTRING
Ejemplo:
/* Select first and last name from employees in all uppercase letters */
SELECT UPPER(FirstName), UPPER(LastName) FROM Employees;
-- Select the first 10 characters of each customer's address
/****************************** SQL Server and MySQL ******************************/
SELECT SUBSTRING(Address,1,10) FROM Customers;
G. Funciones de fecha comunes
Funciones de fecha comunes
Descripción Servidor de SQL Oráculo MySQL
Adición de la fecha DATEADD (use +) DATE_ADD
Substracción de la fecha DATEDIFF (use -) DATEDIFF
Fecha del converso para ensartar DATENAME TO_CHAR DATE_FORMAT
Fecha del converso a número DATEPART TO_NUMBER(TO_CHAR) EXTRACT
Consiga la fecha corriente y tiempo GETDATE SYSDATE NOW
/****************************** MySQL ******************************/ -- Find the hiring age of each employee -- in versions of MySQL prior to 4.1.1
SELECT LastName, BirthDate, HireDate, YEAR(HireDate)-YEAR(BirthDate) AS HireAge FROM Employees;
-- In MySQL 4.1.1 and later, DATEDIFF() returns the number of days between -- two dates. You can then divide and floor to get age.
SELECT LastName, BirthDate, HireDate, FLOOR(DATEDIFF(HireDate,BirthDate)/365) AS HireAge FROM Employees ORDER BY HireAge;