340 likes | 524 Views
INF340. PostgreSQL. Fernando Velasco fernando.velasco.p@mail.pucv.cl. Planificación específica. Creación de la BD. Creación de Tablas en la BD. Consulta las Tablas de la BD. SQL DDL. Lenguaje de definición de datos (DDL):
E N D
INF340. PostgreSQL Fernando Velasco fernando.velasco.p@mail.pucv.cl
Creación de la BD. Creación de Tablas en la BD. Consulta las Tablas de la BD.
SQL DDL. • Lenguaje de definición de datos (DDL): Una Tabla se compone de Columnas y almacena datos en las celdas de sus Filas. Para definir una tabla se usará CREATE TABLE, sentencia dentro de la cual debemos declarar las columnas que contendrá nuestra tabla, debemos declarar los nombres de variables e identificar el tipo de sus datos.
DDL - Crear Tabla. • Una tabla es una estructura de datos que organiza los DATOS en filas y columnas. • Fila: Registro. • Columna: Campo (atributo). • La sintaxis básica de la creación de tablas en sql es: • CREATE TABLE nombre_de_la_tabla • ( • atributo_1 integer, • atributo_2 character varying(20), • atributo_3 integer NOT NULL, • PRIMARY KEY (atributo_3) • );
DDL - Modificar Tabla. • Dsp de creada nuestra tabla existe la opción de modificarla: • Añadir, Borrar Columnas. • Añadir, Borrar Constraints. • Modificar el tipo de sus atributos. • Ejemplo: • ALTER TABLE nombre_de_la_tabla • ADD atributo_4 varchar, /*Añade una nueva columna a la tabla*/ • DROP COLUMN atributo_2, /*Elimina la columna ATRIBUTO_2*/ • ADD CONSTRAINT restriccion_1 CHECK(atributo_3>=0), /*Añade restricción de positividad al atributo_2*/ • ALTER COLUMN atributo_1 TYPE varchar; /*Modifica el tipo de sus atributos. Atributo_1 pasa de ser ENTERO a ser STRING*/
SQL DML. • Lenguaje de manipulación de datos (DML): Para que nuestra tabla sea utilizada como tal, debemos poder Insertar, Actualizar, y Borrar datos de ésta, debemos manipular los datos. Para esto utilizaremos las sentencias SQL; INSERT, UPDATE, y DELETE respectivamente.
DML. • Ingresaremos una nueva Fila, un nuevo registro. • La sintaxis básica de la INSERCIÓN de FILAS en tablas con sql es: • /*Inserta valores para todas las columnas*/ • INSERT INTO nombre_de_la_tabla • VALUES(NULL,’este-es-un-string’,123) • Ó • /*Inserta valores para algunas columnas*/ • INSERT INTO nombre_de_la_tabla(atributo_2, atributo_3) • VALUES(’este-es-un-string’,123)
DML. • Modificaremos una columna, el valor de un atributo. • La sintaxis básica de la ACTUALIZACIÓN de DATOS en tablas con sql es: • UPDATE nombre_de_la_tabla • SET atributo_4=‘newvalorX’, atributo_1=‘newvalorY’ • WHERE (atributo_3=123) • /*Actualiza el valor del atributo_4 a NEWVALORX, además actualiza el valor del atributo_1 a NEWVALORY, SÓLO DE LA FILA EN DONDE EL ATRIBUTO_3 SEA IGUAL a 123.*/
DML. • Borraremos una Fila, eliminaremos un registro. • La sintaxis básica de la ELIMINACIÓN de FILAS en una tablas con sql es: • DELETE FROM nombre_de_la_tabla • WHERE ventas_mensuales < 10000 • /*Elimina los registos de la tabla NOMBRE_DE_LA_TABLA donde los valores de la columna VENTAS_MENSUALES sean menosres a 10mil*/ • DELETE FROM nombre_de_la_tabla • --Elimina TODOS los registro de la tabla NOMBRE_DE_LA_TABLA*/
DML. • Seleccionaremos registros. • La sintaxis básica de la SELECCIÓN de FILAS o DATOS en una tablas con sql es: • SELECT * FROM nombre_de_la_tabla • WHERE nombre=‘Francisca’ • /*Selecciona TODOS LOS CAMPOS (columnas) de la tabla NOMBRE_DE_LA_TABLA en donde el valor de la columna NOMBRE sea igual a Francisca.*/ • SELECT rut • FROM nombre_de_la_tabla • /*Selecciona los valores de la columna RUT de la tabla consultada. Es decir, seleccionará solo una columna de la tabla.*/
Ejemplos. -- /*Las siguientes sentencias "select " no retornan los mismos registros: */ select * fromlibros_tablewhere precio isnull; select * fromlibros_tablewhere precio=0; -- /*Igualmente para campos de tipo cadena, las siguientes sentencias "select" no retornan los mismos registros:*/ select * from libros whereeditorial_tableisnull; select * from libros whereeditorial_table=''; --
Ejemplos. -- select * from libro where autor<>'Borges'; -- select titulo from libro where precio<=30; -- --Select con operadores aritméticos select precio*cantidad from libros; -- /*Multiples operadores lógicos*/ SELECT * FROM artist_table WHERE ((nombre=‘Francisca’ OR nombre=‘Fran’) AND apellido=‘Valenzuela’); --
Continuamos.. • En PostgreSQL existen múltiples funciones, y condiciones adicionales a las ya revisadas hasta el momento.Estas funciones y condiciones son muy útiles al momento de, por ejemplo: • Trabajar con nombres simplificados, en lugar de los nombres reales de las columnas de las tablas • Seleccionar valores dentro de un intervalo definido. • Seleccionar valores de una tabla y que muestre sólo los 10 primeros valores ordenados de forma creciente. • Saber el promedio, el mayor/menor valor, la suma de todos los valores de una columna de una tabla. • Entre muchos otros.
ALIAS Supongamos tenemos la tabla:CREATE TABLE personaje( apodo varchar(30) PRIMARY KEY, primer_nombre varchar(30), primer_apellido varchar(30), segundo_apellido varchar(30) ); Para tener claridad de los datos con los que trabajamos es necesario declarar las columnas de la tabla con nombres representativos, PERO al momento de trabajarlos se nos puede volver incómodo y/o tedioso trabajar con estos nombres. Para lo cual usaremos la sentencia ALIAS de la sgte. manera: SELECT primer_nombre AS nom FROM personaje; Esto es de mucha ayuda y bastante utilizado en los procedimientos almacenados y al momento de realizar funciones con PostgreSQL.
Manejo de Cadenas. PostgreSQL tiene algunas funciones para trabajar con cadenas de caracteres. Solo revisaremos las más básicas e importantes: -- /*char_length(string): Retorna la longitud del texto. Ejemplo:*/ selectchar_length('Hola'); -- retorna un 4. -- /*upper(string): Retorna el texto convertido a mayúsculas. Ejemplo:*/ selectupper('Hola'); -- retorna 'HOLA'. -- /*lower(string): Retorna el texto convertido a minúsculas. Ejemplo:*/ selectlower('Hola'); -- retorna 'hola'.
FECHA ACTUAL. current_date: retorna la fecha actual. Ejemplo: select current_date; --Retorna por ejemplo 2011-05-24
Ordenar Asc/Desc los registros. Podemos ordenar el resultado de un "select" para que los registros se muestren ordenados por algún campo, para ello usamos la cláusula "order by". Por ejemplo: select * from producto order by nombre; /*Muestra todos los datos de los productos ordenados alfabetica y ASCENDENTEMENTE (de menor a mayor) por el campo NOMBRE*/ -- Por defecto se ordena ASC, pero vale la pena especificarlo. select titulo,autor,precio from libro order by 3 DESC; /*Muestra el TITULO + el AUTOR + el PRECIO de la tabla LIBRO, ordenados DESCENDENTEMENTE por PRECIO («order by 3» corresponde al precio)*/
Between. Podemos seleccionar ciertos datos que cumplan con la condición de pertenecer a un intervalo definido. Por ejemplo: -- Esta sentencia tiene que cumplir con 2 condiciones.. select * from producto where (precio>0 and precio<1000); -- Mientras que el uso del between se considera como una sola condición, lo que hace más rápida su respuesta.. Select * from producto where precio between 0 and 1000; Este operador simplifica la consulta, y se puede emplear con tipos de datos numéricos y tipos de datos fecha y hora. Si agregamos el operador "not" antes de "between" el resultado se invierte, es decir, se recuperan los registros que están fuera del intervalo especificado. --Por ejemplo: Select from producto where precio not between 0 and 1000;
IN. Se utiliza "in" para averiguar si el valor de un campo está incluido en una lista de valores especificada. De igual forma se usará ’’not in’’ para seleccionar el valor de un campo que esté fuera de un conjunto definido Por ejemplo: -- Select * from libro where clasificacion NOT IN (‘+17’,‘+18’,’+21’); -- Select * from libro where anho_publicacion IN (2000, 2001, 2002, 2003, 2004, 2005);
LIKE – NOT LIKE.I • Se utiliza «like» para comparar cadenas de caracteres PARECIDAS a un patrón, es decir, que comiencen con una determinada letra, que tengan dentro de sus caracteres algún patrón definido, entre otros. Existen: • % comodín que coincide con una cadena de caracteres. • _ comodín que coincide con un único caractér. • [] comodín que coincide con un rango de caracteres. • [^ ] comodín que coincide con cualquier carácter distinto del patrón definido. • Por ejemplo: • -- Selecciono los datos de Libros donde el titulo del libro empiece con M. • Select * from libro where titulo like ‘M%’; • -- • /*Selecciono los datos de los Libros donde en el titulo aparezca una letra M.*/ • Select * from libro where titulo like ‘%M%’;
LIKE – NOT LIKE.II Por ejemplo: /*No recuerdo si el titulo del libro es BerlitS o BerlitZ o BerlitX. Entonces usamos el comodín _*/ Select * from libro where titulo like ‘Berlit_’; -- /*Selecciono los datos de los Clientes donde en el nombre empiece con una letra A, B, C, D, F.*/ Select * from cliente where nombre like ‘[A-F]%’; /*Así mismo, puedo seleccionar los nombres que NO empiecen con esas letras*/ Select * from cliente where nombre like ‘[^A-F]%’; -- /*Selecciono los datos de los autos con patente de carabineros.*/ Select * from auto where (patente like ‘Z*____’ OR patente like ‘RP*____’);
GroupBy. Usamos GROUP BY cuando queremos seleccionar registros que estén agrupados por un valor definido, en la mayoría de los casos se ocupa junto con COUNT(*) para contar la cantidad de registros de una determinada ocurrencia. Por ejemplo: SELECT nombre, count(*) from cliente group by nombre; /*Devuelve el nombre, y la cantidad de ocurrencias de ese nombre en la tabla cliente.*/
Distinct. Con la cláusula "distinct" se especifica que los registros con ciertos datos duplicados sean obviadas en el resultado. Por ejemplo, queremos conocer todos los autores de los cuales tenemos libros, si utilizamos esta sentencia: select autor from libro; --Aparecen repetidos. /*Para obtener la lista de autores sin repetición usamos:*/ select distinct autor from libro; --También podemos tipear: select autor from libro group by autor; -- --Para contar los distintos usamos: select count(distinct autor) from libro;
Limit. Las cláusulas "limit" y "offset" se usan para restringir los registros que se retornan en una consulta "select". La cláusula limit recibe un argumento numérico positivo que indica el número máximo de registros a retornar; la cláusula offset indica el número del primer registro a retornar. El número de registro inicial es 0. Ejemplo: /*Selecciona los datos de 3 libros, empezando del primer registro*/ select * from libro limit 3 offset 0; -- /*Selecciona los datos de 3 libros, empezando del décimo registro*/ select * from libro limit 3 offset 11; -- -- Es conveniente utilizar la cláusula order by cuando utilizamos limit y offset, por ejemplo: SELECT * FROM libro ORDER BY precio DESC LIMIT 10;
http://www.postgresqlya.com.ar Hagamos en conjunto una clase agradable y participativa.