Unidad Iii Consultas Avanzadas en Base de Datos
Unidad Iii Consultas Avanzadas en Base de Datos
CONSULTAS AVANZADAS EN
BASE DE DATOS
AUTOR:
BERRIOS WUILMER
PROFESORA:
ARAGOZA ROSSANA
UNIDAD CURRICULAR:
MODELADO DE BASE DE DATOS
1. CONSULTAS AVANZADAS
La unión de tablas
Esta operación se utiliza cuando tenemos dos tablas con las mismas columnas y
queremos obtener una nueva tabla con las filas de la primera y las filas de la segunda. En
este caso la tabla resultante tiene las mismas columnas que la primera tabla (que son las
mismas que las de la segunda tabla).
Por ejemplo tenemos una tabla de libros nuevos y una tabla de libros antiguos y
queremos una lista con todos los libros que tenemos. En este caso las dos tablas tienen
las mismas columnas, lo único que varía son las filas, además queremos obtener una lista
de libros (las columnas de una de las tablas) con las filas que están tanto en libros nuevos
como las que están en libros antiguos, en este caso utilizaremos este tipo de operación.
Cuando hablamos de tablas pueden ser tablas reales almacenadas en la base de datos o
tablas lógicas (resultados de una consulta), esto nos permite utilizar la operación con más
frecuencia ya que pocas veces tenemos en una base de datos tablas idénticas en cuanto
a columnas. El resultado es siempre una tabla lógica.
Por ejemplo queremos en un sólo listado los productos cuyas existencias sean iguales
a cero y también los productos que aparecen en pedidos del año 90. En este caso
tenemos unos productos en la tabla de productos y los otros en la tabla de pedidos, las
tablas no tienen las mismas columnas no se puede hacer una unión de ellas pero lo que
interesa realmente es el identificador del producto (idfab, idproducto), luego por una parte
sacamos los códigos de los productos con existencias cero (con una consulta), por otra
parte los códigos de los productos que aparecen en pedidos del año 90 (con otra
consulta), y luego unimos estas dos tablas lógicas.
El operador que permite realizar esta operación es el operador UNION.
2. SUB-CONSULTAS ESCALARES
Una subconsulta escalar es una consulta SELECT regular entre paréntesis que
devuelve exactamente un valor: una fila con una columna. La consulta se ejecuta y el
valor devuelto se utiliza en la consulta externa. Si la subconsulta devuelve cero filas, el
valor de la expresión de subconsulta es nulo. Si devuelve más de una fila, Amazon
Redshift devuelve un error. La subconsulta puede referirse a variables de la consulta
principal, que actuarán como constantes durante una invocación de la subconsulta.
Puede usar las subconsultas escalares en la mayoría de instrucciones que requiere
una expresión. Las subconsultas escalares no son expresiones válidas en los siguientes
casos:
Como valores predeterminados para expresiones
En cláusulas GROUP BY y HAVING
Ejemplo
La siguiente subconsulta calcula el precio promedio pagado por venta en todo el 2008,
luego la consulta externa utiliza ese valor en el resultado para compararlo con el precio
promedio por venta por trimestre:
select qtr, avg(pricepaid) as avg_saleprice_per_qtr,
(select avg(pricepaid)
from sales join date on sales.dateid=date.dateid
where year = 2008) as avg_saleprice_yearly
from sales join date on sales.dateid=date.dateid
where year = 2008
group by qtr
order by qtr;
qtr | avg_saleprice_per_qtr | avg_saleprice_yearly
-------+-----------------------+----------------------
1 | 647.64 | 642.28
2 | 646.86 | 642.28
3 | 636.79 | 642.28
4 | 638.26 | 642.28
(4 rows)
Las consultas son objetos que vamos a utilizar para visualizar parte de la información
contenida en nuestras bases de datos desde una perspectiva más detallada y más
adaptada a las necesidades concretas a una situación puntual, en contraposición al
contenido total de las tablas de nuestra base de datos.
Se pueden realizar sobre una o varias tablas relacionadas y el resultado que devuelven se
muestran también en forma de tabla.
SUB-CONSULTAS
Una subconsulta, o una consulta dentro de una consulta, pueden ponerse dentro de la
cláusula WHERE de una consulta. Esto produce una expansión de las capacidades de
una cláusula WHERE.
La consulta que incluye a esta subconsulta se llama consulta externa (outer query) o
consulta principal. La subconsulta puede ejecutarse lógicamente antes de que alguna fila
sea examinada por la consulta principal. En cierto sentido, la subconsulta es
independiente de la consulta principal. Esta podría ejecutarse como una consulta
propiamente dicha. Se dice que esta clase de subconsulta no está correlacionada con la
consulta principal. Las subconsultas pudieran también estar correlacionadas.
Cómo utilizar sub-consultas
Cuando decida utilizar sub-consultas, tenga en cuenta los siguientes hechos e
instrucciones:
• Las sub-consultas se deben incluir entre paréntesis.
• Se pueden utilizar sub-consultas en lugar de una expresión siempre y cuando-se
devuelva un solo valor o una lista de valores.
• Se pueden utilizar sub-consultas que devuelvan un conjunto de registros de varias
columnas en-lugar de una tabla o para realizar la misma función que una combinación.
• No se pueden utilizar subconsultas que recuperen columnas con tipos de datos Text e
image.
• Puede tener subconsultas dentro de subconsultas, con una anidación de hasta 32
niveles. El límite varía según la cantidad de memoria disponible y la complejidad de las
otras expresiones de la consulta. Las consultas individuales pueden no admitir una
anidación de hasta 32 niveles.
3. Sub-Consultas que producen valores escalares:
Un valor escalar puede ser entendido como un valor numérico, aunque también se
consideran escalares los caracteres o las cadenas de caracteres (considerando éstas
como un tipo de datos elemental, no como un vector de caracteres).
Una sub consulta que obtiene exactamente un valor de una columna de una fila es
también llamada sub consulta escalar. El valor de una expresión en una sub consulta
escalar es el valor del elemento de la lista seleccionado de la sub consulta.
Ejemplo: Empleados que ganan más que el promedio de salarios pagados en el
departamento 20.
Subconsultas que producen un valor escalar en la parte más interna.
SELECT nombre, salario
FROM empleado
WHERE salario > (select AVG (salario)
FROM empleado
WHERE dpto. = 20);
Puedo utilizar operadores para comparar escalares.
Ejemplo: =, > , < , etc.
SELECT AVG(sum_column1)
FROM (SELECT SUM(column1) AS sum_column1
FROM t1 GROUP BY column1) AS t1;
Tenga en cuenta que el nombre de columna usado dentro de la
subconsultas (sum_column1) se reconoce en la consulta exterior.
Las subconsultas en la cláusula FROM pueden retornar un escalar, columna, registro o
tabla. De momento, las subconsultas en la cláusula FROM no pueden ser subconsultas
corraladas.
Las subconsultas en la cláusula FROM se ejecutan incluso para el
comando EXPLAIN (esto es, se construyen las tablas temporales derivadas). Esto ocurre
porque las consultas de niveles superiores necesitan información acerca de todas las
tablas durante la fase de optimización.
7. Eliminación de duplicados, agrupación y agregación en SQL
Hay dos métodos frecuentes que puede usar para eliminar registros duplicados de una
tabla de SQL Server. Para la demostración, empiece por crear una tabla y datos de
ejemplo:
create table original_table (key_value int )
insert into original_table values (1)
insert into original_table values (1)
insert into original_table values (1)
DELETE original_table
WHERE key_value
IN (SELECT key_value
FROM duplicate_table)
INSERT original_table
SELECT *
FROM duplicate_table
De esta manera sabremos que existen en total 830 pedidos en la base de datos, 323
registros que tienen asignada una zona de entrega, la fecha del pedido más antiguo (el 10
de julio de 1996), la fecha del pedido más reciente (el 6 de mayo de 1998 ¡los datos de
ejemplo son muy antiguos!), el total de peso enviado entre todos los pedidos (64.942,69
Kg o sea, más de 64 toneladas) y el peso promedio de los envíos (78,2442Kg). No está
mal para una consulta tan simple.
Como podemos observar del resultado de la consulta anterior, las funciones de
agregación devuelven una sola fila, salvo que vayan unidas a la cláusula GROUP BY, que
veremos a continuación.
Funciones de agrupación
o La cláusula GROUP BY unida a un SELECT permite agrupar filas según
las columnas que se indiquen como parámetros, y se suele utilizar en
conjunto con las funciones de agrupación, para obtener datos resumidos
y agrupados por las columnas que se necesiten.
o Hemos visto en el ejemplo anterior que obteníamos sólo una fila con los
datos indicados correspondientes a toda la tabla. Ahora vamos a ver con
otro ejemplo cómo obtener datos correspondientes a diversos grupos de
filas, concretamente agrupados por cada empleado:
SELECT EmployeeID, COUNT(*) AS TotalPedidos, COUNT(ShipRegion) AS
FilasNoNulas,
MIN(ShippedDate) AS FechaMin, MAX(ShippedDate) AS FechaMax,
SUM(Freight) PesoTotal, AVG(Freight) PesoPromedio
FROM Orders
GROUP BY EmployeeID
En este caso obtenemos los mismos datos pero agrupándolos por empleado, de modo
que para cada empleado de la base de datos sabemos cuántos pedidos ha realizado,
cuándo fue el primero y el último, etc...
De hecho nos resultaría muy fácil cruzarla con la tabla de empleados, usando lo
aprendido sobre consultas multi-tabla, y que se devolvieran los mismos resultados con el
nombre y los apellidos de cada empleado:
En este caso fíjate en cómo hemos usado la expresión Employees.FirstName + ' '
+Employees.LastName como parámetro en GROUP BY para que nos agrupe por un
campo compuesto (en SQL Server no podemos usar alias de campos para las
agrupaciones). De esta forma tenemos casi un informe preparado con una simple
consulta de agregación.
La cláusula GROUP BY se puede utilizar con más de un campo al mismo tiempo. Si
indicamos más de un campo como parámetro nos devolverá la información agrupada por
los registros que tengan el mismo valor en los campos indicados.
Por ejemplo, si queremos conocer la cantidad de pedidos que cada empleado ha
enviado a través de cada transportista, podemos escribir una consulta como la siguiente:
Shippers.CompanyName AS Transportista,
COUNT(Orders.OrderID)AS NumPedidos
Así, sabremos que Andrew Fuller envió 25 pedidos con Federal Shipping, y 35 con
Federal Express.
El utilizar la cláusula GROUP BY no garantiza que los datos se devuelvan
ordenados. Suele ser una práctica recomendable incluir una cláusula ORDER BY por
las mismas columnas que utilicemos en GROUP BY, especificando el orden que nos
interese. Por ejemplo, en el caso anterior
Existe una cláusula especial, parecida a la WHERE que ya conocemos que nos
permite especificar las condiciones de filtro para los diferentes grupos de filas que
devuelven estas consultas agregadas. Esta cláusula es HAVING.
Por ejemplo, si queremos repetir la consulta de pedidos por empleado de hace
un rato, pero obteniendo solamente aquellos que hayan enviado más de 5.000 Kg
de producto, y ordenados por el nombre del empleado, la consulta sería muy
sencilla usando HAVING y ORDER BY:
SELECT Employees.FirstName + ' ' + Employees.LastName AS Empleado,
COUNT(*) AS TotalPedidos,
COUNT(ShipRegion) AS FilasNoNulas,
MIN(ShippedDate) AS FechaMin, MAX(ShippedDate) AS FechaMax,
SUM(Freight) PesoTotal, AVG(Freight) PesoPromedio
FROM Orders INNER JOIN Employees ON Orders.EmployeeID =
Employees.EmployeeID
GROUP BY Employees.FirstName + ' ' + Employees.LastName
HAVING SUM(Freight) > 5000
ORDER BY Employees.FirstName + ' ' + Employees.LastName ASC
Ahora obtenemos los resultados agrupados por empleado también, pero solo aquellos
que cumplan la condición indicada (o condiciones indicadas, pues se pueden combinar).
Antes nos salían 9 empleados, y ahora solo 6 pues hay 3 cuyos envíos totales son muy
pequeños:
8. Tipos de datos. Eliminación de tablas, modificación de relaciones en el esquema
Tipos de datos
Un tipo de datos es la propiedad de un valor que determina su dominio (qué valores
puede tomar), qué operaciones se le pueden aplicar y cómo es representado
internamente por el computador.
Todos los valores que aparecen en un programa tienen un tipo.
A continuación revisaremos los tipos de datos elementales de Python. Además de
éstos, existen muchos otros, y más adelante aprenderemos a crear nuestros propios tipos
de datos.
Números enteros
El tipo int (del inglés integer, que significa «entero») permite representar números
enteros.
Los valores que puede tomar un int son todos los números enteros: ... -3, -2, -
1, 0, 1, 2, 3, ...
Los números enteros literales se escriben con un signo opcional seguido por una
secuencia de dígitos:
1570
+4591
-12
- Números reales
>>> 881.9843000
881.9843
>>> -3.14159
-3.14159
>>> 1024.
1024.0
>>> .22
0.22
>>> -2.45E4
-24500.0
>>> 7e-2
0.07
>>> 6.02e23
6.02e+23
>>> 9.1094E-31
9.1094e-31
Los dos últimos valores del ejemplo son iguales, respectivamente, a \(6.02\times
10^{23}\) (la constante de Avogadro) y \(9.1094\times 10^{-31}\) (la masa del electrón).
Números complejos
El tipo complex permite representar números complejos.
Los números complejos tienen una parte real y una imaginaria. La parte imaginaria es
denotada agregando una j inmediatamente después de su valor:
3 + 9j
-1.4 + 2.7j
- Valores lógicos
Los valores lógicos True y False (verdadero y falso) son de tipo bool, que representa
valores lógicos.
El nombre bool viene del matemático George Boole, quien creó un sistema algebraico
para la lógica binaria. Por lo mismo, a True y False también se les llama valores
booleanos. El nombre no es muy intuitivo, pero es el que se usa en informática, así que
hay que conocerlo.
Texto
A los valores que representan texto se les llama strings, y tienen el tipo str.
Los strings literales pueden ser representados con texto entre comillas simples o
comillas dobles:
"ejemplo 1"
'ejemplo 2'
La ventaja de tener dos tipos de comillas es que se puede usar uno de ellos cuando el
otro aparece como parte del texto:
"Let's go!"
'Ella dijo "hola"'
Es importante entender que los strings no son lo mismo que los valores que en él
pueden estar representados:
>>> 5 == '5'
False
>>> True == 'True'
False
Nulo
Existe un valor llamado None (en inglés, «ninguno») que es utilizado para representar
casos en que ningún valor es válido, o para indicar que una variable todavía no tiene un
valor que tenga sentido.
El valor None tiene su propio tipo, llamado NoneType, que es diferente al de todos los
demás valores.
Eliminación de tablas
Para quitar una relación de tabla, es preciso eliminar la línea de relación en la ventana
Relaciones. Coloque el cursor de modo que apunte a la línea de relación y, a
continuación, haga clic en la línea. La línea de relación aparece con mayor grosor cuando
está seleccionada. Con la línea de relación seleccionada, presione SUPRIMIR.
Se muestran todas las tablas con relaciones y las líneas de relación. Observe que no
se muestran las tablas ocultas (tablas con la casilla de verificación Oculto activada en
el cuadro de diálogo Propiedades de la tabla) ni sus relaciones, a menos que esté
seleccionada la opción Mostrar objetos ocultos en el cuadro de diálogo Opciones de
exploración.
3. Haga clic en la línea de relación correspondiente a la relación que desee eliminar. La
línea de relación aparece con mayor grosor cuando está seleccionada.
4. Presione la tecla SUPR.
5. Puede que Access muestre el mensaje ¿Confirma que desea eliminar de forma
permanente la relación seleccionada de la base de datos?. Si aparece este mensaje
de confirmación, haga clic en Sí.
Nota: Si alguna de las tablas empleadas en la relación de tabla están en uso, quizás
por parte de otra persona u otro proceso, o bien, en un objeto de base de datos abierto
como puede ser un formulario, no se podrá eliminar la relación. Es preciso cerrar todos los
objetos abiertos que usen estas tablas para poder quitar la relación.
Al modificar un esquema debe completar varias tareas para garantizar que los cambios
se validen, se guarden y se apliquen a la base de datos de usuario.
Procedimiento
Para modificar un esquema y activar las modificaciones, o bien para crear un nuevo
esquema:
1. Iniciar el Diseñador.
2. Cree una base de datos de prueba (o varias bases de datos de prueba) en el
esquema que desea personalizar.
3. Extraiga el esquema que desea personalizar o cree un nuevo esquema.
4. Modifique el esquema, bien utilizando el Diseñador para cambiar elementos del
esquema, bien aplicando paquetes.
5. Valide el esquema personalizado por medio del mandato de validación de
esquemas del Diseñador.
6. Cree una configuración de prueba que especifique la base de datos de prueba (o
las varias bases de datos) para el esquema.
7. Ejecute la configuración de prueba y vuelva a probar el esquema frente a las
bases de datos especificadas.
8. Guarde el trabajo en curso.
9. Incorpore el esquema personalizado.
10. Actualice la base de datos de usuario con el esquema modificado.
Los índices se basan en 1, lo que significa que se hace referencia al primer elemento
de la matriz como 1, al segundo elemento como 2, etc. Si la cardinalidad se deja en
blanco para una matriz especificada, se toman todos los índices. Si tiene varios niveles de
elementos de matriz anidados, los campos de cardinalidad en blanco implican que se
toman todos los índices. Por lo tanto, si el elemento de entrada a una transformación
esA/B[]/C[], dondeByCson matrices sin índices especificados, se toman todos los índices.
Esto significa que se obtienen todas las C parte de B[1], todas las C parte de B[2], todas
las C parte de B[3], etc.
10. Declaración de claves primarias. UNIQUE. Restricciones sobre claves
Una clave primaria es la columna o colección de columnas que identifican de forma
única a una fila determinada en una tabla. La clave primaria proporciona una forma
importante de distinguir una fila de otra. Subrayar las columnas o la colección de
columnas que componen la clave primaria usualmente es la mejor forma de representar la
clave primaria de cada tabla de la base de datos.
Existen tres tipos de claves primarias; una clave natural es una clave primaria
compuesta de una columna que identifica de forma única a una entidad, por ejemplo el
número de seguridad social de una persona o el número de identificación vehicular (VIN,
Vehicle Identification Number en inglés) de un vehículo. Una clave artificial es una
columna creada para una entidad con el propósito de servir únicamente como clave
primaria y es visible para los usuarios. Además, una clave subrogada es una clave
primaria generada por el sistema, usualmente un tipo de datos numerado
automáticamente que suele estar escondido del usuario.
Reglas de integridad: Es necesario el cumplimiento de dos reglas muy importantes
en un sistema de administración de bases de datos relacionales, que son la
integridad de entidad y la integridad referencial. La integridad de identidad indica
que ningún campo elegido para ser parte de la clave primaria puede aceptar una
valor nulo. Una valor nulo es un campo que contiene un valor "desconocido" o
"inaplicable". La integridad referencial es un concepto de las bases de datos que
asegura que la relación entre las tablas de las mismas permanezcan consistentes
y que los datos introducidos sean verdaderamente válidos y que estén intactos. La
unión de la clave primaria y la foránea evita que se introduzcan datos
inconsistentes en el sistema de administración de bases de datos relaciones y por
lo tanto que pueda aplicarse la integridad referencial.
Claves foráneas: Una clave foránea es un campo o colección de campos de una
tabla cuyos valores deben coincidir con los valores de la clava primaria de una
segunda tabla.
Clave candidata: Similar a una clave primaria, una clave candidata es la columna o
colección de columnas en la que todas las columnas de la tabla son
funcionalmente dependientes. Es típico hacer referencia a una clave candidata
como clave alterna cuando no se ha elegido como primaria.
Lenguaje de diseño de base de datos: El lenguaje de diseño de bases de datos
(DBDL, del inglés Database Design Language) es un método para mostrar tablas y
claves. Sigue la ilustración mostrada al definir las tablas y las claves. Toma en
cuenta que la clave primaria está subrayada, la clave alterna está etiquetada como
AK, la clave secundaria está etiquetada como SK y la clave foránea como FK.
Employees (EmployeeNum, LastName, FirstName, Street, City, State, Zip,
SocSecNumber, DepartmentNum) AK SocSecNumber SK LastName FK DepartmentNum
> Department
UNIQUE
La restricción UNIQUE en SQL se utiliza para garantizar que no se inserten valores
duplicados en una columna específica o combinación de columnas que participen en la
restricción UNIQUE y no formen parte de la CLAVE PRIMARIA. En otras palabras, el
índice que se crea automáticamente cuando define una restricción ÚNICA garantizará que
no haya dos filas en esa tabla que puedan tener el mismo valor para las columnas que
participan en ese índice, con la capacidad de insertar solo un valor NULL único en estos
columnas, esto si la columna permite NULL.
Creemos una pequeña tabla con dos columnas, ID y Nombre. La columna de ID no
puede contener valores duplicados debido a la restricción ÚNICA especificada con la
definición de columna. No hay restricciones definidas en la columna Nombre, como en la
siguiente instrucción CREATE TABLE T-SQL:
USE SQLShackDemo
GO
CREATE TABLE ConstraintDemo2
(
ID INT UNIQUE,
Name VARCHAR(50) NULL
)
Si intentamos ejecutar las cuatro instrucciones INSERT a continuación:
INSERT INTO ConstraintDemo2 ([ID],[NAME]) VALUES (1,'Ali')
GO
INSERT INTO ConstraintDemo2 ([ID],[NAME]) VALUES (2,'Ali')
GO
INSERT INTO ConstraintDemo2 ([ID],[NAME]) VALUES (NULL,'Adel')
GO
INSERT INTO ConstraintDemo2 ([ID],[NAME]) VALUES (1,'Faris')
GO
Los dos primeros registros se insertarán correctamente, sin las restricciones que
impidan los valores duplicados de la columna Nombre. El tercer registro también se
insertará correctamente, ya que la única columna de ID solo permite un valor NULL. La
última instrucción INSERT fallará, ya que la columna ID no permite valores duplicados y el
valor ID proporcionado ya está insertado en esa columna, como se muestra en el mensaje
de error a continuación:
Verificando los datos insertados, vemos que los valores duplicados serán claros como se
muestra a continuación:
Para añadir la restricción ÚNICA, se tiene la opción de eliminar o modificar los valores
duplicados. En nuestro caso, actualizaremos el segundo valor de ID duplicado usando la
siguiente instrucción de ACTUALIZAR:
UPDATE [SQLShackDemo].[dbo].[ConstraintDemo2] SET ID =3 WHERE
NAME='FARIS'
Ahora, la restricción UNIQUE en SQL se puede agregar sin error a la columna ID como
se ve líneas abajo:
La clave ÚNICA se puede ver utilizando SQL Server Management Studio, expandiendo
el nodo de las Claves debajo de la tabla seleccionada. Usted también puede ver el índice
creado automáticamente que se utiliza para garantizar la unicidad de los valores de
columna. Tenga en cuenta que no podrá eliminar ese índice sin eliminar primero la
restricción ÚNICA:
3 GO
5 GO
7 GO
Usted Verá que el primer registro se insertará exitosamente y correctamente ya que los
valores de ID y Nombre son válidos. La segunda operación de inserción fallará, ya que la
columna ID es obligatoria y no puede ser NULL, ya que la columna ID es la CLAVE
PRIMARIA SQL. La última instrucción INSERT también fallará ya que el valor de ID
proporcionado ya existe y los valores duplicados ya no están permitidos en la CLAVE
PRIMARIA, tal como se muestra en el siguiente mensaje de error:
Verificando los valores insertados, usted verá que solo el primer registro se inserta
correctamente como se muestra a continuación:
2 SELECT CONSTRAINT_NAME,
3 TABLE_SCHEMA ,
4 TABLE_NAME,
5 CONSTRAINT_TYPE
6 FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
7 WHERE TABLE_NAME='ConstraintDemo3'
8
Con el siguiente resultado en nuestro ejemplo:
ALTER TABLE ConstraintDemo3
DROP CONSTRAINT PK__Constrai__3214EC27E0BEB1C4;
Si usted intenta ejecutar las anteriormente fallidas instrucciones INSERT, verá que el
primer registro no se insertará ya que la columna ID no permite valores NULL. El segundo
registro se insertará con éxito, ya que esto no impide que los valores duplicados se
inserten después de cargar la CLAVE PRIMARIA de SQL, como se muestra a
continuación:
Para agregar la restricción PRIMARY KEY, lo primero que debemos hacer es borrar los
datos, eliminando o modificando el registro duplicado. Aquí cambiaremos el segundo valor
de ID de registro usando la instrucción siguiente de ACTUALIZAR:
Luego, intente añadir la CLAVE PRIMARIA de SQL, que ahora se creará con éxito:
La restricción CLAVE PRIMARIA de SQL también se puede definir y modificar
mediante SQL Server Management Studio. Haga clic en el botón derecho en su tabla y
luego elija Diseño. Desde la ventana Diseño, haga clic con el botón derecho en la
columna o conjunto de columnas que participarán en la restricción PRIMARY KEY y en la
opción Establecer PRIMARY KEY, lo que desmarcará automáticamente la casilla de
verificación Permitir NULL, como se muestra a continuación:
1. Cree un proyecto de Visual C# en Visual Studio. Para este tema, cree una
aplicación de consola.
2. Genere la clase de cliente WCF para la operación Insert, Select, Update y Delete en
la tabla Employee. Para obtener más información sobre cómo generar una clase de
cliente WCF, vea Generar un cliente WCF o un contrato de servicio WCF para SQL
Server Artifacts.
3. En la Explorador de soluciones, agregue una referencia
a Microsoft.Adapters.Sql y Microsoft.ServiceModel.Channels.
4. Abra el archivo Program.cs y cree un cliente como se describe en el fragmento de
código siguiente.
schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[] insertRecord =
new schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[1];
insertRecord[0] = new
schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee();
insertRecord[0].Name = "John Smith";
insertRecord[0].Designation = "Manager";
insertRecord[0].Salary = 500000;
try
{
Console.WriteLine("Inserting new table entry...");
recordsInserted = client.Insert(insertRecord);
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
throw;
}
Console.WriteLine("Record inserted");
Console.WriteLine("Press any key to continue ...");
Console.ReadLine();
También puede reemplazar el fragmento de código anterior para realizar las
operaciones Select, Update o Delete. También puede anexar los fragmentos de código
para realizar todas las operaciones en una sola aplicación. Para fragmentos de código
sobre cómo realizar estas operaciones.
client.Close();
Console.WriteLine("Press any key to exit...");
Console.ReadLine();
Operación de actualización
El código siguiente muestra una operación update que tiene como destino la tabla
Employee.
int result;
schemas.microsoft.com.Sql._2008._05.TableOp.dbo.Employee.RowPair
updateRecordPair =
new schemas.microsoft.com.Sql._2008._05.TableOp.dbo.Employee.RowPair();
schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee updateRecord =
new schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee();
schemas.microsoft.com.Sql._2008._05.TableOp.dbo.Employee.RowPair[] updateArray
=
new schemas.microsoft.com.Sql._2008._05.TableOp.dbo.Employee.RowPair[1];
updateRecord = insertRecord[0];
updateRecord.Name = "Jeff Smith";
updateRecordPair.After = updateRecord;
updateRecordPair.Before = selectRecords[0];
updateArray[0] = updateRecordPair;
try
{
Console.WriteLine("Updating the database...");
result = client.Update(updateArray);
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
throw;
}
Console.WriteLine("Updated Record for {0}", updateRecordPair.Before.Name);
Console.WriteLine("The new name for the employee is {0}",
updateRecordPair.After.Name);
Console.WriteLine("Press any key to continue ...");
Console.ReadLine();
Operación de eliminación
El código siguiente muestra una operación Delete que tiene como destino la tabla
Employee.
int deleteSuccess;
schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[] deleteRecords
=
new schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[1];
deleteRecords = client.Select("*", "where [Employee_ID] = (select
IDENT_CURRENT('Employee'))");
Console.WriteLine("Following employees will be deleted from the database:");
for (int i = 0; i < deleteRecords.Length; i++)
{
Console.WriteLine("Name: {0}", deleteRecords[i].Name);
}
Console.WriteLine("Press any key to begin deletion...");
Console.ReadLine();
try
{
Console.WriteLine("Deleting employee record...");
deleteSuccess = client.Delete(deleteRecords);
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
throw;
}
12. Declaración, consultas y modificación de vistas
Un lenguaje de manipulación de datos (Data Manipulation Language, o DML en inglés)
es un lenguaje proporcionado por el sistema de gestión de base de datos que permite a
los usuarios llevar a cabo las tareas de consulta o manipulación de los datos, organizados
por el modelo de datos adecuado. El lenguaje de manipulación de datos más popular hoy
día es SQL, usado para recuperar y manipular datos en una base de datos relacional.
Otros ejemplos de DML son los usados por bases de datos IMS/DL1, CODASYL u otras.
1- INSERT
Una sentencia INSERT de SQL agrega uno o más registros a una (y sólo una) tabla en
una base de datos relacional.
Ejemplo 1 (inserto valores alumno pepe en la materia spd2 a la tabla cursada):
2- UPDATE
Una sentencia UPDATE de SQL es utilizada para modificar los valores de un conjunto
de registros existentes en una tabla.
Ejemplo 1 (modifico la materia donde el alumno sea pepe):
3- DELETE
Una sentencia DELETE de SQL borra uno o más registros existentes en una tabla.
Ejemplo 1 (borro todos los valores de las columnas alumno y materia donde la materia
sea spd2):
https://support.microsoft.com/es-es/office/crear-modificar-o-eliminar-una-
relaci%C3%B3n-dfa453a7-0b6d-4c34-a128-fdebc7e686af
https://www.ibm.com/docs/es/rational-clearquest/9.0.2?topic=schemas-
modifying
https://www.sqlshack.com/es/restricciones-en-sql-server-sql-not-null-
unique-y-sql-primary-
key/#:~:text=La%20restricci%C3%B3n%20UNIQUE%20en%20SQL,parte%
20de%20la%20CLAVE%20PRIMARIA.
https://learn.microsoft.com/es-es/biztalk/adapters-and-accelerators/adapter-
sql/insert-update-delete-or-select-operations-in-sql-using-the-wcf-service-
model
https://www.computerweekly.com/es/definicion/SQL-Structured-Query-
Language-o-Lenguaje-de-consultas-
estructuradas#:~:text=SQL%20(Structured%20Query%20Language%20o%
20Lenguaje%20de%20consultas%20estructuradas)&text=El%20lenguaje%
20de%20consultas%20estructuradas,con%20los%20datos%20que%20con
tienen.









