Você está na página 1de 27

SQL SERVER

El SQL es un lenguaje estndar de programacin para el acceso a bases de datos.


El lenguaje SQL se utiliza para acceder y manipular datos en cualquier base de datos del
mercado, como por ejemplo, para las bases de datos MySQL, Oracle, !", SQL Ser#er,
$ccess.
Este tutorial se di#ide en las siguientes partes%
SQL Bsico% Las instrucciones SQL bsicas para la consulta de datos de cualquier
base de datos relacional.
SQL Avanzado% Las instrucciones SQL a#anzadas para un control completo sobre
cualquier base de datos relacional.
Funciones SQL% SQL tiene multiples &unciones prede&inidas para realizar ciertos
clculos sobre los datos.
Comandos SQL% Listado de todos los comandos SQL disponibles en este curso, para
una re&erencia rpida de los mismos.
El SQL es un lenguaje estructurado y un estndar $'S( para el acceso y manipulacin de los
datos de cualquier base de datos.
El SQL se compone de sentencias SQL, cada una con una utilidad di&erente, como por ejemplo%
)reacin de una base de datos *)+E$,E $,$!$SE-
)reacin de una tabla *)+E$,E ,$!LE-
)reacin de una #ista *)+E$,E .(E/-
)reacin de un 0ndice de una tabla *)+E$,E ('E1-
)reacin de procedimientos almacenados *)+E$,E 2+O)E3+E-
)reacin de disparadores *)+E$,E ,+(44E+-
)onsultar los datos almacenados en una tabla *SELE),-
(nsertar datos en una tabla *('SE+,-
Modi&icar datos ya e5istentes en una tabla *32$,E-
!orrar datos almacenados en una tabla *ELE,E-
ar permiso de acceso a los datos de una tabla *4+$',-
Eliminar permisos de acceso a datos de una tabla *+E.O6E-
7inalizar la transaccin de una sentencia SQL *)OMM(,-
+etroceder la transaccin de una sentencia SQL *+OLL!$)6-.
3na de las sentencias SQL ms importantes es SELE),, ya que permite realizar consultas
sobre los datos almacenados en la base de datos.
Sinta5is SQL SELE),
SELE), 8 7+OM nombretabla
SELE), columna9, columna" 7+OM nombretabla
2ara los ejemplos, tendremos la siguiente tabla de personas denominada :personas;
Estos son los datos almacenados en la tabla :personas;
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
$',O'(O 4$+)($ !E'(,O
L3(S LO2E< 2E+E<
Si queremos consultar todos los datos de la tabla :personas;
SELE), 8 7+OM personas
Este ser el resultado%
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
$',O'(O 4$+)($ !E'(,O
L3(S LO2E< 2E+E<
Si queremos consulta todos los nombres y primer apellido de todas las personas
SELE), nombre, apellido9 7+OM personas
Este ser el resultado%
nombre apellido1
$',O'(O 2E+E<
$',O'(O 4$+)($
L3(S LO2E<
$l realizar una consulta puede ocurrir que e5istan #alores repetidos para algunas columnas.
2or ejemplo
SELE), nombre 7+OM personas
nombre
$',O'(O
L3(S
$',O'(O
Esto no es un problema, pero a #eces queremos que no se repitan, por ejemplo, si queremos
saber los nombre di&erentes que =ay en la tabla personas>, entonces utilizaremos DISTINCT.
SELE), (S,('), nombre 7+OM personas
nombre
$',O'(O
L3(S
La clusula /?E+E se utiliza para =acer &iltros en las consultas, es decir, seleccionar
solamente algunas &ilas de la tabla que cumplan una determinada condicin.
El #alor de la condicin debe ir entre comillas simples @@.
2or ejemplo%
Seleccionar las personas cuyo nombre sea $',O'(O
SELE), 8 7+OM personas
/?E+E nombre A @$',O'(O@
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
$',O'(O 4$+)($ !E'(,O
Los operadores AND !" se utilizan para &iltrar resultados con " condiciones.
El operador AND mostrar los resultados cuando se cumplan las " condiciones.
)ondicin9 $' condicin"
El operador !" mostrar los resultados cuando se cumpla alguna de las " condiciones.
)ondicion9 O+ condicion"
En la tabla personas
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
$',O'(O 4$+)($ !E'(,O
L3(S LO2E< 2E+E<
La siguiente sentencia *ejemplo $'- dar el siguiente resultado%
SELE), 8 7+OM personas
/?E+E nombre A @$',O'(O@
$' apellido9 A @4$+)($@
nombre apellido1 apellido2
$',O'(O 4$+)($ !E'(,O
La siguiente sentencia *ejemplo O+- dar el siguiente resultado%
SELE), 8 7+OM personas
/?E+E nombre A @$',O'(O@
O+ apellido9 A @4$+)($@
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
$',O'(O 4$+)($ !E'(,O
,ambiBn se pueden combinar $' y O+, como el siguiente ejemplo%
SELE), 8 7+OM personas
/?E+E nombre A @$',O'(O@
$' *apellido9 A @4$+)($@ O+ apellido9 A @LO2E<-
nombre apellido1 apellido2
$',O'(O 4$+)($ !E'(,O
!"D#" B$ se utiliza para ordenar los resultados de una consulta, segCn el #alor de la columna
especi&icada.
2or de&ecto, se ordena de &orma ascendente *$S)- segCn los #alores de la columna.
Si se quiere ordenar por orden descendente se utiliza la palabra ES
SELE), nombreDcolumna*s-
7+OM nombreDtabla
O+E+ !E nombreDcolumna*s- $S)FES)
2or ejemplo, en la tabla personas %
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
L3(S LO2E< 2E+E<
$',O'(O 4$+)($ !E'(,O
SELE), nombre, apellido9
7+OM personas
O+E+ !E apellido9 $S)
Esta es la consulta resultante%
nombre apellido1
L3(S LO2E<
$',O'(O 4$+)($
$',O'(O 2E+E<
Ejemplo de ordenacin descendiente *ES-
SELE), nombre, apellido9
7+OM personas
O+E+ !E apellido9 ES)
Esta es la consulta resultante%
nombre apellido1
$',O'(O 2E+E<
$',O'(O 4$+)($
L3(S LO2E<
La sentencia ('SE+, (',O se utiliza para insertar nue#as &ilas en una tabla.
Es posible insertar una nue#a &ila en una tabla de dos &ormas distintas%
('SE+, (',O nombreDtabla
.$L3ES *#alor9, #alor", #alorG, .-
('SE+, (',O nombreDtabla *columna9, columna", columnaG,.-
.$L3ES *#alor9, #alor", #alorG, .-
Ejemplo%
ada la siguiente tabla personas%
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
L3(S LO2E< 2E+E<
$',O'(O 4$+)($ !E'(,O
Si queremos insertar una nue#a &ila en la tabla personas, lo podemos =acer con cualquiera de
las dos sentencias siguientes%
('SE+, (',O personas
.$L3ES *@2E+O@, @+3(<@, @4O'<$LE<@-
('SE+, (',O personas *nombre, apellido9, apellido"-
.$L3ES *@2E+O@, @+3(<@, @4O'<$LE<@-
)ualquiera de estas sentencias anteriores produce que se inserte una nue#a &ila en la tabla
personas, quedando as0 dic=a tabla%
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
L3(S LO2E< 2E+E<
$',O'(O 4$+)($ !E'(,O
2E+O +3(< 4O'<$LE<
La sentencia %&DAT# se utiliza para modi&icar #alores en una tabla.
La sinta5is de SQL 32$,E es%
32$,E nombreDtabla
SE, columna9 A #alor9, columna" A #alor"
/?E+E columnaG A #alorG
La clusula SE, establece los nue#os #alores para las columnas indicadas.
La clusula /?E+E sir#e para seleccionar las &ilas que queremos modi&icar.
Ojo% Si omitimos la clusula /?E+E, por de&ecto, modi&icar los #alores en todas las &ilas de la
tabla.
Ejemplo del uso de SQL 32$,E
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
L3(S LO2E< 2E+E<
$',O'(O 4$+)($ !E'(,O
2E+O +3(< 4O'<$LE<
Si queremos cambiar el apellido" @!E'(,O@ por @+O+(43E<@ ejecutaremos%
32$,E personas
SE, apellido" A @+O+(43E<@
/?E+E nombre A @$',O'(O@
$' apellido9 A @4$+)($@
$' apellido" A @!E'(,O@
$=ora la tabla @personas@ quedar as0%
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
L3(S LO2E< 2E+E<
$',O'(O 4$+)($ "!D"I'%#(
2E+O +3(< 4O'<$LE<
La sentencia D#L#T# sir#e para borrar &ilas de una tabla.
La sinta5is de SQL ELE,E es%
ELE,E 7+OM nombreDtabla
/?E+E nombreDcolumna A #alor
Si queremos borrar todos los registros o &ilas de una tabla, se utiliza la sentencia%
ELE,E 8 7+OM nombreDtablaH
Ejemplo de SQL ELE,E para borrar una &ila de la tabla personas
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
L3(S LO2E< 2E+E<
$',O'(O 4$+)($ "!D"I'%#(
2E+O +3(< 4O'<$LE<
Si queremos borrar a la persona L3(S LO2E< 2E+E<, podemos ejecutar el comando%
ELE,E 7+OM personas
/?E+E nombre A @L3(S@
$' apellido9 A @LO2E<@
$' apellido" A @2E+E<@
La tabla @personas@ resultante ser%
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
$',O'(O 4$+)($ "!D"I'%#(
2E+O +3(< 4O'<$LE<
La sentencia SQL T!& se utiliza para especi&icar el nCmero de &ilas a mostrar en el resultado.
Esta clusula SQL ,O2 es Ctil en tablas con muc=os registros, para limitar el nCmero de &ilas a
mostrar en la consulta, y as0 sea ms rpida la consulta, consumiendo tambiBn menos recursos
en el sistema.
Esta clusula se especi&ica de &orma di&erente segCn el sistema de bases de datos utilizado.
)lusula SQL ,O2 para SQL SE+.E+
SELE), ,O2 nCmero
2E+)E', nombreDcolumna
7+OM nombreDtabla
)lusula SQL ,O2 para MySQL
SELE), columna*s- 7+OM tabla
L(M(, nCmero&ilas
)lusula SQL ,O2 para O+$)LE
SELE), columna*s- 7+OM tabla
/?E+E +O/'3M IA nCmero&ilas
Ejemplo SQL ,O2 para MySQL%
ada la siguiente tabla @personas@, quiero obtener los " primeros #alores.
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
$',O'(O 4$+)($ +O+(43E<
2E+O +3(< 4O'<$LE<
SELE), 8 7+OM personas L(M(, "
Obtendr0amos el siguiente resultado%
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
$',O'(O 4$+)($ +O+(43E<
El operador LI)# se utiliza en la clusula /?E+E para buscar por un patrn.
Sinta5is de SQL L(6E
SELE), columna*s- 7+OM tabla /?E+E columna L(6E @JpatronJ@
Ejemplos del uso de SQL L(6E
ada la siguiente tabla @personas@
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
$',O'(O 4$+)($ +O+(43E<
2E+O +3(< 4O'<$LE<
Si quiero seleccionar los nombres que empiezan por @$'@ en la tabla @personas@, ejecutar0a el
comando siguiente%
SELE), 8 7+OM personas
/?E+E nombre L(6E @$'J@
El c=aracter @J@ es un comod0n, que sir#e para uno o ms caracteres.
Este es el resultado
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
$',O'(O 4$+)($ +O+(43E<
Otro ejemplo de SQL L(6E
2ara seleccionar las personas que tienen un @<@ en su apellido9, ejecutar0amos%
SELE), 8 7+OM personas
/?E+E apellido9 L(6E @J<J@
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
2E+O +3(< 4O'<$LE<
Los caracteres /ildcards *comodines- son caracteres especiales que se utilizan para realizar
bCsquedas especiales, como por ejemplo, buscar palabras que empiecen por una letra
determinada *letraJ- o que contengan la letra a *JaJ-, o que contengan alguna #ocal
*KaeiouL-, etc.
Los caracteres /ildcards se utilizan con el operador SQL L(6E en una sentencia SELE),.Los
caracteres /ildcards son %
J sustituye a cero o ms caracteres
D sustituye a 9 carcter cualquiera
KlistaL sustituye a cualquier carcter de la lista
KMlistaL o KN
listaL
sustituye a cualquier carcter e5cepto los
caracteres de la lista
Ejemplos%
ada la siguiente tabla @personas@
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
$',O'(O 4$+)($ +O+(43E<
2E+O +3(< 4O'<$LE<
Ejemplos /ildcards
Seleccionar las personas cuyo nombre contenga una @+@
SELE), 8 7+OM personas
/?E+E nombre L(6E @J+J@
+esultado%
nombre apellido1 apellido2
2E+O +3(< 4O'<$LE<
Seleccionar las personas cuyo apellido9 empiece por @4$@
SELE), 8 7+OM personas
/?E+E apellido9 L(6E @2EDE<@
+esultado%
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
Seleccionar las personas cuyo apellido9 empiece por 2 o 4
SELE), 8 7+OM personas
/?E+E apellido9 L(6E @K24LJ@
+esultado%
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
$',O'(O 4$+)($ +O+(43E<
El operador IN permite seleccionar mCltiples #alores en una clusula /?E+E
Sinta5is SQL ('
SELE), columna
7+OM tabla
/?E+E columna
(' *#alor9, #alor", #alorG, .-
Ejemplo SQL ('
ada la siguiente tabla @personas@
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
$',O'(O 4$+)($ +O+(43E<
2E+O +3(< 4O'<$LE<
Queremos seleccionar a las personas cuyo apellido9 sea @2E+E<@ o @+3(<@
SELE), 8 7+OM personas
/?E+E apellido9
(' *@2E+E<@,@+3(<@-
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
2E+O +3(< 4O'<$LE<
El operador !E,/EE' se utiliza en la clusula /?E+E para seleccionar #alores entre un
rango de datos.
Sinta5is de SQL !E,/EE'
SELE), columna
7+OM tabla /?E+E columna
!E,/EE' #alor9 $' #alor"
Ejemplo de SQL !E,/EE'
ada la siguiente tabla @personas@
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
$',O'(O 4$+)($ +O+(43E<
2E+O +3(< 4O'<$LE<
Seleccionar personas cuyo apellido9 estB entre @7E+'$'E< y @?3E+,$S@
SELE), 8
7+OM personas
/?E+E apellido9
!E,/EE' @7E+'$'E<@ $' @?3E+,$S@
nombre apellido1 apellido2
$',O'(O 4$+)($ +O+(43E<
Seleccionar personas cuyo apellido9 no estB entre @7E+'$'E< y @?3E+,$S@
SELE), 8
7+OM personas
/?E+E apellido9
'O, !E,/EE' @7E+'$'E<@ $' @?3E+,$S@
nombre apellido1 apellido2
$',O'(O 2E+E< 4OME<
2E+O +3(< 4O'<$LE<
La sentencia SQL *!IN permite consultar datos de " o ms tablas.
ic=as tablas estarn relacionadas entre ellas de alguna &orma, a tra#Bs de alguna de sus
columnas.
E5isten G tipos de OO('S% OO(' interno, OO(' e5terno y OO(' cruzado.
3na cla#e primaria es una columna con un #alor Cnico para cada registro de una tabla.
El propsito del OO(' es unir in&ormacin de di&erentes tablas, para no tener que repetir datos
en di&erentes tablas.
Ejemplo%
Si tenemos las siguientes tablas
,abla personas, con la cla#e primaria >per >
per nombre apellido1 apellido2 dep
9 $',O'(O 2E+E< 4OME< 9
" $',O'(O 4$+)($ +O+(43E< "
G 2E+O +3(< 4O'<$LE< "
,abla >departamentos>, con la cla#e primaria >dep>
dep depar+amen+o
9 $M('(S,+$)(O'
" ('7O+M$,()$
G )OME+)($L
Si queremos saber los nombres de las personas que trabajan en ('7O+M$,()$, tendr0amos
que =acer un OO(' de las " tablas >personas> y >departamentos>, que se relacionar0an por la
columna >dep>.
Es decir, que desde la tabla >personas> y mediante la columna >dep>, podemos acceder a la
in&ormacin de la tabla >departamentos>.
La sentencia INN#" *!IN es el sentencia OO(' por de&ecto, y consiste en combinar cada &ila
de una tabla con cada &ila de la otra tabla, seleccionado aquellas &ilas que cumplan una
determinada condicin.
SELE), 8 7+OM tabla9 (''E+ OO(' tabla" /?E+E tabla9.columna9 A tabla".columna9
Ejemplo SQL (''E+ OO('
,abla personas, con la cla#e primaria >per >
per nombre apellido1 apellido2 dep
9 $',O'(O 2E+E< 4OME< 9
" $',O'(O 4$+)($ +O+(43E< "
G 2E+O +3(< 4O'<$LE< "
,abla >departamentos>, con la cla#e primaria >dep>
dep depar+amen+o
9 $M('(S,+$)(O'
" ('7O+M$,()$
G )OME+)($L
SELE), nombre, apellido9, departamento 7+OM personas (''E+ OO(' departamentos
/?E+E personas.dep A departamentos.dep
nombre apellido1 depar+amen+o
$',O'(O 2E+E< $M('(S,+$)(O'
$',O'(O 4$+)($ ('7O+M$,()$
2E+O +3(< ('7O+M$,()$
La sentencia L#FT *!IN combina los #alores de la primera tabla con los #alores de la segunda
tabla. Siempre de#ol#er las &ilas de la primera tabla, incluso aunque no cumplan la condicin.
SELE), 8 7+OM tabla9
LE7, OO(' tabla"
/?E+E tabla9.columna9 A tabla".columna9
Ejemplo de SQL LE7, OO('
,abla personas, con la cla#e primaria >per >
per nombre apellido1 apellido2 dep
9 $',O'(O 2E+E< 4OME< 9
" $',O'(O 4$+)($ +O+(43E< "
G 2E+O +3(< 4O'<$LE< P
,abla >departamentos>, con la cla#e primaria >dep>
dep depar+amen+o
9 $M('(S,+$)(O'
" ('7O+M$,()$
G )OME+)($L
SELE), nombre, apellido9, departamento
7+OM personas
LE7, OO(' departamentos
/?E+E personas.dep A departamentos.dep
nombre apellido1 depar+amen+o
$',O'(O 2E+E< $M('(S,+$)(O'
$',O'(O 4$+)($ ('7O+M$,()$
2E+O +3(<
$unque el departamento @P@ de 2E+O +3(< no e5iste en la tabla de departamentos, de#ol#er
la &ila con esa columna @departamento@ en blanco.
La sentencia "I',T *!IN combina los #alores de la primera tabla con los #alores de la
segunda tabla. Siempre de#ol#er las &ilas de la segunda tabla, incluso aunque no cumplan la
condicin.
En algunas bases de datos, la sentencia +(4?, OO(' es igual a +(4?, O3,E+ OO('
SELE), 8 7+OM tabla9 +(4?, OO(' tabla" /?E+E tabla9.columna9 A tabla".columna9
EOEM2LO SQL +(4?, OO('
per nombre apellido1 apellido2 dep
9 $',O'(O 2E+E< 4OME< 9
" $',O'(O 4$+)($ +O+(43E< "
G 2E+O +3(< 4O'<$LE< P
,abla >departamentos>, con la cla#e primaria >dep>
dep depar+amen+o
9 $M('(S,+$)(O'
" ('7O+M$,()$
G )OME+)($L
SELE), nombre, apellido9, departamento
7+OM personas
+(4?, OO(' departamentos
/?E+E personas.dep A departamentos.dep
nombre apellido1 depar+amen+o
$',O'(O 2E+E< $M('(S,+$)(O'
$',O'(O 4$+)($ ('7O+M$,()$
)OME+)($L
$unque no e5ista ninguna persona del departamento @)OME+)($L@ *G-, esta &ila aparecer con
las otras columnas en blanco
La sentencia F%LL *!IN combina los #alores de la primera tabla con los #alores de la segunda
tabla. Siempre de#ol#er las &ilas de las dos tablas, aunque no cumplan la condicin.
La sentencia 73LL OO(' es la unin de LE7, OO(' y +(4?, OO('
SELE), 8 7+OM tabla9 73LL OO(' tabla" /?E+E tabla9.columna9 A tabla".columna9
EOEM2LO SQL 73LL OO('
per nombre apellido1 apellido2 dep
9 $',O'(O 2E+E< 4OME< 9
" $',O'(O 4$+)($ +O+(43E< "
G 2E+O +3(< 4O'<$LE< P
,abla >departamentos>, con la cla#e primaria >dep>
dep depar+amen+o
9 $M('(S,+$)(O'
" ('7O+M$,()$
G )OME+)($L
SELE), nombre, apellido9, departamento
7+OM personas
73LL OO(' departamentos
/?E+E personas.dep A departamentos.dep
nombre apellido1 depar+amen+o
$',O'(O 2E+E< $M('(S,+$)(O'
$',O'(O 4$+)($ ('7O+M$,()$
2E+O +3(< )OME+)($L
La sentencia SQL %NI!N es utilizada para acumular los resultados de dos sentencias SELE),.
Las dos sentencias SELE), tienen que tener el mismo nCmero de columnas, con el mismo tipo
de dato y en el mismo orden.
Sinta5is SQL 3'(O'
SELE), columna9, columna" 7+OM tabla9
3'(O'
SELE), columna9, columna" 7+OM tabla"
Ejemplo SQL 3'(O'
,abla >personasDempresa9>
per nombre apellido1 apellido2
9 $',O'(O 2E+E< 4OME<
" $',O'(O 4$+)($ +O+(43E<
G 2E+O +3(< 4O'<$LE<
,abla >personasDempresa">
per nombre apellido1 apellido2
9 O3$' $2$+()(O ,E'S
" $',O'(O 4$+)($ +O+(43E<
G L3(S LO2E< .$<Q3E<
SELE), nombre, apellido9 7+OM personasDempresa9
3'(O'
SELE), nombre, apellido9 7+OM personasDempresa"
nombre apellido1
$',O'(O 2E+E<
$',O'(O 4$+)($
2E+O +3(<
O3$' $2$+()(O
L3(S LO2E<
La persona @$',O'(O 4$+)($ +O+(43E<@ aparecer solo una #ez en el resultado, porque
no aparecern las &ilas repetidas.
La sentencia SQL %NI!N ALL es utilizada para acumular los resultados de dos sentencias
SELE),, incluso aparecern las &ilas que estBn repetidas en los resultados de ambas SELE),.
Las dos sentencias SELE), tienen que tener el mismo nCmero de columnas, con el mismo tipo
de dato y en el mismo orden.
Sinta5is SQL 3'(O'
SELE), columna9, columna" 7+OM tabla9
3'(O' $LL
SELE), columna9, columna" 7+OM tabla"
Ejemplo SQL 3'(O' $LL
,abla >personasDempresa9>
per nombre apellido1 apellido2
9 $',O'(O 2E+E< 4OME<
" $',O'(O 4$+)($ +O+(43E<
G 2E+O +3(< 4O'<$LE<
,abla >personasDempresa">
per nombre apellido1 apellido2
9 O3$' $2$+()(O ,E'S
" $',O'(O 4$+)($ +O+(43E<
G L3(S LO2E< .$<Q3E<
SELE), nombre, apellido9 7+OM personasDempresa9
3'(O' $LL
SELE), nombre, apellido9 7+OM personasDempresa"
nombre apellido1
$',O'(O 2E+E<
ANT!NI! 'A"CIA
2E+O +3(<
O3$' $2$+()(O
ANT!NI! 4$+)($
L3(S LO2E<
La persona @$',O'(O 4$+)($ +O+(43E<@ aparecer dos #eces, porque est en los dos
resultados de las sentencias SELE),.
La sentencia SQL S#L#CT INT! se utiliza para seleccionar datos de una tabla y copiarlos en
otra tabla di&erente.
Se suele utilizar para =acer una copia de seguridad *bacQup- de los datos de una tabla.
Sinta5is SQL SELE), (',O
SELE), 8 (',O nue#atabla 7+OM tablaactual
Esta sentencia copiar todos los registros de la tabla @tablaactual@ en la tabla @nue#atabla@.
La nue#a tabla puede incluso estar en una base de datos di&erente
SELE), 8
(',O nue#atabla K(' nue#abasedatosL
7+OM tablaactual
Si queremos =acer un bacQup de una tabla en otra
SELE), 8
(',O personas!acQup
7+OM personas
,ambiBn se pueden seleccionar slo algunas columnas
SELE), columna9, columna"
(',O personas!acQup
7+OM personas
,ambiBn se puede incluir una condicin */?E+E-
SELE), 8
(',O personas!acQup
7+OM personas
/?E+E nombre A @$',O'(O@
Se puede utilizar SELE), (',O con OO('
SELE), personas.nombre, personas.apellido9, departamentos.departamento
(',O personas(n&ormatica
7+OM personas (''E+ OO(' departamentos
O' personas.dep A @('7O+M$,()$@
La sentencia )+E$,E $,$!$SE se utiliza para crear bases de datos.
Sinta5is )+E$,E $,$!$SE%
)+E$,E $,$!$SE nombre!aseatos
Ejemplo )+E$,E $,$!$SE
)+E$,E $,$!$SE mibasededatos
La sentencia C"#AT# TABL# se utiliza para crear una tabla en una base de datos e5istente.
Sinta5is )+E$,E ,$!LE
)+E$,E ,$!LE nombretabla
R
nombrecolumna9 tipodato9,
nombrecolumna" tipodato",
nombrecolumnaG tipodatoG,
..
S
Ejemplo )+E$,E ,$!LE
)+E$,E ,$!LE personas
R
nombre #arc=ar*"TT-,
apellido9 #arc=ar*"TT-,
apellido" #arc=ar*"TT-,
dep int
S
Esta sentencia crear la base de datos @personas@ con P columnas.
Las columnas @nombre@, @apellido9@ y @apellido"@ son de tipo @#arc=ar@, es decir, acepta #alores
al&anumBricos =asta una longitud m5ima de "TT caracteres.
La columna @dep@ es de tipo @int@, es decir, acepta slo nCmeros.
E5isten di&erentes tipos de datos, algunos son iguales en todas las bases de datos *MySQL,
O+$)LE, !", ..- y otros pueden ser particulares para ser usados Cnicamente en alguna de
estas bases de datos.
Las C!NST"AINTS son restricciones que se utilizan para limitar el tipo de dato que puede
recibir una columna de una tabla.
Las restricciones se puede de&inir cuando creamos la tabla *)+E$,E ,$!LE- o posteriormente
con la sentencia $L,E+ ,$!LE.
Las posibles restricciones son%
'O, '3LL
3'(Q3E
2+(M$+E 6EE
7O+E(4' 6EE
)?E)6
E7$3L,
La restriccin N!T N%LL sir#e para especi&icar que una columna no acepta el #alor '3LL, es
decir, que esa columna siempre tiene que tener algCn #alor, no puede estar #ac0a.
Ejemplo SQL '3LL
)+E$,E ,$!LE personas R nombre #arc=ar*"TT- 'O, '3LL, apellido9 #arc=ar*"TT- 'O,
'3LL, apellido" #arc=ar*"TT- S
Esta sentencia crea una tabla denominada @personas@, donde tenemos G columnas.
Las columnas @nombre@ y @apellido@ lle#an 'O, '3LL, esto quiere decir que cualquier &ila
insertada en esta tabla tiene que tener algCn #alor para las columnas @nombre@ y @apellido9@.
La restriccin %NIQ%# identi&ica de manera Cnica a cada &ila de una tabla.
2uede =aber #arias restricciones 3'(Q3E en di&erentes columnas de una tabla.
E5isten #arias &ormas di&erentes de sinta5is segCn el sistema de base de datos utilizado%
Ejemplo SQL 3'(Q3E para la base de datos MySQL
)+E$,E ,$!LE personas
R
identi&icador int 'O, '3LL,
nombre #arc=ar*"TT- 'O, '3LL,
apellido9 #arc=ar*"TT- 'O, '3LL,
apellido" #arc=ar*"TT-,
3'(Q3E *identi&icador-
S
La sentencia anterior crea la tabla @personas@ con P columnas, donde la columna @identi&cador@
tiene un #alor di&erente para cada &ila de la tabla.
Si intentamos insertar un &ila con un identi&icador que ya e5ista, nos dar un error, y no nos
dejar insertarlo.
Ejemplo SQL 3'(Q3E para las bases de datos O+$)LE, SQLSE+.(+, $))ESS
)+E$,E ,$!LE personas
R
identi&icador int 'O, '3LL 3'(Q3E,
nombre #arc=ar*"TT- 'O, '3LL,
apellido9 #arc=ar*"TT- 'O, '3LL,
apellido" #arc=ar*"TT-,
S
La restriccin 3'(Q3E se puede aUadir a una columna de una tabla, despuBs de ser creada,
mediante la sentencia $L,E+ ,$!LE.
Sinta5is de 3'(Q3E $L,E+ ,$!LE
$L,E+ ,$!LE personas
$ 3'(Q3E *identi&icador-
)rea una restriccin 3'(Q3E *#alor Cnico en toda la tabla- para la columna @identi&icador@.
Se puede crear tambiBn restricciones para #arias columnas a la #ez
$L,E+ ,$!LE peronas
$ )O'S,+$(', copersonas
3'(Q3E *identi&icador, apellido9-
2ara eliminar una restriccin en la base de datos MySQL
$L,E+ ,$!LE personas
+O2 ('E1 copersonas
2ara eliminar una restriccin en O+$)LE, SQLSE+.E+ y $))ESS
$L,E+ ,$!LE personas
+O2 )O'S,+$(', copersonas
La cla#e primaria, &"I-A"$ )#$, identi&ica de manera Cnica cada &ila de una tabla.
La columna de&inida como cla#e primaria *&"I-A"$ )#$- debe ser 3'(Q3E *#alor Cnico- y
'O, '3LL *no puede contener #alores nulos-.
)ada tabla slo puede tener una cla#e primaria *&"I-A"$ )#$-.
Ejemplo &"I-A"$ )#$ , cla#e primaria en MySQL
)+E$,E ,$!LE personas R identi&icador int 'O, '3LL, nombre #arc=ar*"TT- 'O, '3LL,
apellido9 #arc=ar*"TT- 'O, '3LL, 2+(M$+E 6EE *identi&icador- S
Ejemplo &"I-A"$ )#$ , cla#e primaria en O+$)LE, SQLSE+.E+, $))ESS
)+E$,E ,$!LE personas R identi&icador int 'O, '3LL 2+(M$+E 6EE, nombre
#arc=ar*"TT- 'O, '3LL, apellido9 #arc=ar*"TT- 'O, '3LL, S
La cla#e primaria *2+(M$+E 6EE- puede estar compuesta por #arias columnas, por ejemplo
por las columnas @identi&icador@ y @nombre@, entonces se de&ine as0%
)+E$,E ,$!LE personas R identi&icador int 'O, '3LL, nombre #arc=ar*"TT- 'O, '3LL,
apellido9 #arc=ar*"TT- 'O, '3LL, )O'S,+$(', pers 2+(M$+E 6EE *identi&icador,
nombre- S
La cla#e primaria tambiBn se puede de&inir despuBs de =aber creado la tabla, para eso
utilizaremos el comando $L,E+ ,$!LE
Ejemplo 2+(M$+E 6EE con $L,E+ ,$!LE $L,E+ ,$!LE personas $ 2+(M$+E 6EE
*identi&icador-
Ejemplo 2+(M$+E 6EE multiple $L,E+ ,$!LE $L,E+ ,$!LE personas )O'S,+$(',
pers 2+(M$+E 6EE *identi&icador, nombre-
La cla#e e5terna o F!"#I'N )#$, es una columna o #arias columnas, que sir#en para seUalar
cual es la cla#e primaria de otra tabla.
La columna o columnas seUaladas como F!"#I'N )#$, solo podrn tener #alores que ya
e5istan en la cla#e primaria 2+(M$+E 6EE de la otra tabla.
Ejemplo de F!"#I'N )#$
,abla >departamentos>, con la cla#e primaria >dep>
dep depar+amen+o
9 $M('(S,+$)(O'
" ('7O+M$,()$
G )OME+)($L
,abla personas, con una cla#e e5terna F!"#I'N )#$ @dep@, que =ace re&erencia a la cla#e
primaria @dep@ de la tabla anterior @departamentos@ y por tanto, solo puede tener un #alor de los
que tiene en esa tabla
per nombre apellido1 apellido2 dep
9 $',O'(O 2E+E< 4OME< 9
" $',O'(O 4$+)($ +O+(43E< "
G 2E+O +3(< 4O'<$LE< P
e&iniciones de F!"#I'N )#$ en )+E$,E ,$!LE para MySQL
)+E$,E ,$!LE departamentos R dep int 'O, '3LL,
departamento #arc=ar*"TT-,
2+(M$+E 6EE *dep-
S
)+E$,E ,$!LE personas
R
per int 'O, '3LL,
nombre #arc=ar*"TT-,
apellido9 #arc=ar*"TT-,
dep int 'O, '3LL,
2+(M$+E 6EE *per-,
7O+E(4' 6EE *dep- +E7E+E')ES departamentos*dep-
S
e&iniciones de F!"#I'N )#$ en )+E$,E ,$!LE para O+$)LE, $))ESS, SQLSE+.E+
)+E$,E ,$!LE departamentos
R
dep int 'O, '3LL 2+(M$+E 6EE,
departamento #arc=ar*"TT-,
S
)+E$,E ,$!LE personas
R
per int 'O, '3LL 2+(M$+E 6EE,
nombre #arc=ar*"TT-,
apellido9 #arc=ar*"TT-,
dep int 7O+E(4' 6EE +E7E+E')ES departamentos *dep-
S
Si la cla#e e5terna o &ornea *F!"#I'N )#$- est compuesta por #arias columnas o
queremos ponerle un nombre, utilizaremos la &rmula siguiente%
)O'S,+$(', &Qpersonas 7O+E(4' 6EE *dep, id- +E7E+E')ES departamentos*dep,id-.
Ejemplo F!"#I'N )#$ con $L,E+ ,$!LE
$L,E+ ,$!LE $ 7O+E(4' 6EE *dep- +E7E+E')ES departamentos*dep-
Ejemplo F!"#I'N )#$ mCltiple *#arias columnas- con $L,E+ ,$!LE%
$L,E+ ,$!LE $ )O'S,+$(', &Qpersonas 7O+E(4' 6EE *dep- +E7E+E')ES
departamentos*dep-
2ara borrar un cla#e e5terna *F!"#I'N )#$- utilizamos +O2, pero #ar0a segCn la base de
dato%
!orrar 7O+E(4' 6EE en MySQL $L,E+ ,$!LE personas +O2 7O+E(4' 6EE dep
!orrar F!"#I'N )#$ en O+$)LE, SQLSE+.E+ y $))ESS
$L,E+ ,$!LE personas +O2 )O'S,+$(', dep
La restriccin C,#C) se utiliza para limitar el rango de #alores que puede tener una columna.
Se pueden de&inir #arias restricciones C,#C) en una tabla.
Ejemplo C,#C) en MySQL
)+E$,E ,$!LE departamentos R dep int 'O, '3LL, departamento #arc=ar*"TT-, )?E)6
*depVW- S
Ejemplo C,#C) en O+$)LE, SQLSE+.E+ y $))ESS%
)+E$,E ,$!LE departamentos R dep int 'O, '3LL )?E)6 *depVW- departamento
#arc=ar*"TT-, S
Ejemplo C,#C) en $L,E+ ,$!LE en MySQL
$L,E+ ,$!LE departamentos $ )?E)6 *depVW-
Ejemplo C,#C) *con mCltiples columnas- en $L,E+ ,$!LE en MySQL
$L,E+ ,$!LE personas $ )?E)6 *perVW, edadVGT-
Ejemplo C,#C) en $L,E+ ,$!LE en O+$)LE, SQLSE+.E+ y $))ESS
$L,E+ ,$!LE departamentos $ )O'S,+$(', cQdepart )?E)6 *depVW-
Ejemplo C,#C) en $L,E+ ,$!LE con #arias columnas
$L,E+ ,$!LE personas $ )O'S,+$(', cQpersona )?E)6 *persVW,
nombreA@antonio@-
La restriccin D#FA%LT se utiliza para establecer un #alor por de&ecto a una columna.
Si no se especi&ica un #alor al insertar una &ila, entonces se podr el #alor por de&ecto
*E7$3L,- que tenga cada columna.
SQL D#FA%LT en la sentencia )+E$,E ,$!LE
)+E$,E ,$!LE pedidos R idpedido int, producto int, cantidad int, &ec=a date E7$3L,
4E,$,E*- S
Si al crear un pedido, no especi&icamos el #alor de la columna @&ec=a@, entonces para esa
columna se insertar por de&ecto obtenido de ejecutar la &uncion 4E,$,E*-, que de#uel#e la
&ec=a del sistema
En lugar de una &uncin, podemos insertar una #alor concreto @"WW9XW9XW9@ o cualquier otro
#alor.
SQL E7$3L, en la sentencia $L,E+ ,$!LE para MySQL
$L,E+ ,$!LE pedidos $L,E+ &ec=a E7$3L, @"W9"XW9XW9@
SQL E7$3L, en la sentencia $L,E+ ,$!LE para O+$)LE, SQLSE+.E+, $))ESS%
$L,E+ ,$!LE pedidos $L,E+ )OL3M' &ec=a SE, E7$3L, @"W9"XW9XW9@
2ara borrar E7$3L, en MySQL
$L,E+ ,$!LE pedidos $L,E+ &ec=a +O2 E7$3L,
2ara borrar E7$3L, en O+$)LE, SQLSE+.E+, $))ESS%
$L,E+ ,$!LE pedidos $L,E+ )OL3M' &ec=a +O2 E7$3L,
C"#AT# IND#. se utiliza para crear 0ndices en una tabla.
3n 0ndice sir#e para buscar datos rpidamente, y no tener que recorrer toda la tabla
secuencialmente en busca alguna &ila concreta.
Si una columna es 0ndice de una tabla, al buscar por un #alor de esa columna, iremos
directamente a la &ila correspondiente. La bCsqueda as0 es muc=o ms ptima en recursos y
ms rpida en tiempo.
Si esa columna de bCsqueda no &uese 0ndice, entonces tendr0amos que recorrer de &orma
secuencial la tabla en busca de algCn dato. 2or eso, es importante crear un 0ndice por cada tipo
de bCsqueda que queramos =acer en la tabla.
$ctualizar una tabla con 0ndices tarda ms tiempo porque tambiBn =ay que actualizar los
0ndices, as0 que solo se deben poner 0ndices en las columnas por las que buscamos
&recuentemente.
Se pueden crear 0ndices Y'()OS, es decir, 0ndices que no admiten #alores duplicados.
Sinta5is para SQL C"#AT# IND#.
)+E$,E ('E1 nombreindice
O' nombretabla *nombrecolumna-
La columna que &orma parte de este 0ndice admite #alores duplicados en su columna.
Sinta5is para SQL )+E$,E 3'(Q3E ('E1
)+E$,E 3'(Q3E ('E1 nombreindice
O' nombretabla *nombrecolumna-
La columna que &orma parte de este 0ndice 'O admite #alores duplicados en su columna,
porque es una cla#e Cnica.
Ejemplos para SQL C"#AT# IND#.
)reamos la 0ndice @indicepersonas@ sobre la columna @persona@ de la tabla @personas@
)+E$,E ('E1 indicepersonas
O' personas *persona-
Si queremos crear un 0ndice sobre #arias columnas, por ejemplo, apellido9 y apellido"
)+E$,E ('E1 indice"personas
O' personas*apellido9, apellido"-
La sentencia D"!& se utiliza para borrar de&initi#amente un 0ndice, tabla o base de datos.
D"!& IND#.
Sinta5is +O2 ('E1 para MySQL
$L,E+ ,$!LE nombretabla
+O2 ('E1 nombreindice
Sinta5is +O2 ('E1 para !" y O+$)LE
+O2 ('E1 nombreindice
Sinta5is +O2 ('E1 para $))ESS
+O2 ('E1 nombreindice
O' nombretabla
Sinta5is +O2 ('E1 para SQLSE+.E+
+O2 ('E1 nombretabla.nombreindice
D"!& TABL#
Se utiliza +O2 ,$!LE para borrar de&initi#amente una tabla
+O2 ,$!LE nombretabla
D"!& DATABAS#
Se utiliza para borrar una base de datos de&initi#amente.
+O2 $,$!$SE nombrebasededatos
Este comando SQL T"%NCAT# se utiliza para eliminar o borrar los datos que contiene una
tabla.
Es Ctil cuando slo se quiere borrar los datos, pero no se quiere borrar la tabla.
Este comando deja #ac0a una tabla, es decir, sin datos.
,+3')$,E ,$!LE nombretabla

Você também pode gostar