SQL Server 2008 Basico & Avanzado

download SQL Server 2008 Basico & Avanzado

of 31

Transcript of SQL Server 2008 Basico & Avanzado

BASICOSQL es un estandar para accesar y manejar bases de datos

Este tutorial te va a mostrar como manejar bases de datos en MySQL, SQL Server, MS Access, Oracle, Sybase, DB2 y otras bases de datos

Que es SQL?SQL es un standar un lenguaje estructurado para consultasSQL te permite aceder y manejar bases dedatosSQL es un Estandar (ANSI American National Standards Institute)

Que puede hacer SQL?

SQL puede ejecutar consultas a una base de datosSQL puede obtener datos de una base de datosSQL puede insertar registros en una base de datosSQL puede actualizar registros de una base de datosSQL puede borrar registros de una base de datosSQL puede crear nuevas bases de datosSQL puede crear nuevas tablas en una base de datosSQL puede crear procedimientos almacenados(codigo almacenado) en una base de datosSQL puede crear vistas en una base de datosSQL puede configurar permisos a tablas, procedimientos, y vistas

SQL es un estandar pero Apesar de que es un estandar ANSI (American National Standards Institute) hay diferentes versiones del lenguaje SQL

Y de cualquier modo, siguen cumpliendo el estandar ANSI pues estas versiones soportan la mayoria de los comandos tales como SELECT, UPDATE, DELETE, INSERT, WHERE

Que es una RDBMS?

RDBMS (del ingls Relational database management system)SGBD (Sistema de gestin de base de datos relacional)es la base para el SQL y para todas las bases de datos modernascomo MS SQL Server, IBM DB2, Oracle, MySQL, and Microsoft Access.

Los datos en un RDBMS se almacenan en objetos llamados tablasUna tabla es una coleccion relacionada de entradas que consiste en columnasy filas

Usando SQL en tu Sitio Web

Para construir un sitio web que muestre datos de una base de datos necesitaras lo siguiente:

* Un programa de bases de datos RDBMS (MS Access, SQL Server, MySQL)* Un lenguaje del lado del servidor tales como PHP o ASP* SQL* HTML/CSS

Para realizar estos ejemplos descarga e instala SQL SERVER EXPRESS haciendo clicAQUI

Sintaxis de SQL

Tablas

Una base de datos contienen uno o mas tablas. Cada tabla esta identificada por un nombre (ejemplo Clientes o Ordenes). Las tablas contienen registros (filas) con datos

Sentencias SQL

Creamos la base de datos

CREATE DATABASE empresa

Creamos la tabla Personas

CREATE TABLE dbo.Personas(P_id int PRIMARY KEY IDENTITY,Nombre nchar(20) NOT NULL,Apellidos nchar(30) NOT NULL,Direccion nchar(40) NOT NULL,Ciudad nchar(10) NOT NULL)GO

Insertamos algunos registros:

INSERT INTO PersonasVALUES ('Marco Antonio','Trejo Lemus','Calle E 822','Tampico')INSERT INTO PersonasVALUES ('Martha Beatriz','Trejo Lemus','Calle E 822','Tampico')INSERT INTO PersonasVALUES ('Juana Elvira','Trejo Lemus','Calle E 822','Tampico')INSERT INTO PersonasVALUES ('Nora Zulma','Trejo Lemus','Calle E 822','Tampico')INSERT INTO PersonasVALUES ('Laura Lucero','Sobrevilla Trejo','Calle E 822','Tampico')INSERT INTO PersonasVALUES ('Maria de la luz','Trejo Campos','Calle E 822','Tampico')INSERT INTO PersonasVALUES ('Trinidad','Trejo Bautista','Calle E 822','Tampico')INSERT INTO PersonasVALUES ('Marcel Abisag','Sobrevilla Trejo','Calle E 822','Tampico')INSERT INTO PersonasVALUES ('Jose Abraham','Sobrevilla Trejo','Calle E 822','Tampico')INSERT INTO PersonasVALUES ('Samuel Salomon','Olmeda Trejo','Calle E 822','Tampico')

Muchas de las acciones que necesitas realizar en una base de datos se hacen con sentencias SQL

Seleccionamos todos los registros de la tabla

Las siguiente sentencia seleccionara todos los registros de la tabla "Personas" :

SELECT * FROM Personas

Abajo esta un ejemplo del resultado de la sentencia a la tabla llamada "Personas":

Este tutorial te enseara acerca de las diferentes declaraciones en SQL

Manten en mente lo siguiente: las sentencias SQL no son sencibles a las mayusculas o minisculas

Punto y coma despues de las sentencias SQL

Algunos sistemas de bases de datos requieren un punto y coma al final de cada sentencia SQL

El punto y como es un estandar que se para cada sentencia SQL en sistemas de bases de datos que habilitan mas de una sentencia SQL ejecutada en la misma llamada al servidor

SQL DML Y DLL

SQL puede ser dividido en dos partes: El Lenguaje de Manipulacion de Datos (DML) y el Lenguaje de Definicion de Datos (DDL)

La parte DMLdel SQL de los comandos de consulta y actualizacion son:

SELECT - extrae datos de una base de datosUPDATE - actualiza datos en una base de datosDELETE - borra datos de una base de datosINSERT INTO - inserta datos dentro de una base de datos

DLL del SQL que permite a bases de datos y tablas ser creadas o borradas.Tambien define indices(llaves). especifica enlaces entre tablas, y impone relaciones entre tablas.

La parte DLLdel SQL, las sentencias mas importante DDL en SQL son:

CREATE DATABASE - crea una nueva base de datosALTER DATABASE - modifica una base de datosCREATE TABLE - crea una nueva tablaALTER TABLE - modifica una tablaDROP TABLE - borra una tablaCREATE INDEX - crea un indice (llave de busqueda)DROP INDEX - borra un indice

La sentencia SELECT

La sentencia SELECT es usada para seleccionar datos de una base de datos.

El resultado es almacenado en una tabla temporal, llamada tabla-resultadoLa sintaxis SQL de la sentencia SELECT es:

1) SELECT nombre_columna(s)FROM nombre_tabla

y

2) SELECT * FROM nombre_tabla

Ejemplo 1

SELECT nombre_columna(s)FROM nombre_tabla

SELECT Nombre,Apellidos,CiudadFROM Personas

Ejemplo 2

SELECT * FROM nombre_tabla

SELECT * FROM nombre_tabla

Navegacion en una tabla de resultados

Muchos sistemas de bases de datos permiten la navegacion en la tabla de resultados programando funciones como: Moverse-Al-Primero, Obtener-Contenido-Registro, Moverse-Al-Siguiente-Registro, etc.

Funciones de programacion como estas no son parte de este tutorial. Para aprender a accesar a datos con la llamada a funciones espera mi siguiente tutorial ADO y PHP.

La sentencia SELECT DISTINCT

Dentro de una tabla, algunas columnas pueden contener valores duplicados. Esto no es un problema, algunas veces tu querras listar solo los valores diferentes (distintos) en la tabla

La palabra DISTINCT puede ser usada como llave para regresar solo los valores distintos(diferentes).

Sintaxis SQL SELECT DISTINCT

SELECT DISTINCT nombre_columna(s)FROM nombre_table

Ejemplo:

SELECT DISTINCT ApellidosFROM Personas

Abajo esta el resultado de la sentencia DISTINCT a la tabla "Personas":

SELECT DISTINCT Ciudad FROM Personas

Abajo esta el resultado de la sentencia DISTINCT a la tabla "Personas":

SQL WHERE

La sentencia where es usada para extraer solo los registros que cumplen con el criterio especificad

La Sintaxis SQL WHERE

SELECT nombre_columna(s)FROM nombre_tablaWHERE nombre_columna operador valor

Ejemplo de la sentecia WHERE

SELECT *FROM PersonasWHERE Apellidos ='Trejo Lemus'

Comillas en los campos de texto

SQL usa comillas simples en los valores de texto (muchos sitemas manejadores de bases de datos aceptan comillas dobles).Para SQL los valores de texto deben ser puestos entre comillas simples

Los valores numericos no deben ser puestos entre comillas

Para valores de texto:

Esta es la forma correcta:

SELECT *FROM PersonasWHERE Nombre='Lucero'

Esta es la forma equivocada:

SELECT *FROM PersonasWHERE Nombre=Lucero

Para valores numericos:

Esta es la forma correcta:

SELECT *FROM PersonasWHERE P_id = 9

Esta es la forma incorrecta:

SELECT *FROM PersonasWHERE P_id = '9'

Operadores permitidos en la sentencia WHERECon la sentencia WHERE, los siguientes operadores pueden ser usados:

Operadores SQL AND y OR

Los operadores AND y OR son usados para filtrar registros basados en mas de una condicion

Operador ANDEl operador AND muestra el registro si la primera condicion y la segunda condicion son verdaderas

El operador OR muestra el registro si la primera o la segunda condicion es verdadera

Ahora teniendo en cuenta la siguiente tabla:

Para seleccionar solo las personas con el Nombre igual a Marcel Abisag y el apellido igual a Sobrevilla Trejo,

Usaremos la siguiente sentencia SELECT:

SELECT * FROM PersonasWHERE Nombre='Marcel Abisag'AND Apellidos='Sobrevilla Trejo'

El resultado seria:

Operador OR

Ahora seleccionaremos las personas con el campo Nombre igual a "Martha" o el campo Nombre igual a "Elvira"

Usaremos la siguiente sentencia SELECT

SELECT * FROM PersonasWHERE Nombre='Martha Beatriz'OR Nombre='Juana Elvira'

El resultado sera el siguiente:

Combinando AND & OR

Puedes combinar el AND y el OR (usando parentesis para formar expresiones complejas)

Ahora seleccionaremos solo las personas con el campo Apellidos igual a "Sobrevilla Trejo" AND Nombre igual a "Marcel Abisag" OR igual a "Jose Abraham"

Usaremos la siguiente sentencia SELECT:

SELECT * FROM Personas WHEREApellidos='Sobrevilla Trejo'AND (Nombre='Marcel Abisag' OR Nombre='Jose Abraham')

El resultado sera el siguiente:

SQL ORDER BY

The ORDER BY keyword is used to sort the result-set.La sentencia ORDER BY es usada para ordenar un resultado ordenado por una columna especifica

La sentencia ORDER BY es usada para ordenar los registros en orden ascendente por default

Si quieres ordenar los registros en orden descendente utiliza la palabra DESC

Sintaxis SQL ORDER BY

SELECT nombre_columna(s)FROM nombre_tablaORDER BY nombre_column(s) ASCDESC

Ahora vamos a seleccionar todas las personas de la tabla, pero mostrando en orden por el campo Nombre

Usaremos la siguiente sentencia SELECT:

SELECT * FROM PersonasORDER BY Nombre

El resultado sera el siguiente:

ORDER BY DESC

Ahora vamos a seleccionar a todas las personas de la tabla pero mostrandolas en un orden descendente por el campo Nombre con la palabra DESC

We use the following SELECT statement:

SELECT * FROM PersonasORDER BY Nombre DESC

El resultado sera el siguiente:

Sentencia SQL INSERT INTO

La sentencia INSERT INTO se usa para insertar un registro o fila en una tabla

Sintaxis SQL INSERT INTOEs posible escribir la sentencia INSET INTO en dos formas

La primera forma no especifica los nombres de las columnas donde los datos seran insertados solo los valores:

INSERT INTO nombre_tablaVALUES (valor1, valor2, valor3,...)

La segunda forma especifica los nombres de las columnas y los valores insertados

INSERT INTO nombre_tabla (columna1, columna2, columna3,...)VALUES (valor1, valor2, valor3,...)

Ejemplo INSERT INTO

Dado que tenemos la siguiente tabla Personas:

Insertaremos un nuevo registro de la siguiente forma:

INSERT INTO PersonasVALUES ('Martha', 'Lemus Hurtado', 'Canoga Park', 'L.A.')

El resultado lo mostrariamos con la sentencia SELECT * FROM Personas y seria el siguiente:

Insertar Datos solo en columnas especificadasEs posible agregar datos en columnas especificasLas siguientes sentencias SQL agregaran una nueva fila, pero solo agregaran datos en las columnas Nombre y Apellidos

INSERT INTO Personas (Nombre, Apellidos)VALUES ('Antonio', 'Trejo Campos')

Para mostrar el resultado con la sentencia: SELECT * FROM Personas

Mostrara lo siguiente:

Sentencia SQL UPDATE Statement

La sentencia UPDATE es usada para actualizar registros en una tabla

Sintaxis SQL UPDATE

UPDATE nombre_tablaSET columna1=valor, column2=valor,...WHERE alguna_columna=algun_valor

Nota: La sentencia WEHRE en la sintaxis UPDATE, especifica cual de los registros va a ser actualizado. Si omites la sentencia WHERE todos los registros seran actualizados.

Ahora vamos a actualizar la persona "Antonio Trejo Campos" en la tabla PersonasUsaremos la siguientes sentencias SQL:

UPDATE PersonasSET Direccion='Canoga Park', Ciudad='L.A.'WHERE Nombre='Antonio' AND Apellido='Trejo Campos'

El resultado sera el siguiente:

CUIDADO!!! al utilizar la sentencia UPDATE

Si omites la sentencia WHERE se actualizaran todos los registros de esta forma:

UPDATE PersonasSET Direccion='Canoga Park', Ciudad='L.A.'

El resultado seria:

Sentencia SQL DELETE

La sentencia DELETE se usa para borrar registros o filas en una tabla

Sintaxis SQL DELETE

DELETE FROM nombre_tablaWHERE alguna_columna=algun_valor

Nota: La sentencia WHERE en la sintaxis DELETE especifica el registro o los registros que seran borrados, si omites la sentencia WHERE, todos los registros seran borrados de la tabla

Ahora vamos a borrar la persona "Marco Antonio Trejo Lemus" en la tabla Personas con la siguiente sentencia:

DELETE FROM PersonasWHERE Nombre='Marco Antonio' AND Apellidos='Trejo Lemus'SELECT * FROM Personas

El resultado sera el siguiente:

Borrar todas las filas

Es posible borrar todas las filas en una table sin borrar la tabla en si. Esto significa que la estructura de la tabla, atributos e indices quedaran intactos:

DELETE FROM nombre_tabla

or

DELETE * FROM nombre_tabla

Nota: Debes tener cuidado cuando borres registros. Ya que no podras deshacer lo que hagas con esta sentencia.

APENDICE 1

El siguiente codigo creara la base de datos en el servidor SQL EXPRESS

1.- Hacer clic en Inicio --> Todos los Programas --> Microsoft SQL SERVER 2008 --> SQL Server Management Studio

2.- Hacer clic en el boton CONECTAR

3.- Hacer clic Nueva Consulta (se encuentra en el margen superior izquierdo)

Seleccionar y Copiar el siguiente "CODIGO GENERADORDE BASE DE DATOS" empresa:______________________________________________________

USE masterif exists (select * from sysdatabases where name='empresa')beginraiserror('La base de datos existe; eliminndola....',0,1)DROP database empresaendGOraiserror('Creando base de datos empresa....',0,1)goCREATE DATABASE empresaGOUSE empresaGOCREATE TABLE Personas(P_id int PRIMARY KEY IDENTITY,Nombre nchar(20) NOT NULL,Apellidos nchar(30) NOT NULL,Direccion nchar(40) NOT NULL,Ciudad nchar(10) NOT NULL)GOGOINSERT INTO Personas VALUES ('Marco Antonio','Trejo Lemus','Calle E 822','Tampico')INSERT INTO Personas VALUES ('Martha Beatriz','Trejo Lemus','Calle E 822','Tampico')INSERT INTO Personas VALUES ('Juana Elvira','Trejo Lemus','Calle E 822','Tampico')INSERT INTO Personas VALUES ('Nora Zulma','Trejo Lemus','Calle E 822','Tampico')INSERT INTO Personas VALUES ('Laura Lucero','Sobrevilla Trejo','Calle E 822','Tampico')INSERT INTO Personas VALUES ('Maria de la luz','Trejo Campos','Calle E 822','Tampico')INSERT INTO Personas VALUES ('Trinidad','Trejo Bautista','Calle E 822','Tampico')INSERT INTO Personas VALUES ('Marcel Abisag','Sobrevilla Trejo','Calle E 822','Tampico')INSERT INTO Personas VALUES ('Jose Abraham','Sobrevilla Trejo','Calle E 822','Tampico')INSERT INTO Personas VALUES ('Samuel Salomon','Olmeda Trejo','Calle E 822','Tampico')GOselect * from Personasquit

______________________________________________________

4.- Pegar el codigo

5.- Ejecutar el codigo SQL haciendo clic sobre la opcion !Ejecutar que se muestra a continuacion:

Publicado porMarco Antonio Trejo Lemusen19:181 comentario:lunes, 18 de mayo de 2009AVANZADOClausula SQL TOP

La clausula TOP se usa para especificar el numer de registros que existenpuede verificar la longitud de las tablas con miles de registros, regresando el numero de registros

Nota: No todas las bases de datos soportan la clausula TOP

Sintaxis SQL Server

SELECT TOP numeroporciento nombre_columna(s)FROM nombre_tabla

Ahora seleccionaremos solo los dos primeros registros de la tabla que se muestra abajo:

Utilizaremos las siguientes sentencias SELECT:

SELECT TOP 2 * FROM Personas

El resultado sera el siguiente:

Sentencia SQL TOP PERCENT

Ahora seleccionaremos solo el 50% de los registros en la tablaUsaremos las siguientes sentencias SELECT:

SELECT TOP 50 PERCENT * FROM Personas

El resultado se muestra abajo en la tabla:

Operador SQL LIKE

Operador SQL LIKE

El operador LIKE se usa en una sentencia WHERE para buscar un patron en una columna

Sintaxis LIKESELECT nombre_columna(s)FROM nombre_tablaWHERE nombre_columna LIKE patron

Ejemplo de operador LIKEEn la tabla "Personas" :

Vamos a buscar las personas que viven en la ciudad de Tampico que empiecen con "Ta" de la tabla en cuestion

Usaremos la siguiente sentencia SELECT:

SELECT * FROM PersonasWHERE Ciudad LIKE 'Ta%'

El signo "%" puede ser usado para definir comodines (letras que faltan en el patron de busqueda) ambas antes o despues del patron de busqueda

El resultado seria el siguiente:

Ahora vamos a seleccionar las personas que viven en la ciudad que comienza con una "T" de la tabla personas

Usaremos la siguiente sentencia SELECT:

SELECT * FROM PersonasWHERE Ciudad LIKE '%T'

El resultado seria el siguiente:

Ahora vamos a seleccionar las personas que viven en la ciudad que contiene el patron "tam" de la tabla personas

Usaremos la siguiente sentencia SELECT:

SELECT * FROM PersonasWHERE Ciudad LIKE '%tam%'

El resultado seria el siguiente:

Tambien es posible seleccionar las personas que viven en la ciudad que no contienen el patron "tamp" de la tabla personas, usando la palabra clave NOT

Usaremos la siguiente sentencia SELECT:

SELECT * FROM PersonasWHERE Ciudad NOT LIKE '%tamp%'

El resultado seria el siguiente:

Comodines SQL

Los comodines SQL pueden ser usados en la busqueda de datos en una base de datospueden sustituir a uno o mas caracteres cuando se busquen los datos

Los comodines deben usarse con el operador LIKE

Se pueden usar con SQL los siguientes comodines:

Usando el comodn %Ahora seleccionaremos las personas que viven en la ciudad de Tampico que empiecen con "Ta" de la tabla Personas

Usaremos la siguiente sentencia SELECT:

SELECT * FROM PersonasWHERE Ciudad LIKE 'Ta%'

Ahora buscaremos las personas que viven en la ciudad que contenga el patron "ico" de la tabla Personas

Usaremos la siguiente sentencia SELECT:

SELECT * FROM PersonasWHERE Ciudad LIKE '%ico%'

Usando el _ Comodn

Ahora selectionaremos las personas que el primer nombre comience con algun caracterseguido de "Ma" de la tabla Personas

Usaremos la siguiente sentencia SELECT:SELECT * FROM PersonasWHERE Nombre LIKE '_ar'

1. JUL12

VISTAS----- Vistas ----Una vista es una consulta especial que se emplea para registrar selecciones complejas o que se usan frecuentemente.Una vez creada la vista se puede realizar unaseleccinde los datos como si fuera esta una tabla e incluso se puede utilizar para definir procedimientos almacenados.EJEMPLOS :1. Crear una vista que liste 3 campos de clientes

create view v_listaclientesasselect IdCliente,NombreCompaa,Pas from Clientesgo

nota : para ejecutar la vista se hace lo siguiente

select * from v_listaclientesgo

2. Crear una vista que muestre el subtotal de los pedidoscreate view v_subtotalasselect IdPedido,SUM(d.PrecioUnidad * Cantidad * (1-d.Descuento ))as Subtotalfrom DetallesDepedidos dinner join Productos pon d.IdProducto=p.IdProductogroup by IdPedidogo

select * from v_subtotalgo

3. Crear una vista que listeNombreProducto,NombreCategora,PrecioUnidad,Suspendido

create view v_productosasselect NombreProducto,NombreCategora,PrecioUnidad,Suspendido from Productos pinner join Categoras c on p.IdCategora =c.IdCategorago

select * from v_productosorder by NombreCategora,NombreProductogo

4. Utilizando la vista anterior , crear una vista que muestre el total de productos x categoriacreate view total_prodxcategasselect NombreCategora,COUNT(*)as Totalprodxcateg from v_productosgroup by NombreCategorago

select * from total_prodxcateg

5. Crear una vista que nos devuelva la cantidad de pedidos que tiene cada empleado en los---aos 94,95 y 96

create view v_cant_pedidosasselect Nombre,(Select COUNT (*)from v_empleado e where e.Nombre=c.Nombre and YEAR(FechaPedido)=1994) as Ao_1994,(select COUNT(*)from v_empleado e where e.Nombre=c.Nombre and YEAR(FechaPedido)=1995)as Ao_1995,(select COUNT(*)from v_empleado e where e.Nombre =c.Nombre and YEAR(FechaPedido)=1996)as Ao_1996from v_empleado cgroup by Nombre

select * from v_cant_pedidos

6. Crear una vista que presente el total de pedido que tiene cada compaia de envio

create view v_totalpedidosasselect NombreCompaa,COUNT(*)as Total_Pedidos from v_compaiagroup by NombreCompaago

select * from v_totalpedidosPublicado12th July 2012porkevin lopez chavez0Aadir un comentario2. 3. JUL12

COMBINACION DE TABLASBienvenidos a mi blog !!!!!AquUd.podrconocer y aprender un poco mas de SQL SERVER 2008,con ejercicios resueltos y bien explicados.Buenocomencemos con lo ejercicios, ya que lateoraustedes ya saben y si no ??Me la escriben...---- Combinacinde Tablas -----1 . CombinacinInterna de Tablas

Hay 2 formas de hacerlo:Para este caso lo voy hacer con la tabla Productos y Categoras

- Primera Forma : (INNER JOIN)

SELECT NOMBRECATEGORA,NOMBREPRODUCTOFROM Productos P INNER JOIN Categoras CON P.IdCategora =C.IdCategoraGO-Segunda Forma : (WHERE)

SELECT NOMBRECATEGORA,NOMBREPRODUCTOFROM Productos P , Categoras CWHERE P.IdCategora =C.IdCategoraGO

2. CombinacinExterna de Tablas

--IZQUIERDA---> LISTA TODAS LOS PRODUCTOS QUE NO TIENENCATEGORAS

SELECT NOMBRECATEGORA,NOMBREPRODUCTOFROM Productos PLEFT OUTER JOINCategoras CON P.IdCategora =C.IdCategoraGO

---DERECHA---> LISTA TODAS LACATEGORASQUE NO TIENES PRODUCTOS

SELECT NOMBRECATEGORA,NOMBREPRODUCTOFROM Productos PRIGHT OUTER JOINCategoras CON P.IdCategora =C.IdCategoraGO

----COMPLETA ---->LISTA TODOS LOS PRODUCTOS CON SUSCATEGORAS, PRODUCTOS QUE NO TIENECATEGORAS Y LAS CATEGORIAS QUE NO TIENEN PRODUCTOS

SELECT NOMBRECATEGORA,NOMBREPRODUCTOFROM Productos PFULL OUTER JOINCategoras CON P.IdCategora =C.IdCategoraGO

Publicado12th July 2012porkevin lopez chavez0Aadir un comentario4. JUL12

CREACION DE BASE DE DATOS---- CREACION DE BASE DE DATOS ----Creamos la base de datos llamada ventas

create database ventasgouse ventasgoPara crear la tabla tiendapreguntamos si existe, si existe la borramos y la creamos para evitarerrores al momento de ejecutar varias veces

if exists(select * from sysobjects where type ='u' and name ='Tienda')drop table Tiendagocreate table Tienda(IdTienda int identity(1,1)primary key,NombreTienda varchar(30)not null,Estado varchar(10)not null)go

nota :- estoy estableciendo que el campoIdTienda es llave primaria-estoy estableciendoque el campoNombreTiendatiene que ser llenado obligatoriamente al momento de ingresar un nuevo registro

Creamos la tabla TiendaProducto

if exists(select * from sysobjects where type='u' and name ='TiendaProducto')drop table TiendaProductogocreate table TiendaProducto(IdTienda int not null,IdProducto int not null,Cantidad int )go

-estoy asignando dos llaves primarias a la tabla TiendaProductoalter table TiendaProducto add constraint pk_TiendaProducto primary key(IdTienda,IdProducto)

-estoy relacionando el campo IdTienda que es llave primaria con el campoIdTienda de la tabla Tiendaalter table TiendaProducto add constraint fk_TiendaProducto foreign key(IdTienda) references Tienda(IdTienda)

-estoy relacionando el campo IdProductoque es llave primariacon el campoIdProductode la tabla Productoalter table TiendaProducto add constraint fk_TiendaProduct foreign key(IdProducto) references Producto(IdProducto)Creamos la tabla Producto

if exists(select * from sysobjects where type='u' and name ='Producto')drop table Productogocreate table Producto(IdProducto int identity(1,1)primary key,NombreProducto char(30) not null,Precio Money not null)goCreamos la tabla Empleadoif exists(select * from sysobjects where type='u' and name ='Empleado')drop table Empleadogocreate table Empleado(IdEmpleado int identity(1,1)primary key,Nombres char(30) not null,Apellidos varchar(30)not null,-relaciono el campo IdTienda de Empleado con IdTienda de TiendaIdTienda int foreign key references Tienda(IdTienda))go

Estas lineas decdigoes para generar el diagrama de tablas relacionadasexec sp_dbcmptlevel 'ventas','90';alter authorization on database ::ventas to Saexec sp_dbcmptlevel 'ventas','90';goPublicado12th July 2012porkevin lopez chavez0Aadir un comentario5. JUL12

SUBCONSULTAS---- SUBCONSULTAS ----Una subconsulta es una consulta dentro de otra que se puede emplear para obtener totales yseleccinde datos de tablas anidadas

EJEMPLOS :

---CONTAR A LOS CLIENTES DE UN DETERMINADOPAS---select distinct Pas ,(select COUNT(*) from Clientes c2 where c2.Pas =c1.Pas) as total_clientesfrom Clientes c1order by Pasgo

---SUMA EL PRECIO DE UNACATEGORADE PRODUCTOS ---select Nombrecategora,(select SUM(PrecioUnidad)from Productos pwhere p.IdCategora = c.IdCategora )as Suma_PrecioUnidadfrom Categoras cgo

---CUENTA LOS PEDIDOS DEL CLIENTE ---select NombreCompaa ,(select COUNT(*)from Pedidos p where p.IdCliente=c.IdCliente )as Pedidos_Del_Clientefrom Clientes cgo

---CLIENTES QUE SEAN DEMXICO---select NombreCompaa as Clientes from Clienteswhere IdCliente IN (select IdCliente from Clientes where Pas='Mxico')go

---CLIENTES QUE COMPRARON ELPRODUCTOPEZ ESPADA ---select NombreCompaa as Clientes from Clientes where IdCliente in(select IdCliente from Pedidos where IdPedido in(select IdPedido from DetallesDepedidos where IdProducto in(select IdProducto from Productos where NombreProducto='Pez Espada')))go

---MUESTRA LA CANTIDAD DE PEDIDOS POR AO ---select distinct year(fechaPedido),(select COUNT(*) from Pedidos d where year(d.FechaPedido ) = year(p.FechaPedido )) as Pedidos_X_Aofrom Pedidos pgo