Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FACULTAD DE INGENIERA
Cajamarca, 2012
1.2.
1.3.
1.4.
REQUERIMIENTOS Y CARACTERSTICAS........................................................................... - 6 -
INICIANDO SQL SERVER 2008 ......................................................................................... - 7 CREAR UNA NUEVA TABLA: ........................................................................................... - 12 HACER CONSULTAS ......................................................................................................... - 16 -
B.
C.
2.1.3.
2.1.4.
SELECT ....................................................................................................................................... - 18 FROM ........................................................................................................................................... - 19 MODIFICADORES .......................................................................................................................... - 20 Distinct y All: ............................................................................................................................. - 20 TOP n: ......................................................................................................................................... - 21 FUNCIONES DE AGREGACIN ................................................................................................. - 21 USO DE ALIAS: .............................................................................................................................. - 23 WHERE ........................................................................................................................................ - 24 OPERADORES LGICOS ............................................................................................................ - 24 OPERADORES DE COMPARACIN .......................................................................................... - 24 CONCATENACIN DE CADENAS ............................................................................................. - 26 IN ....................................................................................................................................................... - 27 BETWEEN........................................................................................................................................ - 29 NULL ................................................................................................................................................. - 31 LIKE .................................................................................................................................................. - 32 YEAR MONTH DAY ....................................................................................................................... - 33 ORDER BY .................................................................................................................................. - 34 TOP ................................................................................................................................................... - 35 WITH TIES ....................................................................................................................................... - 36 -
3.2.
GROUP BY ........................................................................................................................... - 49 -
-3-
HAVING ................................................................................................................................. - 50 -
-4-
El presente manual de SQL Server 2008 trata principalmente del manejo de datos a
travs de las diferentes sentencias que tiene SQL. En este se considera a las tablas como
contenedores de datos organizados en filas y en columnas. Aqu es posible seleccionar
datos que pertenezcan a diferentes tablas y tambin es permitido establecer reglas o
condiciones que tengan que cumplir dichos datos para poder ser considerados como
registros resultantes.
La primera encarnacin de SQL apareci en 1974, cuando un grupo de IBM desarroll el
primer prototipo de una base de datos relacional. Relational Software (luego se convirti
en Oracle) quien lanz la primera base de datos relacional comercial.
El mayor mrito de SQL est en su posibilidad de combinar las diferentes tablas de una
base de datos en un solo conjunto resultante y por ello ha sido considerado en la mayora
de los programas administradores de Base de Datos tales como Oracle, Access o FoxPro.
En este manual de SQL se enumera los comandos SQL normalmente utilizados, y se
divide en las siguientes secciones:
Para cada comando; primero se definir, luego se presentar y explicar la sintaxis SQL,
seguida por algn o algunos ejemplos.
Finalmente despus de cada captulo se mostrar los ejercicios desarrollados en la clase
de Base de Datos II.
-5-
-6-
-7-
-8-
-9-
El Tipo de Servidor
al que debemos conectarnos
El tipo de Autentificacin
- 10 -
Los objetos lo podemos ver en las carpetas como Base de Datos, cuando lo
extendemos, entre otros; como tambin veremos las Bases de Datos existentes
que han sido creadas al momento de la instalacin una de ellas con la que
trabajaremos es la Base de Datos Notrhwind.
- 11 -
Ubicamos la Base de Datos donde vamos a crear nuestra tabla (en este caso
utilizaremos la Base de Datos Notrhwind) expandimos.
- 12 -
Despus, iremos dando el nombre a cada campo que formarn las columnas de
la tabla (Cdigo,Paterno, Materno, Nombre, Sexo, Direccin).
- 13 -
- 14 -
Cuando se crea una tabla, hay que especificar el nombre de la tabla, los nombres
de las columnas y sus tipos de datos. Se puede utilizar el mismo nombre de
columna en tablas diferentes de la misma base de datos.
Para llenar una tabla ya veremos ms adelante los comandos que se deben
utilizar.
- 15 -
HACER CONSULTAS
Una consulta es una instruccin de solicitud para recuperarinformacin.Las
consultas pueden involucrar informacin de msde una tabla. El resultado de una
consulta es otra tabla con los datos requeridos en ella.
Esta consulta encuentra todos los campos del empleado: (utilizando la Northwind)
SELECT *
FROM Employees
Como podemos ver SQL nos muestra un listado de tablas que existe dentro de la
base de datos que estamos trabajando.
Estrada Aguilar, Karen Johana |
- 16 -
- 17 -
Tipos de Comandos:
La escritura y ejecucin de instrucciones de Transact-SQL es una de las formas en
que se puede realizar una consulta en SQL Server. Las sentencias SQL se
dividen, principalmente en las siguientes categoras:
DDL (Instrucciones del Lenguaje de definicin de datos) que permiten crear
y definir nuevas bases de datos, campos e ndices.
2.1.1. SELECT
La sentencia SELECT permite seleccionar registros de una o ms
tablas.Se usa para listar los campos deseados del resultado de una
consulta. Es la sentencia bsica de SQL.
- 18 -
El * despus de SELECT indicaque queremos ver todos los campos que aparecen
en la tabla.
Listando los campos separados por comas:
Select
ProductID,ProductName,SupplierID,CategoryID,QuantityP
erUnit,UnitPrice,UnitsInStock,UnitsOnOrder,ReorderLev
el,Discontinued
From Products
- 19 -
A. MODIFICADORES
Distinct y All: Devuelve solamente filas nicas, elimina las filas
duplicadas del conjunto de resultados, es preciso poner la palabra
clave DISTINCT inmediatamente despus de SELECT. Tambin
podramos explicitar que lo queremos todo, incluso con repeticiones,
poniendo ALL (opcin por defecto) en lugar de DISTINCT.
Por ejemplo, si se quiere obtener todas las filas de la tabla
customers, pero slo que se muestre el nombre de cada pas una
vez. Se escribe la siguiente instruccin:
SELECT DISTINCT country
FROM dbo.Customers
- 20 -
- 21 -
Descripcin
COUNT
COUNT(*)
SUM
MIN
MAX
AVG
STDEV
STDEVP
VAR
VARP
- 22 -
- 23 -
2.1.3. WHERE
La sentencia WHERE sirve para filtrar registros lo que no lo hace el
SELECT ni el FROM. ste permite establecer condiciones que deban
cumplir los registros para ser considerandos dentro del conjunto resultante.
Despus de Clusula WHERE (donde) ir la(s) condicin(es) que deben
cumplir los registros. La sintaxis de SQL considerando esta sintaxis es:
SINTAXIS
SELECT "nombre_campo"
FROM "nombre_tabla"
WHERE "Condicin_Filtro"
OPERADORES LGICOS
NOT
Para la negacin de
condiciones
AND
Para la conjuncin de
condiciones
OR
Para la disyuncin de
condiciones
- 24 -
Resultado de la consulta:
- 25 -
Resultado de la consulta:
CONCATENACIN DE CADENAS
El operador de concatenacin de cadenas (+) concatena valores de
cadena. El resto de las operaciones con cadenas se controla mediante
las funciones de cadena.
Por ejemplo, queremos mostrar el nombre completo de los empleados
en una sola columna o campo:
select FirstName+(' ')+LastName as nombre_completo
from dbo.Employees
- 26 -
El resultado es el siguiente:
- 27 -
Resultado de la consulta:
Ejemplos:
o
Mostrar el nombre del producto, unidad, cdigo; cuyo precio es mayor que 100.
SELECTProductID,ProductID,UnitPrice
FROMProducts
WHEREUnitPrice>100
Mostrar el nombre del producto, unidad, cdigo; adems los productos que
estn entre 30 y 60.
selectProductID,ProductName,UnitPrice
fromProducts
WhereUnitPrice>30 ANDUnitPrice<60
- 28 -
BETWEEN
Verifica que el resultado de una expresin se encuentre entre otros dos
valores. Debe haber un rango que el campo sea el mismo y adems un
operador sea >= y el otro <=.
La sintaxis de este predicado es:
SINTAXIS
SELECT "nombre_campo"
FROM "nombre_tabla"
WHERE "nombre_campo" BETWEEN 'valor_mnimo' AND 'valor_mximo'
- 29 -
- 30 -
NULL
o Una columna tiene un valor NULL cuando no se ha especificado
ningn valor para ella durante la entrada de datos y no tiene definido
un valor predeterminado. Un valor NULL no es lo mismo que cero
(que es un valor numrico) o blanco (que es un valor de carcter).
o Puede utilizar la condicin de bsqueda IS NOT NULL para obtener
las filas con valores conocidos en las columnas especificadas.
Por ejemplo, mostrar a los nombres de las compaas existentes de los
proveedores.
select ContactName
from dbo.Suppliers
where ContactName is not null
- 31 -
Devuelve
LIKE '[CK]%'
LIKE '[S-V]ing'
LIKE 'M[^c]%'
Ejemplo
En este ejemplo se obtienen las compaas de la tabla customers que
contengan la palabra "restaurant" en su nombre.
SELECT companyname
FROM customers
WHERE companyname LIKE '%Restaurant%'
- 32 -
Para mes sera Month y para da DAY. Recordar que "fecha" debe ser
un campo de tipo Date, y que el comparador es un entero (no poner
entre comillas)
Resultado de la consulta:
- 33 -
2.1.4. ORDER BY
- 34 -
El campo por el que queremos ordenar debe estar en el SELECT. La palabra ASC
o DESC se pone al final de las columnas de ordenamiento.
TOP
Devuelve un determinado nmero de registros. Esta sentencia se gua
por la ordenacin.
SINTAXIS
Select top n * from tabla
- 35 -
WITH TIES
Devuelve las filas iguales si se utiliza
SELECT TOP 5 WITH TIES orderid, productid, quantity
FROM [order details]
ORDER BY quantity DESC
Resultado de la consulta:
- 36 -
select *
from dbo.Customers
order by ContactName
- 37 -
Seleccionar todos los campos de la tabla rdenes, ordenados por fecha de la orden,
Descendentemente.
select *
from dbo.Orders
order by OrderDate Desc
- 38 -
select *
from [Order Details]
order by Quantity
- 39 -
Obtener todos los productos, cuyo nombre comiencen con la letra P y tienen un
precio unitario comprendido entre 10 y 120.
select *
from Products
where ProductName like 'P%' AND UnitPrice between 10 AND 120
5.
Obtener todos los clientes de los Pases de: USA, Francia y UK.
select *
from dbo.Customers
where Country in ('usa','francia','uk')
- 40 -
Obtener todos los productos descontinuados y sin stock, que pertenecen a las
categoras 1, 3, 4 y 7.
select *
from dbo.Products
where
(CategoryID
in
UnitsInStock='0')
7.
(1,3,4,7))
AND
(Discontinued='true'AND
select *
from dbo.Orders
where EmployeeID in (2,5,7) AND YEAR(OrderDate)='1996'
- 41 -
9.
Seleccionar todos los clientes que no cuentan con FAX, del Pas de USA.
select *
from dbo.Customers
where Fax is null AND Country='usa'
- 42 -
select*
from dbo.Employees
where ReportsTo is not null
11.
Seleccionar todos los campos del cliente, cuya compaa empiecen con la letra de A
hasta la D y pertenezcan al pas de USA, ordenarlos por la direccin.
select *
from dbo.Customers
where CompanyName like '[a-d]%' and Country='usa'
order by Address
12.
Seleccionar todos los campos del proveedor, cuya compaa no comience con las
letras de la B a la G, y pertenezcan al pas de UK, ordenarlos por nombre de la
compaa.
select *
from dbo.Suppliers
where (CompanyName like
Country='uk'
order by CompanyName
'a%'
or
CompanyName
like
'[f-z]%')
and
- 43 -
13.
Seleccionar los productos vigentes cuyos precios unitarios estn entre 35 y 250, sin
stock en almacn, pertenecientes a las categoras 1, 3, 4, 7 y 8, que son distribuidos
por los proveedores 2, 4, 6, 7 y 9.
select *
from Products
where Discontinued='false' AND UnitPrice between 35 AND 250 AND
UnitsInStock='0' AND CategoryID in (1,3,4,7,8) AND SupplierID in
(2,4,6,7,9)
14.
select *
from Products
where Discontinued='true' AND SupplierID in (1,3,7,8,9)
UnitsInStock!='0' AND UnitPrice between 39 AND 190
order by SupplierID,UnitPrice
AND
- 44 -
Seleccionar los 7 productos con precios ms caros, que cuenten con Stock en
almacn.
select top 7 *
from dbo.Products
where UnitsInStock!=0
order by UnitPrice desc
16.
select top 9 *
from dbo.Products
where CategoryID in (3,5,8)
order by UnitsInStock
- 45 -
Seleccionar las rdenes de compra, realizadas por el empleado con cdigo entre 2 y
el 5, adems de los clientes con cdigos que comienzan con las letras de la A hasta
la G, del 31 de Julio de cualquier ao.
select *
from dbo.Orders
where EmployeeID between 2 AND 5 AND CustomerID like '[a-g]%' AND
DATEPART(MM,OrderDate)='07' AND DATEPART(dd,OrderDate)='31'
18.
19.
select *
from Orders
where EmployeeID=3 and month(OrderDate)in (8,9,10,11,12)
- 46 -
select *
from [Order Details]
where Quantity between 10 AND 250
- 47 -
COMBINACIN DE TABLAS Y
AGRUPACIN DE DATOS
3.1.
JOIN
Para realizar uniones en SQL se requieren mucho de los elementos que ya hemos
visto. SQL tambin proporciona varios mecanismos para reunir relaciones,
incluyendo reuniones condicionales y reuniones naturales, as como varias formas
de reunin externa. Estas operaciones adicionales se usan a menudo como
subconsultas dentro de la clusula from.
Seleccin de columnas especficas de varias tablas
La palabra clave JOIN especifica qu tablas se van a combinar y cmo
La palabra clave ON especifica la condicin de combinacin
- 48 -
3.2.
GROUP BY
Genera valores de resumen para una sola columna, para esto se utiliza funciones
de agregado con la clusula GROUP BY. Utilice la clusula HAVING con la
clusula GROUP BY para restringir los grupos de filas devueltas en el conjunto de
resultados.
El uso de la clusula GROUP BY no garantiza que se vaya a usar ningn criterio
de ordenacin. Si desea que los resultados se ordenen, debe incluir la clusula
ORDER BY.
SINTAXIS
SELECT "nombre_columna 1",
SUM("nombre_columna 2")
FROM "nombre_tabla"
GROUP BY "nombre_columna 1"
- 49 -
HAVING
Esta sentencia se utiliza de similar manera que la sentencia WHERE para filtrar
instrucciones en SQL que incluyen agrupaciones de registros se emplear esta
clusula HAVING.
Su sintaxis es:
SINTAXIS
SELECT "nombre_columna 1",
SUM("nombre_columna 2")
FROM "nombre_tabla"
GROUP BY "nombre_columna 1"
HAVING (condicin de funcin aritmtica)
- 50 -
Ejercicio 1
selectCOUNT(*)astotal,e.EmployeeID,e.LastName
fromdbo.Ordersaso
innerjoindbo.Employeesaseono.EmployeeID=e.EmployeeID
groupbye.EmployeeID,e.LastName
Ejercicio 2
selectCOUNT(*)astotal,e.FirstName,e.LastName
fromdbo.Ordersaso
innerjoindbo.Employeesaseono.EmployeeID=e.EmployeeID
groupbye.FirstName,e.LastName
havingCOUNT(*)>100
orderbyFirstName,LastName
Ejercicio 3
selectsum(od.Quantity)astotal,c.CompanyName
fromOrdersaso
innerjoin[Order Details]asodono.OrderID=od.OrderID
innerjoinCustomersasconc.CustomerID=o.CustomerID
groupbyc.CompanyName
orderbyc.CompanyName
- 51 -
Ejercicio 4
selectsum(Quantity*UnitPrice*2.82)astotal,o.OrderID
from[Order Details]asodinnerjoinOrdersasoono.OrderID=od.OrderID
whereyear(o.OrderDate)=1996 andMONTH(o.OrderDate)=12
groupbyo.OrderID
- 52 -
- 53 -
Mostrar el cdigo de categora, nombre de categora, cdigo del producto, nombre del
producto y precio.
select
dbo.Categories.CategoryID,dbo.Categories.CategoryName,dbo.Products.Pro
ductID,dbo.Products.ProductName,dbo.Products.UnitPrice
from dbo.Categories
inner join dbo.Products on
dbo.Categories.CategoryID=dbo.Products.CategoryID
- 54 -
Mostrar el nmero de la orden fecha de la orden, cdigo del producto, cantidad del precio y
flete de la orden.
select o.OrderID,o.OrderDate,od. ProductID,od.Quantity,o.Freight
from [Order Details]as od
inner join Orders as o on od.OrderID=o.OrderID
23.
Mostrar: cdigo, nombre, ciudad y pas del proveedor. Cdigo, nombre, precio, stock del
producto.
select s.SupplierID,s.CompanyName,s.City,s.Country,p.ProductID,
p.ProductName,p.UnitPrice,p.UnitsInStock
from Suppliers as s
inner join Products as p on s.SupplierID=p.SupplierID
- 55 -
24.
Cdigo y nombre de la categora, cdigo, nombre, precio y stock de los productos, cdigo,
nombre de los proveedores.
select c.CategoryID,c.CategoryName,p.ProductID,p.ProductName,
p.UnitPrice,p.UnitsInStock,s.SupplierID,s.CompanyName
from dbo.Categories as c
inner join dbo.Products as p on c.CategoryID=p.CategoryID
inner join dbo.Suppliers as s on p.SupplierID=s.SupplierID
- 56 -
Mostrar nmero de la orden, fecha, nombre del producto, nombre de la categora, nombre
del producto.
select od.OrderID,o.OrderDate,p.ProductName,c.CategoryName,s.CompanyName
from Orders as o
inner join [Order Details] as od on od.OrderID=o.OrderID
inner join dbo.Products as p on od.ProductID=p.ProductID
inner join dbo.Categories as c on c.CategoryID=p.CategoryID
inner join dbo.Suppliers as s on s.SupplierID=p.SupplierID
26.
Mostrar nmero de la orden, fecha, nombre y direccin del cliente, nombre y apellido del
empleado, nombre del producto comprado y nombre del proveedor.
select
od.OrderID,o.OrderDate,c.CompanyName,c.Address,e.LastName,e.LastName,
p.ProductName,s.CompanyName
from [Order Details]as od
inner join Orders as o on od.OrderID=o.OrderID
inner join Products as p on od.ProductID=p.ProductID
inner join Customers as c on c.CustomerID=o.CustomerID
inner join Employees as e on e.EmployeeID=o.EmployeeID
inner join Suppliers as s on s.SupplierID=p.SupplierID
- 57 -
27.
select c.CategoryID,c.CategoryName,p.ProductID,p.ProductName,
p.UnitPrice
from Categories as c
inner join dbo.Products as p on c.CategoryID=p.CategoryID
where c.CategoryID in (2,4,5,7)
- 58 -
28.
- 59 -
30.
select c.CategoryID,c.CategoryName,p.ProductID,p.ProductName,
p.UnitPrice,p.UnitsInStock,s.SupplierID,s.CompanyName
from dbo.Categories as c
inner join dbo.Products as p on c.CategoryID=p.CategoryID
inner join dbo.Suppliers as s on p.SupplierID=s.SupplierID
where p.UnitPrice between 50 AND 100
31.
select od.OrderID,o.OrderDate,p.ProductName,c.CategoryName,s.CompanyName
from Orders as o
inner join [Order Details] as od on od.OrderID=o.OrderID
inner join dbo.Products as p on od.ProductID=p.ProductID
inner join dbo.Categories as c on c.CategoryID=p.CategoryID
inner join dbo.Suppliers as s on s.SupplierID=p.SupplierID
where (month(o.OrderDate)='1' or month(o.OrderDate)='1'or
month(o.OrderDate)='2'or month(o.OrderDate)='3') AND
YEAR(o.OrderDate)='1996'
- 60 -
BASE DE DATOS II
EJERCICIOS inner join, group by, having y where SQL
TRANSACT (Microsoft SQL SERVER 2008)
Usando la Base de Datos Northwind, realizar las siguientes consultas:
32. Visualizar el mximo y mnimo precio de los productos por categora, mostrar el
nombre de la categora.
33.
- 61 -
34.
- 62 -
36.
- 63 -
select Country,count(SupplierID) as
total_proveedores,City,count(SupplierID) as total_proveedores
from dbo.Suppliers
group by Country,city
38.
Calcular el stock total de los productos por cada categora. Mostrar el nombre de la
categora y el stock por categora.
- 64 -
Calcular el stock total de los productos por categora. Mostrar el nombre el nombre
de la categora y el stock por categora. Solamente las categoras 2,5, y 8.
select c.CategoryName,sum(p.UnitsInStock) as stock
from Categories as c
inner join Products as p
on c.CategoryID=p.CategoryID
where c.CategoryID in (2,5,8)
group by c.CategoryName
40.
Obtener el Nombre del Cliente, Nombre del Proveedor, Nombre del Empleado y el
nombre de los productos que estn en la orden 10250.
select c.CompanyName,
s.CompanyName,e.LastName,p.ProductName,o.OrderID
from Customers as c
inner join orders as o on c.CustomerID=o.CustomerID
inner join Employees as e on e.EmployeeID=o.EmployeeID
inner join [Order Details] as od on od.OrderID=o.OrderID
inner join Products as p on p.ProductID=od.ProductID
inner join Suppliers as s on s.SupplierID=p.supplierID
where o.OrderID='10250'
41.
Mostrar el nmero de rdenes realizadas de Cada uno de los Clientes por ao.
select distinct c.CompanyName,COUNT(*)as total_ordenes,year(o.OrderDate)
as ao
from Orders as o
inner join Customers as c on o.CustomerID=c.CustomerID
group by c.CompanyName, year(o.OrderDate)
- 65 -
42.
- 66 -
Mostrar el nmero de rdenes realizadas de Cada uno de los Clientes por cada mes
y ao.
select distinct c.CompanyName,COUNT(*)as
total_ordenes,year(o.OrderDate) as ao,MONTH(o.OrderDate) as mes
from Orders as o
inner join Customers as c
on o.CustomerID=c.CustomerID
group by c.CompanyName, year(o.OrderDate), month(o.OrderDate)
44.
- 67 -
45.
- 68 -
- 69 -
48.
select p.CategoryID,COUNT(*) as
total_productos,c.CategoryName,p.ProductName
from dbo.Products as p inner join dbo.Categories as c on
p.CategoryID=c.CategoryID
group by p.CategoryID,c.CategoryName,p.ProductName
having p.CategoryID in(3,5,8)
order by c.CategoryName
- 70 -
50.
- 71 -
- 72 -
MANIPULACIN DE TABLAS
4.1.
INSERT INTO
En los programas de mantenimiento de base de datos es frecuente requerir
instrucciones que hagan posible la insercin de registros en las tablas. Estas
instrucciones hacen uso de la clusula INSERT del lenguaje SQL. En su forma
ms elemental, la instruccin tendr la siguiente sintaxis.
SINTAXIS
INSERT INTO "nombre_tabla" ("colonne 1", "colonne 2", ...)
valorS ("valor 1", "valor 2", ...)
- 73 -
Identidad
Insert into articulos(nombre,precio,stock)
values('LaptopHP',1200,10)
insertinto[alumnitos]
values('A001','karen','estrada')
select*
fromalumnitos
Insertinto [alumnitos]
Values ('A002','juan','mendez')
Select *
From alumnitos
insertinto[alumnitos]
values('A003','ana','diaz')
select*
fromalumnitos
- 74 -
UPDATE
El lenguaje SQL server permite escribir instrucciones que hagan posible que esas
actualizaciones se realicen rpidamente, para ello debe emplear la sentencia
UPDATE. En su forma ms elemental Update tendr la siguiente sintaxis.
SINTAXIS
UPDATE "nombre_tabla"
SET "colonne 1" = [nuevo valor]
WHERE {condition}
- 75 -
Ejemplo 3:
updatedbo.Categories
setCategoryName='juguetes'
whereCategoryID=5
select*
fromCategories
Ejemplo 4:
updateSuppliers
setFax='0'
whereFaxisnull
select*
fromSuppliers
- 76 -
Ejemplo 5:
updateEmployees
setFirstName='Karen',LastName='Estrada'
whereEmployeeID=6
select*
fromEmployees
Ejemplo 6:
updateCustomers
setCustomerID=('UNCFNI')
whereCustomerID=('ALFKI')
select*
fromCustomers
- 77 -
4.3.
DELETE FROM
Esta sentencia permite eliminar registros de las tablas. La sintaxis ms simple de
esta sentencia es la siguiente:
SINTAXIS
DELETE FROM "nombre_tabla"
WHERE {condicin}
La instruccin DELETE quita una o varias filas de una tabla o una vista mediante
una transaccin. Puede especificar las filas que elimina SQL Server si filtra la tabla
de destino o mediante una clusula JOIN o una subconsulta.
La instruccin DELETE quita filas de las tablas. La instruccin DELETE permite
quitar una o varias filas de una tabla.
Al utilizar la instruccin DELETE, tenga en cuenta los hechos siguientes:
SQL Server eliminar todas las filas de la tabla si no incluye una clusula
WHERE en la instruccin DELETE.
Cada fila eliminada se almacena en el registro de transacciones.
Ejemplo 1:
deletefromProducts
whereDiscontinued=1
- 78 -
Ejemplo 2:
delete
fromOrders
whereOrderID=10255
select*
fromOrders
whereOrderID=10255
Ejemplo 3:
delete
from[Order Details]
whereProductIDin(selectProductID
fromProducts
whereDiscontinued=1)
4.4.
SUBCONSULTAS
Es una consulta dentro de otra ms grande.
o Consulta : Seleccionar los productos cuyos precios sean mayores al
promedio de todos los productos
select*
fromProducts
whereUnitPrice>(selectAVG(UnitPrice)fromProducts)
- 79 -
o
delete
from[Order Details]
whereProductIDin(selectProductID
fromProducts
whereDiscontinued=1)
4.5.
- 80 -
Ejemplo:
ALTER proc SPQ_PRODUCTS
as
select *
from Products
where CategoryID=8
- 81 -
Exec hola 8
Ejemplo:
Alter procedure hola
@cod int
as
select *
from Customers
where CustomerID=@cod
- 82 -
Ejemplo:
Create proc precios
@li money,
@ls money
as
select *
from Products
where UnitPrice between @li and @ls
- 83 -
Las variables son elementos del lenguaje con valores asignados. En TransactSQL se pueden utilizar variables locales.
Una variable local es una variable definida por el usuario en una instruccin
DECLARE; se le asigna un valor inicial en una instruccin SET o SELECT y,
despus, se utiliza en la instruccin, programa por lotes o procedimiento en el que
se declar. Una variable local se identifica mediante un smbolo arroba (@) que
precede a su nombre mientras que una variable global incluye dos smbolos arroba
delante de su nombre.
- 84 -
empleado_unidades 1996
- 85 -
mas_vendidos 3,1997
no_vendidos 1996
- 86 -
productos'%queso%'
- 87 -
productos'%queso%'
7. dias trnascurridos
createprocdias_trans
@numint
as
selectcount(OrderID)ascant_ords,datediff(day,ShippedDate,RequiredDate)asd
ias_trans
fromOrders
wheredatediff(day,ShippedDate,RequiredDate)<@num
groupbydatediff(day,ShippedDate,RequiredDate)
- 88 -
dias_trans 10
8. En un ao determinado
alterprocdias_trans
@numint,
@anioint
as
selectcount(OrderID)ascant_ords,datediff(day,ShippedDate,RequiredDate)asd
ias_trans
fromOrders
wheredatediff(day,ShippedDate,RequiredDate)<@numandYEAR(RequiredDate)=@an
io
groupbydatediff(day,ShippedDate,RequiredDate)
- 89 -
- 90 -
- 91 -
verdadero
alter proc insert_cliente
@nom varchar (20),
@ape varchar (30),
@dir varchar (30),
@email varchar (35)
as
declare @cod char(7)
declare @nr int
set @cod=left(@nom,2)+LEFT(@ape,2)
select @nr=COUNT(*)+1
from dbo.clientes
where SUBSTRING(codigo,1,4)=@cod
if @nr<=9
set @cod=Rtrim(@cod)+'00'+LTRIM(STR(@nr))
if @nr<=99
set @cod=Rtrim(@cod)+'0'+LTRIM(STR(@nr))
else
set @cod=rtrim(@cod)+LTRIM(STR(@nr))
insert into dbo.clientes
- 92 -
Insertar participantes
create proc insertpat
@nom varchar(30),
@ape varchar(30),
@sexo char (1)
as
declare @cod char (7)
declare @nr int
select @nr=COUNT(*)
from dbo.participantes
where sexo=@sexo
if @nr<9
set @cod=left(@nom,2)+LEFT(@ape,2)+'00'+LTRIM(STR(@nr+1))
else if @nr<99
set @cod=left(@nom,2)+LEFT(@ape,2)+'0'+LTRIM(STR(@nr+1))
else
set @cod=left(@nom,2)+LEFT(@ape,2)+'0'+LTRIM(STR(@nr+1))
insert into dbo.participantes
values (@cod,@nom,@ape,@sexo)
insertpat 'luis','ruiz','m'
Insertar alumnos
alter proc ins_alumnos
@nom varchar(30),
@ape varchar(30),
@fenac datetime
as
declare @cod char (9)
declare @nr int
set @cod=left(@nom,1)+LEFT(@ape,1)+Ltrim(str(YEAR(@fenac)))
select @nr=COUNT(*)+1
from dbo.alumnos
where substring(@cod,1,9)=@cod
if @nr<=9
set @cod=Rtrim(@cod)+'00'+LTRIM(STR(@nr))
if @nr<=99
set @cod=Rtrim(@cod)+'0'+LTRIM(STR(@nr))
- 93 -
Insertar participantes
create proc insertpat
@nom varchar(30),
@ape varchar(30),
@sexo char (1)
as
declare @cod char (7)
declare @nr int
select @nr=COUNT(*)
from dbo.participantes
where sexo=@sexo
if @nr<9
set @cod=left(@nom,2)+LEFT(@ape,2)+'00'+LTRIM(STR(@nr+1))
else if @nr<99
set @cod=left(@nom,2)+LEFT(@ape,2)+'0'+LTRIM(STR(@nr+1))
else
set @cod=left(@nom,2)+LEFT(@ape,2)+'0'+LTRIM(STR(@nr+1))
insert into dbo.participantes
values (@cod,@nom,@ape,@sexo)
insertpat 'luis','ruiz','m'
- 94 -
- 95 -
OTRAS SENTENCIAS
5.1.
SUBSTRING FUNCION
La funcin de subcadena en SQL se utiliza para tomar una parte de los datos
almacenados. Esta funcin tiene diferentes nombres segn las diferentes bases de
datos:
TRIM FUNCION
La funcin TRIM en SQL se utiliza para eliminar un prefijo o sufijo determinado de
una cadena. El patrn ms comn a eliminarse son los espacios en blanco. Esta
funcin tiene diferentes nombres segn las diferentes bases de datos:
MySQL: TRIM(), RTRIM(), LTRIM()
Oracle: RTRIM(), LTRIM()
SQL Server: RTRIM(), LTRIM()
- 96 -
SENTENCIA CAST
Se utiliza para convertir valores de un tipo a otro diferente, la forma de utilizarla es
CAST("CAMPO" as TIPO), por ejemplo, si queremos recuperar un Integer en
formato de texto, la consulta sql sera as:
Select CAST(goles as varchar(30))
from jugadores
where id = 100
Este resultado nos devolveria los goleadores de menor a mayor, pero lo logico es
que nos interese al reves, por lo que se sera:
Select Jugador,goles
from jugadores
order by goles desc
- 97 -
as int)
select *
from Employees
where EmployeeID=@azar
CUSTOMER AZAR
create proc azar
as
select top 1 CustomerID,CompanyName,NEWID()
from Customers
order by NEWID()
o
alter proc azar
@num int
as
select top (@num) CustomerID,CompanyName,NEWID()
from Customers
order by NEWID()
azar 3
- 98 -
- 99 -
REPORTING SERVICE
6.1.
- 100 -
- 101 -
6.2.
- 102 -
- 103 -
6.3.
- 104 -
- 105 -
- 106 -
DATA SET
Para traer la consulta que se va a mostrar se inserta un conjunto de datos. Hacemos clic
en Nuevo y luego en Conjunto de datos
Se abre el cuadro del origen de datos, como ya habamos creado un origen de datos
compartido, seleccionamos la opcin Utilizar referencia de origen de datos
compartidos; en este caso seleccionamos DataSource1. Finalmente aceptamos.
- 107 -
- 108 -
El Cuadro de Herramientas:
Por ejemplo el elemento Grfico, donde se puede elegir el grfico del cuadro
Seleccin tipo de grfico y aceptamos, logrando ver el grfico.
- 109 -
- 110 -
- 111 -
- 112 -
- 113 -
Cdigo en SQL:
create proc Report1
as
select p.ProductName, p.UnitPrice, p.UnitsInStock, c.CategoryName
from Products as p inner join Categories as c on
p.CategoryID=c.CategoryID
Reporting services:
En modo de diseo:
- 114 -
Reporting Service:
Para dar los valores a la categora debemos agregar un nuevo conjunto de datos
(dataset2). En esta ocasin hacemos una consulta de tipo Texto.
- 115 -
- 116 -
En modo de diseo:
- 117 -
3. Crear un reporte usando reporting service que muestre el nombre del producto, el
nombre de la compaa del proveedor, precio, seleccionar el nombre de la
empresa y mostrar los productos del proveedor seleccionado.
Cdigo en SQL:
select SupplierID,CompanyName
from Suppliers
order by SupplierID
- 118 -
En modo de diseo:
Informe final:
- 119 -
Reporting Services:
En modo de diseo:
- 120 -
5. Mostrar el nombre del cliente, nombre del empleado, nmero de la orden, fecha de
la orden, nombre del proveedor, filtrar por el empleado que hizo la orden.
Cdigo en SQL:
- 121 -
En modo de diseo:
Informe final:
- 122 -
Reporting Services:
En modo de diseo:
- 123 -
Informe final:
- 124 -
2.
Precio
10
Productoname
Proveedor
30
Unitprice
Categoryname
companyname
Cdigo en SQL:
Reporting Services:
En modo de diseo:
- 125 -
Informe final:
- 126 -
(mostrar
(mostrar categoryname)
Categoryname
Companyname
unitsinstock
Cdigo en SQL:
Reporting Services:
En modo de diseo:
- 127 -
Informe final:
4
3
2
1
0
Categora A Categora B Categora C Categora D
Productos
- 128 -
Reporting Services:
En modo de diseo:
- 129 -
Meses
1
12
Juan Torres
Pedro Len
Ana Daz
Mara Huamn
Empleados (Nombre y apellidos)
Numero de rdenes realizadas en un mes del ao seleccionado
Cdigo en SQL:
Reporting Services:
En modo de diseo:
- 130 -
Informe final:
6. Mes
Ao
Total de rdenes
Nmero de rdenes
realizadas
6
5
4
3
2
1
0
Emp 1
Emp 2
Emp 3
Emp 4
- 131 -
Reporting Services:
En modo de diseo:
- 132 -
Informe final:
- 133 -
5
4
3
2
1
0
Aos
Cdigo en SQL:
Reporting Services:
En modo de diseo:
- 134 -
Informe final:
- 135 -
Cdigo en SQL:
create proc Stock_cero
as
select ProductName,UnitPrice,UnitsInStock
from Products
order by ProductName
Reporting Services:
En modo de diseo:
Cdigo para el color de texto en Stock
=IIf(Fields!UnitsInStock.Value=0,
"Red","Blue")
- 136 -
Cdigo en SQL:
Reporting Services:
En modo de diseo:
Cdigo para el texto de mostrar Discontinuado
o Vigente
=iif(Fields!Discontinued.Value="True
","Discontinuado","Vigente")
- 137 -
Vamos a agrupar por categoras; para esto hacemos anticlic en la fila, elegimos
Agregar grupo, seguidamente seleccionamos Grupo primario:
- 138 -
Se observar as:
- 139 -
Tambin se puede hacer una suma total por cada grupo de al final.
- 140 -
Hacemos anti clic en el campo que va a servir de enlace para ir a otro informe y
hacemos clic en Propiedades de cuadro de texto
- 141 -
- 142 -
Cuando hacemos clic en una de las celdas, se abrir el siguiente informe enlazado
a ste al pasarle el parmetro.
- 143 -
/* Videos 22062011
Instalar el iis
Crear una data set
Pie de grupo para hacer clculos
De un informe llamar a otro pasar un parmetro (mostrar por categora)
Generar(2 opcin?) ASP
LocalhostURL donde va direccin de web donde cargar
Exportar archivo csv
Iniciopcherramientas Administrativasiis puesto 80
Podemos hacer lo siguiente:
- 144 -
Implementar el informe:
- 145 -
- 146 -
Hacemos lo siguiente para poner a los diferentes informes en los informes integrados.
Obtenemos lo siguiente:
- 147 -
CategoryId
Descuento %
Descuento S/.
Cat 430%
Else0%
select CategoryName,ProductName,UnitPrice,c.CategoryID
from Products as p inner join Categories as c on p.CategoryID=p.CategoryID
order by c.CategoryID
Reporting Services:
En modo de diseo:
Cdigo para el
descuento en
porcentajes
=IIf(Fields!Category
ID.Value=1,"10%",IIf
(Fields!CategoryID.V
alue=2,"15%",IIf(Fie
lds!CategoryID.Value
=3,"23%",IIf(Fields!
CategoryID.Value=4,"
30%","0%"))))
- 148 -
Informe la categora 4:
2.
Informe x
Informe y
XXXXXX
LISTA DE EMPLEADOS
CDIGO
NOMBRES Y
APELLIDOS
XXXXX
Aos
Ventas
Totales
100
50
0
Cdigo en SQL:
- 149 -
En modo de diseo:
Cdigo en SQL:
- 150 -
En modo de diseo:
- 151 -
3. +HP(CompayName-Suppliers)
ProductId ProductName UnitPrice UnitInStock
+IBM
Cdigo en SQL:
select CompanyName, productId, productname,
UnitsInStock
from Suppliers as s inner join Products as p
on s.SupplierID=p.SupplierID
- 152 -
En modo de diseo:
Informe final:
- 153 -
Reporting Services:
- 154 -
Reporting Services:
- 155 -
3. Crear un Grafico que muestre los aos, los empleados y el Monto total ingresado
por los pedidos. Filtrar por aos que se mostrara desde una lista desplegable.
Cdigo en SQL:
- 156 -
4. Crear un Grafico que muestre los aos, los meses y el numero de productos
pedidos de un cliente (solo considerar los productos videntes). Escogiendo el
cliente de una lista desplegable, donde se mostrara el nombre de la compaa del
cliente.
Cdigo en SQL:
- 157 -
select CompanyName
from Customers
order by CompanyName
Reporting Services:
- 158 -
Reporting Services:
- 159 -
Reporting Services:
- 160 -
Reporting Services:
=IIf(Fields!CategoryID.Value=1,"Yellow",IIf(Fields!CategoryID.Value=2,"Yellow",IIf(
Fields!CategoryID.Value=3,"SeaGreen",IIf(Fields!CategoryID.Value=4,"SeaGreen",
IIf(Fields!CategoryID.Value=5,"Blue",IIf(Fields!CategoryID.Value=6,"Blue","Red"))))
))
- 161 -
Reporting Services:
- 162 -
- 163 -
- 164 -
CREACIN DE VISTAS
Cdigo en SQL:
create view v_todoproducts
as
select *
from products
Seleccionar la vista:
select *
from v_todoproducts
Cdigo en SQL:
Estrada Aguilar, Karen Johana |
- 165 -
Seleccionar la vista:
select *
from vista02
Cdigo en SQL:
create view vista03
as
select top 1000 ProductID, ProductName
from products
order by ProductName
- 166 -
Seleccionar la vista:
select *
from vista03
Cdigo en SQL:
drop view vista02
- 167 -
exec Inicio_seccion
- 168 -
use master
go
select name
from syslogins
where year(createdate)=YEAR(GETDATE()) and
month(createdate)=month(GETDATE()) and
day(createdate)=day(GETDATE())
order by name
Cdigo en SQL:
exec borrar_ISLogin
- 169 -
use master
go
select name
from syslogins
where year(createdate)=YEAR(GETDATE()) and
month(createdate)=month(GETDATE())
and day(createdate)=day(GETDATE())
order by name
exec usuario2
- 170 -
use Northwind
go
select name
from SYSUSERS
where year(createdate)=YEAR(GETDATE()) and
month(createdate)=month(GETDATE())
and day(createdate)=day(GETDATE())
order by name
Cdigo en SQL:
exec borrar2
- 171 -
FUNCIONES
Cambiar a Maysculas:
Cdigo en SQL:
Convierte a ninsculas:
Cdigo en SQL:
select LOWER('KArEEf')
select lower(customerid)
from Customers
- 172 -
Cdigo en SQL:
select ('
LTRIM('
JOSE'),
JOSE')
Cdigo en SQL:
select ('JOSE
RTRIM('JOSE
'),
')
Cdigo en SQL:
select len('Karen Johana')
select LEN(lastname), lastname from employees
Cdigo en SQL:
select SUBSTRING('universidad',4,3)
Cdigo en SQL:
select CHARINDEX(' ', 'Universidad
Nacional de Cajamarca',13)
- 173 -
Datepart
Cdigo en SQL:
select datepart(yy,GETDATE())
select datepart(yy,DATEADD(YY,-3,GETDATE()))
/*agregar aos al ao, 1 un ao,fecha ala cual quiero
agregar*/
Getdate(), Dateadd
Cdigo en SQL:
select GETDATE()
select DATEADD(mm,3,GETDATE())
select datepart(mm,GETDATE())
select datepart(mm,DATEADD(mm,-1,GETDATE()))
Datediff
Cdigo en SQL:
select DATEDIFF(YY,'19/04/1991',GETDATE())
/*add aade, diff resta*/
Nombre de la fecha.
Cdigo en SQL:
select DATENAME(MM,GETDATE())
select DATENAME(dd,GETDATE())
- 174 -
Es fecha?
Cdigo en SQL:
select ISDATE(orderdate) from Orders
select ISDATE('19/09/2011')
select ISDATE('ANA')
Es nmero?
Cdigo en SQL:
select
select
select
select
ISNUMERIC(90)
ISNUMERIC('19/09/2011')
ISNUMERIC('Pedro')
ISNUMERIC(200)
Cdigo en SQL:
select *
from Employees
select @@rowcount
- 175 -
Cdigo en SQL:
update Products
set UnitPrice=100
where CategoryID=1
/*set @nr=@@rowcount*/
select @@rowcount
RESTRICCIONES
- 176 -
- 177 -
PROPUESTOS:
1. Crear una funcin que devuelva el IGV
Create function fn_IGV
(@monto money)
returns money
as
begin
declare @sol money
set @sol=@monto*0.19
return @sol
- 178 -
hola
'), dbo.fn_borrar_lados('
4. Crear una funcin que pase como parmetro el fax, si no existe fax entonces que
se muestre 'no especificado', caso contrario que muestre el nmero de fax.
create function veri_fax
- 179 -
5. Crear una funcin que me permita cambiar la clave de un usuario si se graba bien
devolver 1 y sino devolver 0
create function fn_veri_user
(@u varchar(15),@p varchar(20))
returns int
as
begin
declare @nr int
select @nr=count(*)
from usuarios_db
where usuario=@u and clave=@p
return @nr
end
/////
select dbo.fn_veri_user('juan2011','1234')
select dbo.fn_veri_user('karenjea','753159')
create function fn_clavenueva
(@u varchar(15),@c_act varchar(20),@c_nue varchar(20))
as
begin
update usuarios_db
- 180 -
7. Crear una funcin que nos permita seleccionar un Proveedor de manera aleatoria.
--crear una vista que almacene el numero aleatorio
create view v_rand
as
select rand() as number
/*
select number from v_rand*/
/* select cast(number*5 as int) from v_rand*/
-- FUNCION
create function fn_aleatorio()
returns varchar(20)
as
begin
declare @nreg int,@reg varchar(20),@rnd float
select @nreg=count(*)
from suppliers
set @rnd=(select number from v_rand)
select @reg=companyname
from suppliers
where supplierid=cast((@rnd*@nreg+1) as int)
return @reg
end
select dbo.fn_aleatorio()
- 181 -
Probar:
delete from [Order Details]
where OrderID = 10529
Probar:
DELETE FROM [ORDER DETAILS]
WHERE ORDERID = 10333 AND PRODUCTID = 1
- 182 -
5. Crear una tabla historico que vaya guardando el nombre de la compania (actual nombre
y nuevo nombre) de los proveedores. Tabla: historico (id, actual, nuevo) el id es identity.
CREATE TRIGGER A6
ON SUPPLIERS
FOR UPDATE
AS
IF UPDATE(COMPANYNAME)
BEGIN
DECLARE @C_ACT VARCHAR(50)
DECLARE @C_NEW VARCHAR(50)
SELECT @C_ACT=COMPANYNAME FROM DELETED
SELECT @C_NEW=COMPANYNAME FROM INSERTED
INSERT INTO HISTORICO (ACTUAL,NUEVO)
VALUES (@C_ACT,@C_NEW)
END
Probarlo:
UPDATE SUPPLIERS
SET COMPANYNAME ='JUAN'
WHERE SUPPLIERID = 2
- 183 -