Guía SQL Server 2008

download Guía SQL Server 2008

of 12

Transcript of Guía SQL Server 2008

  • 8/2/2019 Gua SQL Server 2008

    1/12

    Diego A. Carrin Neira / Ing. Sistemas / 2012

    Para crear una DB mediante codigo, se hace de la siguiente manera:USEmasterGO

    CREATEDATABASENombreDB

    GO

    ...

    Para cambiar el nombre de una DB:ALTERDATABASENomActualDBMODIFYNAME=NuevoNombreDB

    GO

    tambin:EXECSP_RENAMEDB'NomActualDB','NvoNombreDB'

    Para eliminar una DB:DROPDATABASENombreDB

    BETWEEN AND: Se utiliza dentro del WHERE como una condicin para limitar dentro deun intervalo el resultado de una consulta:SELECT*FROMTablaWHERECampoBETWEEN Valor1 AND Valor2

    DISTINCT: Para eliminar tuplas que tengan los mismos datos al ejecutar la consulta:SELECTDISTINCTCampo1,Campo2FROMTabla

    FROM: Para definir las tablas de las cuales se van a seleccionar los campos:SELECT*FROMTabla

    LIKE: Se utiliza dentro del WHERE como una condicin para comparar un campo en unacadena alfanumrica, es decir, para realizar una bsqueda dentro de los registros:SELECT*FROMTablaWHERECampoLIKE'NumeroCaracter%'

    Para los criterios de bsqueda, tener en cuenta: '_' Resultados que contengan solo 1 carcter. '_ _' Resultados que contengan solo 2 caracteres, etc. (Lineas unidas) 'A%' Resultados que empiecen por A. '_A%' Resultados que su segundo carcter sea A. '_ _A%' Resultados que su tercer carcter sea A, etc. '%A%' Resultados que contengan A. 'A%B%' Resultados que empiecen por A y contengan B, etc. '%A%B%' Resultados que contengan A y B, etc. '_A%B%' Resultados que la segunda letra sea A y contengan B, etc.

    '[A-B]%' Resultados que esten entre A y B, etc. '[A-B]%' Resultados desde A hasta B, etc.

  • 8/2/2019 Gua SQL Server 2008

    2/12

    Diego A. Carrin Neira / Ing. Sistemas / 2012

    '[A-B]%C%' Resultados desde A hsta B y que contenga C, etc. '[A,B]%' Resultados solo con A y B, etc. '[A,B]%C%' Resultados solo con A y B, que contengan C, etc. 'A[BC]% ' Resultados que empiecen con AB o AC, etc. '%A' Resultados que terminen en A.

    '%A_' Resultados que cuya penultima letra sea A, etc.

    IN: Se utiliza dentro del WHERE, para alterar el uso del OR. Su funcin es retornar en laconsulta el resultado de al menos uno de los valores:SELECT*FROMTablaWHERECampoIN('Valor1','Valor2','ValorN')

    ORDER BY: Para especificar el criterio de ordenacin del conjunto de resultados.SELECTCampo1FROMTablaORDERBYCampo1

    Para ordenar de forma ascendente:SELECTCampo1FROMTablaORDERBYCampo1 ASCPara ordenar de forma descendente:SELECTCampo1FROMTablaORDERBYCampo1 DESC

    Para ordenar, tambin se puede con el nmero del campo:SELECTCampo1,Campo2, Campo3FROMTabla

    ORDERBY 2(Odenar solo el campo2)

    Para especificar el orden, se puede con los nmeros de los campos:SELECTCampo1,Campo2, Campo3FROMTabla

    ORDERBY 2, 1, 3 (Ordenar primero el campo2, luego el 1 y luego el 3)

    ALIAS: Para cambiar temporalmente el nombre a una tabla, con el fin de facilitar elllamado de los campos. Este cambio no se aplica fsicamente, solo virtualmente:SELECTTB.Campo1,TB.Campo2,TB.CampoNFROMTablaASTB

    tambin:SELECTTB.Campo1,TB.Campo2,TB.CampoNFROMTablaTB

    WHERE: Se utiliza despus del FROM para aplicar una condicin a la consulta:SELECT*FROMTablaWHERECondicin

  • 8/2/2019 Gua SQL Server 2008

    3/12

    Diego A. Carrin Neira / Ing. Sistemas / 2012

    CREATE

    Para crear una DB mediante codigo, se hace de la siguiente manera:USEmaster

    GOCREATEDATABASENombreDB

    ...

    Para crear las tablas o registros que conformarn la base de datos:CREATETABLETabla(Campo1TipoDato(Tamao)NOTNULL,Campo2TipoDato(Tamao)NULL,...)

    Para declarar la PK dentro de la creacin de la tabla:CREATETABLETabla(Campo1TipoDato(Tamao)NOTNULL,

    Campo2TipoDato(Tamao)NULL,...

    CONSTRAINTPKTablaPRIMARYKEY(Campo1))

    Crear Vistas (create view)Una vista se puede considerar como una tabla virtual, lo que quiere decir que noalmacena datos fsicamente. La podemos usar cuando nos interesa que los usuariostengan acceso a una parte de la informacin de una tabla, pero no a toda la tabla:CREATEVIEWNombreVistaASSELECTCampo1, Campo2,FROMTabla

    Para conocer el contenido de esta vista:

    SELECT*FROMNombreVista

    Crear ndices (create index)Un ndice permite acceder a diferentes registros de una misma tabla a travs de uncampo (o campos clave), lo cual permite un acceso mucho ms rpido a los datos.CREATEUNIQUEINDEXNombreIndiceONTabla(PKCampo)

    Para saber cual es el ndice de una tabla:EXECsp_helpindex'Tabla'

    Para ver todos los ndices de la base de datos activa creados:SELECTNAMEFROMSYSINDEXESWHERENAMELIKE'I%'

    ALTER

    Para modificar o actualizar el valor asignado a una tabla:ALTERTABLETablaSETCampoaModificar='NuevoValor'WHERECondicion

    Para aadir un nuevo campo a una tabla existente:ALTERTABLETablaADDNvoCampoTipoDato(Tamao)

    Para modificar el tamao del campo de una tabla:ALTERTABLETablaALTERCOLUMNCampo TipoDato(NvoTamao)

  • 8/2/2019 Gua SQL Server 2008

    4/12

    Diego A. Carrin Neira / Ing. Sistemas / 2012

    Para modificar el nombre de un campo de la tabla:EXECsp_rename'Tabla.CampoActual','NvoNombreCampo'

    Para aadir un constraint, es decir, para asignar una restriccin a un campo:ALTERTABLETablaADDCONSTRAINTNombreConstraintCHECK(Parametros)

    Para aadir una PK fuera de la creacin a una tabla, si no se le asign:ALTERTABLETablaADDCONSTRAINTPKPRIMARYKEY(CampoNvaPK)

    Para cambiarle laPK a una tabla, primero se borra la que tiene por el constraint:ALTERTABLETablaDROPCONSTRAINTNombreConstPK

    Luego, se aade el constraint de la nueva PK:ALTERTABLETablaADDCONSTRAINTNomConstNvaPKPRIMARYKEY(CampoNvaPK)

    Para aadir una FK fuera de la creacin a una tabla:ALTERTABLETabla2ADDCONSTRAINTFKFOREIGNKEY(CampoTabla2)REFERENCESTabla1(CampoPKa)

    DROPPara eliminar una DB:DROPDATABASENombreDB

    Para eliminar una tabla de la DB:DROPTableTabla

    Para eliminar un campo de una tabla:ALTERTABLETablaDROPCOLUMNCampo

    Para eliminar un constraint de una tabla:ALTERTABLETablaDROPCONSTRAINTNombreConstraint

    Para eliminar el indice de una tabla:DROPINDEXTabla.NombreIndice

    TRUNCATE

    Para eliminar todos los registros de una tabla, pero conservar la tabla:TRUNCATETABLETabla

    INSERT

    Para insertar un nuevo registro a una tabla:

    INSERTINTOTabla(Campo1,Campo2,...CampoN)VALUES(ValorCampo1,ValorCampo2,...ValorCampoN)

    Variantes:

    Tambin se pueden insertar si necesidad de poner los nombres de los campos:INSERTINTOTablaVALUES(Campo1,Campo2,...CampoN)

    No interesa el orden en el que se pongan los campos:INSERTINTOTabla(Campo3,Campo1,Campo2,...ValorCampoN)VALUES(ValorCampo3,ValorCampo1,ValorCampo2,...ValorCampoN)

    Se pueden poner solamente los campos que no admitan valores nulos:INSERTINTOTabla(Campo1,Campo2)VALUES(ValorCampo1,ValorCampo2)

  • 8/2/2019 Gua SQL Server 2008

    5/12

    Diego A. Carrin Neira / Ing. Sistemas / 2012

    Donde los campos 1 y 2 se declararon NOT NULL inicialmente. Se pueden copiar todos los registros de una tabla a otra nueva tabla creada,

    siempre y cuando los campos esta ultima sean del mismo tipo de datos:INSERTINTONvaTablaaLlenarSELECT*FROMTablaActual

    Se puede crear una copia exacta de una tabla existente, la cual va a contener los

    mismos campos con sus tipos de datos y los registros que tenga almacenados:SELECT*INTONombreTablaCopiaFROMTablaActual

    UPDATE

    Para actualizar o modificar el valor existente de un campo:UPDATETablaSETCampo='NuevoValor'WHERECondicion

    DELETE

    Utilizada para eliminar uno o varios registros de un campo o tabla:DELETEFROMTablaWHERECondicion

    Para eliminar todos los registros de una tabla:DELETEFROMTabla

    SELECT

    Indica que la sentencia de SQL que queremos ejecutar es de seleccin.Para mostrar un mensaje:SELECT ('Bienvenido a SQL Server!')

    Para mostrar un mensaje que concatene los valores adquiridos:SELECTCampo1,' mensaje 'AS' ',Campo2FROMTabla2

    Para mostrar solo algunos campos de una tabla con sus registros:SELECTCampo1,Campo2, CampoNFROMTabla

    Para mostrar todos los campos de una tabla con sus registros:SELECT*FROMTabla

    Para renombrar las columnas al mostrar sus registros:SELECTCampo1, 'NombreaPoner',Campo2AS'NombreaPoner'FROMTabla

    ABS: Para hallar el valor absoluto:SELECTABS(Numero)

    CEILING: Para mostrar el valor entero superior o igual a un nmero:SELECTCEILING(Numero)

    FLOOR: Para mostrar el valor entero inferior o igual a un nmero:SELECTFLOOR(Numero)

    POWER: Para calcular la potencia de un nmero:SELECTPOWER(Numero, Exponente)

  • 8/2/2019 Gua SQL Server 2008

    6/12

    Diego A. Carrin Neira / Ing. Sistemas / 2012

    SQRT: Para calcular la raz cuadrada de un valor:SELECTSQRT(Numero)

    ASCII: Para convertir una letra o nmero a cdigo ASCII:SELECTASCII('LetraoNumero')

    UNICODE: Para convertir una letra, cadena o nmero a UNICODE:SELECTUNICODE('LetraCadenaoNumero')

    LEN: Para mostrar la cantidad de caracteres que tiene un campo o una cadena:SELECTLEN(Campo) AS'Culquier Nombre'FROMTabla

    SELECTLEN('Hola Mundo') AS'Culquier Nombre'

    DATALENGHT: Tambin se puede Utilizar:SELECTDATALENGTH(Campo) AS'Culquier Nombre'FROMTabla

    SELECTDATALENGTH('Hola Mundo') AS'Culquier Nombre'

    SUM: Para hallar la suma total de un campo nicamente numrico:SELECTSUM(Campo)FROMTabla

    AVG: Para hallar el promedio de los valores de un campo numrico:

    SELECTAVG(Campo)FROMTabla

    COUNT: Para hallar la cantidad de registros que hay en un campo:SELECTCOUNT(Campo)FROMTabla

    O tambin se puede con:SELECTCOUNT(*)FROMTabla

    MAX: Para hallar cual es el valor mximo que hay en un campo:SELECTMAX(Campo)FROMTabla

    MIN: Para hallar cual es el valor mnimo que hay en un campo:SELECTMIN(Nota1)FROMNOTAS

    GROUP BY: Para cuando seleccionamos uno o ms campos de una tabla y aparece unafuncin de agregacin aplicndose a un campo. Dentro de esta clusula solo se ponenlos campos que no estn siendo operados por la funcin de agregacin.SELECTCampo1,FunciondeAgregado(Campo2)FROMTablaGROUPBYCampo1

  • 8/2/2019 Gua SQL Server 2008

    7/12

    Diego A. Carrin Neira / Ing. Sistemas / 2012

    HAVING: Selecciona o rechaza un grupo de registros retornados por GROUP BY:Para el siguiente caso, mostrar el campo1 y el valor de la funcion de agregado delcampo2, en donde este ultimo valor sea mayor, menor, diferente o igual a un valor dado:SELECTCampo1,FunciondeAgregado(Campo2)FROMTablaGROUPBYCampo1HAVINGFunciondeAgregado(Campo2)!==5Valor

    CHAR: Para convertir un cdigo ASCII en una cadena de caracteres:SELECTCHAR(CodigoASCII)

    RTRIM: Para quitar los espacios en blanco que hayan por la derecha:SELECTRTRIM('ABC ')

    LTRIM: Para quitar los espacios en blanco que hayan por la izquierda:SELECTLTRIM(' ABC')

    LEFT: Para mostrar primeros n caracteres de una cadena:SELECTLEFT('Mensaje', Numero)

    RIGHT: Para mostrar ltimos n caracteres de una cadena:SELECTRIGHT('Mensaje', Numero)

    UPPER: Para cambiar un campo a mayscula:SELECTUPPER(Campo)ASCampoFROMTabla

    LOWER: Para cambiar un campo a minscula:SELECTLOWER(Campo)ASCampoFROMTabla

    Para cambiar los datos de forma permanente en la tabla a mayscula o a minscula:UPDATETablaSETCampo=UPPER(Campo)

    UPDATETablaSETCampo=LOWER(Campo)

    REPLACE: Para reemplazar una posicin en una cadena de caracteres:SELECTREPLACE(CadenaoNumero, Posicion, Reemplazo)

    STUFF: Para insertar una cadena dentro de otra existente:SELECTSTUFF('cadenainicial', posinicial, longitud,'cadenaainsertar')

    REVERSE: Para mostrar una cadena, campo o numero invertido:SELECTREVERSE(Campo) AS'Culquier Nombre'FROMTabla

    REPLICATE: Para repetir n veces una cadena o un valor de un campo:SELECTREPLICATE('Cadena', Cantidad)

  • 8/2/2019 Gua SQL Server 2008

    8/12

    Diego A. Carrin Neira / Ing. Sistemas / 2012

    SUBSTRING: Para mostrar una parte de una cadena o valor de un campo:SELECTSUBSTRING('Cadena', Posicion, CantidadaMostrar)

    CAST: Para extraer y operar cada uno de los caracteres de una cadena VARCHARprimero se convierte a INT:SELECTCAST(SUBSTRING(CampoCadena, Posicion, CantidadaMostrar)ASINT)

    FROMTABLALuego, para operar cada uno de los caracteres de un campo de una cadena se hace lamisma conversin anterior:SELECTNombre,Cedula,CAST(SUBSTRING(CampoCadena, Posicion, CantidadaMostrar)ASINT)+CAST(SUBSTRING(CampoCadena, Posicion, CantidadaMostrar)ASINT)+CAST(SUBSTRING(CampoCadena, Posicion, CantidadaMostrar)ASINT) + AS'Nombre Campo'FROMTabla

    SPACE: Para mostrar n espacios en blanco:SELECTSPACE(Numero)

    Para mostrar un mensaje separado por n espacios:SELECT'Hola'+SPACE(Numero)+'Mundo!'

    ROUND: Para redondear un decimal:SELECTROUND(Decimal, Numero)

    TOP: Para mostrar n registros de una tabla:SELECTTOP Cantidad(Campo)FROMTabla

    O, para mostrar todos los campos:SELECTTOP Cantidad *FROMTabla

    Para mostrar la fecha y hora actual del sistema:SELECTSYSDATETIME()

    SELECTGETDATE()

    Para mostrar solo el da actual:SELECTDAY(GETDATE())

    Para mostrar solo el mes actual:SELECTMONTH(GETDATE())

    Para mostrar solo el ao actual:SELECTYEAR(GETDATE())

    DATEPART: Retorna la parte especfica de una fecha:Para mostrar el ao actual:SELECTDATENAME(YEAR,GETDATE())

    Para mostrar solamente el nmero mes actual:SELECTDATEPART(MONTH,GETDATE())

    Para mostrar cuantas semanas han transcurrido hasta ahora:SELECTDATEPART(WEEK,GETDATE())

    Para mostrar el nmero de das transcurridos del ao:

  • 8/2/2019 Gua SQL Server 2008

    9/12

    Diego A. Carrin Neira / Ing. Sistemas / 2012

    SELECTDATEPART(DAYOFYEAR,GETDATE())

    Para mostrar el da del mes actual:SELECTDATEPART(DAY,GETDATE())

    Para mostrar cuantas horas lleva el da actual:SELECTDATEPART(HOUR,GETDATE())

    Para mostrar los minutos de la hora actual:

    SELECTDATEPART(MINUTE,GETDATE())Para mostrar los segundos que lleva el minuto de la hora actual:SELECTDATEPART(SECOND,GETDATE())

    Para mostrar los milisegundos que lleva el segundo del minuto de la hora actual:SELECTDATEPART(MILLISECOND,GETDATE())

    DATENAME: Retorna el nombre de la parte especfica de una fecha:Para mostrar el ao actual:SELECTDATENAME(YEAR,GETDATE())Para mostrar solamente el nombre mes actual:SELECTDATENAME(MONTH,GETDATE())

    Para mostrar el nmero de das transcurridos del ao:SELECTDATENAME(DAYOFYEAR,GETDATE())

    Para mostrar el da actual:SELECTDATENAME(DAY,GETDATE())

    Para mostrar el nombre del da actual:SELECTDATENAME(WEEKDAY,GETDATE())

    DATEADD: Para agregar aos, meses, das, etc., a una fecha dada:Para agregar n aos a una fecha:SELECTDATEADD(YEAR, Cantidad,'YYYY-MM-DD')

    Para agregar n meses a una fecha:SELECTDATEADD(MONTH, Cantidad,'YYYY-DD-MM')

    Para agregar n das a una fecha:SELECTDATEADD(DAY, Cantidad,'YYYY-DD-MM')

    Para agregar n horas a la fecha actual:SELECTDATEADD(HOUR, Cantida,GETDATE())

    Para agregar n minutos a la fecha actual:SELECTDATEADD(MINUTE, 5,GETDATE())

    As sucesivamente para las dems.

    DATEDIFF: Para calcular el intervalo de tiempo entre dos fechas:

    Para calcular los aos que hay de diferencia:SELECTDATEDIFF(YEAR,'YYYY-DD-MM','YYYY-DD-MM')Para calcular los meses que hay de diferencia:SELECTDATEDIFF(MONTH,'YYYY-DD-MM','YYYY-DD-MM')

    Para calcular los das que hay de diferencia:SELECTDATEDIFF(DAY,'YYYY-DD-MM','YYYY-DD-MM')

    Para calcular las horas que hay de diferencia:SELECTDATEDIFF(HOUR,'YYYY-DD-MM','YYYY-DD-MM')

    Para convertir una fecha:SELECTCAST(FechaASDATETIME)

  • 8/2/2019 Gua SQL Server 2008

    10/12

    Diego A. Carrin Neira / Ing. Sistemas / 2012

    CAST: Para cambiar el tipo de dato de un campo:SELECTCAST(CampoASNuevoTipoDato(Tamao))FROMTabla

    UNION:Consiste en tomar dos tablas y obtener una tabla con las filas de las dos tablas,en el resultado aparecern las filas de una tabla y, a continuacin, las filas de la otratabla. Las dos tablas deben tener el mismo nmero de columnas y el mismo tipo dedatos. La tabla resultante hereda los encabezados de la primera tabla y solo puede haberuna nica clausula ORDER BY (si se quiere) al final:SELECTTabla1.CampoFROMTabla1UNIONSELECTTabla2.CampoFROMTabla2

    ORDERBYCampo

    Si se desea hacer la unin con ms tablas, se agrega otro UNION con la misma sintaxis.

    EXCEPT: Aparecen en la tabla resultante los registros de la primera tabla que noaparecen en la segunda:SELECTTabla1.CampoFROMTabla1EXCEPTSELECTTabla2.Campo

    FROMTabla2

    INTERCECT: En el resultado de la interseccin aparecen las filas que estnsimultneamente en las dos tablas:SELECTTabla1.CampoFROMTabla1INTERSECT

    SELECTTabla2.CampoFROMTabla2

    Se obtiene una tabla con los campos de la primera tabla unidos a los campos de lasegunda tabla, y los registros de la tabla resultante son todas las posiblesconcatenaciones de los registros de la primera tabla con los registros de la segundatabla. Se agrega un WHERE para relacionar las dos tablas, la PK de una tabla con la FKde la otra:SELECTTabla1.Campo,Tabla2.Campo

    FROMTabla1,Tabla2WHERETabla1.CampoPK=Tabla2.CampoFK

  • 8/2/2019 Gua SQL Server 2008

    11/12

    Diego A. Carrin Neira / Ing. Sistemas / 2012

    Si se quiere relacionar con una tercera tabla, se aade un AND al final del WHERE con elnombre de la siguiente tabla con la misma sintaxis:SELECTTabla1.Campo,Tabla2.Campo,Tabla3.CampoFROMTabla1,Tabla2WHERETabla1.CampoPK=Tabla2.CampoFK ANDTabla2.CampoPK=Tabla3.CampoPK

    Permite combinar registros de dos o ms tablas en una base de datos relacional. Losposibles tipos de JOIN son: CROSS, INNER, LEFT, RIGHT, SELF, OUTER FULL.

    CROSS JOIN: Retorna el producto cartesiano de dos o ms tablas, es decir, combinacada registro de una tabla con cada registro de otra tabla. CROSS JOIN no debera llevarla clausula ON:SELECT*FROMTabla1CROSSJOINTabla2

    El CROSS, casi no se utiliza, ya que solo se puede utilizar una coma (,) para separar las

    tablas:SELECT*

    FROMTabla1,Tabla2

    INNER JOIN: Se utiliza para cuando quiera relacionar dos tablas que tienen campos encomn (mismo tipo de dato y tamao) en una o ms columnas:SELECTTabla1.Campo,Tabla2.CampoFROMTabla1INNERJOINTabla2ONTabla1.CampoPK=Tabla2.CampoFK

    Si se quiere relacionar con una tercera tabla, se aade INNER JOIN al final del ON con elnombre de la siguiente tabla y con la misma sintaxis:SELECTTabla1.Campo,Tabla2.Campo,Tabla3.CampoFROMTabla1INNERJOINTabla2ONTabla1.CampoPK=Tabla2.CampoFKINNERJOINTabla3ONTabla2.CampoPK=Tabla3.CampoPK

    LEFT JOIN: Se utiliza cuando hay registros de la primera tabla que noestn relacionados con los registros de la segunda tabla y nos interesa que salgan en elresultado:SELECTTabla1.Campo,Tabla2.CampoFROMTabla1LEFTJOINTabla2ONTabla1.CampoPK=Tabla2.CampoFK

    RIGHT JOIN: Se utiliza cuando hay registros de la segunda tabla que noestn relacionados con los registros de la primera tabla y nos interesa que salgan en elresultado:SELECTTabla1.Campo,Tabla2.CampoFROMTabla1RIGHTJOINTabla2ONTabla1.CampoPK=Tabla2.CampoFK

    OUTER JOIN FULL JOIN: Combina los resultados de dos o ms tablas, tengan o nocoincidencia entre s:SELECTTabla1.Campo,Tabla2.CampoFROMTabla1FULLJOINTabla2ONTabla1.CampoPK=Tabla2.CampoFK

    http://es.wikipedia.org/wiki/Registro_%28base_de_datos%29http://es.wikipedia.org/wiki/Tabla_%28base_de_datos%29http://es.wikipedia.org/wiki/Base_de_datos_relacionalhttp://es.wikipedia.org/wiki/Base_de_datos_relacionalhttp://es.wikipedia.org/wiki/Tabla_%28base_de_datos%29http://es.wikipedia.org/wiki/Registro_%28base_de_datos%29
  • 8/2/2019 Gua SQL Server 2008

    12/12

    Diego A Carrin Neira / Ing Sistemas / 2012

    SELF JOIN: Se utiliza cuando un campo de una tabla debe referenciar un campodiferente en la misma tabla.