manual sql server 2008 intro duc to rio

183
  2011 SQL Introductorio, SQL SERVER 2008 Manual de estudio MATI. Marianella Solano Orias

Upload: juan-shion

Post on 20-Jul-2015

1.263 views

Category:

Documents


0 download

TRANSCRIPT

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 1/183

 

2011

SQL Introductorio, SQL SERVER

2008 Manual de estudioMATI. Marianella Solano Orias

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 2/183

SQL Introductorio, SQL SERVER 2008  2011 

2

Tabla de contenidoIntroducción ........................................................................................................................................ 5

Introducción a Bases de Datos ............................................................................................................ 5

Elementos de bases de datos .......................................................................................................... 5

Diferencia entre SQL y Microsoft SQL Server ..................................................................................... 6

Uso de la interfaz de Microsoft SQL Server Management Studio....................................................... 6

Partes de Microsoft SQL Server Management Studio..................................................................... 7

Explorador de objetos ................................................................................................................. 7

Nueva Consulta ......................................................................................................................... 15

Otros botones ............................................................................................................................ 16

Componentes del SQL ....................................................................................................................... 16

Comandos y cláusulas ................................................................................................................... 17Sentencias DDL .......................................................................................................................... 17

Sentencias DML ......................................................................................................................... 22

Práctica #1 Crear objetos ............................................................................................................. 30

Operadores Lógicos ....................................................................................................................... 34

Operadores de Comparación ........................................................................................................ 35

Funciones de agregado ................................................................................................................. 37

Consultas de Selección ...................................................................................................................... 40

Consultas Básicas .......................................................................................................................... 40

Ordenar registros .......................................................................................................................... 41

Consultas con predicado ............................................................................................................... 43

Alias ............................................................................................................................................... 47

Bases de datos externas ................................................................................................................ 48

Criterios de selección ........................................................................................................................ 50

Operadores lógicos ....................................................................................................................... 50

Intervalos de valores ..................................................................................................................... 54

Operador Like ................................................................................................................................ 55

Operador In ................................................................................................................................... 57

Cláusula Where ............................................................................................................................. 60

Práctica # 2 Creación de las tablas ................................................................................................ 61

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 3/183

SQL Introductorio, SQL SERVER 2008  2011 

3

Agrupamiento de registros y funciones agregadas ........................................................................... 64

Cláusula GROUP BY ....................................................................................................................... 64

AVG Media Aritmética ................................................................................................................... 66

COUNT Contar Registros ............................................................................................................... 67

MAX, MIN Máximo y mínimo ........................................................................................................ 69

Stdv,stdvp Desviación estándar .................................................................................................... 70

Sum Suma de valores ................................................................................................................... 72

Var VarP Varianza ......................................................................................................................... 72

Funciones de Manipulación de fecha................................................................................................ 74

DATEDIFF ....................................................................................................................................... 74

DATEPART ...................................................................................................................................... 75

GETDATE ........................................................................................................................................ 76

Porciones de fecha y hora usadas para las funciones de fecha .................................................... 79

Tipos de datos .................................................................................................................................. 79

Tipo de datos Caracter .................................................................................................................. 79

Tipo de datos numérico ................................................................................................................ 80

Tipos de dato de fecha y hora ....................................................................................................... 80

Conversión de tipos de datos ........................................................................................................ 81

Conversión de datos implícita o automática ............................................................................. 81

Conversión de datos explícita ................................................................................................... 82

Práctica #3 Aplicación de conceptos ............................................................................................. 84

Creación de tablas ............................................................................................................................. 85

Ingresar datos en una tabla ........................................................................................................... 93

Tipos de Consultas............................................................................................................................. 94

Consultas de Actualización ............................................................................................................ 94

Actualización simple .................................................................................................................. 94

Actualización compuesta .......................................................................................................... 97

Consultas de Eliminación ............................................................................................................ 107

Consulta de datos añadidos ........................................................................................................ 111

SELECT INTO .................................................................................................................................... 114

Práctica # 4 Consultas ..................................................................................................................... 117

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 4/183

SQL Introductorio, SQL SERVER 2008  2011 

4

La cláusula CONSTRAINT ................................................................................................................. 119

Creación de Índices ......................................................................................................................... 120

Eliminar y Añadir campos e índices ................................................................................................ 123

Creación de una base de datos ....................................................................................................... 132

Sub Consultas .................................................................................................................................. 136

Consultas de referencias cruzadas .................................................................................................. 139

Consultas de Unión Internas ........................................................................................................... 140

Consultas de Unión Externa ............................................................................................................ 147

Práctica# 5 para la casa .................................................................................................................. 159

Práctica # 6 Práctica General para examen .................................................................................... 162

Anexo I Solución de Práctica 1 ........................................................................................................ 164

Anexo II Solución de Práctica 2 ....................................................................................................... 165

Anexo III Solución Práctica 3 ........................................................................................................... 170

Anexo IV Solución Práctica 4 ........................................................................................................... 171

Anexo V Solución Práctica 5 ............................................................................................................ 173

Anexo VI Solución Práctica 6 ........................................................................................................... 177

Bibliografía ...................................................................................................................................... 182

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 5/183

SQL Introductorio, SQL SERVER 2008  2011 

5

Introducción

SQL son tres siglas que significan Structured Query Languaje (Lenguaje Estructurado de Consultas).SQL es un lenguaje informático que se puede utilizar para interaccionar con una base de datosrelacional, es una herramienta para organizar, gestionar y recuperar datos almacenados en una

base de datos, mediante el uso de sentencias que deben escribirse de acuerdo con unas reglassintácticas y semánticas de este lenguaje.

Introducción a Bases de Datos

Una base de datos o banco de datos (BD) es un conjunto de datos pertenecientes a un mismocontexto y almacenados sistemáticamente para su posterior uso, la mayoría de las bases de datosestán en formato digital (electrónico).Existen programas denominados sistemas gestores de bases de datos (SGBD), que permitenalmacenar y posteriormente acceder a los datos de forma rápida y estructurada. Las propiedadesde estos SGBD, así como su utilización y administración, se estudian dentro del ámbito de lainformática.

Elementos de bases de datos

Los elementos básicos de una base de datos son:

Entidades: Persona, lugar, objeto u evento para el cual se obtiene y mantienen datos. Ejemplo:Estudiante, Curso.

Campos: Atributos o características de la entidad.

Ejemplo:Entidad: EstudianteCampos: Nombre, Apellido, Edad.

Registros (Records o filas): Grupo de campos que describen un miembro de una entidad.

Archivos: Grupo de registros que contienen datos sobre una entidad. 

Llaves (keys): Campo o combinación de campos que permite localizar, acceder o identificar unregistro en específico. 

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 6/183

SQL Introductorio, SQL SERVER 2008  2011 

6

Diferencia entre SQL y Microsoft SQL Server

SQL, como se vio anteriormente es un lenguaje informático que se puede utilizar parainteraccionar con una base de datos y más concretamente en una base de datos relacional.

Microsoft SQL Server es un sistema para la gestión de bases de datos (SGBD) producido porMicrosoft basado en el modelo relacional. Sus lenguajes para consultas son T-SQL y ANSI SQL.

Los sistemas de gestión de bases de datos (en inglés database management system, abreviadoDBMS) sirven de interfaz entre la base de datos, el usuario y las aplicaciones que la utilizan.

Uso de la interfaz de Microsoft SQL Server Management Studio.

Para ingresar a la interfaz de Microsoft Sever Management Studio, se ingresa al menú Inicio,Programas o Todos los programas (dependiendo la versión de Windows que tenga instalado elcomputador), Microsoft SQL Server 2008, SQL Sever Management Studio; como se muestra en lasiguiente imagen.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 7/183

SQL Introductorio, SQL SERVER 2008  2011 

7

Partes de Microsoft SQL Server Management Studio

Explorador de objetos

El Explorador de objetos es visible en forma predeterminada en Management Studio, si por algunarazón no se muestra se puede abrir ingresando al menúVer (View), Explorador de Objetos

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 8/183

SQL Introductorio, SQL SERVER 2008  2011 

8

Conectar y desconectar a un servidor En la barra de herramientas se encuentran los siguientes botones

Permite conectar a un servidor, al dar clic sobre él, muestra la siguiente pantalla dondedebe de incluirse al menos el nombre del servidor y la información de autenticación.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 9/183

SQL Introductorio, SQL SERVER 2008  2011 

9

Permite desconectar un servidor, al dar clic sobre él se desconecta el servidor.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 10/183

SQL Introductorio, SQL SERVER 2008  2011 

10

Registrar un servidor del explorador de objetos

Una vez que el servidor se encuentra conectado al dar clic derecho sobre el nombre del servidorse despliega un menú, el cual muestra la opción de Registrar (Register), al seleccionar esta opciónse muestra un cuadro de dialogo en donde ese permite especificar en qué lugar del árbol delgrupo de servidores se quiere se muestre el servidor y cambiar el nombre.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 11/183

SQL Introductorio, SQL SERVER 2008  2011 

11

Por medio del botón Test, se puede verificar si los cambios no afectan la conexión del servidorantes de Salvar (Save)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 12/183

SQL Introductorio, SQL SERVER 2008  2011 

12

Una vez verificada la conexión, se salvan los cambios.

Ver objetos en el explorador de objetos

En el Explorador de objetos la información se muestra en una estructura de árbol agrupada porcarpetas, para expandir cada carpeta se da clic sobre el signo de mas (+) que se encuentra al ladoizquierdo de cada carpeta o doble clic sobre la carpeta.Para actualizar el contenido de una carpeta, se da clic derecho sobre la carpeta y clic sobre la

opción Actualizar (Refresh) o clic sobre el botón .

Filtrar la lista de objetos en el Explorador de objetosEn el momento que se necesite encontrar un objeto específico perteneciente a una carpeta, se

marca la carpeta y se da clic sobre el botón de filtro o clic derecho sobre la carpeta y se daclic sobre la opción de Filtro (Filter), Configuración del Filtro (Filter Settings). 

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 13/183

SQL Introductorio, SQL SERVER 2008  2011 

13

Se muestra la siguiente ventana de dialogo

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 14/183

SQL Introductorio, SQL SERVER 2008  2011 

14

En este caso se buscara el objeto que el nombre sea persona y el dueño dbo, se da clic enOK.

Para quitar el filtro se da clic nuevamente en el botón de filtrar y clic sobre Limpiar Filtro (ClearFilter).

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 15/183

SQL Introductorio, SQL SERVER 2008  2011 

15

Nueva Consulta

Una vez que el servidor se encuentra conectado , al dar clic sobre el botón Nueva Consulta (NewQuery), o dando clic derecho sobre el servidor , Nueva Consulta(New Query), muestra la ventanadel editor de código.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 16/183

SQL Introductorio, SQL SERVER 2008  2011 

16

Otros botones

Permite debuguer el código o query para saber si es correcto.

Permite la ejecución del query.

Permite abrir un query existente.

Guarda el query.

Permite seleccionar la base de datos sobre la cual se va a trabajar.

Componentes del SQL

Los comandos de SQL se dividen en tres categorías:

Data Definition Language (DDL): Lenguaje de Definición de datos o esquemas de estructuras,comandos de creación, modificación de tablas , bases de datos , constrains, índices y otros objetos

de base de datos , los comandos son: CREATE, ALTER y DROP.

Data Manipulation Language (DML): Manejo de datos, incluye las operaciones como insertarnuevos registros, modificarlos, borrarlos y realizar consultas por cualquier criterio. Se utilizan loscomandos: SELECT, INSERT, UPDATE y DELETE. 

Data Control Language (DCL): Lenguaje de Control de Datos, son los comandos que se refieren ala seguridad, como por ejemplo permiso de acceso a determinadas tablas por parte dedeterminados usuarios; políticas de seguridad y privacidad de los datos; organización de grupos deusuario, etc. Aquí se utilizan los siguientes comandos: GRANT, REVOKE y DENY.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 17/183

SQL Introductorio, SQL SERVER 2008  2011 

17

Comandos y cláusulas

Sentencias DDL

CREATE 

Permite la creación de objetos tales como: base de datos, tablas, procedimientos almacenados ,disparados entre otros.

Cláusula

Creación de una base de datos

Por medio de la cláusula CREATE, se procede a crear la base de datos NewDB.

USE masterGOCREATE DATABASE NewDBON(NAME = ‘c:\cursosql1\ NewDB_dat’,FILENAME = ‘c:\cursosql1\ NewDB.mdf’, SIZE = 4MB,

MAXSIZE = 10MB,FILEGROWTH = 1)GO

SIZE: se puede expresar en kilobytes (KB), megabytes (MB), gigabytes (GB) o terabytes (TB), si nose especifica, toma MB por defecto, es aquí donde se especifica el tamaño inicial de la base dedatos.MAXSIZE: se puede expresar en kilobytes (KB), megabytes (MB), gigabytes (GB) o terabytes (TB), sino se especifica, toma MB por defecto, es aquí donde se especifica el tamaño máximo de la basede datos.FILEGROWTH: Crecimiento del archivo de base de datos. 

CREATE nombreObjeto

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 18/183

SQL Introductorio, SQL SERVER 2008  2011 

18

Una vez ejecutado el código anterior, al dar F5 se refresca la pantalla y se muestra la base de datosNewDB en el Explorador de Objetos (Object Explorer).

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 19/183

SQL Introductorio, SQL SERVER 2008  2011 

19

Creación de una tabla

Cláusula

T1: Nombre de la tabla o entidad a crear.COL1: Nombre del campo o los campos que se van a crear en la nueva tabla.

COL2: La tabla creada debe tener más de un campo.tipo: Tipo de datos del campotamaño: Es el tamaño del campo, aplica para campos de texto.Índice: Cláusa CONSTRAINT

Por medio de la cláusula CREATE, se procede a crear la tabla dbo.CATEGORIA_PROD, en la base dedatos NewDB, para hacer referencia a la base de datos a utilizer se utiliza el commando USE,seguido del nombre de la base de datos.

CREATE TABLE T1(COL 1 tipo (tamaño) índice 1,COL2 tipo (tamaño) índice 2,….,)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 20/183

SQL Introductorio, SQL SERVER 2008  2011 

20

USE NewDBCREATE TABLE dbo.CATEGORIA_PROD(ID_PROD UNIQUEIDENTIFIER NOT NULLNOMBRE_PROD VARCHAR(50) NOT NULL,DESCRIPCION_PROD VARCHAR(100) NULL,CONSTRAINT PKID PRIMARY KEY (ID_PROD ))

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 21/183

SQL Introductorio, SQL SERVER 2008  2011 

21

 ALTER

Permite la modificación de tablas o base de datos.

Cláusula

Agregar constraint por medio del ALTER

Cláusula

ALTER TABLE Nombre de TablaADD Nombre de Columna Tipo deDato;

ALTER TABLE nombre de tablaADD CONSTRAINTNombre de llave primaria PRIMARYKEY(Campo de llave primaria )ON [PRIMARY];

ALTER TABLE nombre de tabla hijaADD CONSTRAINT nombre de llave foráneaFOREIGN KEY (columna o columnas queconforman la llave foránea)REFERENCES nombre de tabla padre (Campo ocampos de llave primaria de tabla padre);

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 22/183

SQL Introductorio, SQL SERVER 2008  2011 

22

Borrado de columna y constraint por medio de Alter

Borrado de la columna de una tabla por medio del ALTER

Cláusula

DROP 

Borra físicamente un objeto de base de datos: tablas, vistas lógicas.

Cláusula

Sentencias DML

 SELECT Lanza consultas, determinar cuáles son los campos (columnas) que se quieren leer y suorganización, su sintaxis en forma general:

Cláusula

Extrae la información de las columnas de la tabla seleccionada

Extrae toda la información de una tabla

ALTER TABLE nombre de tabla

DROP CONSTRAINT nombre del constraint;

ALTER TABLE nombre de tablaDROP COLUMN nombre de columna;

DROP TABLE nombre de objeto;

SELECT columna1, columna2, columna3 FROM nombre de tabla

SELECT * FROM nombre de tabla

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 23/183

SQL Introductorio, SQL SERVER 2008  2011 

23

Cláusula general

INSERT 

[DISTINCT]: Elimina los duplicados a la hora de mostrar los resultados de la consulta. [TOP()]: Muestra los primeros registros según la cantidad especificada.[FROM]: Indica de que tabla se extraerán los datos a mostrar en la consulta.[WHERE]: Funciona como filtro, mostrando solamente en la consulta los datos que cumplan con lacondición aquí establecida.

[GROUP BY]: Ordena los datos mostrados según los campos establecidos en este comando[HAVING]: Funciona como el where .[ORDER BY]: Ordena los datos de forma ascendente o descendente, por defecto es ascendente.

Ejemplo

SELECT count (1), NOMBRE FROM dbo.PERSONAWHERE EDAD=20GROUP BY NOMBREHAVING COUNT(1)>1

SELECT [DISTINCT][TOP (n)] *, columnas, or expresionesFROM datos de origen(nombre de tabla o tablas)

[WHERE condiciones][GROUP BY columnas][HAVING condiciones][ORDER BY columnas];

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 24/183

SQL Introductorio, SQL SERVER 2008  2011 

24

INSERT  

Permite el ingreso de datos a una tabla

Cláusula

Lo que se encuentra entre corchetes es opcional.

Ejemplo:

INSERT INTO PERSONA (CEDULA, NOMBRE, APELLIDO, EDAD)VALUES (509440300,’MARIA’,’JUAREZ’,20)

INSERT [INTO] tabla [(columnas, ...)]VALUES (value,...), (value,...), ... ;

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 25/183

SQL Introductorio, SQL SERVER 2008  2011 

25

O se puede realizar de la siguiente forma siempre y cuando estas sean las únicas columnas de latabla y en la sentencia values se ingresen en orden

INSERT INTO PERSONAVALUES (‘609440300’,’JUAN’,’PEREZ’,18)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 26/183

SQL Introductorio, SQL SERVER 2008  2011 

26

UPDATE 

Permite la actualización de datos en una tabla

Cláusula

Lo que se encuentra entre corchetes es opcional

Importante

Si no se utiliza el comando WHERE, se modifica la información de la columna seleccionada paratodos los registros de la tabla.

UPDATE TablaSET columna = expresión,columna = valor. . .[FROM datos de origen][WHERE condiciones];

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 27/183

SQL Introductorio, SQL SERVER 2008  2011 

27

Ejemplo

UPDATE dbo.PERSONASET EDAD = 15WHERE CEDULA = '209440300'

DELETE  

Permite eliminar los registros de una tabla, manteniendo su estructura. 

Cláusula

Lo que se encuentra entre corchetes es opcional.

Importante:Si no se utiliza la cláusula el WHERE se eliminaran todos los registros de la tabla.

DELETE [FROM] Tabla

[FROM datos de origen][WHERE condición(es)];

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 28/183

SQL Introductorio, SQL SERVER 2008  2011 

28

Ejemplo :

DELETEFROM dbo.PERSONA;

Elimina todos los registros de la tabla PERSONA, sin eliminar la tabla.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 29/183

SQL Introductorio, SQL SERVER 2008  2011 

29

DELETE FROM PERSONAWHERE CEDULA = '209440300';

Elimina de la tabla dbo.PERSONA, todos los registros donde el campo Cedula sea igual a‘209440300’. 

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 30/183

SQL Introductorio, SQL SERVER 2008  2011 

30

Práctica #1 Crear objetos

Objetivo :Se pretende que el estudiante con esta práctica ingrese al SQL Server 2008 e inicie sufamiliarización con la herramienta.

Como crear el queryEn el menú de inicio, se ingresa a Microsoft SQL Server 2008 y ahí a SQL Server ManagementStudio

Se da click en Connect, para conectar al servidor y al lado superior izquierdo de la pantalla se daclick en New Query .

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 31/183

SQL Introductorio, SQL SERVER 2008  2011 

31

1.  Con base al siguiente código crear la base de datos CURSO

USE master

GOCREATE DATABASE CURSOON(NAME = 'c:\cursosql1\ CURSO_dat',FILENAME = 'c:\cursosql1\ CURSO.mdf',SIZE = 4MB,MAXSIZE = 10MB,FILEGROWTH = 1)GO

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 32/183

SQL Introductorio, SQL SERVER 2008  2011 

32

Una vez ejecutado el código anterior, al dar F5 se refresca la pantalla y se muestra la base de datosCURSO en el Explorador de Objetos.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 33/183

SQL Introductorio, SQL SERVER 2008  2011 

33

2.  Crear tanto en la base de datos curso como en la base de datos NEWDB, la siguiente tabla

Tabla PERSONACampos :CEDULA INTNOMBRE VARCHAR(50)APELLIDO VARCHAR(50)EDAD INT

3.  Insertar los siguientes datos en la tabla Persona en ambas bases de datos

Cedula Nombre Apellido Edad509440300 MARIA JUAREZ 20

609440300 JUAN PEREZ 18

709440300 ANA ARIAS 25809440300 TERESA PAZ 40

909440300 JOSE ARGUEDAZ 30109440300 JUANA PAZ 50

209440300 JULIO MONGE 35309440300 KAREN VARGAS 20

409440300 MARIO MORA 18

519440300 JULIA DIAZ 20

Nota: Solución Anexo I 

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 34/183

SQL Introductorio, SQL SERVER 2008  2011 

34

Operadores Lógicos

Cuando se necesitan múltiples condiciones para el WHERE se utilizan los operadores lógicos:AND = yOR = O

NOT = NO

Funcionan de la siguiente manera

Condición1Operador

LógicoCondición

2 Resultado

V AND V = V

V AND F = F

F AND F = F

V OR V = V

V OR F = V

F OR V = V

F OR F = F

El cuadro anterior se traduce de la siguiente manera

AND: Deben cumplirse ambas condiciones para que la consulta muestre las filas o registros quecumplen con las condiciones establecidas. Con una condición que no se cumpla, no se muestranfilas o registros.OR: Cualquiera de las condiciones que se cumplan la consulta muestra las filas o registros quecumplen con la o las condiciones establecidas. No necesariamente se tienen que cumplir todas lascondiciones como en el AND.

NOT: Permite mostrar las filas o registros que no coincidan con un valor.

Ejemplo:

Mostrar la cédula y nombre de las personas donde el nombre inicie con MA o la edad este entre20 y 35, y el nombre tenga una S.

SELECT CEDULA,NOMBREFROM dbo.PERSONAWHERE

NOMBRE LIKE 'MA%'OREDAD BETWEEN 20 AND 35ANDNOMBRE LIKE '%S%';

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 35/183

SQL Introductorio, SQL SERVER 2008  2011 

35

Operadores de Comparación

Descripción Operador Ejemplo

Igual = Cantidad = 12

Mayor que > Cantidad > 12

Mayor que o igual a >= Cantidad >= 12

Menor que < Cantidad < 12

Menor o igual que <= Cantidad <= 12

Diferente <> ,!= Cantidad <> 12, Cantidad != 12

No menor que !< Cantidad !< 12No mayor que !> Cantidad !> 12

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 36/183

SQL Introductorio, SQL SERVER 2008  2011 

36

Ejemplo:

SELECT CEDULA, NOMBREFROM dbo.PERSONAWHEREEDAD > 25OREDAD < =35

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 37/183

SQL Introductorio, SQL SERVER 2008  2011 

37

Funciones de agregado

Ejemplo:SELECT COUNT(CEDULA) FROM PERSONA

Función Significado

AVG()Calcula el promedio de un dato o de una expresión aritmética construida por lascolumnas proyectadas de una tabla.

Count() Cuenta el número de valores contenidos en una columna o tabla.MAX() Devuelve el valor máximo de una columna numérica.

MIN() Devuelve el valor mínimo de una columna numérica.

SUM() Suma los valores de una columna numérica o de una expresión.

STDEV() Desviación estándar de la población de todos los valores dados por expresión

STDEVP() Desviación estándar de todos los valores de expresión

VARP(expresión) Varianza estadística de la población de todos los valores dados por expresión

VAR(expresión) Varianza estadística de todos los valores que toma la expresión

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 38/183

SQL Introductorio, SQL SERVER 2008  2011 

38

SELECT COUNT(CEDULA) AS CantidadFROM PERSONA

Se agrega a la columna resultante un nombre por medio del AS, el nombre Cantidad

SELECT AVG(EDAD) FROM PERSONAPermite mostrar la edad promedio de las personas

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 39/183

SQL Introductorio, SQL SERVER 2008  2011 

39

SELECT SUM (EDAD)/COUNT (*) FROM PERSONA

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 40/183

SQL Introductorio, SQL SERVER 2008  2011 

40

Consultas de Selección

Anteriormente se vio el comando SELECT, sin embargo se vio de una forma muy básica, en lassiguientes secciones se profundizará más en la utilización de este comando.

Consultas BásicasEntre las consultas básicas se tienen, las consultas de todos los registros de una tabla o las queutilizan la cláusula WHERE y alguno de los operadores de comparación

Ejemplo:

SELECT * FROM dbo.PERSONA

SELECT * FROM TABLASELECT * FROM TABLA WHERE COLUM1 =DSELECT COLUM1, COLUM2, COLUM3 FROM TABLA WHERE COLUM1 <COLUM2SELECT COLUM1, COLUM2, COLUM3 FROM TABLA WHERE COLUM1 = COLUM2 + COLUM3SELECT COLUM1, COLUM2, COLUM3 FROM TABLA WHERE COLUM1 >= 300

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 41/183

SQL Introductorio, SQL SERVER 2008  2011 

41

SELECT * FROM dbo.PERSONAWHERE EDAD = 20

Ordenar registros

Por medio de la cláusula ORDER BY se permite ordenar un conjunto de resultados de la columna ocolumnas especificadas.ASC: permite ordenar en forma ascendente, en caso de ser carácter ordena de A –Z, y en caso denúmeros ordena de menor a mayor.DESC: permite ordenar en forma descendente, en caso de ser carácter ordena de Z –A, y en casode números ordena de mayor a menor.

Por defecto la cláusa ORDER BY ordena en forma ascendente

Ejemplos:SELECT NOMBRE, APELLIDO FROM PERSONAWHERE EDAD >20ORDER BY NOMBRE ASC

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 42/183

SQL Introductorio, SQL SERVER 2008  2011 

42

SELECT NOMBRE, APELLIDO FROM PERSONAWHERE EDAD >20ORDER BY NOMBRE

Muestra el mismo resultado de la consulta anterior

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 43/183

SQL Introductorio, SQL SERVER 2008  2011 

43

SELECT NOMBRE, APELLIDO FROM PERSONAWHERE EDAD >20ORDER BY NOMBRE DESC

Consultas con predicado

Las consultas con predicado son aquellas que llevan el predicado entre la cláusula y el nombre dela primera columna a recuperar.

Entre los predicados se tiene

ALL: Devuelve todos los datos de una columna específica de la tabla.

Ejemplo:

SELECT ALLNOMBRE from dbo.PERSONA

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 44/183

SQL Introductorio, SQL SERVER 2008  2011 

44

TOP(n): Devuelve los primeros registros según la cantidad solicitada (n).Si se utiliza la cláusula ORDER BY los datos de inicio o final según esta cláusula

Ejemplo:

SELECT TOP 5 NOMBRE ,APELLIDO, EDADFROM PERSONA

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 45/183

SQL Introductorio, SQL SERVER 2008  2011 

45

SELECT TOP 5 NOMBRE ,APELLIDO , EDADFROM PERSONAORDER BY EDAD ;

SELECT TOP 5 NOMBRE ,APELLIDO,EDADFROM PERSONAORDER BY EDAD DESC;

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 46/183

SQL Introductorio, SQL SERVER 2008  2011 

46

DISTINCT: Elimina los duplicados a la hora de mostrar los resultados de la consulta.

Ejemplo:

SELECT DISTINCT APELLIDOFROM PERSONA

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 47/183

SQL Introductorio, SQL SERVER 2008  2011 

47

 Alias

En algunas ocasiones es necesario renombrar las columnas que se devuelven de una consulta ypara esto se utiliza la palabra reservada AS.

Ejemplo:

SELECT COUNT(*) AS CANTIDAD_PERSONASFROM PERSONA

Si no se utiliza el alias, la columna resultante se muestra sin nombre

SELECT COUNT(*)FROM PERSONA

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 48/183

SQL Introductorio, SQL SERVER 2008  2011 

48

En algunas ocasiones se utilizan en consultas para renombrar tablas, por lo general cuando laconsulta se realiza en más de una tabla.

Ejemplo:

SELECT A.CODIGO, A.DESCRIPCIONFROM CURSO ACROSS JOIN HISTORIAL

Como se ve en el ejemplo anterior, cuando se utilizan los Alias en consultas de varias tablas nohace falta utilizar la palabra clave AS, basta con poner la letra que va a identificar la tabla, despuésdel nombre de la tabla y esta misma letra antes del nombre de cada columna de la tabla.

Bases de datos externas

Por medio de una instrucción SQL, se puede realizar una consulta a una tabla de una base de datos

externa a la cual se está trabajando.

SELECT FROM [SERVIDOR].BASE DE DATOS.DUEÑO(OWNER).TABLA

Ejemplos:Se requiere la información de la tabla CURSO, que se encuentra en la base de datos NewDB, peroen este momento nos encontramos en la base de datos CURSO.

SELECT * FROMNELLA1.NewDB.dbo.CURSO

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 49/183

SQL Introductorio, SQL SERVER 2008  2011 

49

Como la base de datos NewDB, se encuentra en el mismo servidor que la base de datos curso, sepuede omitir el nombre del servidor y el resultado sería el mismo

SELECT * FROMNewDB.dbo.CURSO

Como se puede ver el resultado es el mismo en ambos casos.

Se necesita saber cuáles de los cursos que se encuentran en la tabla CURSO de la base de datosCURSO, se encuentran almacenados en la tabla HISTORIAL de la base de datos NewDB.

SELECT * FROM CURSO AWHERE A.CODIGO IN (SELECT B.CODIGOFROM NELLA1.NewDB.dbo.HISTORIAL B)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 50/183

SQL Introductorio, SQL SERVER 2008  2011 

50

Criterios de selección

Los criterios de selección son los que ayudan a recuperar todos aquellos datos que cumplan conlas condiciones establecidas

Operadores lógicosComo se vio en una sección anterior, los operadores lógicos son los siguientes

AND = yOR = ONOT = NO

Ejemplo AND:

SELECT * FROM PERSONAWHERE APELLIDO = 'PAZ'AND EDAD = 50

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 51/183

SQL Introductorio, SQL SERVER 2008  2011 

51

Ejemplo de OR:

SELECT * FROM PERSONAWHERE APELLIDO = 'PAZ'AND (EDAD = 50 OR EDAD = 40)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 52/183

SQL Introductorio, SQL SERVER 2008  2011 

52

Ejemplo NOT:

El NOT es un operador que a diferencia de los otros dos debe ir acompañado por IN, EXISTS oBETWEEN

Ejemplo NOT IN:

SELECT * FROM PERSONAWHERE EDAD NOT IN (50,40,25)

Muestra todas las personas en la que las edades sean diferentes de 50, 40 y 25.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 53/183

SQL Introductorio, SQL SERVER 2008  2011 

53

Ejemplo NOT BETWEEN:

SELECT * FROM PERSONAWHERE EDAD NOT BETWEEN 25 AND 50

El caso de NOT EXISTS, se verá más adelante en el capítulo de sub consultas

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 54/183

SQL Introductorio, SQL SERVER 2008  2011 

54

Intervalos de valores

La cláusula BETWEEN permite la recuperación de registros mediante un intervalo de valores dado.

Ejemplo:

SELECT * FROM PERSONAWHERE EDAD BETWEEN 18 AND 30

Muestra todas las personas que tienen edad entre los 18 y 30 incluyendo los extremos.

Como se vio en la sección anterior la cláusula BETWEEN puede ir acompañada del operador NOT

Ejemplo:

SELECT * FROM PERSONAWHERE EDAD NOT BETWEEN 18 AND 30

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 55/183

SQL Introductorio, SQL SERVER 2008  2011 

55

Operador Like

Permite encontrar coincidencias parciales entre cadenas de texto.Utiliza meta símbolos:% Equivale a una cadena de caracteres de longitud comprendida entre 0 y n.‘AB%’ AB,ABCDE,AB497 _Equivale a un único carácter‘A_B’A B,A4B, AJB ‘%M[N-Q]%’ Compara contra un modelo

Ejemplos:

1.  Muestra las personas donde la primera letra del apellido es P

SELECT * FROM PERSONAWHERE APELLIDO LIKE 'P%'

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 56/183

SQL Introductorio, SQL SERVER 2008  2011 

56

2.  Muestra las personas que en su apellido tengan una R

SELECT * FROM PERSONAWHERE APELLIDO LIKE '%R%'

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 57/183

SQL Introductorio, SQL SERVER 2008  2011 

57

3.  Muestra las personas donde el apellido inicie con D y el resto este compuesto por letras deA o Z.

SELECT * FROM PERSONAWHERE APELLIDO LIKE 'D[A-Z]%'

Operador In

Este operador devuelve los registros que se encuentran dentro de una lista de valores dada.

Ejemplos:

1.  Muestra todas las personas que tienen 25 o 45 o 50 años.

SELECT * FROM PERSONAWHERE EDAD IN (25,45,50)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 58/183

SQL Introductorio, SQL SERVER 2008  2011 

58

2.  Muestra todas las personas donde el apellido sea PAZ o VARGAS.

SELECT * FROM PERSONAWHERE APELLIDO IN ('PAZ','VARGAS')

El operador IN se puede utilizar con el operador NOT, en este caso el resultado sería todos losregistros que no se encuentren en la lista dada.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 59/183

SQL Introductorio, SQL SERVER 2008  2011 

59

3.  Muestra las personas en donde sus edades sean diferentes a 25, 45 y 50.

SELECT * FROM PERSONAWHERE EDAD NOT IN (25,45,50)

4. Muestra las personas en las que el apellido sea diferente a PAZ y VARGAS

SELECT * FROM PERSONAWHERE APELLIDO NOT IN ('PAZ','VARGAS')

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 60/183

SQL Introductorio, SQL SERVER 2008  2011 

60

Cláusula Where

La cláusula WHERE permite determinar cuáles son los registros de la tabla que se mostraran en laconsulta.

Ejemplos:

1.  Mostrar las personas que tienen más de 40 años de edad.

SELECT * FROM PERSONAWHERE EDAD > 40

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 61/183

SQL Introductorio, SQL SERVER 2008  2011 

61

Práctica # 2 Creación de las tablas

Objetivo: Familiarizar al estudiante con la herramienta y a la vez realizar un repaso general de lospuntos vistos en clase.

1.  Crear las siguientes tablas en la base de datos CURSO, antes eliminar la tabla Persona de labase de datos curso por medio de un drop.

Tabla PERSONACampos :

CEDULA INTNOMBRE VARCHAR(50)APELLIDO VARCHAR(50)EDAD INT

Tabla CURSOCamposCODIGO INTDESCRIPCION VARCHAR(50)FECHA_INICIO DATETIMEFECHA_FIN DATETIME

Tabla HISTORIALCampos

CEDULA INTCODIGO INTNOTA INTSEDE VARCHAR(25)

2.  Agregue por medio de la cláusula ALTER a la tabla PERSONA, la columna DIRECCION tipovarchar de 50.

3.  Agregue por medio de la cláusula ALTER a la tabla PERSONA, el campo CEDULA como

llave primaria.

4.  Agregue por medio de la cláusula ALTER a la tabla CURSO, el campo CODIGO como llaveprimaria.

5.  Agregue por medio de la cláusula ALTER al tabla HISTORIAL, los campos CEDULA yCODIGO como llave primaria

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 62/183

SQL Introductorio, SQL SERVER 2008  2011 

62

6.  Agregue por medio de la cláusula ALTER a la tabla HISTORIAL, los campos CEDULA yCODIGO como llaves foráneas.

7.  Inserte los siguientes valores a las tablas.

Tabla Persona

Cedula Nombre Apellido1 Edad Dirección

509440300  MARIA  JUAREZ  20 HEREDIA 609440300  JUAN  PEREZ  18  ALAJUELA 

709440300  ANA  ARIAS  25  SAN JOSE 

809440300  TERESA  PAZ  40  HEREDIA 909440300  JOSE  ARGUEDAZ  30  PAVAS 

109440300 JUANA  PAZ  50  BARVA 

209440300  JULIO,  MONGE  35  ALAJUELA 309440300  KAREN  VARGAS 20  HEREDIA 409440300  MARIO  MORA  18  HEREDIA 519440300  JULIA  DIAZ  20  ALAJUELA 

Tabla Curso

Código Descripción Fecha de inicio Fecha Final

001 SQL SERVER 2008 20110605 20110821002 INTERNET 20110606 20110806003 ACCES 20110610 20110810

004 WORD 2007 20110615 20110815005 EXCEL 2007 20110622 20110828

Tabla HISTORIAL

Cédula Código Nota Sede509440300  001  80  HEREDIA 509440300 002  85  HEREDIA 

609440300  001  75  SAN JOSE 609440300  005  75  HEREDIA 609440300  003  90  SAN JOSE 

709440300  003  90  SAN JOSE 

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 63/183

SQL Introductorio, SQL SERVER 2008  2011 

63

809440300 002  95  SAN JOSE 

809440300  001  80  SAN JOSE 809440300  003  95  SAN JOSE 

909440300  002  95  SAN JOSE 

909440300 001  90  HEREDIA 

909440300  005  90  ALAJUELA 

109440300 005  90  ALAJUELA 

109440300  003  90  HEREDIA 

109440300 004  80  SAN JOSE 

309440300 004  75  SAN JOSE 

Nota : Ver solución en Anexo II 

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 64/183

SQL Introductorio, SQL SERVER 2008  2011 

64

 Agrupamiento de registros y funciones agregadas

Cláusula GROUP BYPermite agrupar filas cuando se utilizan funciones como SUM o COUNT, las cuales no toman

campos línea por línea, sino resultados globales de suma de todas las filas.En este punto se cabe mencionar la cláusula HAVING, la cual trabaja como la cláusula WHERE soloque su lógica está relacionada también con las funciones que retornan valores de grupos deregistros.

Ejemplos:

1.  Muestra la cantidad de personas que están estudiando SQL Server en la sede de Heredia

SELECT COUNT (*)AS CANTIDAD,CODIGO, SEDE FROM HISTORIALWHERE CODIGO = 001GROUP BY CODIGO,SEDE

HAVING SEDE = 'HEREDIA'

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 65/183

SQL Introductorio, SQL SERVER 2008  2011 

65

2.  Muestra la suma de las notas de las personas que están en el curso 5 en la sede deAlajuela.

SELECT SUM(NOTA)AS NOTA_TOTAL,CODIGO, SEDE FROM HISTORIALWHERE CODIGO = 005GROUP BY CODIGO,SEDEHAVING SEDE = 'ALAJUELA'

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 66/183

SQL Introductorio, SQL SERVER 2008  2011 

66

 AVG Media Aritmética

Calcula la media aritmética de un conjunto de valores contenidos en un campo especificado deuna consulta.

Ejemplos:

1.  Muestra la edad promedio de las personas que se encuentran en la tabla PERSONA

SELECT AVG(EDAD) AS PROMEDIO_EDAD FROM PERSONA

2.  Muestra la media de las notas del curso 5 de la sede de Alajuela.

SELECT AVG(NOTA)AS NOTA_TOTAL,CODIGO, SEDE FROM HISTORIALWHERE CODIGO = 005GROUP BY CODIGO,SEDEHAVING SEDE = 'ALAJUELA'

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 67/183

SQL Introductorio, SQL SERVER 2008  2011 

67

COUNT Contar Registros

La función COUNT cuenta todos aquellos registros que cumplen con una condición

Ejemplos:

1.  Muestra la cantidad de personas matriculadas en cada curso en la sede de San José,siempre y cuando la cantidad sea mayor a 1.

SELECT COUNT(1)AS CANTIDAD,CODIGO, SEDE FROM HISTORIALWHERE SEDE = 'SAN JOSE'GROUP BY CODIGO,SEDEHAVING COUNT(1)> 1

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 68/183

SQL Introductorio, SQL SERVER 2008  2011 

68

2.  Muestra la cantidad de cursos que lleva cada persona en la sede de San José

SELECT COUNT(DISTINCT(CODIGO))AS CANTIDAD,CEDULA,SEDE FROM HISTORIALWHERE SEDE = 'SAN JOSE'GROUP BY CEDULA,SEDE

DISTINCT: Elimina los duplicados en el resultado de una consulta.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 69/183

SQL Introductorio, SQL SERVER 2008  2011 

69

MAX, MIN Máximo y mínimo

MAX: Proporciona el valor máximo de un campo o columna dada.

Ejemplo:

1.  Muestra la nota más alta en la sede de Heredia.

SELECT MAX(NOTA)AS NOTA_ALTA FROM HISTORIALWHERE SEDE = 'HEREDIA'

MIN: Proporciona el valor mínimo de un campo o columna.

Ejemplo:

2.  Muestra la nota más baja en la sede de Heredia

SELECT MIN(NOTA)AS NOTA_BAJA FROM HISTORIALWHERE SEDE = 'HEREDIA'

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 70/183

SQL Introductorio, SQL SERVER 2008  2011 

70

Stdv,stdvp Desviación estándar

Devuelve estimaciones de la desviación estándar para la población (el total de los registros de latabla) o una muestra de la población representada (muestra aleatoria).

StDevP evalúa una poblaciónStDev evalúa una muestra de la población.

Ejemplo:

SELECT StDev(NOTA) AS Desviacion FROM HISTORIALWHERE CODIGO = 001

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 71/183

SQL Introductorio, SQL SERVER 2008  2011 

71

SELECT StDevP(NOTA) AS Desviacion FROM HISTORIALWHERE CODIGO = 001

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 72/183

SQL Introductorio, SQL SERVER 2008  2011 

72

Sum Suma de valoresSUM: Proporciona la suma de un campo o columna dada.

Ejemplos:

1.  Muestra la suma de las nota de todos los estudiantes de la sede de Heredia.

SELECT SUM(NOTA)AS NOTA_TOTAL FROM HISTORIALWHERE SEDE = 'HEREDIA'

Var VarP Varianza

Devuelve una estimación de la varianza de una población (sobre el total de los registros) o unamuestra de la población (muestra aleatoria de registros) sobre los valores de un campo.

VarP: evalúa una población

Var: evalúa una muestra de la población

Ejemplos:

SELECT VarP (NOTA) AS Variacion FROM HISTORIALWHERE CODIGO = 001

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 73/183

SQL Introductorio, SQL SERVER 2008  2011 

73

SELECT Var (NOTA) AS Variacion FROM HISTORIAL

WHERE CODIGO = 001

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 74/183

SQL Introductorio, SQL SERVER 2008  2011 

74

Funciones de Manipulación de fecha

DATEDIFF

Devuelve el número de días, semanas, meses, años, etc.; según la parte de fecha que se desea

saber, que hay entre dos fechas especificadas.

Ejemplo:

1.  Mostrar la diferencia en semanas que e encuentran entre las siguientes fechas 20101120 y20110620.

SELECT DATEDIFF (WK,'20101120','20110620')

DATEDIFF(parte de fecha, fecha inicio, fecha fin)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 75/183

SQL Introductorio, SQL SERVER 2008  2011 

75

DATEPART

Retorna un entero que representa la parte de fecha especificada de la fecha dada.

Ejemplo:

1.  Retorna los minutes de la fecha y hora dadas

SELECT DATEPART (MI,'2007-10-30 12:15:32.1234567+05:10')

DATEPART ( parte de fecha , fecha )

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 76/183

SQL Introductorio, SQL SERVER 2008  2011 

76

GETDATE

Retorna la fecha actual del sistema.

Ejemplos:

1.  Retorne la fecha y hora actual del sistema

SELECT GETDATE() 

2.  Retorne la siguiente fecha a la fecha actual del sistema.

SELECT GETDATE()AS FECHA_ACTUAL, GETDATE() + 1 AS 'FECHA SIGUIENTE DIA'

GETDATE ( )

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 77/183

SQL Introductorio, SQL SERVER 2008  2011 

77

3.  Actualizar la fecha de inicio del curso 5, con la fecha actual del sistemaUPDATE CURSOSET FECHA_INICIO = GETDATE() WHERE CODIGO = 5

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 78/183

SQL Introductorio, SQL SERVER 2008  2011 

78

4.  Con base a la función GETDATE (), retornar solamente la fecha del sistema sin la hora, enel siguiente formato dd/mm/aaaa.

Select Convert(char(10), GETDATE(), 103) as FechaUnicamente

5.  Con base a la función GETDATE (), retornar solamente la hora del sistema, en el siguienteformato hh:mm:ss

Select Convert(char(8), GETDATE(), 108) as HoraUnicamente

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 79/183

SQL Introductorio, SQL SERVER 2008  2011 

79

Porciones de fecha y hora usadas para las funciones de fecha

Porciones de fecha y hora usados para las Funciones de fecha

Porción Abreviatura

año yy, yyyy

trimestre qq, q

mes mm,mm

día del año dy,d

día dd, d

semana wk.ww

día de la semana dw

hora hh

minuto mi, n

segundos ss,s

milisegundo ms

microsegundo mcs

nanosegundo ns

Tipos de datos

Tipo de datos CaracterTipo de datos de caracter

Tipo de Dato Descripción Tamaño en bytes

Char(n)

Datos de caracteres de longitud fija hasta un máximo

de 8,000 caracteres.

Longitud definida de 1

byte

Nchar(n) Datos de caracteres Unicode de longitud fija.Longitud definida2 bytes

VarChar(n)Dato de caracteres de longitud variable hasta unmáximo de 8,000 caracteres. 1 byte por caracter

VarChar(max)Datos de caracteres de longitud variable hasta un

máximo de 2GB. 1 byte por caracter

nVarChar(n)Datos de caracteres Unicode de longitud variable hastaun máximo de 8,000 caracteres 2 bytes por carácter

nVarChar(max)

Datos de caracteres Unicode de longitud variable hasta

un máximo de 2GB. 2 bytes por carácter

Text Datos de caracteres de longitud variable 1 byte por caracter

nText Datos de caracteres Unicode de longitud variable 2 bytes por carácter

SysnameTipo de dato usado para nombre de tablas o columnasequivale a nvarchar(128) 2 bytes por carácter

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 80/183

SQL Introductorio, SQL SERVER 2008  2011 

80

Tipo de datos numérico

Tipo de datos numéricos

Tipo de dato Descripción Tamaño en bytes

Bit Datos enteros con valor 1 ó 0 1 bitTinyint Enteros desde 0 a 255 1 byte

Smallint Enteros desde -32,768 a 32,767 2 bytes

Int Enteros desde -2,147,483,648 a 2,147,483,647 4 bytes

Bigint Enteros desde -2 ˆ 63 a 2 ˆ 63-1 8 bytes

Decimal orNumeric Números de precisión exacta hasta -10 ˆ 38 1 

Varia acorde conel tamaño

Money Números desde -2 ˆ 63 a 2 ˆ 63, 8 bytes

SmallMoney Números desde -214,748.3648 a +214,748.3647 4 bytes

Float

Números con precisión de coma flotante desde -1.79E + 308

a 1.79E + 308, dependiendo del bit de precisión 4 o 8 bytesReal Flotante con 24-bit de precisión 4 bytes

Tipos de dato de fecha y hora

Tipo de datos Fecha/Hora

Tipo de Dato Descripción Tamaño en bytes

Datetime

Valores de fecha y hora desde Enero 1, 1553(Calendario Juliano), terminando en Diciembre31, 9999

8 bytes

Smalldatetime

Valores de fecha y hora desde Enero 1, 1900,terminando en Junio 6, 2079.

4 bytes

DateTime2()

Valores de fecha y hora Enero 1, 0001 terminando enDiciembre 31, 9999 (Calendario Gregoriano), Precisiónvariable desde 01 segundos a 100 nanosegundos

6 –8 bytesdependiendo de laprecisión

Date

Valores de fecha y hora Enero 1, 0001 terminandoDiciembre 31, 9999 (Calendario Gregoriano)

3 bytes

Time(2)

Valores de hora, precisión variable desde .01 segundos a100 nanosegundos.

3 –5 bytesdependiendo de la

precisión

Datetimeoffset

Valores de fecha y hora Enero 1, 0001 terminando enDiciembre 31, 9999 (Calendario Gregoriano), precisiónvariable desde .01 segundos a 100 nanosegundos,incluyendo la zona horaria.

8 –10 bytesdependiendo de laprecisión.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 81/183

SQL Introductorio, SQL SERVER 2008  2011 

81

Conversión de tipos de datos

Las conversiones de tipos de datos se realizan cuando los datos de un objeto se mueven, secomparan o se combinan con los datos de otro objeto, en cuyo caso puede que sea necesarioconvertir los datos desde el tipo de datos de un objeto al tipo de datos de otro.

Conversión de datos implícita o automática

Las conversiones de datos implícitas son invisibles para el usuario, SQL Server convierteautomáticamente desde un tipo de datos al otro sin que el usuario lo perciba.

Ejemplo:Se declaran dos variables una con el nombre @NUM1 tipo smallint y otra @NUM tipo int, con lascuales se realiza una operación aritmética.

1.  Se multiplica una variable de tipo smallint por una variable int.

DECLARE @NUM1 SMALLINT;DECLARE @NUM2 INT;SET @NUM1 = 2SET @NUM2 = 45

SELECT @NUM1*@NUM2 AS PRODUCTO

En este caso el dato smallint, pasa a ser implícitamente int.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 82/183

SQL Introductorio, SQL SERVER 2008  2011 

82

2.  Se una variable tipo int a una variable tipo smallint.

DECLARE @NUM1 SMALLINT;DECLARE @NUM2 INT;SET @NUM1 = 32767SET @NUM2 = 2147443600

SELECT @NUM1+@NUM2 AS RESULTADO

Conversión de datos explícita

La conversión de tipo de datos explícita, requiere de funciones de conversión de datos para podermodificar el tipo de dato de una expresión dada; para estos efectos se utilizan las funcionesCONVERT y CAST.

Función CONVERT 

Cláusula

con

ArgumentosTipo_de_dato: Tipo de datos destino.[(longitud)]:  Parámetro opcional de los tipos de datos nchar, nvarchar, char, varchar, binary ovarbinary.Expresión: Es cualquier expresión válida de Microsoft SQL Server a la cual se le necesita cambiar eltipo de dato.Estilo: es el estilo del formato de fecha que se utiliza para convertir datos datetime osmalldatetime en datos de cadenas de caracteres (nchar, nvarchar,char, varchar).

CONVERT (tipo_de_dato [(longitud)],expresión[,estilo])

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 83/183

SQL Introductorio, SQL SERVER 2008  2011 

83

Ejemplo:

Mostrar la fecha actual del sistema en el siguiente formato dd/mm/aaaa.Se ejecuta la siguiente consulta

SELECT CONVERT (CHAR(10), GETDATE(), 103) AS FECHA_UNICAMENTE

Muestra la fecha en el formato solicitado.

Función CAST 

Cláusula:

Argumentos

Tipo_de_dato: Tipo de datos destino.Expresión: Es cualquier expresión válida de Microsoft SQL Server a la cual se le necesita cambiar eltipo de dato.

Ejemplo:

Mostrar la fecha del sistema si la hora.

SELECT CAST(GETDATE() AS CHAR(13)) AS FECHA_UNICAMENTE

CAST(expresión AS tipo_de_dato

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 84/183

SQL Introductorio, SQL SERVER 2008  2011 

84

Práctica #3 Aplicación de conceptos

Objetivo: que el estudiante aplique los conocimientos aprendidos en clase

Con base a las tablas creadas en la práctica 2 aplicar las siguientes consultas

1.  Muestre todas las personas que tengan una M en el nombre y vivan en HEREDIA.

2.  Muestre la cantidad de cursos con los que cuenta el instituto actualmente.

3.  Muestre la media de las edades de todas las personas y nombre a la columna del resultadoMEDIA_EDAD.

4.  Muestre las personas que tienen entre 18 y 30 años de edad

5.  Muestre los cursos 001,002 y 003.

6.  Muestre el promedio de las notas de la sede de Alajuela, nombre a la columna resultanteNOTA_PROMEDIO.

7.  Actualice la fecha final de los cursos WORD 2007 y EXCEL 2007, con la fecha del sistema.

Nota: Ver solución en Anexo III 

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 85/183

SQL Introductorio, SQL SERVER 2008  2011 

85

Creación de tablas

Anteriormente se crearon tablas por medio del comando CREATE

Cláusula

Ejemplo:

CREATE TABLE PERSONA_RESPALDO (CEDULA INT NOT NULL,NOMBRE VARCHAR(50) NOT NULL,APELLIDO VARCHAR(50) NOT NULL,EDAD INT,CONSTRAINT PKCURSO PRIMARY KEY(CODIGO))

Por medio del administrador o explorador de objetos también es posible crear una tabla.

CREATE nombreObjeto

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 86/183

SQL Introductorio, SQL SERVER 2008  2011 

86

Se escoge la base de datos en la que se va a trabajar, en la carpeta TABLES se da clic derecho y seelige la opción NEW Table para ingresar los campos

Para agregar la llave primaria se marca el campo y se da clic derecho

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 87/183

SQL Introductorio, SQL SERVER 2008  2011 

87

Se da clic en la opción Set Primary Key

Se da clic derecho en donde viene el nombre de la tabla en este caso dbo.Table1

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 88/183

SQL Introductorio, SQL SERVER 2008  2011 

88

Se elige la opción Save Table_1

Se coloca el nombre de la tabla y se da clic en OK

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 89/183

SQL Introductorio, SQL SERVER 2008  2011 

89

Para poder ver el código por medio del cual se creó la tabla se realiza lo siguiente

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 90/183

SQL Introductorio, SQL SERVER 2008  2011 

90

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 91/183

SQL Introductorio, SQL SERVER 2008  2011 

91

Se guarda el archivo

Para verlo se da click en Open File 

Se muestra la siguiente pantalla

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 92/183

SQL Introductorio, SQL SERVER 2008  2011 

92

Se elige el archivo y se da clic en Open

Se puede ver el código formado al crear la tabla

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 93/183

SQL Introductorio, SQL SERVER 2008  2011 

93

Ingresar datos en una tabla

Adicional a la cláusula INSERT los datos a una tablas se pueden ingresar por medio de la opciónEdit Top 200 Rows , al dar clic derecho sobre el nombre de la tabla en el explorador de objetos.

Se muestra al lado derecho de la pantalla una hoja similar a la de Excel, la cual permite eldesplazamiento entre columnas o entre celda y celda por medio de la tecla TAB, el clic del mouseo las direccionales.

Al ingresar los datos se procede a cerrar la ventana y estos quedan guardados inmediatamente enla tabla.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 94/183

SQL Introductorio, SQL SERVER 2008  2011 

94

Tipos de Consultas

Consultas de Actualización

Las consultas de actualización no devuelven ningún valor si no que se encargan de actualizar unatabla, en este tipo de consultas de utiliza la cláusula UPDATE.

 Actualización simpleSe utiliza cuando se necesita realizar algún tipo de actualización a la tabla ya sea a todos losregistros de la misma o por medio de una condición establecida con la cláusula WHERE.

Ejemplos:Actualizar la dirección a Heredia para todas las personas

UPDATE PERSONASET DIRECCION =’HEREDIA’ 

Es recomendable que antes de realizar una actualización se realice un SELECT de los datos que sequieren modificar.

SELECT * FROM PERSONA

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 95/183

SQL Introductorio, SQL SERVER 2008  2011 

95

Modificar la dirección de todas aquellas personas que viven en BARVA y actualizarlas conHEREDIA.

SELECT * FROM PERSONAWHERE DIRECCION = 'BARVA'

A la hora de ejecutar el UPDATE, solamente se debe modificar 1 fila.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 96/183

SQL Introductorio, SQL SERVER 2008  2011 

96

UPDATE PERSONASET DIRECCION = 'HEREDIA'WHERE DIRECCION = 'BARVA'

Como se puede ver en el ejemplo solamente se actualizo un registro

SELECT * FROM PERSONAWHERE DIRECCION = 'BARVA'

Como se puede ver ya no existen personas que tengan en la dirección BARVA.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 97/183

SQL Introductorio, SQL SERVER 2008  2011 

97

 Actualización compuesta

Las actualizaciones compuestas son: aquellas que permiten actualizar más de un campo a la vez,poseen expresiones aritméticas, utilizan funciones incorporadas o pueden ser simples como solotener la cláusula WHERE o compuestas por operadores lógicos o de comparación.

Ejemplo:

Por medio de un SELECT, se puede visualizar como se encuentra la tabla antes de la actualizaciónSELECT * FROM CURSO

Actualizar la fecha inicio para todos los cursos en 05/06/2011 y la fecha fin para todos los cursoscon 28/08/2011.

UPDATE CURSOSET FECHA_INICIO = '20110605', FECHA_FIN='20110828'

Los campos a actualizar se separan por medio de una coma (,)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 98/183

SQL Introductorio, SQL SERVER 2008  2011 

98

Se modificaron 6 registros

Por medio del SELECT, se puede verificar la actualización.

SELECT * FROM CURSO

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 99/183

SQL Introductorio, SQL SERVER 2008  2011 

99

 Actualización con expresiones aritméticas

Ejemplos:

Actualizar la nota de todos los estudiantes para todos los cursos con 5 puntos más a la actual.

SELECT * FROM HISTORIAL

UPDATE HISTORIALSET NOTA=NOTA + 5

SELECT * FROM HISTORIAL

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 100/183

SQL Introductorio, SQL SERVER 2008  2011 

100

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 101/183

SQL Introductorio, SQL SERVER 2008  2011 

101

 Actualización con expresiones aritméticas utilizando funciones incorporadas

Ejemplo:

Suma la raíz cuadrada de 25 a la nota de todos los estudiantes.

SELECT * FROM HISTORIAL

UPDATE HISTORIALSET NOTA = NOTA + SQRT (25)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 102/183

SQL Introductorio, SQL SERVER 2008  2011 

102

SELECT * FROM HISTORIAL

 Actualización condicional simple

Por medio de la cláusula WHERE se permite establecer condiciones a la hora de actualizar registrosen una entidad.

Para este tipo de actualización se utilizan los operadores de comparación

Ejemplo:

SELECT * FROM HISTORIAL

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 103/183

SQL Introductorio, SQL SERVER 2008  2011 

103

Como se puede ver hay estudiantes que tienen notas mayores a 100, lo cual normalmente no escorrecto, si se ve el resultado mostrado por el select, se muestra que la nota más alta es 105, porlo que el update se puede realizar de 2 maneras, asignando 100 al campo nota o restando 5 alcampo nota, para ambos casos sería para todos aquellos estudiantes donde la nota sea superior a100.

UPDATE HISTORIALSET NOTA = NOTA - 5WHERE NOTA > 100

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 104/183

SQL Introductorio, SQL SERVER 2008  2011 

104

SELECT * FROM HISTORIAL

Después de la actualización, ningún estudiante cuenta con notas superiores a 100.

 Actualización condicional compuestaPara este tipo de actualizaciones, adicional a los operadores de comparación se utilizan losoperadores lógicos

Ejemplo

SELECT * FROM HISTORIAL

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 105/183

SQL Introductorio, SQL SERVER 2008  2011 

105

Se indica que para el estudiante con la cedula 109440300, la nota para el curso 5, no es 100, sino80, por lo que debe ser actualizada de inmediato.

SELECT * FROM HISTORIALWHERE CEDULA ='109440300'AND CODIGO = 5

Al ejecutar el select, nos aseguramos que solo se va a modificar lo que se solicita

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 106/183

SQL Introductorio, SQL SERVER 2008  2011 

106

UPDATE HISTORIALSET NOTA = 80WHERE CEDULA ='109440300'AND CODIGO = 5

Como se puede ver se actualizo solo un campo

SELECT * FROM HISTORIAL

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 107/183

SQL Introductorio, SQL SERVER 2008  2011 

107

Solo se modificó el campo solicitado.

Consultas de EliminaciónLas consultas de eliminación son las que permiten borrar registros completos de una tabla.

Borrado simple

Este tipo de consulta es la que permite borrar todos los datos o registros de una tabla

Ejemplo:

DELETE FROM PERSONABorrado condicional simple

En este caso se utiliza la cláusula WHERE y alguno de los operadores de comparación, paraestablecer una condición de borrado.

EjemploSELECT * FROM CURSO

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 108/183

SQL Introductorio, SQL SERVER 2008  2011 

108

Como se puede ver existe dos veces el curso Excel 2007, por lo que uno de ellos se debe eliminar

DELETE FROM CURSOWHERE CODIGO = 6

SELECT * FROM CURSO

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 109/183

SQL Introductorio, SQL SERVER 2008  2011 

109

El registro es eliminado

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 110/183

SQL Introductorio, SQL SERVER 2008  2011 

110

Borrado condicional compuesto

En este tipo de consulta adicional a los operadores de comparación se utilizan los operadoreslógicos.

EjemploSELECT * FROM HISTORIAL

Indican que el estudiante con cédula 609440300, se retiró del curso de Excel 2007, el cual tienecódigo 5, como se retiró sin terminarlo se solicita se elimine del histórico solo para este curso , yaque el continua llevando más cursos.

DELETE FROM HISTORIALWHERE CEDULA ='609440300'AND CODIGO = 5

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 111/183

SQL Introductorio, SQL SERVER 2008  2011 

111

SELECT * FROM HISTORIAL

El registro fue eliminado.

Consulta de datos añadidos

Este tipo de consultas son las que se encargan de insertar datos en una tabla se utiliza la cláusulaINSERT INTO.Solo se puede insertar una fila a la vez, por lo que si se requiere insertar en la tabla más de unregistro se deben realizar varias sentencias INSERT por separado.

Ejemplo:

Se debe insertar en la tabla Persona a Maria Arrollo ya que es una nueva estudiante que seinscribió en el curso de INTERNET

En este caso se deben ejecutar dos insert, el de la tabla PERSONA y el de tabla HISTORIAL

INSERT INTO PERSONAVALUES ('779440300','MARIA','ARROLLO',75,'ALAJUELA')

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 112/183

SQL Introductorio, SQL SERVER 2008  2011 

112

INSERT INTO HISTORIAL (CEDULA,CODIGO,NOTA,SEDE)VALUES ('779440300',002,00,'HEREDIA')

La cláusula INSERT INTO se puede utilizar también con un select.

Ejemplo:En ocasiones anteriores no se han tenido los respaldos suficientes, por lo que se solicita unrespaldo de la tabla de histórico.

Para este efecto se debe crear una tabla que contenga los mismos campos de la tabla de origen.Creación de la tabla de respaldo

CREATE TABLE HISTORIAL_RESPALDO(CEDULA INT NOT NULL,CODIGO INT NOT NULL,NOTA INT NOT NULL,SEDE VARCHAR(25))

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 113/183

SQL Introductorio, SQL SERVER 2008  2011 

113

INSERT INTO HISTORIAL_RESPALDOSELECT * FROM HISTORIAL

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 114/183

SQL Introductorio, SQL SERVER 2008  2011 

114

SELECT INTO

El SELECT INTO crea una nueva tabla a partir de una consulta.No permite crear una tabla con particiones, ya que las columnas de la tabla resultante son loscampos seleccionados en la consulta que dio origen a la nueva tabla.

Los índices, las restricciones y los desencadenadores definidos en la tabla de origen no setransfieren a la nueva tabla, ni se pueden especificar en la instrucción SELECT...INTO. Si serequieren estos objetos, se deben crear después de ejecutar SELECT...INTO.

Ejemplo:

Se requiere crear una tabla con solo las personas que en este momento no se encuentranmatriculadas en ningún curso.

SELECT A.CEDULA, A.NOMBRE, A.APELLIDOINTO NOMATRICULADOSFROM PERSONA AWHERE A.CEDULA NOT IN (SELECT B.CEDULAFROM HISTORIAL B)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 115/183

SQL Introductorio, SQL SERVER 2008  2011 

115

Como se puede ver en la base de datos CURSO se creó la tabla NOMATRICULADOS con lascolumnas especificadas en la consulta.

En el caso de agregar algún constraint, se debe hacer por medio de un Alter o en el caso de

agregar un índice por medio de un Create.

Ejemplo:Agregar el campo CEDULA como llave primeria en la tabla NOMATRICULADOS.

ALTER TABLE NOMATRICULADOSADD CONSTRAINT PKCEDULANPRIMARY KEY (CEDULA)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 116/183

SQL Introductorio, SQL SERVER 2008  2011 

116

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 117/183

SQL Introductorio, SQL SERVER 2008  2011 

117

Práctica # 4 Consultas

Objetivo: el estudiante reconozco los diferentes tipos de consulta que existen

Con base a la base de datos CURSO y las tablas que la componen realizar la siguiente práctica

1.  Modificar la dirección de todas aquellas personas que viven en PAVAS y actualizarlas conSAN JOSE.

2.  Actualice la fecha de inicio para el curso con código 2 a 06/06/2011 y la fecha fin para estemismo curso en 21/07/2011

3.  Aumente en 5 todas aquellas notas que sean menores de 80 y mayores o iguales a 70

4.  Se debe eliminar del historial al estudiante con cédula 779440300 , en el curso 2

5.  Agregar la siguiente información a las tablas PERSONA e HISTORIAL según corresponda

Tabla PERSONA

Cédula: 78880300Nombre: JOSEApellido: ARROLLO

Edad :50Dirección: ALAJUELA

Tabla HISTORIALCEDULA: 78880300CODIGO: 002NOTA:0SEDE:SAN JOSE

6.  Crear por medio de la cláusula select into la tabla MATRICULADOS, donde se guarde lainformación de la cedula, nombre apellido código de curso y nombre de curso en el cual

está matriculado cada persona.7.  Mostrar la cantidad de semanas que tarda el curso de semanas que tarda el curso deAccess.

8.  Muestre el día de la semana en el que inicia el curso de SQL.

Nota : Ver solución en el Anexo IV 

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 118/183

SQL Introductorio, SQL SERVER 2008  2011 

118

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 119/183

SQL Introductorio, SQL SERVER 2008  2011 

119

La cláusula CONSTRAINT

Es una palabra clave opcional que indica el principio de una definición de una restricción PRIMARYKEY, NOT NULL, UNIQUE, FOREING KEY O CHECK.Se utiliza en las instrucciones ALTER TABLE y CREATE TABLE para crear o eliminar índices.

La cláusula CONSTRAINT debe aparecer inmediatamente después del campo indexado.

Sintaxis

nombre: Es el nombre del índice que va a crear.

primario#: Es el nombre del campo o campos que forman el índice primero.único#: Es el nombre del campo o los campos que forman el índice de clave único.ref#: Es el nombre del campo o los campos que forman el índice externo (hacen referencia acampos de otra tabla).tabla externa: Es el nombre de la tabla que contiene el campo o los campos referenciados en ref#.campos externos : Es el nombre del campo o de los campos de la tabla externa especificados porref1 ,ref2…..,refN 

Tipo de índice Descripción

UNIQUE

Impide la duplicación de claves alternativas (no principales) y asegura que se cree uníndice para aumentar el rendimiento. Se permiten valores nulos. Una tabla puede tenervarias restricciones UNIQUE

PRIMARY KEY

Identifica de forma exclusiva cada una de las filas; asegura que los usuarios no escribanvalores duplicados y que se cree un índice para aumentar el rendimiento. No se permitenvalores nulos. Permite la declaración de la llave primaria.

FOREIGN KEY

Define una columna o combinación de columnas cuyos valores coinciden con la claveprincipal de la misma u otra tabla. Permite la declaración de la llave foránea.

CHECK

Especifica los valores de los datos que se aceptan en una columna en función de losvalores de otras columnas de la misma tabla. Permite establecer condiciones a un campoy validarlo.

Para indices de campos únicosCONSTRAINT nombre {PRIMARY KEY|UNIQUE|REFERENCES table externa[(campo externo 1,campo externo2)]}

Para indices de campos multiples :CONSTRAINT nombre {PRIMARY KEY( primario1*primario2*,…++)| UNIQUE(único1[,único2[,..]])|

FOREIGN KEY(ref1*,ref2*,…++)REFERENCES table externa [(campo externo1*,campo externo2*,…++)+} 

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 120/183

SQL Introductorio, SQL SERVER 2008  2011 

120

NULL O NOTNULL

Son palabras claves que determinan si se permiten o no valores NULL en la columna. NULLno es estrictamente una restricción, pero puede especificarse de la misma forma que unNOT NULL

Creación de Índices

Los índices se crean por medio de las instrucciones:CREATE TABLE: A la hora de crear una tablaSintaxis

Ejemplo:

CREATE TABLE CURSO_RESPALDO(CODIGO INT NOT NULL,DESCRIPCION VARCHAR(50),

FECHA_INICIO DATETIME,FECHA_FIN DATETIMECONSTRAINT PKCURSORES PRIMARY KEY(CODIGO))

CREATE TABLE tabla(campo1 tipo (tamaño) índice 1,Campo2 tipo (tamaño) índice 2,….,)

CONSTRAINT nombreRestricción PRIMARY KEY (nombre de campo)CONSTRAINT nombreRestricción FOREIGN KEY (nombre de campo)REFERENCES tabla 1(nombre del campo de tabla1))

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 121/183

SQL Introductorio, SQL SERVER 2008  2011 

121

CREATE INDEX: cuando la tabla ya ha sido definida.

Ejemplo:

Para este ejemplo se crea en la base de datos de NewDB la tabla Estudiante

USE NewDBCREATE TABLE ESTUDIANTE(CARNET INT NOT NULL,NOMBRE VARCHAR (50) NOT NULL,

APELLIDO VARCHAR(50) NOT NULL,EDAD INT NOT NULL,DIRECCION VARCHAR(50) NULL,TEL_CEL INT NOT NULL,TEL_HAB INT NOT NULL,CONSTRAINT PKCARNET PRIMARY KEY(CARNET))

Se procede a crear 4 índices

CREATE UNIQUE INDEX TEL_CEL

ON ESTUDIANTE (TEL_CEL)

CREATE INDEX TEL_HABON ESTUDIANTE(TEL_HAB)

Se procede a insertar información en la tabla 

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ]INDEX NOMBRE DE INDICE

ON <object> ( column [ ASC | DESC ] [ ,...n ] )

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 122/183

SQL Introductorio, SQL SERVER 2008  2011 

122

Para el segundo registro se escribe el mismo número de celular que en el registro anterior sinembargo no lo permite, debido a que este campo se declaro como único, aunque no sea llaveprimariaComo se puede ver el campo TEL_HAB a pesar de ser índice si acepta que se repita

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 123/183

SQL Introductorio, SQL SERVER 2008  2011 

123

Eliminar y Añadir campos e índices

La eliminación o agregado de campos e índices se puede realizar por medio de la instrucciónALTER TABLE

ALTER TABLE: cuando la tabla ya ha sido creada y por alguna razón en la instrucción CREATE TABLEno se incluyó el CONSTRAINT.

Permite agregar un nuevo campo a una tabla existente.

Ejemplo :

Agrega la columna APELLIDO_2 a la tabla Estuadiante

ALTER TABLE ESTUDIANTEADD APELLIDO_2 VARCHAR(50)

ALTER TABLE Nombre de TablaADD Nombre de Columna Tipo deDato ;

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 124/183

SQL Introductorio, SQL SERVER 2008  2011 

124

Agregar constraint por medio del ALTER

Cláusula

Modificar la columna DIRECCION, si una dirección no es digitada que automáticamente se llenecon la palabra DESCONOCIDA y validar que la edad del estudiante no sea mayor a 25 años nimenor de 15

ALTER TABLE ESTUDIANTEADD CONSTRAINT DIRECCION DEFAULT 'DESCONOCIDA' FOR DIRECCION

ALTER TABLE ESTUDIANTEADD CONSTRAINT EDAD CHECK (EDAD BETWEEN 15 AND 25 )

Se procede a incluir datos

ALTER TABLE nombre de tablaADD CONSTRAINT

Nombre de llave primaria PRIMARYKEY(Campo de llave primeria )ON [PRIMARY];

ALTER TABLE nombre de tabla hijaADD CONSTRAINT nombre de llave foráneaFOREIGN KEY (columna o columnas queconforman la llave foránea)REFERENCES nombre de tabla padre (Campo ocampos de llave primaria de tabla padre);

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 125/183

SQL Introductorio, SQL SERVER 2008  2011 

125

En este caso se está validando el campo EDAD, a la hora de crear el constraint se indicó que elcampo de EDAD debe de estar en un rango de 15 a 25, pero como se incluyó 26, muestra elmensaje de error.

En este otro caso se incluyo una edad de 13 que tampoco cumple con el rango dado

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 126/183

SQL Introductorio, SQL SERVER 2008  2011 

126

Como se puede ver en los últimos tres registros incluidos no se ingreso información en el campoDIRECCION por lo que inserto por defecto DESCONOCIDA.

Borrado de constraint por medio de Alter

Borrado de un índice

Los índices se eliminan por medio del DROP

Ejemplo:Borrar cada uno de los índices y constraints creados en el punto anterior

ALTER TABLE nombre de tablaDROP CONSTRAINT nombre del constraint;

DROP INDEX nombre de índice

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 127/183

SQL Introductorio, SQL SERVER 2008  2011 

127

ALTER TABLE ESTUDIANTEDROP CONSTRAINT EDAD

DROP INDEX TEL_CELON ESTUDIANTE

Como se puede ver el constraint EDAD y el índice TEL_CEL se eliminaron de la tabla ESTUDIANTE.

Tanto el índice como el constraint se pueden eliminar dando clic derecho sobre el nombre de cadauno de ellos y seleccionado la opción Delete

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 128/183

SQL Introductorio, SQL SERVER 2008  2011 

128

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 129/183

SQL Introductorio, SQL SERVER 2008  2011 

129

Se da clic sobre OK y el objeto es eliminado

ALTER TABLE ESTUDIANTEDROP CONSTRAINT DIRECCION

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 130/183

SQL Introductorio, SQL SERVER 2008  2011 

130

Borrado de la columna de una tabla por medio del ALTER

Cláusula

Ejemplo:Borrar de la tabla ESTUDIANTE, la columna APELLIDO_2

ALTER TABLE ESTUDIANTEDROP COLUMN APELLIDO_2

ALTER TABLE nombre de tablaDROP COLUMN nombre de columna;

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 131/183

SQL Introductorio, SQL SERVER 2008  2011 

131

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 132/183

SQL Introductorio, SQL SERVER 2008  2011 

132

Creación de una base de datosAnteriormente se explicó que por medio de código como el siguiente se puede crear una base dedatos

USE master

GOCREATE DATABASE CURSOON(NAME = 'c:\cursosql1\ CURSO_dat',FILENAME = 'c:\cursosql1\ CURSO.mdf',SIZE = 4MB,MAXSIZE = 10MB,FILEGROWTH = 1)GO

Sin embargo una de las facilidades que ofrece Microsoft SQL Server, es que al igual que las tablasse pueden crear bases de datos de forma gráfica o manual.

En el Explorador de Objetos (Object Explorer), se da clic derecho sobre la carpeta Base dedatos(Data Base) y se selecciona la opción Nueva Base de Datos(New Database) 

Se muestra la siguiente pantalla

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 133/183

SQL Introductorio, SQL SERVER 2008  2011 

133

Una vez creada la base de datos si se desea ver el query que la creo, se da clic derecho sobre elnombre de la base de datos y se selecciona la opción Script de la Base de Datos(Script Databaseas), Crear a (CREATE TO), Editor de Query (New Query Editor Windows)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 134/183

SQL Introductorio, SQL SERVER 2008  2011 

134

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 135/183

SQL Introductorio, SQL SERVER 2008  2011 

135

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 136/183

SQL Introductorio, SQL SERVER 2008  2011 

136

Sub Consultas

Las sub consultas son consultas de select anidades o select dentro de otro select, esta otraconsulta select puede aparecer en la lista de selección o en las cláusulas WHERE o HAVING.

En este tipo de consultas se utilizan las siguientes condicionesEXISTS: Cierto si una sub consulta devuelve como mínimo un registroIN: Pertenencia a un conjunto de valores o ser miembro de una sub consultaAny: Compara el valor con cada valor devuelto por una subconsulta retornando cierto si uno ocualquiera de ellos cumple la condición, debe ir precedido de =, <>,<,>,>= o <=ALL: Compara el valor con cada valor devuelto por una subconsulta retornando cierto si todos elloscumplen con la condición debe ir precedido de =, <>,<,>,>= o <=

Ejemplo:Se necesita saber cuál de las personas actualmente no están inscritos en algún curso.

Operador INSELECT NOMBRE , APELLIDO FROM PERSONAWHERE CEDULA NOT IN (SELECT CEDULA FROM HISTORIAL)

Muestre los estudiantes que tienen notas entre 90 y 100

SELECT NOMBRE , APELLIDO FROM PERSONAWHERE CEDULA IN (SELECT CEDULA FROM HISTORIALWHERE NOTA BETWEEN 90 AND 100)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 137/183

SQL Introductorio, SQL SERVER 2008  2011 

137

Operadores EXISTS y NOT EXISTS

Mostrar el nombre y apellido de todas aquellas personas que tengan el curso 1 matriculado y lanota sea mayor a 80.

SELECT NOMBRE,APELLIDO FROM PERSONA AWHERE EXISTS(SELECT * FROM HISTORIAL BWHERE A.CEDULA = B.CEDULAAND B.CODIGO = 1AND B.NOTA > 80)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 138/183

SQL Introductorio, SQL SERVER 2008  2011 

138

Mostrar el nombre, apellido y cedula de aquellas personas que o tienen cursos matriculados

SELECT NOMBRE,APELLIDO,CEDULA FROM PERSONA AWHERE NOT EXISTS(SELECT * FROM HISTORIAL BWHERE A.CEDULA = B.CEDULA)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 139/183

SQL Introductorio, SQL SERVER 2008  2011 

139

Consultas de referencias cruzadas

Las consultas de referencias cruzadas muestran todas las combinaciones posibles de todas las filaso registros de las tablas combinadas.En este tipo de combinación no se requiere tener una columna en común.

Cuando se utilizan combinaciones cruzadas, SQL Server genera un producto cartesiano en el que elnúmero de filas del conjunto de resultados es igual al número de filas de la primera tablamultiplicado por el número de filas de la segunda tabla.

Para las consultas de referencia cruzada se utiliza el CROSS JOIN 

Ejemplo:

SELECT CODIGO,DESCRIPCIONFROM CURSOCROSS JOIN HISTORIAL

En este caso el error se da porque tanto en la tabla CURSO como en la tabla HISTORIAL, existe elcampo CODIGO, en este caso hacemos uso de los alias.Ejemplo:SELECT A.CODIGO,DESCRIPCIONFROM CURSO A

CROSS JOIN HISTORIAL

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 140/183

SQL Introductorio, SQL SERVER 2008  2011 

140

Consultas de Unión Internas

La UNION, es un tipo de consulta interna que se puede considerar como una suma, se sumaría enuna tabla de resultado el conjunto de columnas de dos tablas según el criterio aplicadoT1 {1,2,3,4,5,6} y T2 {1.3.5.7}

T1 UNION T2 = {1,2,3,4,5,6,7}

Las dos tablas a unir deben tener el mismo número de columnas y el mismo tipo de dato porcolumna.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 141/183

SQL Introductorio, SQL SERVER 2008  2011 

141

SELECT *FROM HISTORIALUNIONSELECT * FROM HISTORIAL_RESPALDO

Ejemplo:

Las consultas internas combinan tablas mediante la comparación de los valores de las columnas queson comunes a ambas tablas.Se devuelven las filas o registros que cumplen la condición.

Para este tipo de consultas se utiliza JOIN o INNER JOIN

Cláusula

SELECT *FROM Table1[INNER] JOIN Table2ON Table1.column = Table2.column;

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 142/183

SQL Introductorio, SQL SERVER 2008  2011 

142

Ejemplo:

Mostrar el nombre, apellido y cédula de todas las personas que están actualmente inscritos enalgún curso

SELECT NOMBRE, APELLIDO,PERSONA.CEDULAFROM PERSONAJOIN HISTORIALON PERSONA.CEDULA = HISTORIAL.CEDULA

Como se puede ver muestra duplicados en la consultaEn este caso podemos utilizar un GROUP BY

SELECT NOMBRE,APELLIDO,PERSONA.CEDULAFROM PERSONAJOIN HISTORIALON PERSONA.CEDULA = HISTORIAL.CEDULA

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 143/183

SQL Introductorio, SQL SERVER 2008  2011 

143

GROUP BY PERSONA.CEDULA,NOMBRE,APELLIDO

El INNER JOIN funciona de la misma manera que el JOIN así que si lo utilizamos el resultadodebería ser el mismo.

Ejemplo:

SELECT NOMBRE,APELLIDO, A.CEDULAFROM PERSONA AINNER JOIN HISTORIAL BON A.CEDULA = B.CEDULAGROUP BY A.CEDULA,NOMBRE,APELLIDO

Nótese que en este caso se están utilizando alias.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 144/183

SQL Introductorio, SQL SERVER 2008  2011 

144

Como se puede ver el resultado es el mismo que al utilizar el JOIN.

Si se quisiera obtener la información de las personas que están matriculadas por curso sería de lasiguiente manera sin los alias

SELECT dbo.CURSO.DESCRIPCION, dbo.HISTORIAL.CEDULA, dbo.PERSONA.NOMBRE,dbo.PERSONA.APELLIDOFROM dbo.CURSOINNER JOIN dbo.HISTORIAL

ON dbo.CURSO.CODIGO = dbo.HISTORIAL.CODIGOINNER JOIN dbo.PERSONAON dbo.HISTORIAL.CEDULA = dbo.PERSONA.CEDULA

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 145/183

SQL Introductorio, SQL SERVER 2008  2011 

145

Con alias

SELECT A.DESCRIPCION, B.CEDULA, C.NOMBRE, C.APELLIDOFROM dbo.CURSO AINNER JOIN dbo.HISTORIAL BON A.CODIGO = B.CODIGOINNER JOIN dbo.PERSONA CON B.CEDULA = C.CEDULA

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 146/183

SQL Introductorio, SQL SERVER 2008  2011 

146

El resultado es el mismo

Para poder realizar una consulta en forma gráfica se da clic derecho sobre la carpeta Vistas(Views), Nueva vista(New View) y se agregan las tablas y los campos

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 147/183

SQL Introductorio, SQL SERVER 2008  2011 

147

Consultas de Unión Externa

Las uniones externas izquierda y derecha combinan filas de dos tablas que cumplen una condiciónde combinación, más las filas de la tabla izquierda o derecha que no la cumplen.

Las uniones externas izquierda y derecha se utilizan cuando se necesita una lista completa dedatos de una de las tablas más la información que cumpla la condición.

Este tipo de uniones no se utilizan a menudo, porque en algunos casos los resultados dados no son

los esperados en estos casos se deben realizar varias pruebas o cambiar el orden de las tablas, enocasiones utilizar otro tipo de consulta.

LEFT JOIN: Unión a la izquierda, toma los datos de la primera tabla especificada.

SELECT A.CEDULA,A.NOMBRE,A.APELLIDOFROM PERSONA A

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 148/183

SQL Introductorio, SQL SERVER 2008  2011 

148

LEFT JOIN HISTORIAL BON A.CEDULA = B.CEDULAGROUP BY A.CEDULA,A.NOMBRE,A.APELLIDO

Muestra los datos de la tabla Persona, coincidan o no con la tabla Historial.

Se puede utilizar el OUTER, da el mismo resultado

SELECT A.CEDULA,A.NOMBRE,A.APELLIDOFROM PERSONA ALEFT OUTER JOIN HISTORIAL BON A.CEDULA = B.CEDULAGROUP BY A.CEDULA,A.NOMBRE,A.APELLIDO

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 149/183

SQL Introductorio, SQL SERVER 2008  2011 

149

RIGHT JOIN: Unión a la derecha, toma los datos de la segunda tabla especificada.

SELECT B.CEDULA,A.NOMBRE,A.APELLIDOFROM PERSONA ARIGHT JOIN HISTORIAL BON B.CEDULA =A.CEDULAGROUP BY B.CEDULA,A.NOMBRE,A.APELLIDO

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 150/183

SQL Introductorio, SQL SERVER 2008  2011 

150

Muestra los datos de la tabla Historial, coincidan o no con la tabla Persona.

FULL OUTER JOIN O FULL JOIN: Combinación externa completa, incluye todas las filas de ambastablas, con independencia de que la otra tabla tenga o no un valor coincidente.

Ejemplo 1:

SELECT A.CEDULA,A.NOMBRE, A.APELLIDO FROM PERSONA A

FULL JOIN HISTORIAL BON A.CEDULA = B.CEDULAGROUP BY A.CEDULA,A.NOMBRE, A.APELLIDO

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 151/183

SQL Introductorio, SQL SERVER 2008  2011 

151

Muestra la información de la tabla Persona, tanto los que coinciden o no con la tabla Historial.

Ejemplo 2

SELECT B.CEDULA,A.NOMBRE, A.APELLIDO FROM HISTORIAL BFULL JOIN PERSONA AON B.CEDULA = A.CEDULAGROUP BY B.CEDULA,A.NOMBRE, A.APELLIDO

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 152/183

SQL Introductorio, SQL SERVER 2008  2011 

152

Muestra los datos de la tabla Historial, y la información de la tabla Persona que no coincide con lade Historial la muestra en NULL.

En una consulta externa completa se puede utilizar la cláusula WHERE, para devolver solo los

datos coincidentes.

Si tomamos los 2 ejemplos anteriores tenemos lo siguiente

Ejemplo 1:

Devuelve las personas que tienen cursos matriculados

SELECT A.CEDULA,A.NOMBRE, A.APELLIDO FROM PERSONA AFULL JOIN HISTORIAL BON A.CEDULA = B.CEDULA

WHERE B.CEDULA IS NOT NULLGROUP BY A.CEDULA,A.NOMBRE, A.APELLIDO

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 153/183

SQL Introductorio, SQL SERVER 2008  2011 

153

Devuelve las personas que no tienen cursos matriculados

SELECT A.CEDULA,A.NOMBRE, A.APELLIDO FROM PERSONA AFULL JOIN HISTORIAL BON B.CEDULA = A.CEDULAWHERE B.CEDULA IS NULLGROUP BY A.CEDULA,A.NOMBRE, A.APELLIDO

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 154/183

SQL Introductorio, SQL SERVER 2008  2011 

154

Ejemplo 2:Devuelve las personas que tienen cursos matriculados

SELECT B.CEDULA,A.NOMBRE, A.APELLIDO FROM HISTORIAL BFULL JOIN PERSONA AON B.CEDULA = A.CEDULAWHERE B.CEDULA IS NOT NULLGROUP BY B.CEDULA,A.NOMBRE, A.APELLIDO

Devuelve las personas que no tienen cursos matriculados

SELECT B.CEDULA,A.NOMBRE, A.APELLIDO FROM HISTORIAL BFULL JOIN PERSONA AON B.CEDULA = A.CEDULAWHERE B.CEDULA IS NULL

GROUP BY B.CEDULA,A.NOMBRE, A.APELLIDO

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 155/183

SQL Introductorio, SQL SERVER 2008  2011 

155

Como se puede ver al tomar el campo Cedula de la tabla Historial, va a mostrar un NULL, porqueeste dato no existe en la tabla Historial, debe ser tomado de la tabla Persona, tal y como se realizóen el ejemplo 1

De igual forma la cláusula WHERE se puede utilizar en las consultas con LEFT JOIN y RIGHT JOIN

Ejemplo:

Mostrar las personas que tienen cursos matriculados

SELECT B.CEDULA,A.NOMBRE, A.APELLIDOFROM HISTORIAL BLEFT JOIN PERSONA AON B.CEDULA = A.CEDULAWHERE B.CEDULA IS NOT NULLGROUP BY B.CEDULA,A.NOMBRE, A.APELLIDO

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 156/183

SQL Introductorio, SQL SERVER 2008  2011 

156

En este caso se utiliza el LEFT JOIN, porque lo que se quiere es extraer la información de la tablaHistorial.

Mostrar las personas que no tienen cursos matriculados

SELECT A.CEDULA,A.NOMBRE, A.APELLIDO

FROM HISTORIAL BRIGHT JOIN PERSONA AON A.CEDULA = B.CEDULAWHERE B.CEDULA IS NULLGROUP BY A.CEDULA,A.NOMBRE, A.APELLIDO

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 157/183

SQL Introductorio, SQL SERVER 2008  2011 

157

En este caso se utiliza RIGHT JOIN, porque lo que se quiere es extraer la información de la tablaPersona.

Se pueden realizar consultas un poco más extensas, con varios JOIN, por ejemplo para en el casode extraer todas aquellas personas que no tienen cursos matriculados, una forma de hacerlo seríala siguiente

SELECT A.CEDULA,A.NOMBRE, A.APELLIDOFROM PERSONA ALEFT JOIN HISTORIAL BON A.CEDULA = B.CEDULA

WHERE A.CEDULA NOT IN (SELECT B.CEDULAFROM PERSONA ARIGHT JOIN HISTORIAL BON A.CEDULA = B.CEDULAGROUP BY B.CEDULA)GROUP BY A.CEDULA,A.NOMBRE, A.APELLIDO

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 158/183

SQL Introductorio, SQL SERVER 2008  2011 

158

Como se puede ver el resultado es el mismo

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 159/183

SQL Introductorio, SQL SERVER 2008  2011 

159

Práctica# 5 para la casa

Objetivo: Medir el conocimiento de los estudiantes, según los temas vistos en clase

Desarrolle los siguientes puntos:

1.  Creación de la siguiente base de datos en SQL Server, el nombre de la base de datos eschoferes.

Tablas

ChoferNum_chofer int,Nombre varchar(30)Dirección varchar(50)Fecha-inicio datetimeSalario float

CamiónNum_camion intMarca varchar(20)Tipo varchar(20)Año intCapacidad int

EnvíoNum_chofer intNum_camion intFecha datetime

Peso float

Recuerde definir llaves primarias y foráneas según lo visto en clase

2.  Insertar 5 registros en cada una de las entidades con los siguientes datos

Num Nombre Dirección Fecha Salariochofer inicio

1 Luis San José 10/01/1996 120000

2 Samuel Heredia 25/10/1994 155000

3 Jesús San José 20/05/2001 110000

4 Marcos Majuela 15/02/2000 120200

5 Miguel Heredia 30/06/1999 140000

Num Marca Tipo Año Capacidad

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 160/183

SQL Introductorio, SQL SERVER 2008  2011 

160

camión

11 Hino Cisterna 1995 10

12 Hiace Pick up 1998 4

13 Hino Cisterna 2000 15

14 Ford Pick up 1999 10

15 Hino Carga 1998 5

3.  Incluya envíos basado en estas tablas donde las fechas oscilen entre 01/01/1994 al30/01/2002

Para este punto se van a incluir los siguientes datos

NUM_CHOFER NUM_CAMION FECHA PESO

1 11 01/01/1994 250001 12 07/16/1995 25600

2 13 12/23/1996 75000

2 14 01/30/1997 25800

3 15 12/03/2000 15900

3 11 11/25/2001 45800

4 12 06/16/2000 23000

4 13 09/13/2001 45100

5 14 05/19/2002 63200

5 11 01/20/2002 44500

5 13 01/22/2002 44500

5 12 01/23/2002 44500

5 15 01/24/2002 44500

4 12 01/24/2002 44500

4 13 01/24/2002 44500

4 11 05/18/2002 43500

4 15 07/18/2002 25500

4 13 08/18/2002 20500

4.  Responder en SQL a las siguientes consultas:

a.  Dar una lista de los nombres de choferes que viven en San José y que tienen unsalario superior de ¢110000.

b.  Dar una lista de los camiones cisternas que hicieron un trayecto antes del 5 deoctubre de 2001

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 161/183

SQL Introductorio, SQL SERVER 2008  2011 

161

c.  Dar una lista de los choferes que ingresaron después del 1 de enero de 1999 yque hicieron un envío superior de 20 toneladas en un camión Hino en el año 2000 Y 2001

d.  Dar la lista de los camiones agrupados por marca y añoe.  Dar una lista de los nombres de los choferes que han hecho envío con todos los

camiones de la compañía.

Nota: para dar la solución a esta consulta favor investigar en la ayuda de SQL sobre la funciónCONVERT, se necesita de count , el distinct .Tomar en cuenta que la tabla ENVIO no cuenta con llave primaria por lo que tanto el chofercomo el camión se pueden repetirSe puede realizar una concatenación de campos para lo cual va utilizar ’’ De la siguiente maneraSELECT EXPRESION CHAR ’’EXPRESION CHAR; por lo que necesitara de la función

CONVERT, esta se vio en clase.

f.  Dar una lista del peso total de la mercadería transportada en 2002.g.  Crear una tabla de los nombres de los choferes que usaron un camión Hino

durante el año 2000, la nueva tabla debe tener el nombre del chofer, la marca y el tipo delcamión.

h.  Crear una tabla de los camiones que son del año 1998 y que además realizaron unenvió durante 2001, la nueva tabla debe tener Marca, Tipo , fecha de envío y año .

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 162/183

SQL Introductorio, SQL SERVER 2008  2011 

162

Práctica # 6 Práctica General para examen

Objetivo: Evacuar las dudas que los estudiantes con respecto a los temas vistos en clase antes dela realización del examen para el curso de SQL I.

Crear una base de datos llamada Turismo, que contiene las siguientes tablas:

uristaNumero_turista Int NOT NULL (PK)Nombre varchar(30)APELLIDO_1 VARCHAR (30)

APELLIDO_2 VARCHAR(30)

Pais varchar(20)

Edad Int

LugarCodigo_lugar int (PK)Nombre varchar(30)Tipo_lugar varchar(20)Continente varchar(7)

Viaje

Num_viaje intNum turista int FkCod_lugar int (Fk)Fecha_salida datetimeFecha_llegada datetime

Ciudad_salida varchar(20)

Todos los campos son NOT NULL a excepción del APELLLIDO_2

Realice las siguientes operaciones en la base de datos creada:

1.  Adicionar una nueva columna en la tabla de VIAJE que se llama Estadía.2.  Suprimir una columna fecha_llegada en la tabla viaje.3.  Insertar 10 turistas en la tabla turistas, validar por medio de un constraint que nigún

turista puede tener menos de 5 años ni más de 99 y que si el segundo apellido queda enblanco escribir NO LO DIO.

4.  Insertar 10 registro en la tabla Lugar, asignando códigos de 10 en 10 (usar todos los

continentes: América, Asia, África, Europa, Oceanía).5.  Usar la instrucción para actualizar, de tal forma que se deben incrementar los códigos de

lugar según el continente de la siguiente forma:

Continente Codigo_lugar

América Codigo_lugar + 100Africa Codigo_lugar + 200

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 163/183

SQL Introductorio, SQL SERVER 2008  2011 

163

Asia Codigo_lugar + 300Europa Codigo_lugar + 400Oceanía Codigo_lugar + 500

6.  Eliminar los registros de la tabla cuyo continente es Oceanía.

7.  Dar la lista de los nombre de todos los turistas.8.  Dar la lista de los diferentes tipos de lugar y de los continentes en donde se encuentran.9.  Dar la lista de los turistas que son costarricense, canadienses, panameños o jamaiquinos.10. Dar el código de lugar más grande11. Dar el número de sitios diferentes que pueden visitarse.12. Para cada continente, dar una lista por continente y el código de lugares localizados en ese

continente.13. Dar la lista de aquellos tipos de lugar de los cuales existen al menos 3 del mismo tipo.14. Dar la lista de los códigos de lugar y sus nombres en orden descendente.15. Adicionar como llave primaria los campos NUMERO_VIAJE y NUMERO_TURISTA como

llave primaria de la tabla VIAJE.16.  Inserte 4 registros en la tabla VIAJE utilizando como referencia la información de las tablas

TURISTA y LUGAR.17. Muestre los turistas que se encuentran de viaje y los que no están de viaje, utilice join y

select anidado respectivamente.

Nota : Solución Anexo VI 

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 164/183

SQL Introductorio, SQL SERVER 2008  2011 

164

 Anexo I Solución de Práctica 1

Crear Base de datos

USE master

GOCREATE DATABASE CURSOON(NAME = 'c:\cursosql1\ CURSO_dat',FILENAME = 'c:\cursosql1\ CURSO.mdf',SIZE = 4MB,MAXSIZE = 10MB,FILEGROWTH = 1)GO

1.  Crear tanto en la base de datos curso como en la base de datos NEWDB, la siguiente tabla

USE CURSO

CREATE TABLE PERSONA (CEDULA INT NOT NULL,NOMBRE VARCHAR(50) NOT NULL,APELLIDO VARCHAR(50) NOT NULL,EDAD INT,);

USE NEWDB

CREATE TABLE PERSONA (CEDULA INT NOT NULL,NOMBRE VARCHAR(50) NOT NULL,APELLIDO VARCHAR(50) NOT NULL,EDAD INT,);

2.  Insertar los siguientes datos en la tabla Persona en ambas bases de datos

INSERT INTO PERSONAVALUES ('509440300','MARIA','JUAREZ',20)

INSERT INTO PERSONAVALUES ('609440300','JUAN','PEREZ',18)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 165/183

SQL Introductorio, SQL SERVER 2008  2011 

165

INSERT INTO PERSONAVALUES ('709440300','ANA','ARIAS',25)

INSERT INTO PERSONAVALUES ('809440300','TERESA','PAZ',40)

INSERT INTO PERSONAVALUES ('909440300','JOSE','ARGUEDAZ',30)

INSERT INTO PERSONAVALUES ('109440300','JUANA','PAZ',50)

INSERT INTO PERSONAVALUES ('209440300','JULIO','MONGE',35)

INSERT INTO PERSONAVALUES ('309440300','KAREN','VARGAS',20)

INSERT INTO PERSONAVALUES ('409440300','MARIO','MORA',18)

INSERT INTO PERSONAVALUES ('519440300','JULIA','DIAZ',20)

 Anexo II Solución de Práctica 2Crear tablas

1.Creación de tablas

Elimina tabla personaUSE CURSODROP TABLE DBO.PERSONA

Creación de tablasUSE CURSO

CREATE TABLE PERSONA (CEDULA INT NOT NULL,NOMBRE VARCHAR(50) NOT NULL,APELLIDO VARCHAR(50) NOT NULL,EDAD INT,);

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 166/183

SQL Introductorio, SQL SERVER 2008  2011 

166

CREATE TABLE CURSO(CODIGO INT NOT NULL,DESCRIPCION VARCHAR(50),FECHA_INICIO DATETIME,FECHA_FIN DATETIME)

CREATE TABLE HISTORIAL(CEDULA INT NOT NULL,CODIGO INT NOT NULL,NOTA INT NOT NULL,SEDE VARCHAR(25))

2.Agregue por medio de la cláusula ALTER a la tabla PERSONA, la columna DIRECCION tipovarchar de 50.

ALTER TABLE PERSONAADD DIRECCION VARCHAR(50)

3. Agregue por medio de la cláusula ALTER a la tabla PERSONA, el campo CEDULA como llaveprimaria.

ALTER TABLE PERSONA ADD CONSTRAINTPKCEDULA PRIMARY KEY(CEDULA)

4. Agregue por medio de la cláusula ALTER a la tabla CURSO, el campo CODIGO como llaveprimaria.

ALTER TABLE CURSO ADD CONSTRAINTPKCURSO PRIMARY KEY(CODIGO)

5. Agregue por medio de la cláusula ALTER al tabla HISTORIAL, los campos CEDULA y CODIGOcomo llave primaria

ALTER TABLE HISTORIAL ADD CONSTRAINT

PKHISTORIAL PRIMARY KEY(CEDULA,CODIGO)

6. Agregue por medio de la cláusula ALTER al tabla HISTORIAL, los campos CEDULA y CODIGOCURcomo llaves foráneas.

ALTER TABLE HISTORIAL ADD CONSTRAINTFKCURSOH FOREIGN KEY (CODIGO)REFERENCES CURSO

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 167/183

SQL Introductorio, SQL SERVER 2008  2011 

167

ALTER TABLE HISTORIAL ADD CONSTRAINTFKPERSONAH FOREIGN KEY (CEDULA)REFERENCES PERSONA

7. Inserte valores a las tablas.

Tabla Persona

INSERT INTO PERSONAVALUES ('509440300','MARIA','JUAREZ',20, 'HEREDIA')

INSERT INTO PERSONAVALUES ('609440300','JUAN','PEREZ',18,'ALAJUELA')

INSERT INTO PERSONAVALUES ('709440300','ANA','ARIAS',25, 'SAN JOSE')

INSERT INTO PERSONAVALUES ('809440300','TERESA','PAZ',40,'HEREDIA')

INSERT INTO PERSONAVALUES ('909440300','JOSE','ARGUEDAZ',30,'PAVAS')

INSERT INTO PERSONAVALUES ('109440300','JUANA','PAZ',50,'BARVA')

INSERT INTO PERSONAVALUES ('209440300','JULIO','MONGE',35,'ALAJUELA')

INSERT INTO PERSONAVALUES ('309440300','KAREN','VARGAS',20,'HEREDIA')

INSERT INTO PERSONAVALUES ('409440300','MARIO','MORA',18,'HEREDIA')

INSERT INTO PERSONAVALUES ('519440300','JULIA','DIAZ',20,'ALAJUELA')

Tabla Curso

INSERT INTO CURSOVALUES (001,'SQL SERVER 2008','20110605','20110821')

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 168/183

SQL Introductorio, SQL SERVER 2008  2011 

168

INSERT INTO CURSOVALUES (002,'INTERNET','20110606','20110806')

INSERT INTO CURSOVALUES (003,'ACCES','20110610','20110810')

INSERT INTO CURSOVALUES (004,'WORD 2007','20110615','20110815')

INSERT INTO CURSOVALUES (005,'EXCEL 2007','20110622','20110828')

Tabla HISTORIAL

INSERT INTO HISTORIAL (CEDULA,CODIGO,NOTA,SEDE)VALUES ('509440300',001,80,'HEREDIA')

INSERT INTO HISTORIAL (CEDULA,CODIGO,NOTA,SEDE)VALUES ('509440300',002,85,'HEREDIA')

INSERT INTO HISTORIAL (CEDULA,CODIGO,NOTA,SEDE)VALUES ('609440300',001,75,'SAN JOSE')

INSERT INTO HISTORIAL (CEDULA,CODIGO,NOTA,SEDE)VALUES ('609440300',005,75,'HEREDIA')

INSERT INTO HISTORIAL (CEDULA,CODIGO,NOTA,SEDE)

VALUES ('609440300',003,90,'SAN JOSE')

INSERT INTO HISTORIAL (CEDULA,CODIGO,NOTA,SEDE)VALUES ('709440300',003,90,'SAN JOSE')

INSERT INTO HISTORIAL (CEDULA,CODIGO,NOTA,SEDE)VALUES ('809440300',002,95,'SAN JOSE')

INSERT INTO HISTORIAL (CEDULA,CODIGO,NOTA,SEDE)VALUES ('809440300',001,80,'SAN JOSE')

INSERT INTO HISTORIAL (CEDULA,CODIGO,NOTA,SEDE)VALUES ('809440300',003,95,'SAN JOSE')

INSERT INTO HISTORIAL (CEDULA,CODIGO,NOTA,SEDE)VALUES ('909440300',002,95,'SAN JOSE')

INSERT INTO HISTORIAL (CEDULA,CODIGO,NOTA,SEDE)VALUES ('909440300',001,90,'HEREDIA')

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 169/183

SQL Introductorio, SQL SERVER 2008  2011 

169

INSERT INTO HISTORIAL (CEDULA,CODIGO,NOTA,SEDE)VALUES ('909440300',005,90,'ALAJUELA')

INSERT INTO HISTORIAL (CEDULA,CODIGO,NOTA,SEDE)VALUES ('109440300',005,90,'ALAJUELA')

INSERT INTO HISTORIAL (CEDULA,CODIGO,NOTA,SEDE)VALUES ('109440300',003,90,'HEREDIA')

INSERT INTO HISTORIAL (CEDULA,CODIGO,NOTA,SEDE)VALUES ('109440300',004,80,'SAN JOSE')

INSERT INTO HISTORIAL (CEDULA,CODIGO,NOTA,SEDE)VALUES ('309440300',004,75,'SAN JOSE')

8. Muestre todas las personas que tengan más de 30 años

SELECT * FROM PERSONAWHERE EDAD > 30

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 170/183

SQL Introductorio, SQL SERVER 2008  2011 

170

 Anexo III Solución Práctica 3

Muestre todas las personas que tengan una M en el nombre y vivan en HEREDIA.

SELECT * FROM PERSONAWHERE NOMBRE LIKE '%M%'AND DIRECCION = 'HEREDIA'

Muestre la cantidad de cursos con los que cuenta el instituto actualmente.

SELECT COUNT(CODIGO)FROM CURSO

Muestre la media de las edades de todas las personas y nombre a la columna del resultadoMEDIA_EDAD.

SELECT AVG(EDAD)AS MEDIA_EDADFROM PERSONA

Muestre las personas que tienen entre 18 y 30 años de edad

SELECT * FROM PERSONAWHERE EDAD BETWEEN 18 AND 30

Muestre los cursos 001,002 y 003.

SELECT * FROM CURSO

WHERE CODIGO IN (001,002,003)

Muestre el promedio de las notas de la sede de Alajuela, nombre a la columna resultanteNOTA_PROMEDIO.

SELECT AVG(NOTA)AS NOTA_PROMEDIO FROM HISTORIALWHERE SEDE ='ALAJUELA'

Actualice la fecha final de los cursos WORD 2007 y EXCEL 2007, con la fecha del sistema.

UPDATE CURSOSET FECHA_FIN = GETDATE()

WHERE CODIGO IN(4,5)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 171/183

SQL Introductorio, SQL SERVER 2008  2011 

171

 Anexo IV Solución Práctica 4

1.  Modificar la dirección de todas aquellas personas que viven en PAVAS y actualizarlas conSAN JOSE.

UPDATE PERSONASET DIRECCION = 'SAN JOSE'WHERE DIRECCION = 'PAVAS'

2.  Actualice la fecha de inicio para el curso con código 2 a 06/06/2011 y la fecha fin para estemismo curso en 21/07/2011

UPDATE CURSOSET FECHA_INICIO = '20110606', FECHA_FIN='20110721'WHERE CODIGO =2

3.  Aumente en 5 todas aquellas notas que sean menores de 80 y mayores o iguales a 70

UPDATE HISTORIALSET NOTA = NOTA + 5WHERE NOTA >= 70AND NOTA <80

4.  Se debe eliminar del historial al estudiante con cédula 779440300 , en el curso 2

DELETE FROM HISTORIALWHERE CEDULA ='779440300'

AND CODIGO = 2

5.  Agregar la siguiente información a las tablas PERSONA e HISTORIAL según corresponda

Tabla PERSONA

Cédula: 78880300Nombre: JOSEApellido: ARROLLOEdad :50Dirección: ALAJUELA

Tabla HISTORIALCEDULA: 78880300CODIGO: 002NOTA:0SEDE:SAN JOSE

INSERT INTO PERSONA

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 172/183

SQL Introductorio, SQL SERVER 2008  2011 

172

VALUES ('78880300','JOSE','ARROLLO',50,'ALAJUELA')

INSERT INTO HISTORIAL (CEDULA,CODIGO,NOTA,SEDE)VALUES ('78880300',002,00,'SAN JOSE')

6. 

Crear por medio de la cláusula select into la tabla MATRICULADOS, donde se guarde lainformación de la cedula, nombre apellido código de curso y nombre de curso en el cualestá matriculado cada persona.

SELECT A.CEDULA, A.NOMBRE, A.APELLIDO , B.CODIGO, C.DESCRIPCIONINTO MATRICULADOSFROM PERSONA A, HISTORIAL B, CURSO CWHERE A.CEDULA = B.CEDULAAND B.CODIGO = C.CODIGOGROUP BY A.CEDULA, A.NOMBRE, A.APELLIDO , B.CODIGO, C.DESCRIPCION

7.  Mostrar la cantidad de semanas que tarda el curso de semanas que tarda el curso de

Access.

SELECT DATEDIFF (WK,(SELECT FECHA_INICIO FROM CURSOWHERE CODIGO = 3),(SELECT FECHA_FIN FROM CURSOWHERE CODIGO = 3)).

8.  Muestre el día de la semana en el que inicia el curso de SQL.

SELECT DATEPART (DW,(SELECT FECHA_INICIO FROM CURSO WHERE CODIGO=1))

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 173/183

SQL Introductorio, SQL SERVER 2008  2011 

173

 Anexo V Solución Práctica 5

CREACIÓN DE LA BASE DE DATOS CHOFERES

USE MASTER

GOcreate database CHOFERESON( name = 'c:\cursosql1\CHOFERES_dat',filename = 'c:\cursosql1\CHOFERES.mdf',size = 4,maxsize =10,filegrowth = 1)GO

1.  Creación de las tablas de la base de datos CHOFERES

USE CHOFERES

---TABLA CHOFER

CREATE TABLE CHOFER(NUM_CHOFER INT,NOMBRE VARCHAR(30),DIRECCIÓN VARCHAR (50),FECHAJNICIO DATETIME,SALARIO FLOAT,CONSTRAINT PKNUMCHOFER PRIMARY KEY (NUM_CHOFER)

)----TABLA CAMION

CREATE TABLE CAMION(NUM_CAMION INT,MARCA VARCHAR(20),TIPO VARCHAR(20),AÑO INT,CAPACIDAD INT,CONSTRAINT PKNUMCAMION PRIMARY KEY (NUM_CAMION)

)

----TABLA ENVIO

CREATE TABLE ENVIO (NUM_CHOFER INT,NUM_CAMION INT,FECHA DATETIME,

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 174/183

SQL Introductorio, SQL SERVER 2008  2011 

174

PESO FLOAT,CONSTRAINT FK1NUMCHOFER FOREIGN KEY (NUM_CHOFER) REFERENCESCHOFER(NUM_CHOFER),CONSTRAINT FK2NUMCAMION FOREIGN KEY (NUM_CAMION) REFERENCESCAMION(NUM_CAMION)

)

2.  Insertar los registros en las tablas

INSERT INTO CHOFER VALUES (1,'Luis','San Jose','10/01/1996', 120000)INSERT INTO CHOFER VALUES (2,'Samuel','Heredia','10/25/1994', 155000)INSERT INTO CHOFER VALUES (3,'Jesus','San Jose','05/20/2001',110000)INSERT INTO CHOFER VALUES (4,'Marcos','Alajuela','02/15/2000',120200)INSERT INTO CHOFER VALUES (5,'Miguel','Heredia','06/30/1999',140000)

INSERT INTO CAMION VALUES (11 ,'HINO','CISTERNA',1995,10)INSERT INTO CAMION VALUES (12,'HIACE','PICK UP', 1998,4)INSERT INTO CAMION VALUES (13,'HINO','CISTERNA',2000,15)INSERT INTO CAMION VALUES (14, 'FORD','PICK UP', 1999,10)INSERT INTO CAMION VALUES (15,'HINO','CARGA', 1998,5)

3.  Insertar datos en la tablas ENVIO

INSERT INTO ENVIO VALUES (1,11 ,'01/01/1994',25000)

INSERT INTO ENVIO VALUES (1,12,'07/16/1995',25600)INSERT INTO ENVIO VALUES (2,13,'12/23/1996',75000)INSERT INTO ENVIO VALUES (2,14, '01/30/1997',25800)INSERT INTO ENVIO VALUES (3,15,'12/03/2000',15900)INSERT INTO ENVIO VALUES (3,11,'11/25/2001',45800)INSERT INTO ENVIO VALUES (4,12,'06/16/2000',23000)INSERT INTO ENVIO VALUES (4,13,'09/13/2001',45100)INSERT INTO ENVIO VALUES (5,14,'05/19/2002',63200)INSERT INTO ENVIO VALUES (5,11,'01/20/2002',44500)INSERT INTO ENVIO VALUES (5,13,'01/22/2002',44500)INSERT INTO ENVIO VALUES (5,12,'01/23/2002',44500)INSERT INTO ENVIO VALUES (5,15,'01/24/2002',44500)INSERT INTO ENVIO VALUES (4,12,'01/24/2002',44500)INSERT INTO ENVIO VALUES (4,13,'01/24/2002',44500)INSERT INTO ENVIO VALUES (4,11,'05/18/2002',23500)INSERT INTO ENVIO VALUES (4,15,'07/18/2002',25500)INSERT INTO ENVIO VALUES (4,14,'08/18/2002',20500)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 175/183

SQL Introductorio, SQL SERVER 2008  2011 

175

4.  Respuestas a las consultas de SQL

CONSULTASa.

 Dar una lista de los nombres de choferes que viven en San José y que tienen unsalario superior de ¢110000.

SELECT NOMBRE,DIRECCIÓN,SALARIO FROM CHOFERWHERE DIRECCIÓN = 'SAN JOSE'AND SALARIO > 110000

b.  Dar una lista de los camiones cisternas que hicieron un trayecto antes del 5 de octubre de2001

SELECT NUM_CAMION FROM CAMION

WHERE TIPO = 'CISTERNA'AND NUM_CAMION IN (SELECT NUM_CAMION FROM ENVIOWHERE FECHA <'20011015')

c.  Dar una lista de los choferes que ingresaron después del 1 de enero de 1999 yque hicieron un envío superior de 20 toneladas en un camión Hino en el año 2000 Y 2001

SELECT NUM_CHOFER,NOMBRE FROM CHOFER WHERE FECHAJNICIO > '19990101'AND NUM_CHOFER IN(SELECT NUM_CHOFER FROM ENVIO

WHERE PESO > 20AND FECHA BETWEEN'20000101' AND '20011231'AND NUM_CAMION IN (SELECT NUM_CAMION FROM CAMIONWHERE MARCA ='HINO'))

d.  Dar la lista de los camiones agrupados por marca y año

SELECT MARCA,AÑO FROM CAMIONORDER BY MARCA DESC,AÑO ASC

SELECT MARCA,AÑO FROM CAMIONGROUP BY MARCA,AÑO

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 176/183

SQL Introductorio, SQL SERVER 2008  2011 

176

e.  Dar una lista de los nombres de los choferes que han hecho envío con todos loscamiones de la compañía.

SELECT COUNT(DISTINCT(CONVERT(CHAR(2),A.NUM_CHOFER,2)+''+CONVERT(CHAR(2),A.NUM_CAMION,2))),B.NOMBREFROM ENVIO A, CHOFER BWHERE A.NUM_CHOFER = B.NUM_CHOFERGROUP BY B.NOMBREHAVING COUNT(DISTINCT(CONVERT(CHAR(2),A.NUM_CHOFER,2)+''+ CONVERT(CHAR(2),A.NUM_CAMION,2)))= 5

f.  Dar una lista del peso total de la mercadería transportada en 2002.

SELECT SUM(PESO) AS 'PESO TOTAL [Ton]' FROM ENVIOWHERE FECHA BETWEEN '20020101' AND '20021231'

g.  Crear una tabla de los nombres de los choferes que usaron un camión Hinodurante el año 2000, la nueva tabla debe tener el nombre del chofer, la marca y el tipo delcamión.

SELECT A.NOMBRE,C.MARCA,C.TIPOINTO NOMCHOFERFROM CHOFER A, ENVIO B,CAMION CWHERE A.NUM_CHOFER = B.NUM_CHOFERAND B. FECHA BETWEEN '20020101' AND '20021231'AND B.NUM_CAMION = C.NUM_CAMION

AND C.MARCA = 'HINO'GROUP BY A.NOMBRE,C.MARCA,C.TIPO

SELECT* FROM NOMCHOFER

h.  Crear una tabla de los camiones que son del año 1998 y que además realizaron unenvió durante 2001, la nueva tabla debe tener Marca, Tipo , fecha de envío y año .

SELECT A.MARCA,A.TIPO ,B.FECHA, A.AÑOINTO NOMCAMIONFROM CAMION A , ENVIO BWHERE A.AÑO = 1998AND A.NUM_CAMION =B. NUM_CAMIONAND B. FECHA BETWEEN '20020101' AND '20021231'GROUP BY A.MARCA,A.TIPO ,B.FECHA, A.AÑO

SELECT* FROM NOMCAMION

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 177/183

SQL Introductorio, SQL SERVER 2008  2011 

177

 Anexo VI Solución Práctica 6

Creación de la base de datos TURISMO

USE MASTER

GO

CREATE DATABASE TURISMO ON( NAME = 'c:\cursosql1\TURISMO_dat',

FILENAME = 'c:\cursosql1\TURISMO.mdf',SIZE = 4,

MAXSIZE=10,FILEGROWTH = 1)

GO

Creación de las tablas

Turista

CREATE TABLE TURISTA

(NUMERO_TURISTA INT NOT NULL,NOMBRE_TURISTA VARCHAR (30),APELLIDO_1 VARCHAR (30) NOT NULL,APELLIDO_2 VARCHAR(30) NULL,PAIS_TURISTA VARCHAR (20) NOT NULL,EDAD INT,CONSTRAINT PKTURISTA PRIMARY KEY (NUMERO_TURISTA))

Lugar

CREATE TABLE LUGAR(CODIGO_LUGAR INT NOT NULL,NOMBRE_LUGAR VARCHAR (30) NOT NULL,TIPO_LUGAR VARCHAR (20)NOT NULL,CONTINENTE VARCHAR (7) NOT NULL,CONSTRAINT PKLUGAR PRIMARY KEY (CODIGO_LUGAR))

Viaje

CREATE TABLE VIAJE(NUMERO_VIAJE INT NOT NULL,NUMERO_TURISTA INT NOT NULL,CODIGO_LUGAR INT NOT NULL,FECHA_SALIDA DATETIME NOT NULL,FECHA_LLEGADA DATETIME NOT NULL,

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 178/183

SQL Introductorio, SQL SERVER 2008  2011 

178

CIUDAD_SALIDA VARCHAR (20) NOT NULL,CONSTRAINT FKVIAJE1 FOREIGN KEY (NUMERO_TURISTA) REFERENCES TURISTA(NUMERO_TURISTA),CONSTRAINT FKVIAJE2 FOREIGN KEY (CODIGO_LUGAR) REFERENCES LUGAR(CODIGO_LUGAR))

1.  Adicionar una nueva columna en la tabla de VIAJE que se llama EstadíaALTER TABLE VIAJE ADD ESTADIA INT

2.  Suprimir una columna FECHA LLEGADA en la tabla VIAJE

ALTER TABLE VIAJE DROP COLUMN FECHA_LLEGADA

3.  Insertar 10 turistas en la tabla TURISTAS, crear constraint , si el apellido 2 no se llena ponerNO LO DIO y la edad del turista no puede ser menor de 5 años ni mayor a 99.

ALTER TABLE TURISTAADD CONSTRAINT APELLIDO_2 DEFAULT 'NO LO DIO' FOR APELLIDO_2

ALTER TABLE TURISTAADD CONSTRAINT EDAD CHECK (EDAD BETWEEN 5 AND 99 )

INSERT INTO TURISTA (NUMERO_TURISTA,NOMBRE_TURISTA,APELLIDO_1, PAIS_TURISTA,EDAD)VALUES (1,'Jorge','Lopez', 'Grecia',35)

INSERT INTO TURISTA (NUMERO_TURISTA,NOMBRE_TURISTA,APELLIDO_1,PAIS_TURISTA,EDAD)

VALUES (2,'AIicia','Arias', 'ltalia',5)

INSERT INTO TURISTA(NUMERO_TURISTA,NOMBRE_TURISTA,APELLIDO_1,APELLIDO_2,PAIS_TURISTA,EDAD)VALUES (3,'Douglas','All','Black','EE.UU',20)

INSERT INTO TURISTA(NUMERO_TURISTA,NOMBRE_TURISTA,APELLIDO_1,APELLIDO_2,PAIS_TURISTA,EDAD)VALUES (4,'Felipe','Ruiz','Ruiz','Guatemala',18)

INSERT INTO TURISTA (NUMERO_TURISTA,NOMBRE_TURISTA,APELLIDO_1, PAIS_TURISTA,EDAD)VALUES (5,'Young','Chang', 'Japón',80)

INSERT INTO TURISTA (NUMERO_TURISTA,NOMBRE_TURISTA,APELLIDO_1, PAIS_TURISTA,EDAD)VALUES (6,'Pablo','Ruiz','Bolivia',99)

INSERT INTO TURISTA(NUMERO_TURISTA,NOMBRE_TURISTA,APELLIDO_1,APELLIDO_2,PAIS_TURISTA,EDAD)VALUES (7,'Ying','Chang', 'Yong','China',45)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 179/183

SQL Introductorio, SQL SERVER 2008  2011 

179

INSERT INTO TURISTA (NUMERO_TURISTA,NOMBRE_TURISTA,APELLIDO_1, PAIS_TURISTA,EDAD)VALUES(8,'Martha','Nuñez','Noruega',25)

INSERT INTO TURISTA(NUMERO_TURISTA,NOMBRE_TURISTA,APELLIDO_1,APELLIDO_2,PAIS_TURISTA,EDAD)VALUES (9,'Maria','Azuri','Nikita','Congo',15)

INSERT INTO TURISTA(NUMERO_TURISTA,NOMBRE_TURISTA,APELLIDO_1,APELLIDO_2,PAIS_TURISTA,EDAD)VALUES (10,'Juan','Arrollo','Caiman','India',10)

SELECT * FROM TURISTA

4.  Insertar 10 registro en la tabla LUGAR, asignando códigos de 10 en 10 (usar todos loscontinentes: América, Asia, África, Europa, Oceanía).

INSERT INTO LUGAR VALUES (10,'CATARATASNIAGARA', 'CATARATA','AMERICA')

INSERT INTO LUGAR VALUES (20,'COLISEO','Histórico','EUROPA')

INSERT INTO LUGAR VALUES (30,'PIRAMIDES','Histórico','AFRICA')

INSERT INTO LUGAR VALUES (40,'MURALLA CHINA','Histórico','ASIA')

INSERT INTO LUGAR VALUES (50,'MONTE FUJI','VOLCAN','ASIA')

INSERT INTO LUGAR VALUES (60,'GALAPAGOS','ISLA','AMERICA')

INSERT INTO LUGAR VALUES (70,'DESIERO SAHARA','DESIERTO','AFRICA')

INSERT INTO LUGAR VALUES (80,'TORRE EIFFEL','ARQUITECTURA','EUROPA')

INSERT INTO LUGAR VALUES (90,'LA OPERA','ARQUITECTURA','OCEANIA')

INSERT INTO LUGAR VALUES (100,'BOSQUE SECO','BOSQUE','OCEANIA')

SELECT * FROM LUGAR

5.  Usar la instrucción para actualizar, de tal forma que se deben incrementar los códigos delugar según el continente de la siguiente forma:

UPDATE LUGAR SET CODIGO_LUGAR=CODIGO_LUGAR+100 WHERE CONTINENTE = 'AMERICA'

UPDATE LUGAR SET CODIGO_LUGAR=CODIGO_LUGAR+200 WHERE CONTINENTE = 'AFRICA'

UPDATE LUGAR SET CODIGO_LUGAR=CODIGO_LUGAR+300 WHERE CONTINENTE = 'ASIA'

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 180/183

SQL Introductorio, SQL SERVER 2008  2011 

180

UPDATE LUGAR SET CODIGO_LUGAR=CODIGO_LUGAR+400 WHERE CONTINENTE = 'EUROPA'

UPDATE LUGAR SET CODIGO_LUGAR=CODIGO_LUGAR+500 WHERE CONTINENTE = 'OCEANIA'

SELECT * FROM LUGAR

6.  Eliminar los registros de la tabla cuyo continente es Oceanía

DELETE FROM LUGAR WHERE CONTINENTE = 'OCEANIA'

7.  Dar la lista de los nombre de todos los turistas.

SELECT NOMBRE_TURISTA FROM TURISTA

8.  Dar la lista de los diferentes tipos de lugar y de los continentes en donde se encuentran.

SELECT TIPO_LUGAR, CONTINENTE

FROM LUGARORDER BY CONTINENTE

9.  Dar la lista de los turistas que son costarricenses, canadienses, panameños o jamaiquinos.

SELECT NOMBRE_TURISTAFROM TURISTAWHERE PAIS_TURISTA = 'Costa Rica'OR PAIS_TURISTA = 'Canada'OR PAIS_TURISTA = 'Panamá'OR PAIS_TURISTA = 'Jamaica'

10. Dar el código de lugar más grande.

SELECT MAX(CODIGO_LUGAR) AS 'MAYOR CÓDIGO DE LUGAR'FROM LUGAR

11. Dar el número de sitios diferentes que pueden visitarse.

SELECT COUNT(DISTINCT CODIGO_LUGAR) AS 'TOTAL_LUGARES'FROM LUGAR

12. Para cada continente, dar una lista por continente y el código de lugares localizados en esecontinente.

SELECT CONTINENTE, COUNT(CONTINENTE) AS' TOTAL LUGARES'FROM LUGAR GROUP BY CONTINENTE

13. Dar la lista de aquellos tipos de lugar de los cuales existen al menos 3 del mismo tipo.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 181/183

SQL Introductorio, SQL SERVER 2008  2011 

181

SELECT TIPO_LUGAR, COUNT(TIPO_LUGAR) AS 'CANTIDAD DE LUGARES'FROM LUGAR GROUP BY TIPO_LUGAR HAVING COUNT (CODIGO_LUGAR) >= 3

14. Dar la lista de los códigos de lugar y sus nombres en orden descendente.

SELECT CODIGO_LUGAR, NOMBRE_LUGARFROM LUGARORDER BY NOMBRE_LUGAR DESC

15. Adicionar como llave primaria los campos NUMERO_VIAJE y NUMERO_TURISTA a la tablaVIAJE.

ALTER TABLE dbo.VIAJEADD CONSTRAINT PKVIAJE PRIMARY KEY (NUMERO_VIAJE,NUMERO_TURISTA)

16.  Inserte 4 registros en la tabla VIAJE utilizando como referencia la información de las tablas

TURISTA y LUGAR.

INSERT INTO VIAJE VALUES (1, 10,110,'20110528','INDIA',15)INSERT INTO VIAJE VALUES (2,3,160,'20110601','NEW YORK',20)INSERT INTO VIAJE VALUES (3,6,420,'20110520','BOLIVIA',30)INSERT INTO VIAJE VALUES (4,10,230,'20110604','INDIA',25)

17. Muestre los turistas que se encuentran de viaje y los que no están de viaje, utilice join yselect anidado respectivamente.

Los que están viajando

SELECT B.NUMERO_TURISTA, A.NOMBRE_TURISTAFROM TURISTA ARIGHT JOIN VIAJE BON A.NUMERO_TURISTA = B.NUMERO_TURISTAWHERE B.NUMERO_TURISTA IS NOT NULLGROUP BY B.NUMERO_TURISTA, A.NOMBRE_TURISTA

Los que no están viajando

SELECT A.NUMERO_TURISTA, A.NOMBRE_TURISTAFROM TURISTA AWHERE NOT EXISTS (SELECT * FROM VIAJE BWHERE A.NUMERO_TURISTA = B.NUMERO_TURISTA)

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 182/183

SQL Introductorio, SQL SERVER 2008  2011 

182

BibliografíaLópez, César Perez. Domine Microsoft SQL Server 2008. mayo 2010.Paul Nielsen, Mike White y Uttam Parui. Microsoft SQL Server 2008 Bible. 2009.Perez, Alfons González. SQL Server Programación y administración. 1999.Sharon Bjeletich y Greg Mable, ET Al. Microsoft SQL Server 7.0 Al decubierto. 1999.

5/17/2018 Manual SQL Server 2008 Intro Duc to Rio - slidepdf.com

http://slidepdf.com/reader/full/manual-sql-server-2008-intro-duc-to-rio 183/183

SQL Introductorio, SQL SERVER 2008  2011