http://microsoftsqlsecret.fullblog.com.ar/update-masivo-actualizar-tablas-grances-sql-server.html
https://social.msdn.microsoft.com/Forums/es-ES/264fd1e3-3a0e-41c6-9aa7-55e6a8598261/update-masivo-a-tabla?forum=sqlserveres
miércoles, 24 de junio de 2015
lunes, 22 de junio de 2015
Operadores en SQL
Aprendimos que los operadores son símbolos que permiten realizar distintos tipos de operaciones.
SQL Server tiene 4 tipos de operadores:
- relacionales o de comparación
- lógicos
- aritméticos
- de concatenación.
Los operadores aritméticos permiten realizar cálculos con valores numéricos.
Son:
- multiplicación (*)
- división (/)
- módulo (%) (el resto de dividir números enteros)
- suma (+)
- resta (-)
Es posible obtener salidas en las cuales una columna sea el resultado de un cálculo y no un campo de una tabla.
Si queremos ver los títulos, precio y cantidad de cada libro escribimos la siguiente sentencia:
select titulo,precio,cantidad
from libros;
Si queremos saber el monto total en dinero de un título podemos multiplicar el precio por la cantidad por cada título, pero también podemos hacer que SQL Server realice el cálculo y lo incluya en una columna extra en la salida:
Si queremos saber el monto total en dinero de un título podemos multiplicar el precio por la cantidad por cada título, pero también podemos hacer que SQL Server realice el cálculo y lo incluya en una columna extra en la salida:
select titulo, precio,cantidad,
precio*cantidad
from libros;
Si queremos saber el precio de cada libro con un 10% de descuento podemos incluir en la sentencia los siguientes cálculos:
Si queremos saber el precio de cada libro con un 10% de descuento podemos incluir en la sentencia los siguientes cálculos:
select titulo,precio,
precio-(precio*0.1)
from libros;
También podemos actualizar los datos empleando operadores aritméticos:
También podemos actualizar los datos empleando operadores aritméticos:
update libros set precio=precio-(precio*0.1);
Todas las operaciones matemáticas retornan "null" en caso de error. Ejemplo: select 5/0;
Los operadores de concatenación: permite concatenar cadenas, el más (+).
Para concatenar el título, el autor y la editorial de cada libro usamos el operador de concatenación ("+"):
Todas las operaciones matemáticas retornan "null" en caso de error. Ejemplo: select 5/0;
Los operadores de concatenación: permite concatenar cadenas, el más (+).
Para concatenar el título, el autor y la editorial de cada libro usamos el operador de concatenación ("+"):
select titulo+'-'+autor+'-'+editorial
from libros;
Pero lo que realmente nos importa son los operadores Aritmeticos
Operadores aritméticos (Transact-SQL)
+ (Sumar): Suma dos números. Este operador aritmético de suma también puede sumar un número, en días, a una fecha.
Sintaxis: expression + expression
Expression: Es cualquier expresión válida de uno de los tipos de datos de la categoría numérica, excepto el tipo de datos bit. No se puede usar con los tipos de datos date, time, datetime2 o datetimeoffset.
Tipo de resusltado: Devuelve el tipo de datos del argumento con mayor prioridad.
Algunos ejemplos:
Utilizar el operador de suma para sumar días a valores de fecha y hora. En el ejemplo siguiente se suma un número de días a una fecha datetime.
USE master;
GO
SET NOCOUNT ON
DECLARE @startdate datetime, @adddays int;
SET @startdate = ''January 10, 1900 12:00 AM';
SET @adddays = 5;
SET NOCOUNT OFF;
SELECT @startdate + 1.25 AS 'Start Date',
@startdate + @adddays AS 'Add Date';
USE master;
GO
SET NOCOUNT ON
DECLARE @startdate datetime, @adddays int;
SET @startdate = ''January 10, 1900 12:00 AM';
SET @adddays = 5;
SET NOCOUNT OFF;
SELECT @startdate + 1.25 AS 'Start Date',
@startdate + @adddays AS 'Add Date';
- (Restar): Resta dos números (un operador aritmético de sustracción). También puede restar un número, en días, de una fecha.
Sintaxis: -- Core Syntax (common to SQL Server and SQL Database)
expression - expression
Expression: Es cualquier expresión válida de cualquiera de los tipos de datos de la categoría de tipos de datos numéricos, excepto bit. No se puede usar con los tipos de datos date, time, datetime2 o datetimeoffset.
Tipo de resusltado: Devuelve el tipo de datos del argumento con mayor prioridad.
Algunos ejemplos:
-Usar la resta en una instrucción SELECT
El ejemplo siguiente calcula la diferencia de tasa impositiva entre el estado o provincia con la tasa impositiva más alta y el que tiene la tasa impositiva más baja.
USE AdventureWorks2015;
GO
SELECT MAX(TaxRate) - MIN(TaxRate) AS 'Tax Rate Difference'
FROM Sales.SalesTaxRate
WHERE StateProvinceID IS NOT NULL;
GO
El ejemplo siguiente calcula la diferencia de tasa impositiva entre el estado o provincia con la tasa impositiva más alta y el que tiene la tasa impositiva más baja.
USE AdventureWorks2015;
GO
SELECT MAX(TaxRate) - MIN(TaxRate) AS 'Tax Rate Difference'
FROM Sales.SalesTaxRate
WHERE StateProvinceID IS NOT NULL;
GO
-Usar la resta en una fecha
En el ejemplo siguiente se resta un número de días de una fecha datetime. Se aplica a: SQL Server y a Base de datos SQL.
USE AdventureWorks2015;
GO
DECLARE @altstartdate datetime;
SET @altstartdate = CONVERT(DATETIME, ''January 10, 1900 3:00 AM', 101);
SELECT @altstartdate - 1.5 AS 'Subtract Date';
En el ejemplo siguiente se resta un número de días de una fecha datetime. Se aplica a: SQL Server y a Base de datos SQL.
USE AdventureWorks2015;
GO
DECLARE @altstartdate datetime;
SET @altstartdate = CONVERT(DATETIME, ''January 10, 1900 3:00 AM', 101);
SELECT @altstartdate - 1.5 AS 'Subtract Date';
* (Multiplicar):
Sintaxis: expression * expression
Expression: Es cualquier expresión válida de uno de los tipos de datos de la categoría de tipos de datos numéricos excepto los tipos de datos datetime y smalldatetime.
Tipo de resusltado: Devuelve el tipo de datos del argumento con mayor prioridad.
Algunos ejemplos:
En el siguiente ejemplo se recupera el número de identificación del producto, el nombre, el precio de venta y el precio de venta nuevo de todas las bicicletas de montaña de la tabla Product. El precio de venta nuevo se calcula con el operador aritmético * para multiplicar ListPrice por 1.15.
USE AdventureWorks2012;
GO
SELECT ProductID, Name, ListPrice, ListPrice * 1.15 AS NewPrice
FROM Production.Product
WHERE Name LIKE 'Mountain-%'
ORDER BY ProductID ASC;
GO
USE AdventureWorks2012;
GO
SELECT ProductID, Name, ListPrice, ListPrice * 1.15 AS NewPrice
FROM Production.Product
WHERE Name LIKE 'Mountain-%'
ORDER BY ProductID ASC;
GO
/ (Dividir):
Sintaxis: dividend / divisor
Argumentos:
dividendo
Es la expresión numérica que se va a dividir. dividend puede ser cualquier expresión válida de uno de los tipos de datos de la categoría de tipos de datos numéricos, excepto los tipos de datos datetime y smalldatetime.
divisor
Es la expresión numérica entre la que se va a dividir el dividendo. divisor puede ser cualquier expresión válida de uno de los tipos de datos de la categoría de tipos de datos numéricos, excepto los tipos de datos datetime y smalldatetime.
Tipo de resusltado: Devuelve el tipo de datos del argumento con mayor prioridad.
Si un dividend de tipo entero se divide entre un divisor de tipo entero, el resultado es un entero en el que se trunca la parte fraccionaria del resultado.
Algunos ejemplos:
En el siguiente ejemplo se utiliza el operador aritmético de división para calcular el objetivo de ventas mensual para los vendedores en Adventure Works Cycles.
USE AdventureWorks2012;
GO
SELECT s.BusinessEntityID AS SalesPersonID, FirstName, LastName, SalesQuota, SalesQuota/12 AS 'Sales Target Per Month'
FROM Sales.SalesPerson AS s
JOIN HumanResources.Employee AS e
ON s.BusinessEntityID = e.BusinessEntityID
JOIN Person.Person AS p
ON e.BusinessEntityID = p.BusinessEntityID;
Si un dividend de tipo entero se divide entre un divisor de tipo entero, el resultado es un entero en el que se trunca la parte fraccionaria del resultado.
Algunos ejemplos:
En el siguiente ejemplo se utiliza el operador aritmético de división para calcular el objetivo de ventas mensual para los vendedores en Adventure Works Cycles.
USE AdventureWorks2012;
GO
SELECT s.BusinessEntityID AS SalesPersonID, FirstName, LastName, SalesQuota, SalesQuota/12 AS 'Sales Target Per Month'
FROM Sales.SalesPerson AS s
JOIN HumanResources.Employee AS e
ON s.BusinessEntityID = e.BusinessEntityID
JOIN Person.Person AS p
ON e.BusinessEntityID = p.BusinessEntityID;
Algunos Videos
https://www.youtube.com/watch?v=UK8r--AcOb4Hora de Inicio 2:00 pm
Hora de Fin 5:00pm
Conectar SQL con Visual
El almacenamiento de los detalles de la cadena de conexión (como el nombre de servidor, el nombre de usuario y la contraseña) puede afectar a la seguridad de la aplicación. El uso de la Seguridad integrada de Windows es un modo más seguro de controlar el acceso a una base de datos. Para obtener más información, vea Seguridad de bases de datos.
Existen dos maneras de conectarse a SQL Server:
- Visualmente, con herramientas de tiempo de diseño.
- Mediante programación.
Conectar a SQL Server en el Explorador de servidores
El establecimiento de una conexión con SQL Server en el Explorador de servidores permite crear fácilmente objetos SqlConnection, SqlDataAdapter y SqlCommand arrastrando objetos de datos desde el Explorador de servidores hasta los formularios o diseñadores.
Para crear una conexión en el Explorador de servidores
- En el Explorador de servidores, haga clic con el botón secundario en Conexiones de datos y, a continuación, en Agregar conexión.Se abre el cuadro de diálogo Propiedades de vínculo de datos.
- El proveedor predeterminado es Proveedor de Microsoft OLE DB para SQL Server.
- Seleccione un nombre de servidor en la lista desplegable o escriba la ubicación del servidor donde se encuentra la base de datos a la que desea obtener acceso.
Nota Seleccionar la base de datos en el servidor es una acción diferente. Actualice la lista haciendo clic en Actualizar.
- En función de los requisitos de la base de datos o aplicación, seleccione la Seguridad integrada de Windows NT o utilice un nombre de usuario y una contraseña específicos para iniciar una sesión en el servidor SQL Server.
- Seleccione la base de datos a la que desea conectarse en la lista desplegable.
- Hacer clic en Aceptar.
Conectar a SQL Server desde la aplicación
La creación de conexiones a orígenes de datos desde la aplicación se puede llevar a cabo visualmente utilizando los diseñadores de Visual Studio .NET o mediante programación, creando objetos de conexión a datos en el código.
Conectar a SQL Server visualmente
Visual Studio admite la creación de objetos de datos arrastrando elementos desde el Explorador de servidores o la ficha Datos del Cuadro de herramientas hasta el formulario o diseñador.
Para crear una conexión desde el Explorador de servidores
- Cree una Conexión de datos en el Explorador de servidores para el servidor SQL Server.
- Arrastre la conexión hasta el formulario o el diseñador.Aparecerá un objeto SqlConnection en la bandeja de componentes.
Para crear una conexión desde la ficha Datos del Cuadro de herramientas
- Arrastre un objeto SqlConnection hasta el formulario o diseñador.Aparecerá un objeto SqlConnection no configurado en la bandeja de componentes.
- En la ventana Propiedades, haga clic en la propiedad ConnectionString.
- Seleccione una conexión existente en la lista desplegable o haga clic en Nueva conexión para abrir Propiedades de vínculo de datos (Cuadro de diálogo) y ahi se configuara una conexión nueva.
Conectar a SQL Server mediante programación
ESTE ES EL MODO QEU EL EQUIPO DECIDIO DE TRABAJAR, Para crear una conexión mediante programación entre la aplicación y una base de datos de SQL Server
Puede crear un objeto SqlConnection directamente en el código.
- El código siguiente crea un objeto SqlConnection, define la propiedad SqlConnection.ConnectionString y abre la conexión.
' Visual Basic Public Sub ConnectToSql() Dim conn As New SqlClient.SqlConnection ' TODO: Modify the connection string and include any ' additional required properties for your database. conn.ConnectionString = & _ "integrated security=SSPI;data source=SQL Server Name;" & _ "persist security info=False;initial catalog=northwind" Try conn.Open() ' Insert code to process data. Catch ex As Exception MessageBox.Show("Failed to connect to data source") Finally conn.Close() End Try End Sub // C# public void ConnectToSql () { System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection (); // TODO: Modify the connection string and include any // additional required properties for your database. conn.ConnectionString = "integrated security=SSPI;data source=SQL Server Name;" + "persist security info=False;initial catalog=northwind"; try { conn.Open(); // Insert code to process data. } catch (Exception ex) { MessageBox.Show("Failed to connect to data source"); } finally { conn.Close(); } }
Algunos de los videos observados
https://www.youtube.com/watch?v=y2Wv0NTnyDwhttps://www.youtube.com/watch?v=ipyeTsU-F48
Hora de Inico 8:30 am
Hora de Fin 12:00 md
domingo, 21 de junio de 2015
Combinando consultas multi-tabla
Hasta ahora hemos estudiado las consultas simples, las consultas multi-tabla y los diferentes tipos de JOIN en las consultas multi-tabla. Ahora no vemos en la obligación de aprender a operar con conjuntos de resultados.
Combinando consultas multi-tabla
Con las variantes INNER, LEFT, RIGHT y FULL de consults multi.tabla somos capaces de obtener registros relacionados y los registros relacionados + los registros no relacionados en uno de los dos lados o en ambos, básicamente estas combinaciones de los datos de dos tablas:

Por ejemplo, en el caso de la base de datos Nortwind, si queremos obtener los clientes que NO tienen pedidos. Sería equivalente a esto en nuestros diagramas de Venn:

Es decir, sería equivalente a una hipotética cláusula LEFT ONLY (que no existe en SQL) en la que estamos excluyendo el resultado del INNER JOIN.
Dado que lo que queremos es encontrar a los que no tienen relación, es decir, aquellos cuyo campo de unión en el JOIN no existe en la tabla de la derecha, podemos usar una sintaxis como esta:
SELECT T1.Col1, T1.Col2, T1.Col3, T2.Col7 FROM Tabla1 T1 LEFT [OUTER] JOIN Tabla2 T2 ON T1.Col1 = T2.Col1 WHERE T2.Col1 IS NULL
Es decir, basta con indicar que el campo en la tabla de la derecha es nulo, o sea, falla la relación por ese lado.
En nuestra base de datos de ejemplo si lanzamos esta consulta:
SELECT OrderID, C.CustomerID, CompanyName, OrderDate FROM Customers C FULL JOIN Orders O ON C.CustomerID = O.CustomerID WHERE O.CustomerID IS NULL
Obtendremos todos los clientes que no tienen pedidos, que como sabemos de otras ocasiones son solamente dos:

Así es como se obtienen los resultados con los campos correspondientes al pedido nulos.
Si solo nos interesara conocer qué clientes son estos sería fácil hacerlo con una consulta y su correspondiente sub-consulta, sin necesidad de usar un JOIN, de la siguiente manera:
SELECT CustomerID, CompanyName FROM Customers WHERE CustomerID NOT IN (SELECT DISTINCT CustomerID FROM Orders)
que nos devuelve la información que queremos pero la relación que buscamos es menos obvia y no involucra campos de la tabla de la derecha (a excepción de la clave externa, claro).
Exactamente del mismo modo pero cambiando la consulta por su “espejo” podríamos simular una hipotética función RIGHT ONLY de la siguiente manera:
SELECT T1.Col1, T1.Col2, T1.Col3, T2.Col7 FROM Tabla1 T1 LEFT [OUTER] JOIN Tabla2 T2 ON T1.Col1 = T2.Col1 WHERE T1.Col1 IS NULL
que es equivalente al siguiente diagrama:

Finalmente, se podría obtener únicamente todos los registros desparejados de la tabla de la izquierda y todos los desparejados de la tabla de la derecha para una hipotética operación EXCEPT INNER que no existe en SQL:

simplemente combinando ambas condiciones vistas antes:
SELECT T1.Col1, T1.Col2, T1.Col3, T2.Col7 FROM Tabla1 T1 LEFT [OUTER] JOIN Tabla2 T2 ON T1.Col1 = T2.Col1 WHERE T1.Col1 IS NULL OR T2.Col1 IS NULL
Con esto tenemos contempladas todas las operaciones entre dos conjuntos de tablas relacionadas.
Operaciones de conjuntos entre tablas independientes
Además de lo visto hasta ahora es posible combinar los resultados de dos consultas independientes y fusionarlos en uno solo o realizar otras operaciones de conjuntos.
Por ejemplo podemos tomar el nombre y apellidos de todos los clientes de una tabla de clientes, y combinarlos con el nombre y los apellidos de todos los proveedores de una tabla de proveedores. No existe relación alguna entre ellos, pero son datos compatibles y podemos querer combinarlos.
Del mismo modo, y asumiendo que puede haber solapamiento entre ambas tablas, podríamos querer averiguar qué clientes tenemos que además son proveedores, o al contrario, qué proveedores no son clientes.
Veamos como...
La cláusula UNION de SQL permite unir las filas devueltas por dos instrucciones SELECT. Para ello se debe cumplir que las columnas devueltas en ambas instrucciones coincidan en número y en tipo de datos de cada una de ellas, ya que en caso contrario dará un error al ejecutarse.
Su sintaxis es:
SELECT Columnas FROM … UNION [ALL] SELECT Columnas FROM …
Si utilizamos la opción ALL, aparecerán todas las filas devueltas por ambas instrucciones SELECT, pero si no la ponemos se eliminarán las filas repetidas.
Veamos un ejemplo con la base de datos Northwind:
SELECT ShipCountry FROM Orders UNION SELECT Country FROM Customers
Esta consulta nos devolverá la lista de todos los países de destino de los pedidos, unidos a los países de ubicación de los clientes (que no tienen por qué coincidir). En este caso, si lanzamos la consulta, obtendremos 21 registros.
Sin embargo añadiéndole la opción ALL:
SELECT ShipCountry FROM Orders UNION ALL SELECT Country FROM Customers
nos devolverá todos los registros existentes, aunque estén repetidos, y obtendremos 921 filas como resultado (¡frente a 21 de antes!).
Si tuviésemos en vez de una sola tabla de ventas (Orders), una tabla de ventas por cada año (por ejemplo Orders2001,Orders2002, Orders2003, Orders2004, Orders2005 y Orders2006). Si necesitamos un listado con el Nº de pedido, el nombre del empleado que la realizó, y la fecha, de todas las ventas del cliente cuyo código es ‘ALFKI’ a lo largo de todos esos años, podríamos combinar los resultados con UNION para obtener el listado consolidado:
SELECT O.OrderID, E.FirstName, O.OrderDate FROM Orders2001 O INNER JOIN Employees E ON O.EmployeeID = E.EmployeeID UNION ALL SELECT O.OrderID, E.FirstName, O.OrderDate FROM Orders2002 O INNER JOIN Employees E ON O.EmployeeID = E.EmployeeID UNION ALL SELECT O.OrderID, E.FirstName, O.OrderDate FROM Orders2003 O INNER JOIN Employees E ON O.EmployeeID = E.EmployeeID UNION ALL SELECT O.OrderID, E.FirstName, O.OrderDate FROM Orders2004 O INNER JOIN Employees E ON O.EmployeeID = E.EmployeeID UNION ALL SELECT O.OrderID, E.FirstName, O.OrderDate FROM Orders2005 O INNER JOIN Employees E ON O.EmployeeID = E.EmployeeID UNION ALL SELECT O.OrderID, E.FirstName, O.OrderDate FROM Orders2006 O INNER JOIN Employees E ON O.EmployeeID = E.EmployeeIDNota: También podríamos otras muchas cosas, como crear una vista basada en estas instrucciones SELECT y luego acceder a ella como si de una sola tabla se tratase, pero de momento no sabemos cómo hacer eso y de este modo vemos cómo usar UNION para conseguir el mismo resultado.
Además de esta instrucción, SQL incluye un par de instrucciones adicionales de gran utilidad para trabajar con conjuntos de tablas no relacionadas: EXCEPT e INTERSECT. Como cabría esperar por sus nombres, permiten respectivamente obtener diferencias de conjuntos e intersecar conjuntos.
Nota: Aunque la función INTERSECT está ampliamente adoptada por la mayoría sistemas gestores de bases de datos relacionales, la instrucción EXCEPT está disponible en SQL Server, pero en el caso de Oracle o MySQL se llama MINUS. Aunque cambie el nombre la forma de usarla es idéntica.
Al igual que UNION estas dos operaciones se usan colocándolas entre dos consultas que deben ser compatibles.
- INTERSECT devuelve los valores distintos devueltos por las consultas y comunes a ambas, con lo que obtenemos una intersección (sólo los registros que están entre los resultados de ambas consultas).
- EXCEPT (o MINUS) devuelve los valores de la primera consulta que no se encuentran en la segunda. Así podemos averiguar qué registros están en una consulta pero no en la otra, calculando la diferencia entre dos conjuntos de registros. Algo realmente útil en ocasiones y difícil de conseguir con instrucciones más simples.
Hora de Inicio 11:10 am
Hora de Fin 1:10 pm
sábado, 20 de junio de 2015
Consultas SELECT multi-tabla - JOIN
Consultas SELECT multi-tabla - JOIN
En una anterior entrada vimos lo básico de crear consultas con la instrucción SELECT. A continuación vamos a complicar un poco la cosa aprendiendo a realizar consultas en varias tablas de la base de datos al mismo tiempo.
Es habitual que queramos acceder a datos que se encuentran en más de una tabla y mostrar información mezclada de todas ellas como resultado de una consulta. Para ello tendremos que hacer combinaciones de columnas de tablas diferentes.
En SQL es posible hacer esto especificando más de una tabla en la cláusula FROM de la instrucción SELECT.
Lo cual es necesario para la realización de este tercer Proyecto
Tenemos varias formas de obtener esta información.
Una de ellas consiste en crear combinaciones que permiten mostrar columnas de diferentes tablas como si fuese una sola tabla, haciendo coincidir los valores de las columnas relacionadas.
Este último punto es muy importante, ya que si seleccionamos varias tablas y no hacemos coincidir los valores de las columnas relacionadas, obtendremos una gran duplicidad de filas, realizándose el producto cartesiano entre las filas de las diferentes tablas seleccionadas.
Vamos a ver este importante detalle con un ejemplo simple. Consideremos estas tres consultas sobre la base de datos Northwind:
SELECT COUNT(*) FROM Customers SELECT COUNT(*) FROM Orders SELECT COUNT(*) FROM Customers, Orders
La primera instrucción devuelve 91 filas (los 91 clientes), la segunda 830 filas (los pedidos), y la tercera 75.530 (que son 830 x 91, es decir, la combinación de todas las filas de clientes y de pedidos).
La otra manera de mostrar información de varias tablas -mucho más habitual y lógica- es uniendo filas de ambas, para ello es necesario que las columnas que se van a unir entre las dos tablas sean las mismas y contengan los mismos tipos de datos, es decir, mediante una clave externa.
Operaciones de unión - JOIN
La operación JOIN o combinación permite mostrar columnas de varias tablas como si se tratase de una sola tabla,combinando entre sí los registros relacionados usando para ello claves externas.
Las tablas relacionadas se especifican en la cláusula FROM, y además hay que hacer coincidir los valores que relacionan las columnas de las tablas.
Veamos un ejemplo, que selecciona el número de venta, el código y nombre del cliente y la fecha de venta en la base de datos Northwind:
SELECT OrderID, C.CustomerID, CompanyName, OrderDate FROM Customers C, Orders O WHERE C.CustomerID = O.CustomerID
Para evitar que se produzca como resultado el producto cartesiano entre las dos tablas, se expresa el vínculo que se establece entre las dos tablas en la cláusula WHERE. En este caso se relaciona ambas tablas mediante el identificador del cliente, clave existente en ambas. como se le ha otorgado un alias a cada tabla (C y O respectivamente) para no tener que escribir su nombre completo cada vez que necesitamos usarlas.
Hay que tener en cuenta que si el nombre de una columna existe en más de una de las tablas indicadas en la cláusula FROM, hay que poner, obligatoriamente, el nombre o alias de la tabla de la que queremos obtener dicho valor. En caso contrario nos dará un error de ejecución, indicando que hay un nombre ambiguo.
Hay otra forma adicional, que es más explícita y clara a la hora de realizar este tipo de combinaciones -y que se incorpora a partir de ANSI SQL-92- que permite utilizar una nueva cláusula llamada JOIN en la cláusula FROM, cuya sintaxis es el siguiente:En el caso del ejemplo anterior quedaría de la siguiente forma:
SELECT [ ALL / DISTINC ] [ * ] / [ListaColumnas_Expresiones] FROM NombreTabla1 JOIN NombreTabla2 ON Condiciones_Vinculos_Tablas
De esta manera relacionamos de manera explícita ambas tablas sin necesidad de involucrar la clave externa en las condiciones del SELECT (o sea, en el WHERE). Es una manera más clara y limpia de llevar a cabo la relación.
Esto se puede ir aplicando a cuantas tablas necesitemos combinar en nuestras consultas. Veamos un ejemplo en ambos formatos que involucra más tablas, en este caso las tablas de empleados, clientes y ventas:
SELECT OrderID, C.CustomerID, CompanyName, OrderDate FROM Customers C, Orders O, Employees E WHERE C.CustomerID = O.CustomerID AND O.EmployeeID = E.EmployeeID
El segundo formato permite distinguir las condiciones que utilizamos para combinar las tablas y evitar el producto cartesiano, de las condiciones de filtro que tengamos que establecer.
Veamos un ejemplo como el anterior, pero ahora además necesitamos que el cliente sea de España o el vendedor sea el número 5.
En el primer formato tendríamos algo como esto:
SELECT OrderID, C.CustomerID, CompanyName, OrderDate FROM Customers C, Orders O, Employees E WHERE (C.CustomerID = O.CustomerID AND O.EmployeeID = E.EmployeeID) AND (C.Country = 'Spain' OR E.EmployeeID = 5)
Es decir, estamos mezclando en el WHERE las uniones de tablas, y las condiciones concretas de filtro de la consulta, quedando todo mucho más liado.
Sin embargo usando el segundo formato con JOIN, la consulta es mucho más clara:
SELECT OrderID, C.CustomerID, CompanyName, OrderDate FROM Customers C JOIN Orders O ON C.CustomerID = O.CustomerID JOIN Employees E ON O.EmployeeID = E.EmployeeID WHERE C.Country = 'Spain' OR E.EmployeeID = 5
Aquí se aprecia claramente que la utilización de JOIN simplifica la lectura y comprensión de la instrucción SQL, ya que no necesita el uso de paréntesis y tiene una condición WHERE más sencilla.
También podemos utilizar una misma tabla con dos alias diferentes para distinguirlas. Veamos un ejemplo, supongamos que tenemos una columna sueldo en la tabla de empleados, y queremos saber los empleados que tienen un sueldo superior al del empleado 5:
SELECT EmployeeID FROM Employees E1 JOIN Employees E2 ON E1.Sueldo > E2.Sueldo WHERE E2.EmployeeID = 5
Con esto hemos aprendido lo básico de trabajar con varias tablas y generar combinaciones de datos entre éstas. Esto es de gran importancia para la realización de este proyecto
Hora de Inicio 3:35 pm
Hora de Fin 5:30 pm
Algunos ejemplos
Para reforzar lo investigado el día de ayer comenzaremos a ver algunos ejemplos del manejo de Consultas en SQL
Algunos ejemplos
Para terminar este repaso a las consultas simples practicarlas un poco, algunos ejemplos con la base de datos Northwind en SQL Server:
- Mostrar todos los datos de los Clientes:
SELECT * FROM Customers
- Mostrar apellido, ciudad y región (LastName, city, region) de los empleados de USA (nótese el uso de AS para darle el nombre en español a los campos devueltos):
SELECT E.LastName AS Apellido, City AS Ciudad, Region
FROM Employees AS E
WHERE Country = ‘USA’
- Mostrar los clientes que no sabemos a qué región pertenecen (o sea, que no tienen asociada ninguna región) :
SELECT * FROM Customers WHERE Region IS NULL
- Mostrar las distintas regiones de las que tenemos algún cliente, accediendo sólo a la tabla de clientes:
SELECT DISTINCT Region FROM Customers WHERE Region IS NOT NULL
- Mostrar los clientes que pertenecen a las regiones CA, MT o WA, ordenados por región ascendentemente y por nombre descendentemente.
CODE SELECT * FROM Customers WHERE Region IN(‘CA’, ‘MT’, ‘WA’)
ORDER BY Region, CompanyName DESC
- Mostrar los clientes cuyo nombre empieza por la letra “W”:
SELECT * FROM Customers WHERE CompanyName LIKE ‘W%’
- Mostrar los empleados cuyo código está entre el 2 y el 9:
SELECT * FROM Employees WHERE EmployeeID BETWEEN 2 AND 9
- Mostrar los clientes cuya dirección contenga “ki”:
SELECT * FROM Customers WHERE Address LIKE ‘%ki%’
- Mostrar las Ventas del producto 65 con cantidades entre 5 y 10, o que no tengan descuento:
SELECT * FROM [Order Details] WHERE (ProductID = 65 AND Quantity BETWEEN 5 AND 10) OR Discount = 0
Nota: En SQL Server, para utilizar nombres de objetos con caracteres especiales se deben poner entre corchetes. Por ejemplo en la consulta anterior [Order Details] se escribe entre corchetes porque lleva un espacio en blanco en su nombre. En otros SGBDR se utilizan comillas dobles (Oracle, por ejemplo: “Order Details”) y en otros se usan comillas simples (por ejemplo en MySQL).
Este día se trabajo en ver los ejemplos para comprender mejor lo que son las consultas y se realizaron pruebas de ejemplos
Hora de Inicio 8:00 am
Hoa de Fin 10:00 am
Suscribirse a:
Entradas (Atom)