SENTENCIAS Y CONSULTAS EN SQL SERVER

Documentos relacionados
CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

Procedimientos para agrupar y resumir datos

El lenguaje SQL es un lenguaje estándar para el acceso y

CONSULTAS DE RESUMEN SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Unidad III: Lenguaje de manipulación de datos (DML) 3.1 Inserción, eliminación y modificación de registros

CONSULTAS BASICAS EN SQL SERVER

5- Uso de sentencias avanzadas

LAS SUBCONSULTAS SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

1. DML. Las subconsultas

A.1. Definiciones de datos en SQL

T12 Vistas y tablas temporales

SQL (Structured Query Language)

MANUAL BÁSICO DEL LENGUAJE SQL

UNIDAD 1.- PARTE 1 MANIPULACIÓN AVANZADA DE DATOS CON SQL. BASES DE DATOS PARA APLICACIONES. Xochitl Clemente Parra Armando Méndez Morales

Bases de Datos Relacionales

Trabajos de Ampliación. Bases de datos NoSQL.

UNIVERSIDAD AUTONOMA DE LOS ANDES UNIANDES LENGUAJE SQL. SQL es un estándar un lenguaje estructurado para consultas

Primeramente estudiaremos la forma básica de la sentencia SELECT, que esta formado por:

Tema: Uso de sentencias SQL

LENGUAJE DE CONSULTA ESTRUCTURADO - SQL CONTENIDO

4- Uso de sentencias para el envió y extracción de datos

SQL Server FEMEPA SQL Server 2000

TALLER #5 ACCESS CONSULTAS. objeto Consulta en la vista lateral izquierda de la ventana Base de datos. Aparece esta ventana.

Curso SQL Nivel Avanzado 1. Miguel Jurado García

Consultas con combinaciones

COMANDOS DE SQL, OPERADORES, CLAUSULAS Y CONSULTAS SIMPLES DE SELECCIÓN

Sub consultas avanzadas

LAS CONSULTAS ACCESS Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

LABORATORIO Nº 3 PRÁCTICA DE FUNCIONES EN MICROSOFT EXCEL

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

TEMA 10. INTRODUCCCIÓN A SQL. CONSULTAS BASADAS EN UNA TABLA

Gobierno del Estado de México

Dependiendo de las tareas, podemos clasificar las sentencias SQL en dos tipos:

PHP Perfect SQL v1.0 (SQL perfectas en PHP)

Programa diseñado y creado por Art-Tronic Promotora Audiovisual, S.L.

ESPOCH ESCUELA DE MEDICINA HERNANDEZ MAYRA FORMULAS Y DUNCIONES BASICAS ESPOCH

Bases de datos relacionales y el modelo entidad-relación

La ventana de Microsoft Excel

El lenguaje de manipulación de datos (DML) es una parte fundamental de SQL.

UNIDAD 1. LOS NÚMEROS ENTEROS.

Tipo de Dato TRANSACT SQL

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

Aviso Legal El presente libro electrónico se distribuye bajo Attribution-NonCommercial- NoDerivs 3.0 Unported

BASE DE DATOS QUÉ ES UNA BASE DE DATOS?

Sql Basico. Seminar Introduction

6- Combinación de tablas

INSTITUCIÓN EDUCATIVA GABRIEL GARCIA MÁRQUEZ BASE DE DATOS. DESARROLLO DE SOFTWARE Página 1 de 28 SQL SQL

Manual de ACCESS Intermedio

Tutorial de SQL - El comando SELECT

6 - Recuperar algunos registros (where)

Boletín de Problemas de la Asignatura II18 Bases de Datos. Ingeniería Informática Universitat Jaume I

Base de datos Lenguaje SQL

SQL. Lenguaje de Consulta Estructurado. Curso básico de SQL (Leire Urcola Carrera)

Tecnología de la Información y la Comunicación. Base de datos. Consultas

UNIVERSIDAD DEL ISTMO CAMPUS IXTEPEC LIC. INFORMATICA GRUPO 508 PROCEDIMIENTOS ALMACENADOS EN SQL SERVER 2000

Tema: PROCEDIMIENTOS ALMACENADOS.

Vistas en postgresql

Base de datos I Facultad de Ingeniería. Escuela de computación.

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

3. Presionar en el botón Buscar para obtener el siguiente cuadro:

USANDO SQL. EN BASE DE Ooo.

Charla N 6: Utilidades de Consulta de datos.

Lenguaje de Consulta Estructurado S Q. Lenguaje de Consulta Estructurado. Wael Najjar /

Base de datos en Excel

CONSULTAS MULTITABLAS SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Tema: USO DE COMBINACIONES EXTERNAS.

Empresarial y Financiero NIVEL AVANZADO

TEMA 20: CONCEPTOS BÁSICOS DE SQL

Tema 4. Manipulación de datos con SQL

BASES DE DATOS EN VISUAL BASIC ACCESS + SQL

Práctica A: Procedimientos para agrupar y resumir datos

Restricciones de Integridad

Curso Excel Básico - Intermedio

2- Creación de tablas y manejos de datos.

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

SQL básico. SQL básico 1. Contenido

Restricciones (constraints) FOREIGN KEY

Informática I Notas del curso

Base de datos relacional

Ahora comencemos!... Las operaciones matemáticas fundamentales pueden realizarse de forma rápida y sencilla con Miicrosofftt Excell.

PS.Vending Almacén Pocket PC

MEJORAR EL RENDIMIENTO DEL EXPLORADOR DE INTERNET

CONSULTAS SIMPLES SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

- Bases de Datos - - Diseño Físico - Luis D. García

Sintaxis: CURSOR nombre_cursor[(param1 [IN] tipo1,... )] IS consulta ;

LENGUAJE SQL. En Mysql se utiliza un subconjunto de SQL (update, insert into, delete, select, truncate,etc).

TABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse.

select nombre from profesores where categoria='aso6';

Modulo 1 El lenguaje Java

Bases de datos en Excel

BREVE INTRODUCCIÓN AL SQL Aplicación al Programa Escuela Última actualización: 17/10/2000

Si queremos modificar la contraseña de sys, una vez que accedamos al sistema como sys, escribiremos la sentencia:

MANUAL DE AYUDA MODULO TALLAS Y COLORES

Acceso a bases de datos MySQL con PHP

SISTEMAS DE NUMERACIÓN. Sistema decimal

INTRODUCCIÓN AL SQL. TRANSACT-SQL SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Operación Microsoft Access 97

3ra. Parte. Bases de Datos Relacionales

Es un lenguaje de consulta estructurado establecido claramente como lenguaje de alto nivel estándar para sistemas de base de datos relacionales.

Manual Consultas Web - PC Sistel Ver 486R4+ - USUARIO JEFATURA

Transcripción:

SENTENCIAS Y CONSULTAS EN SQL SERVER En esta sección nos preocuparemos por conocer, las consultas en SQL que describiremos aquí. Para eso haremos un pequeño de las palabras claves que se utilizan en SQL, tales como son TABLAS, CAMPOS, FILAS, esto se muestra en la siguiente imagen: TABLA: es el conjunto ordenado de campos (columnas) y filas. Campo 1 Campo 2 Campo 3 Campo 4 Fila 1 Fila 2 Fila 3 Las palabras claves SQL enlistadas en la figura adjunta, se describen en las siguientes subsecciones, cabe mencionar que esta edición es solo un trabajo de introducción básica, es por esta razón que el contexto de consultas SQL completas, escapa de esta edición. Palabra Clave SQL SELECT FROM WHERE GROUP BY ORDER BY INSERT UPDATE DELETE Descripción Recupera datos de una o más tablas. Las tablas involucradas en la consulta. Se requiere para cada SELECT. Los Criterios de selección que determinan cuales filas se van a recuperar, eliminar o actualizar. Criterio para agrupar filas. Criterio para ordenar filas. Insertar filas en una tabla especificada. Actualizar filas en una tabla especifica. Eliminar filas de una tabla especifica. Observación: Por lo general se acostumbra a escribir estas palabras claves en mayúsculas, tratando de diferenciarlos con los argumentos de una tabla. SELECT <campos> FROM <tablas> WHERE <condicion> GROUP BY <campos> La estructura presentada, es la que se utiliza SQL posee de una jerarquía entre sus palabras claves, y una manera general la presentamos para conocimiento del lector. 1

Para efectos de ejemplos en esta oportunidad haremos uso de la siguiente Base de Datos, BDNOTAS, en el cual esta contenida las siguientes tablas y columnas: ALUMNO IDALUMNO : Código de alumno APEALUMNO : Apellido del Alumno NOMALUMNO : Nombre del Alumno IDESP : Código de especialidad PROCE : Procedencia IDALUMNO IDESP CURSO IDCURSO : Código del curso. NOMCURSO : Nombre del curso. CREDITO : Créditos del curso. IDCURSO ESPECIALIDAD IDESP : Código de especialidad NOMESP : Nombre de la especialidad. COSTO : Costo de la especialidad. NOTAS IDALUMNO : Código de alumno IDCURSO : Código del curso. EXAPARCIAL : Examen Parcial. EXAFINAL : Examen final PAGOS IDALUMNO : Código de alumno CICLO : Ciclo NCUOTA : Numero de cuota. MONTO : monto a pagar FECHA : fecha del pago 2

CONSULTA BÁSICA SELECT.- lo que hace una consulta SELECT, es obtener datos de una Tabla determinada, en las que se especifican filas y columnas. La sintaxis básica de una consulta SELECT es: SELECT * FROM nombredetabla En la consulta anterior, el asterisco (*) indica que deben recuperarse todas las columnas de la tabla nombredetabla. Por ejemplo, deseamos recuperar todos los datos de la tabla Alumno, la sintaxis seria la siguiente: SELECT * FROM Alumno Ahora para recuperar solo ciertas columnas de una tabla, debemos de reemplazar el asterisco (*), por los nombres de las columnas, separando cada columna con una coma. Por ejemplo, para recuperar solamente las columnas IdAlumno, ApeAlumno, NomAlumno, para todas las filas de la tabla Alumno. Utilizamos la siguiente consulta: SELECT IdAlumno, ApeAlumno, NomAlumno FROM Alumno El resultado de esta consulta se aprecia en la siguiente figura, donde apreciamos las columnas ó campos que seleccionamos en el ejemplo, listado desde la fila 1 hasta la 7: Observación. Se debe evitar utilizar el asterisco (*), si se desea filtrar solo campos necesarios. Al especificar los nombres de columnas que se van a seleccionar, se garantiza que las columnas se devuelvan, siempre en el orden especificado y también se evita que se devuelven columnas innecesarias, incluso si cambia el orden real. 3

LA CLÁUSULA WHERE.- en la mayoría de casos es necesario localizar, en una base de datos, filas que cumplan con ciertos criterios de selección. SQL utiliza la cláusula WHERE en una consulta SELECT para especificar los criterios de selección para la consulta. La forma básica de una consulta SELECT con criterios ó condición de selección es: SELECT nombredecolumnas FROM nombredetabla WHERE criterios Por ejemplo, para seleccionar las columnas IdAlumno, monto de la tabla Pagos, para las cuales el monto sea mayor que 340, utilizamos la siguiente consulta: SELECT IdAlumno, Monto FROM Pagos WHERE monto>340 Los criterios de la cláusula WHERE pueden contener lo siguientes operadores de comparación: =, >, <, >=, <=,!=, <>, IN, NOT IN, BETWEEN, NOT BETWEEN, LIKE. Además, se puede construir condiciones múltiples usando los operadores lógicos AND, OR y NOT. Se puede utilizar paréntesis si se desea forzar algún orden de evaluación. El operador LIKE, se utiliza para hacer comparaciones de cadenas, relacionando patrones con los caracteres comodines porcentaje (%) y guión abajo (_). El relacionar patrones permite a SQL buscar cadenas que concuerden con un patrón dado. Un patrón que contenga un carácter de porcentaje (%) busca cadenas que tengan cero o más caracteres en la posición del carácter porcentaje en el patrón. Debemos de tener presente que en SQL un carácter y cadena van dentro de apostrofes char. Por ejemplo deseamos, realizar la consulta que me permita conocer a todos los alumnos cuyo nombre empiece con la letra A: SELECT NomAlumno FROM Alumno WHERE NomAlumno LIKE 'A%' El resultado de la siguiente consulta seria: 4

Haremos un ejemplo más, se necesita filtrar a los alumnos cuyo nombre, apellido empiece con A y Q, respectivamente: SELECT NomAlumno, ApeAlumno FROM Alumno WHERE ((NomAlumno LIKE 'A%') AND (ApeAlumno LIKE 'Q%')) El resultado de la siguiente consulta seria: El signo de % y el operador LIKE de la cláusula WHERE indican que puede aparecer cualquier número de carácter después de la letra A y Q en las columnas NomAlumno, ApeAlumno, respectivamente. Cabe observar que la cadena del operador esta encerrada entre caracteres de comillas sencillas ó apostrofes. Así mismo en el ejemplo anterior se utilizo el operador AND, para realizar la comparación lógica de nombre y apellido, hemos utilizado los paréntesis para darle un orden específico a nuestra condición. Recuerda: hemos utilizado la palabra LIKE para comparar cadenas, en esta oportunidad presentamos ejemplos en los cuales deseamos que estas cadenas empiecen con una letra determinada. En el caso de que una letra termine en una determinada letra, la sintaxis del uso del LIKE seria similar a esta: SELECT <Columnas> FROM <Tablas> WHERE Columna1 LIKE '%A' Un guión bajo (_) en la cadena del patrón indica un carácter comodín individual en esa posición, por ejemplo, la siguiente consulta localiza las filas de todos los alumnos cuyo apellido paterno empiece con cualquier carácter (lo que se especifica con _), seguido por la letra i, seguida por cualquier numero de caracteres adicionales (lo que se especifica con %): SELECT ApeAlumno FROM Alumno WHERE ApeAlumno LIKE '_i%' El resultado de la consulta seria: 5

LA CLÁUSULA ORDER BY.- El resultado de una consulta puede ordenarse en forma ascendente o descendente, mediante el uso de la cláusula ODER BY opcional. La forma básica de una instrucción SELECT con una cláusula ORDER BY es: SELECT nombredecolumnas FROM Tablas ORDER BY columna1 ASC SELECT nombredecolumnas FROM Tablas ORDER BY columna1 DESC En donde ASC especifica el orden ascendente (de menor a mayor), DESC especifica el orden descendente (de mayor a menor) y columna1 especifica la columna en la cual se basa el ordenamiento. Por ejemplo, para obtener la lista de cursos en orden ascendente por nombre de curso, utilice la siguiente sintaxis: SELECT nomcurso FROM Curso ORDER BY nomcurso ASC El resultado seria: Observe que el orden predeterminado es ascendente (pruebe la sintaxis anterior sin la palabra ASC), por lo que ASC es opcional. Para obtener la misma lista de cursos en orden descendente por nombre de curso, utilice la siguiente sintaxis: SELECT nomcurso FROM Curso ORDER BY nomcurso DESC El resultado seria: 6

Otro uso que se le atribuye a esta cláusula ORDER BY es el de poder ordenar por una columna especifica, cuando se posee varias columnas seleccionadas. Por ejemplo deseamos obtener los campos IdAlumno, ApeAlumno, NomAlumno el cual deben de estar ordenados por apellidos, utilice la siguiente sintaxis: SELECT IdAlumno, ApeAlumno, NomAlumno FROM Alumno ORDER BY 2 El resultado se esta sintaxis seria: Observemos que después de la cláusula ORDER BY, hemos colocado el numero 2, esto quiere decir que se ordenará por la columna numero 2 y de la sintaxis anterior la columna 2 seria Apealumno. Es por eso que el Apellido esta ordenado de forma como se mostró. También en vez de colocar el numero 2 se puede poner el nombre del campo especifico al cual se desea ordenar tal como se vio en la pagina anterior. PRESENTACIÓN DE LOS n PRIMERO VALORES.- para hacer la presentación de los n primero valores, utilizamos la palabra clave TOP para presentar sólo las n primeras filas o el n por ciento de un conjunto de resultados. Aunque la palabra clave TOP n no es un estándar ANSI, resulta útil, por ejemplo, para presentar los productos más vendidos de una compañía. Cuando utilice la palabra clave TOP n o TOP n PERCENT, considere los hechos e instrucciones siguientes: Especifique el intervalo de valores en la cláusula ORDER BY. Si no utiliza una cláusula ORDER BY, Microsoft SQL Server 2000 devuelve las filas que cumplen la cláusula WHERE sin ningún orden concreto. 7

Utilice un entero sin signo a continuación de la palabra clave TOP. Si la palabra clave TOP n PERCENT produce un número no entero de filas, SQL Server redondea la cantidad no entera al siguiente valor entero. Por ejemplo se desea conocer cuales son las 5 primeras especialidades de la tabla Especialidad, utilice la siguiente sintaxis: SELECT TOP 5 idesp, nomesp FROM Especialidad El resultado seria: USO DE FUNCIONES DE AGREGADO.- Las funciones que calculan promedios y sumas se llaman funciones de agregado. Cuando se ejecuta una función de agregado, SQL Server resume los valores de toda una tabla o de grupos de columnas de una tabla, y produce un valor por cada conjunto de filas para las columnas especificadas: Funciones de agregado AVG COUNT COUNT(*) MAX MIN SUM Descripción Promedio de valores en una expresión numérica Números de valores en una expresión Numero de filas seleccionadas Valor mas alto en la expresión Valor mas bajo en la expresión Valores totales en una expresión numérica Las funciones de agregado se pueden utilizar en la instrucción SELECT o en combinación con la cláusula GROUP BY. 8

Con la excepción de la función COUNT(*), todas las funciones de agregado devuelven NULL si ninguna fila cumple la cláusula WHERE. La función COUNT(*) devuelve el valor cero si ninguna fila cumple la cláusula WHERE. Función Tipo de datos COUNT MIN y MAX SUM y AVG COUNT es la única función de agregado que se puede utilizar en las columnas de los tipos de datos text, ntext o image. En las columnas de los tipos de datos bit no se pueden utilizar las funciones MIN y MAX. Las funciones de agregado SUM y AVG solo se pueden utilizar en las columnas con tipos de datos int, smallint, tinyint, dcimal, numeric, flota, real, nomey, y samallmoney. Cuando se utiliza la función SUM o AVG, SQL Server trata los tipos de datos smallint o tinyint como un valor de tipo de datos int en el conjunto de resultados. Por ejemplo deseamos conocer el promedio de los exámenes finales de todos los cursos, utilice la siguiente sintaxis: SELECT AVG(exafinal)AS Promedio FROM notas Observemos la palabra AS Promedio, esto se utiliza solo para asignarle un nombre a la Columna, veremos en la imagen siguiente que esta palabra aparece como titulo principal del resultado: Veamos que ocurre si le quitamos la palabra AS Promedio, de la sintaxis anterior, entonces nuestra nueva sintaxis seria: SELECT AVG(exafinal) FROM notas 9

Observemos ahora el resultado final sigue siendo el mismo, mas no el de el nombre de la columna, ya que la palabra AS sirvió para colocarle un nombre a la columna. Como segundo ejemplo, se solicita saber cuantos montos existen en la tabla Pagos, esto se hace con la siguiente sintaxis: SELECT COUNT(monto) AS [NUMEROS DE MONTO] FROM Pagos El resultado seria: Ahora observemos la palabra AS [NUMEROS DE MONTO], por lo dicho en lo anterior sabemos que es un nombre de columna, ahora en particular vemos que esta palabra [NUMEROS DE MONTO] se encuentra entre corchetes [ ], esto lo hago por que mi titulo de columna posee espacios en blanco, si no ponemos estos corchetes SQL nos enviara un mensaje de error. Ahora que pasa si se deseara seleccionar campos y funciones de agregado dentro del SELECT, de una tabla especifica, SQL nos pedirá que agrupemos estos parámetros; es por eso que necesitamos saber el tema de la Cláusula GROUP BY, que se presenta a continuación. LA CLÁUSULA GROUP BY.- Utilice la cláusula GROUP BY en columnas o expresiones para organizar filas en grupos y para resumir dichos grupos. Por ejemplo, utilice la cláusula GROUP BY para determinar la cantidad de cada producto pedida en todos los pedidos. Cuando utilice la cláusula GROUP BY, considere los hechos e instrucciones siguientes: SQL Server produce una columna de valores por cada grupo definido. SQL Server sólo devuelve filas por cada grupo especificado; no devuelve información de detalle. 10

Todas las columnas que se especifican en la cláusula GROUP BY tienen que estar incluidas en la lista de selección. Si incluye una cláusula WHERE, SQL Server sólo agrupa las filas que cumplen las condiciones de la cláusula WHERE. No utilice la cláusula GROUP BY en columnas que contengan varios valores nulos, porque los valores nulos se procesan como otro grupo. Utilice la palabra clave ALL con la cláusula GROUP BY para presentar todas las filas que tengan valores nulos en las columnas de agregado, independientemente de si las filas cumplen la condición de la cláusula WHERE. Por ejemplo deseamos conocer, cuales son las nota Máxima del Examen Parcial y la nota Minima del Examen Final por cada curso. Utilizamos la siguiente sintaxis: SELECT Idcurso, MAX(exaparcial)AS [Nota Maxima EXP], MIN(exafinal)AS [Nota Minima EXF] FROM Notas GROUP BY idcurso El resultado seria: CONSULTAS CON MÁS DE UNA TABLA.- En La página 2 de este documento, presenté la estructura de la base de datos que estamos utilizando para cada ejemplo, en donde podemos ver las relaciones existenciales con cada una de las tablas. Para realizar consultas con mas de una tabla es necesario precisar como estás tablas se relacionan, por ejemplo, la tablas Curso y Notas se relaciona por el Idcurso, otro ejemplo las tablas Alumno, Curso y Notas, se relacionan por el IdAlumno y por el Idcurso, generalizando estas 11

proposiciones llegamos a la conclusión de que para un numero n de tablas existe n-1 relaciones. Es necesario trabajar con Alias, cuando se emplean múltiples tablas, para evitar ambigüedades, es decir ponerle una identificación a la tabla, para que en los campos en los cuales se generan la unión con otras tablas, SQL reconozca a que tabla pertenece el campo. Por ejemplo, queremos seleccionar los siguientes campos: Idalumno, Apealumno, Idesp, nomesp de las tablas Alumno y Especialidad. Lo primero que se nos ocurriría es esto: SELECT Idalumno, Apealumno, Idesp, nomesp FROM Alumno, Especialidad Al ejecutar esta aplicación SQL nos responderá que Idesp es ambiguo, tal como se muestra: Esto aparece por que en realidad SQL no sabe de que tabla jalar este campo Idesp ya que esté aparece en dos tablas que son Alumno, Especialidad, entonces necesitamos indicarle a SQL, a quien pertenece este campo. Es por esa razón que haremos uso de los Alias (identificadores), el uso de estos alias es como sigue: SELECT Idalumno, Apealumno, b.idesp, nomesp FROM Alumno AS a, Especialidad AS b Observamos El nuevo cambio en la tablas hemos colocado Alumno AS a, Especialidad AS b, y en el campo b.idesp, la lógica es la siguiente, para b.idesp decimos que Idesp, pertenece a la tabla Especialidad que ya que tiene como alias la letra b. Las letras a y b, son cualquier letras para poder identificar, a una tabla obviamente puede hacerse el uso de otras letras. Debemos recordar que los identificadores solamente se colocan en los campos que son ambiguos, es decir en el campo donde excita una relación o más entre las tablas. Es por eso que no es necesario Identificar a Idalumno, ya que este campo no se relaciona en ningún momento con la tabla Especialidad. 12

El resultado de esta sintaxis es la siguiente: Como vemos en esta ocasión SQL nos arroja el siguiente resultado, pero observemos que todavía nos falta algo mas, esto es necesitamos poner las relaciones que existen entre estas dos tablas es decir necesitamos establecer esta relación: a.idesp=b.idesp, lo que hacemos aquí es decirle que el Idesp que tiene la tabla a sea igual al Idesp de la tabla b. esto se logra con la siguiente sintaxis: SELECT Idalumno, Apealumno, b.idesp, nomesp FROM Alumno AS a, Especialidad AS b WHERE a.idesp=b.idesp Hemos unidos 2 tablas por ende hay una sola relación: a.idesp=b.idesp Como un segundo ejemplo, necesitamos listar los siguientes campos: IdAlumno, Apealumno, Nomcurso, credito,exaparcial, ExaFinal. Solución.- por petición del ejemplo es necesario el uso de 3 Tablas, las cuales son Alumno, Curso, Notas, como debemos de unir 3 tablas, entonces tenemos 2 relaciones entre estas, la solución se muestra a continuación: SELECT a.idalumno, Apealumno, Nomcurso, credito,exaparcial, ExaFinal FROM Alumno AS a, Curso AS c, Notas AS n WHERE a.idalumno=n.idalumno AND c.idcurso=n.idcurso La relaciones en este ejemplo son: a.idalumno=n.idalumno AND c.idcurso=n.idcurso Al ejecutar esta sentencia obtenemos: 13

Ejemplo 3: necesitamos conocer cual es el total del costo, de la especialidad de cada alumno, para esto debe mostrar los siguientes campos: a.idalumno, Apealumno, Nomesp, costo además se pide ordenarlos por código del alumno. SELECT a.idalumno, Apealumno, Nomesp, SUM(costo) AS Total FROM Alumno AS a, Especialidad AS e WHERE a.idesp=e.idesp GROUP BY a.idalumno,apealumno, nomesp ORDER BY 1 SCRIPTS DE LA BASE DE DATOS BDNOTAS USE MASTER -- CREACION DE BASE DE DATOS (DATA y LOG) USE master SET DATEFORMAT DMY IF EXISTS(SELECT * FROM sysdatabases WHERE name='bdnotas') begin DROP DATABASE bdnotas --GO end CREATE DATABASE bdnotas GO USE bdnotas 14

-- Verificando la existencia de las tablas -- --------------------------------------- go IF EXISTS ( SELECT name FROM sysobjects WHERE type = 'U' AND name = 'alumno' ) DROP TABLE alumno go IF EXISTS ( SELECT name FROM sysobjects WHERE type = 'U' AND name = 'PAGOS' ) DROP TABLE PAGOS go IF EXISTS ( SELECT name FROM sysobjects WHERE type = 'U' AND name = 'especialidad' ) DROP TABLE especialidad go -- Creación de las Tablas y Claves Primarias -- ----------------------------------------- CREATE TABLE Alumno ( IdAlumno char(5) NOT NULL primary key, ApeAlumno varchar(30) NOT NULL, NomAlumno varchar(30) NOT NULL, Idesp char(3) NOT NULL, PROCE CHAR(1) ) go CREATE TABLE PAGOS ( IdAlumno char(5) NOT NULL, CICLO char(6) NOT NULL, NCUOTA INT NOT NULL, MONTO NUMERIC(12,2) NOT NULL, FECHA DATETIME, PRIMARY KEY(IDALUMNO, CICLO, NCUOTA) ) go go 15

CREATE TABLE especialidad ( Idesp char(3) NOT NULL PRIMAry key, Nomesp varchar(30) NOT NULL, costo numeric(8,1) not null ) go CREATE TABLE Curso ( IdCurso char(4) NOT NULL primary key, NomCurso varchar(35) NOT NULL, credito int ) go go CREATE TABLE NOTAS ( IdAlumno char(5) NOT NULL, IdCurso char(4) NOT NULL, ExaParcial real NULL, ExaFinal real NULL, primary key(idalumno,idcurso) ) go Insert Into Especialidad Values('E01','Educacion Informatica',2500) Insert Into Especialidad Values('E02','Administracion',1800) Insert Into Especialidad Values('E03','Contabilidad',2000) Insert Into Especialidad Values('E04','Idiomas',1800) Insert Into Especialidad Values('E05','Ing. de Sistemas',2800) Insert Into ALUMNO Values('A0001','Valencia salcedo','christian','e01','n') Insert Into ALUMNO Values('A0002','Ortiz Rodriguez','Freddy','E01','P') Insert Into ALUMNO Values('A0003','Silva Mejia','Ruth Ketty','E02','N') Insert Into ALUMNO Values('A0004','Melendez Noriega','Liliana','E03','P') Insert Into ALUMNO Values('A0005','Huerta Leon','Silvia','E04','N') 16

Insert Into ALUMNO Values('A0006','Carranza Fuentes','Maria Elena','E02','P') Insert Into ALUMNO Values('A0007','Prado Castro','Gabriela','E01','N') Insert Into ALUMNO Values('A0008','Atuncar Mesias','Juan','E05','P') Insert Into ALUMNO Values('A0009','Aguilar Zavala','Patricia Elena','E01','P') Insert Into ALUMNO Values('A0010','Rodruigez Trujillo','Rubén Eduardo','E01','N') Insert Into ALUMNO Values('A0011','Canales Ruiz','Gino Leonel','E02','P') Insert Into ALUMNO Values('A0012','Ruiz Quispe','Edgar','E02','N') Insert Into ALUMNO Values('A0013','PanduroTerrazas','Omar','E03','P') Insert Into ALUMNO Values('A0014','Zita Padilla','Peter Wilmer','E03','N') Insert Into ALUMNO Values('A0015','Ternero Ubillús','Luis','E05','P') Insert Into ALUMNO Values('A0016','Rivera García','Raúl Joel','E04','P') Insert Into ALUMNO Values('A0017','Pomar García','Ana','E04','P') Insert Into ALUMNO Values('A0018','Palomares Venegas','Mercedes','E04','N') Insert Into ALUMNO Values('A0019','Ruiz Venegaz','Luis Alberto','E04','P') Insert Into ALUMNO Values('A0020','Tejada Bernal','Janet','E04','P') Insert Into ALUMNO Values('A0021','Sotelo Canales','Juan Carlos','E05','P') Insert Into ALUMNO Values('A0022','LLosa Montalvan','Karla','E05','P') Insert Into ALUMNO Values('A0023','Galarza Torres','Hugo','E03','P') Insert Into ALUMNO Values('A0024','Valverde Jaramillo','Saul','E05','N') Insert Into ALUMNO Values('A0025','Cipriano Avila','Roxana','E04','N') Insert Into ALUMNO Values('A0026','Rodriguez Quispe','Luis Alberto','E05','P') Insert Into ALUMNO Values('A0027','Huerta Leon','Marco Antonio','E05','N') Insert Into ALUMNO Values('A0028','Ortiz Fuentes','Ana María','E04','P') Insert Into ALUMNO Values('A0029','Rivera Jaramillo','Martha','E05','P') Insert Into ALUMNO Values('A0030','Bustamante Campos','Guino','E05','N') -- PAGOS CORRESPONDIENTES Insert Into PAGOS Values('A0001','2005-2',1,300, '10/10/05') Insert Into PAGOS Values('A0001','2005-2',2,340, '11/11/05') Insert Into PAGOS Values('A0001','2005-1',3,340, '12/12/05') Insert Into PAGOS Values('A0002','2006-2',1,300, '10/05/06') Insert Into PAGOS Values('A0002','2006-2',2,350, '11/05/06') Insert Into PAGOS Values('A0002','2006-1',1,360, '12/05/06') Insert Into PAGOS Values('A0002','2006-1',2,370, '11/05/06') 17

Insert Into PAGOS Values('A0003','2005-1',1,340,'11/06/05') Insert Into PAGOS Values('A0003','2005-1',2,340,'12/07/05') Insert Into PAGOS Values('A0003','2005-2',1,340,'11/05/05') Insert Into PAGOS Values('A0004','2005-2',1,300,'03/09/05') Insert Into PAGOS Values('A0004','2005-2',2,380,'01/10/05') Insert Into PAGOS Values('A0004','2006-1',1,370,'11/05/06') Insert Into PAGOS Values('A0005','2005-2',1,350,'11/10/05') Insert Into PAGOS Values('A0005','2005-2',2,360,'11/08/05') Insert Into PAGOS Values('A0005','2006-1',1,380,'09/05/06') Insert Into PAGOS Values('A0006','2005-2',3,300,'13/09/06') Insert Into PAGOS Values('A0006','2005-1',1,340,'11/03/06') Insert Into PAGOS Values('A0006','2005-1',2,390,'11/05/06') Insert Into PAGOS Values('A0007','2005-2',1,340,'11/06/06') Insert Into PAGOS Values('A0007','2005-1',1,380,'11/05/06') Insert Into PAGOS Values('A0007','2005-1',2,440,'11/06/06') Insert Into PAGOS Values('A0008','2005-2',1,340,'11/08/06') Insert Into PAGOS Values('A0008','2005-2',2,320,'11/09/06') Insert Into PAGOS Values('A0008','2004-1',1,370,'11/02/06') Insert Into PAGOS Values('A0009','2005-2',1,340,'11/06/06') Insert Into PAGOS Values('A0009','2005-2',2,330,'11/07/06') Insert Into PAGOS Values('A0009','2005-1',1,340,'11/05/06') Insert Into PAGOS Values('A0010','2005-2',1,340,'13/07/06') Insert Into PAGOS Values('A0010','2005-2',2,330,'11/09/06') Insert Into PAGOS Values('A0010','2005-1',1,350,'11/06/06') Insert Into PAGOS Values('A0011','2005-2',1,340,'11/06/06') Insert Into PAGOS Values('A0011','2005-2',2,330,'11/08/06') Insert Into PAGOS Values('A0011','2005-1',2,370,'11/06/06') Insert Into PAGOS Values('A0012','2005-2',1,340,'11/08/06') Insert Into PAGOS Values('A0012','2005-2',2,370,'11/09/06') Insert Into PAGOS Values('A0012','2005-1',1,390,'15/08/06') Insert Into PAGOS Values('A0013','2005-2',1,340,'11/06/06') Insert Into PAGOS Values('A0013','2005-1',1,340,'11/05/06') Insert Into PAGOS Values('A0013','2005-1',2,350,'11/05/06') Insert Into PAGOS Values('A0013','2005-1',3,370,'11/06/06') 18

Insert Into PAGOS Values('A0014','2005-2',1,340,'11/10/06') Insert Into PAGOS Values('A0014','2005-2',2,330,'11/11/06') Insert Into PAGOS Values('A0014','2005-1',1,350,'11/05/06') Insert Into PAGOS Values('A0016','2005-2',1,340,'11/09/06') Insert Into PAGOS Values('A0016','2005-2',2,360,'11/10/06') Insert Into PAGOS Values('A0016','2005-1',1,340,'11/05/06') Insert Into PAGOS Values('A0021','2005-2',1,340,'11/07/06') Insert Into PAGOS Values('A0021','2005-2',2,480,'10/08/06') Insert Into PAGOS Values('A0021','2005-1',1,340,'10/05/06') Insert Into PAGOS Values('A0022','2005-2',1,340,'11/08/06') Insert Into PAGOS Values('A0022','2005-2',2,330,'11/09/06') Insert Into PAGOS Values('A0022','2005-1',1,350,'11/03/06') Insert Into PAGOS Values('A0023','2005-2',1,340,'11/09/06') Insert Into PAGOS Values('A0023','2005-2',2,370,'11/10/06') Insert Into PAGOS Values('A0023','2005-1',1,370,'11/05/06') Insert Into PAGOS Values('A0024','2005-2',1,340,'11/06/06') Insert Into PAGOS Values('A0024','2005-2',2,340,'11/08/06') Insert Into PAGOS Values('A0024','2005-1',1,340,'11/05/06') Insert Into PAGOS Values('A0024','2005-1',2,340,'11/05/06') Insert Into PAGOS Values('A0025','2005-2',1,340,'11/08/06') Insert Into PAGOS Values('A0025','2005-2',2,370,'11/09/06') Insert Into PAGOS Values('A0028','2005-1',1,340,'11/05/06') Insert Into PAGOS Values('A0028','2005-1',2,390,'11/06/06') Insert Into PAGOS Values('A0029','2004-1',1,340,'11/06/06') -- Agregar Datos a la Tabla NOTAS -- =============================== Insert Into NOTAS Values('A0001','C001',11,17) Insert Into NOTAS Values('A0001','C003',09,15) Insert Into NOTAS Values('A0001','C004',18,3) Insert Into NOTAS Values('A0002','C001',15,9) Insert Into NOTAS Values('A0002','C002',11,03) Insert Into NOTAS Values('A0002','C003',14,13) 19

Insert Into NOTAS Values('A0003','C008',12,13) Insert Into NOTAS Values('A0003','C005',16,14) Insert Into NOTAS Values('A0003','C003',8,13) Insert Into NOTAS Values('A0003','C004',7,14) Insert Into NOTAS Values('A0004','C006',11,12) Insert Into NOTAS Values('A0004','C007',9,11) Insert Into NOTAS Values('A0004','C005',7,12) Insert Into NOTAS Values('A0005','C004',17,16) Insert Into NOTAS Values('A0005','C005',12,17) Insert Into NOTAS Values('A0005','C003',6,13) Insert Into NOTAS Values('A0006','C004',16,15) Insert Into NOTAS Values('A0006','C006',5,12) Insert Into NOTAS Values('A0006','C007',8,13) Insert Into NOTAS Values('A0007','C002',7,9) Insert Into NOTAS Values('A0007','C004',12,7) Insert Into NOTAS Values('A0007','C005',11,6) Insert Into NOTAS Values('A0008','C008',5,8) Insert Into NOTAS Values('A0008','C009',7,4) Insert Into NOTAS Values('A0008','C004',5,13) Insert Into NOTAS Values('A0009','C005',6,13) Insert Into NOTAS Values('A0009','C009',18,13) Insert Into NOTAS Values('A0009','C010',12,15) Insert Into NOTAS Values('A0010','C010',16,14) Insert Into NOTAS Values('A0010','C001',5,12) Insert Into NOTAS Values('A0010','C003',12,11) Insert Into NOTAS Values('A0011','C001',5,13) Insert Into NOTAS Values('A0011','C002',11,13) Insert Into NOTAS Values('A0011','C004',7,03) Insert Into NOTAS Values('A0012','C004',10,08) Insert Into NOTAS Values('A0012','C005',7,10) Insert Into NOTAS Values('A0012','C006',17,10) Insert Into NOTAS Values('A0013','C001',14,3) Insert Into NOTAS Values('A0013','C002',7,10) Insert Into NOTAS Values('A0013','C004',12,13) Insert Into NOTAS Values('A0013','C003',15,12) Insert Into NOTAS Values('A0014','C001',11,15) Insert Into NOTAS Values('A0014','C003',15,13) Insert Into NOTAS Values('A0014','C004',12,18) Insert Into NOTAS Values('A0015','C001',5,13) Insert Into NOTAS Values('A0015','C003',14,13) Insert Into NOTAS Values('A0015','C004',15,12) Insert Into NOTAS Values('A0016','C002',6,13) Insert Into NOTAS Values('A0016','C003',12,11) 20

Insert Into NOTAS Values('A0016','C006',17,12) Insert Into NOTAS Values('A0021','C004',8,17) Insert Into NOTAS Values('A0021','C005',14,3) Insert Into NOTAS Values('A0021','C006',17,12) Insert Into NOTAS Values('A0022','C004',17,13) Insert Into NOTAS Values('A0022','C005',8,13) Insert Into NOTAS Values('A0022','C003',7,13) Insert Into NOTAS Values('A0023','C004',10,13) Insert Into NOTAS Values('A0023','C008',12,13) Insert Into NOTAS Values('A0023','C009',18,13) Insert Into NOTAS Values('A0024','C004',10,3) Insert Into NOTAS Values('A0024','C005',11,9) Insert Into NOTAS Values('A0024','C003',16,8) Insert Into NOTAS Values('A0024','C007',16,13) Insert Into NOTAS Values('A0025','C004',1,13) Insert Into NOTAS Values('A0025','C005',10,18) Insert Into NOTAS Values('A0028','C005',16,13) Insert Into NOTAS Values('A0028','C004',17,7) Insert Into NOTAS Values('A0029','C004',11,13) -- Agregar Datos a la Tabla Curso -- ============================== Insert Into Curso Values('C001','Matematica Basica',3) Insert Into Curso Values('C002','Filosofia I',6) Insert Into Curso Values('C003','Psicologia Industrial',5) Insert Into Curso Values('C004','Algoritmica',4) Insert Into Curso Values('C005','Software de Aplicacion',5) Insert Into Curso Values('C006','Lenguaje de Programacion I',5) Insert Into Curso Values('C007','Lenguaje Java ',4) Insert Into Curso Values('C008','Matematica II',3) Insert Into Curso Values('C009','Ingles Tecnico',5) Insert Into Curso Values('C010','Lenguaje de Programcion III',3) Insert Into Curso Values('C011','Aplicaciones Cliente/Servidor',4) 21

SELECT * FROM ALUMNO SELECT * FROM ESPECIALIDAD SELECT * FROM PAGOS SELECT * FROM NOTAS SELECT * FROM CURSO 22