Академический Документы
Профессиональный Документы
Культура Документы
SELECT
Recupera datos de una o ms tablas.
FROM
Las tablas involucradas en la consulta. Se requiere para cada SELECT.
WHERE
Los Criterios de seleccin que determinan cuales filas se van a recuperar,
eliminar o actualizar.
GROUP BY Criterio para agrupar filas.
ORDER BY Criterio para ordenar filas.
INSERT
Insertar filas en una tabla especificada.
UPDATE
Actualizar filas en una tabla especifica.
DELETE
Eliminar filas de una tabla especifica.
Observacin:
Por lo general se acostumbra a escribir estas palabras claves en maysculas, tratando de
diferenciarlos con los argumentos de una tabla.
SELECT <campos> FROM <tablas> WHERE <condicin> GROUP BY <campos>
La estructura presentada, es la que se utiliza SQL posee de una jerarqua entre sus palabras claves,
y una manera general la presentamos para conocimiento del lector.
CONSULTA BSICA SELECT
Lo que hace una consulta SELECT, es obtener datos de una Tabla determinada, en las que se
especifican filas y columnas. La sintaxis bsica 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 lascolumnas IdAlumno, ApeAlumno, NomAlumno, para todas las filas de la
tabla Alumno. Utilizamos la siguiente consulta:
SELECT IdAlumno, ApeAlumno, NomAlumno FROM Alumno
Observacin.
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 tambin se evita que se devuelven columnas
innecesarias, incluso si cambia el orden real.
LA CLUSULA WHERE.
En la mayora de casos es necesario localizar, en una base de datos, filas que cumplan con ciertos
criterios de seleccin. SQL utiliza la clusula WHERE en una consulta SELECT para especificar los
criterios de seleccin para la consulta. La forma bsica de una consulta SELECT con criterios
condicin de seleccin es:
SELECT nombreDeColumnas FROM nombreDeTabla WHERE criterios
Por ejemplo, para seleccionar las columnas IdAlumno, monto de la tablaPagos, para las cuales el
monto sea mayor que 340, utilizamos la siguiente consulta:
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 sera:
Otro uso que se le atribuye a esta clusula ORDER BY es el de poder ordenar por una columna
especfica, 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 de esta sintaxis seria:
Observemos que despus de la clusula ORDER BY, hemos colocado el nmero 2, esto quiere decir
que se ordenar por la columna nmero 2 y de la sintaxis anterior la columna 2 seria Apealumno.
Es por eso que el Apellido esta ordenado de forma como se mostr. Tambin en vez de colocar el
nmero 2 se puede poner el nombre del campo especifico al cual se desea ordenar tal como se vio
en la pgina anterior.
Funciones de
agregado
AVG
COUNT
COUNT(*)
MAX
MIN
SUM
Descripcin
Promedio de valores en una expresin
numrica
Nmeros de valores en una expresin
Numero de filas seleccionadas
Valor mas alto en la expresin
Valor mas bajo en la expresin
Valores totales en una expresin numrica
Funcin
COUNT
Tipo de datos
COUNT es la nica funcin de agregado que se puede utilizar en
las columnas de los tipos de datos text, ntext o image.
MIN y MAX
SUM y AVG
Por ejemplo deseamos conocer el promedio de los exmenes 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 ttulo principal del resultado:
Como segundo ejemplo, se solicita saber cuntos montos existen en la tabla Pagos, esto se hace
con la siguiente sintaxis:
SELECT COUNT (monto) AS [NUMERO DE MONTO] FROM Pagos
El resultado sera:
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 porque mi ttulo 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 especfica, SQL nos
pedir que agrupemos estos parmetros; es por eso que necesitamos saber el tema de la Clusula
GROUP BY, que se presenta a continuacin.
LA CLUSULA GROUP BY
Utilice la clusula GROUP BY en columnas o expresiones para organizar filas en grupos y para
resumir dichos grupos. Por ejemplo, utilice la clusula GROUP BY para determinar la cantidad de
cada producto pedida en todos los pedidos. Cuando utilice la clusula GROUP BY, considere los
hechos e instrucciones siguientes:
SQL Server produce una columna de valores por cada grupo definido.
SQL Server slo devuelve filas por cada grupo especificado; no devuelve informacin de detalle.
Todas las columnas que se especifican en la clusula GROUP BY tienen que estar incluidas en la
lista de seleccin.
Si incluye una clusula WHERE, SQL Server slo agrupa las filas que cumplen las condiciones de
la clusula WHERE.
No utilice la clusula 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 clusula GROUP BY para presentar todas las filas que tengan
valores nulos en las columnas de agregado, independientemente de si las filas cumplen la
condicin de la clusula WHERE. Por ejemplo deseamos conocer, cuales son las nota Mxima del
Examen Parcial y la nota Mnima 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 sera:
Esto aparece por que en realidad SQL no sabe de qu 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 razn 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
Como vemos en esta ocasin SQL nos arroja el siguiente resultado, pero observemos que todava
nos falta algo mas, esto es necesitamos poner las relaciones que existen entre estas dos tablas es
decir necesitamos establecer esta relacin:
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 relacin:
a.idesp=b.idesp
Ejemplo 3: necesitamos conocer cual es el total del costo, de la especialidadde cada alumno, para
esto debe mostrar los siguientes campos:
a.IdAlumno, Apealumno, Nomesp, costo adems se pide ordenarlos porcdigo 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
SELECT SUM(unidades) AS total FROM pedidos WHERE fecha=Now();
Retorna el total de unidades pedidas hoy. Este resultado se toma como un nuevo campo en el
RecordSet y se le llama 'total'.
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
-- 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
-- Creacin 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
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
Insert
Insert
Insert
Insert
Into
Into
Into
Into
Into
Especialidad
Especialidad
Especialidad
Especialidad
Especialidad
Insert
Insert
Insert
Insert
Insert
Into
Into
Into
Into
Into
ALUMNO
ALUMNO
ALUMNO
ALUMNO
ALUMNO
Values('E01','Educacion Informatica',2500)
Values('E02','Administracion',1800)
Values('E03','Contabilidad',2000)
Values('E04','Idiomas',1800)
Values('E05','Ing. de Sistemas',2800)
Values('A0001','Valencia salcedo','Christian','E01','N')
Values('A0002','Ortiz Rodriguez','Freddy','E01','P')
Values('A0003','Silva Mejia','Ruth Ketty','E02','N')
Values('A0004','Melendez Noriega','Liliana','E03','P')
Values('A0005','Huerta Leon','Silvia','E04','N')
Into
Into
Into
Into
PAGOS
PAGOS
PAGOS
PAGOS
Values('A0013','2005-2',1,340,'11/06/06')
Values('A0013','2005-1',1,340,'11/05/06')
Values('A0013','2005-1',2,350,'11/05/06')
Values('A0013','2005-1',3,370,'11/06/06')
Into
Into
Into
Into
PAGOS
PAGOS
PAGOS
PAGOS
Values('A0024','2005-2',1,340,'11/06/06')
Values('A0024','2005-2',2,340,'11/08/06')
Values('A0024','2005-1',1,340,'11/05/06')
Values('A0024','2005-1',2,340,'11/05/06')
Into
Into
Into
Into
Into
Into
NOTAS
NOTAS
NOTAS
NOTAS
NOTAS
NOTAS
Values('A0001','C001',11,17)
Values('A0001','C003',09,15)
Values('A0001','C004',18,3)
Values('A0002','C001',15,9)
Values('A0002','C002',11,03)
Values('A0002','C003',14,13)
Insert
Insert
Insert
Insert
Into
Into
Into
Into
NOTAS
NOTAS
NOTAS
NOTAS
Values('A0003','C008',12,13)
Values('A0003','C005',16,14)
Values('A0003','C003',8,13)
Values('A0003','C004',7,14)
Into
Into
Into
Into
NOTAS
NOTAS
NOTAS
NOTAS
Values('A0013','C001',14,3)
Values('A0013','C002',7,10)
Values('A0013','C004',12,13)
Values('A0013','C003',15,12)
Into
Into
Into
Into
NOTAS
NOTAS
NOTAS
NOTAS
Values('A0024','C004',10,3)
Values('A0024','C005',11,9)
Values('A0024','C003',16,8)
Values('A0024','C007',16,13)
Insert
Insert
Insert
Insert
Insert
Insert
Insert
Insert
Into
Into
Into
Into
Into
Into
Into
Into
SELECT
SELECT
SELECT
SELECT
SELECT
*
*
*
*
*
Curso
Curso
Curso
Curso
Curso
Curso
Curso
Curso
FROM
FROM
FROM
FROM
FROM
Values('C004','Algoritmica',4)
Values('C005','Software de Aplicacion',5)
Values('C006','Lenguaje de Programacion I',5)
Values('C007','Lenguaje Java ',4)
Values('C008','Matematica II',3)
Values('C009','Ingles Tecnico',5)
Values('C010','Lenguaje de Programcion III',3)
Values('C011','Aplicaciones Cliente/Servidor',4)
ALUMNO
ESPECIALIDAD
PAGOS
NOTAS
CURSO