Informática


SQL (Structured Query Language)


Select

Select (sentencia)

Esta instrucción especifica la o las columnas que quiero traer o recuperar

Sintaxis

Select column_name,

From

Especifica la tabla donde se encuentra las columnas que quiero traer o recupera

Sintaxis

From table name

Entonces la sintaxis estaria formada de la siguiente forma

Select column_name

From table_name

Ejemplo

Select au_name, au_lname

From authors

Entonces la sentencia select aparecerá de la siguiente forma

Au_name au_lname

Daniel Gaito

Gabriel Feldman

Cintia Hefman

Analia Stumbo

Nota: hay que tener en cuenta que cuando se trae mas de una columna esta tiene que estar separada por coma (,)

Eligiendo todas la columnas (*)

El asterisco (*) representa toda las columnas de las tabla que quiero traer o recuperar

Sintaxis

Select *

From table_name

Ejemplo

Select *

From publishers

Entonces aparecera

Pub_id Pub_name city state

0736 Oracle pres Buenos aires Cap

6546 Sql server Entre rios E R

Distinct

El distinct elimina las filas que esten duplicadas del resultado de una sentecia select

Si no se especifica el distinct se vera todas las filas incluida las duplicadas

Sintaxis

Select distinct column_name

From table_name

Ejemplo

Sin distinct

Select au_id

From titleauthor

Au_id

175175

313313

313133

1234567

4567899

4567899

3216549

7987987

7987987

3216549

Con distinct

Select distinct au_id

From titleauthor

175175

313313

313133

1234567

4567899

1234567

1234567

3216549

213213

7987987

Nota: las numeros que estan en negrita seria los que no se repiten con la sentencia Distinct

Columna especifica

Si se quiere traer una columna/s especifica la la sintaxis seria

SELECT column_name

From table_name

Ejemplos

Select pub_id, pub_name

From publishers

Pub_id pub_name

  • oracle press

  • Lobos marinos en el ciudad lujuriosa

  • Ll llsl s in china

Nota: recuerde que el orden en que pone las columnas (select) es el orden en que va aparecer

Ejemplo

Select pub_id, pub_name

From publishers

Pub_id pub_name

  • oracle press

  • lobos marinos en la ciudad lujuri

select pub_name, pub_id

from publishers

pub_name Pub_id

oracle press 736

lobos marinos 737

Alias

El alias va ser el nombre que aparecerá en la pantalla de la columna que quiero que tenga el alias

Sintaxis

Select colunm_name Alias

From table_name

Ejemplo

Select pub_id “ NumPub”, pub_name “Nombre”

From publishers

NumPub Nombre

  • oracle pres

  • sql server

  • xxx

Resumen

Lo visto hasta ahora se reduce que con la sentencias SELECT y FROM puedo ver los datos de la forma que mas quiera. Siempre y cuando se conserven ciertas reglas del lenguaje

SELECT ............

FROM Table_name

Condicion

Clausula where

La clausula where especifica el criterio por el cual las filas apareceran

Sintaxis

Select column_name

From table_name

WHERE sarch_condition

Ejemplo

Select id,f_name, l_name

From authors

Where id = 5

En el where se pueden utilizar operaciones de comparacion, como opereraciones logicas

Operaciones de comparacion

=, <,>, >=,=<, <>,

where id>5,where id <> 15, etc

Operaciones logicas

and, or

where (id = 5 or id > 6)

Ejemplo

Select title_id, type, advance

From titles

Where (type = ` business' or type = `psycologhy')

And advance > 5500

Vista

Title_id type advance

Bu1300 business 5600

Xx3168 psicology 5684

Fsalk psicology 7893

Vbad s business 10000

Between and not between

El between especifica entre que rango se encuntra la busqueda

El not between encuentra todo lo que no este especificado en el rango

Sintaxis

Select column_name

From table_name

Where search_condition BETWEEN rango and rangoxxxxxx

Ejemplo

Select title_id, ytd_sales

From titles

Where ytd_sales BETWEEN 4095 and 12000

Vista

Title_id ytd_sales

Bus313 4095

Djffskj 12000

Sdfk 5896

Sdafk 10597

Nota: el between incluye los rangos especificados (4095,12000)

Ahora si no quiero incluir 4095 y 12000 usaremos las operaciones de comparacion

Where yet_sales > 4095 and ytd_sales < 12000

Vista

Title_id ytd_sales

Sdfk 5896

Sdafk 10597

Not between

Select title_id, ytd_sales

From title

Where ytd_sales NOT BETWEEN 4095 and 12000

Vista

Title id ytd_sales

Sdfj 4094

Sdffsda 12001

Ssadf 32169

Nota: trae como resultado todo lo que encuntra fuera del rango que va entre 4095 y 1200

In and not in

In: encuentra todas la filas que incluye la clausula in

Not in:encuentra todas las filas que no incluye el not in

Sintaxis

Select column_name

From table_name

Where search_condition in ( )

Ejemplo

Select au_lname, state

From authors

Where state in (`ca','in','md')

Vista

Au_lname state

White in

Black ca

Blue in

Yelow md

Brown in

Otra forma de obtener este resultado seria atraves de un conector lógico or

Pero seria muy engorroso

Select au_lname, state

From authors

Where state = `ca' or state = `in' or state = `md'

Not in

Select au_lname, state

From authors

Where state not in (`ca','md')

Vista

Au_lname state

White in

blue in

Brown in

Like

Like

El like selecciona las filas que contiene parte de los campos especificados por el carácter string en el like

Existen varios tipos

Like `mc%'

Busca todos los nombres que comiencen con MC (mcbaden)

Like `%inger'

Busca todos los nombres que terminen con letras inger (Ringer)

Like `%en%'

Busca todos los nombres que contengan las letras en (mcbadeen, green)

Ejemplo

Select phone

From authors

Where phone like `415%'

Vista

Phone

415-3164

415-6499

415-6499

Not like

Encuentra todas las filas que se encuentra fuera del not like

Select phone

From authors

Where phone not like `415%'

Phone

313-4597

316-5555

555-5555

Is null and is not null

Null: encuetra todas las filas cuyo campo sea null

Is not null: encuentra tadas las filas cuyo campe se not null

Ejemplo

Select title_id, advance

From titles

Where advance < 5000

And advance is null

Vista

Title_id advance

Sdf sa 0.00

Sdfsdg null

Asklñjf 2275

Sdaf 4000

Select title_id, advance

From title

Where advance is not null

Order by

La clausula order by es el rusultado del ordenamiento de una o mas columnas hasta 16 columnas

Sintaxis

Select .........

From..............

Where ................

Order by column_name

Ejemplo

Select pub_id, type, title_id

From title

Order by pub_id

Pub_id type title_id

0736 hhklh ¡khkhkl

0739 ñjhkjh xxxxxx

0915 jjhkh 13131

1523 lkjklj kjhkjh

5555 313 kñkhjlk

Nota: los datos fueron ordenados por pub_id en forma ascendente, si queremos hacerlo en forma descendente usaremos la palabra desc al final de la colunmna a ardernar

Ejemplo

Select pub_id, type, title_id

From title

Order by pub_id desc

Si queremos ordenar por mas de una columna entonces usaremos la siguiente sintaxeis

Select pub_id, type, title_id

From title

Order by pub_id desc, type

Otra forma de hacer esto sin tener que tipear nuevamente las columnas es atraves de números que especifica la columna a ordenar

Select pub_id, type, title_id

From title

Order by 1

Nota : el numero 1 especifica la columna a ordenar (pub_id)

Resumen

Por lo visto hasta ahora en la clausula where tenemos varios tipos se subcondiciones

Ejemplo

Like

Betweenn

In

Not in

Etc

Select type, id. Lname,F_name, state, price

From authors

Where lname like “%ed”

Id in (5,7,8)

price between 2 and 5

order by

3,id

Mantenimiento de una tabla

INSERT

Cuando queremos insertar una fila en una tabla lo debemos usar la clausula insert

Sintaxis

Insert into table_name

Values (constant1,constant2, ......)

Ejemplo

INSERT into titles

VALUES (`bu222', `faster', `business',1389, null,null,null,'ok',' 06/14/95')

Nota: aca se inserto en todas las columnas de la tabla title

Podemos seleccionar las columnas que queremos insertar datos

Insert into stores (stor_id, stor_name)

Values (129,'mary')

Tambien se puede copiar de una tabla existente a otra tabla

Insert newpublishers (pub_id, pub_name)

Select pub_id, pub_name

From publishers

Where pub_name = `new books'

Update

El update puede modificar una sola fila un grupo de fila o todas las filas de una tabla. Se puede modificar de una tabla a la vez

El nuevo dato puede ser una constante o una expresion que nosotros queramos o tambien pueden ser datos de otra tabla.

Syntaxis

UPDATE table_name

Set column_name

Where serch condition

Set :

Esta clausula especifica la o las columnas que van a ser modificadas con su nuevo valor.

La clausula where determina cuales son las filas a cambiar

Ejemplo

UPDATE authors

Set au_lname = `macBaden'

Where au_lname = `Daniel'

Nota: lo que hace este update es donde lname sea daniel ponele macbadeen

Veamos

Sin el update

Au_lname id

Daneil 5

Gaby 12

Con el update

Au_lname id

Macbadeen 5

Gaby 12

Delete

Borra filas de una tabla

Syntaxis

DELETE table_name

Where serch condition

Ejemplo

DELETE from authors

Where au_lname = `macbaden'

Transacciones

Una transaccion es la union de insert, update y delete. Cuando se termina de generar la transaccin

al final de esta se pone un commit.

Esto significa que el commit cierra y graba en la base de datos correspondientes

INSERT ...............

INSERT................

DELETE

UPDATE

UPDATE

COMMIT;

Rollback

El rolback lo que hace es volver a para tras la transaccion. Dejándola como estaba anteriormente.

Ejemplo

Delete from authors

UPDATE authors

Set au_lname = `macBaden'

Where au_lname = `Daniel'

Insert into title (`daniel')

Rollback;

Nota: en este ejemplo se ve que todas la modificaciones en la transaccion no va ser modificado.

Crear tablas

Diagrama de entidad relacion (DER)

El diagrama de entidad relacion va estar compuestos por 3 tipos

1.- entidades

2.- atributos

3.- relaciones

Una empresa puede tener varias entidades como por ejemplo, depto, empleados proyectos, etc

A su vez estas entidades tienen atributos. En el caso de empleados los atributos serian id, nombre , apellido,etc

Entonces las relaciones estarian dadas por sus entidades.

Veamos como se diagrama un der muy simple

Empleados departamento


Este sencillo diagrama muestra que los empelados deben tener un departamento ( linea no punteada)

Y departamento puede que no tenga empleados

En forma mas sencilla significa que todos los empleados deben estar asignados a algun departamento. Y algun departamento no tenga empleados

Entonces para crear una tabla tendremo s en cuenta

Reglas de integridad

Consite en las restricciones que pude tomar cada una de las columna a crear

Estas reglas denominadas de integridad estan formadas por

Not null no pueden tener valores nulos

Unique conjunto de columnas unicos para todas las filas, genera un indice automatido

Primary key : clave primaria y unica

Foreign key: hijo de la PK unida a la PK

Pasos a tener en cuenta

El nombre de la tabla tiene ciertas caracteristicas

No duplicar el nombre

Tiene una extencion de 30 caracteres

Tipos de datos

Varchar 2 long variable max 2000 caracteres

Char long fija max 255

Number numeros de decimales

Date fecha y hora

Long carácter de 26

Raw datos binarios

Con todas estas caracteristicas ya podriamos armar una tabla

Ejemplo

Create table empleados

( id number (7)

constraint empleados_id_pk primary key

apelldio varchar 2 (25)

constraint empleados_apelldio_nn not null

Nombre varchar2 (35)

Departamento number (7)

Constraint empleados_departamento_id_fk reference departamento (id););

Nota: esto hace referencia al der descripto en la hoja anterior

Añadir una columna a una tabla existente

Sintaxis

ALTER TABLE table _name

ADD (column_name, datatype,null, default)

Ejemplo

Alter table publishers

Add manager_name varchar (40) null

Modificar una columna en una tabla existente

ALTER TABLE table _name

modify (column_name, datatype,null, default)

Agregar una constraints

Sintaxis

Alter table table_name

Add constraint constraint name constraint type (column_name)

Ejemplo

Alter table title

Add pub_id_fk foreing key (pub_id reference publishers pub-id)

Borrar una constraint

Alter table title

Drop constraint pub_id_fk

Habilitar y deshabilitar constraint

Alter table title

Enable/disable constraint pub_id_fk

En oracle poseemos un diccionario de datos que contiene los tipos de constraint

Desc user_constraints

Desc user_con_column

Si queremos ver las contraint de una tabla podemos hacerlo de la siguiente manera

Sintaxis

Select *

From user_constraints

Where table_name= table_name

Ejemplo

Select *

From user_constraints

Where table_name= `publisher'

Nota: con este select nos permite ver las contraint para el tabla publishers

Borrar o eliminar una tabla

Sintaxis

Drop table table_name

Ejemplo

Drop table publishers

Nota: cuando se dropea una tabla hay que tener en cuenta que se borrara los datos cargados en ella y ademas tener mucho cuidado con las constraint por que aveces no podra dropearse por ser que la tabla sea hijo de otra tabla.

Truncate

Esta sentecia elimina las filas de la tabla

Sintaxis

Truncate table table_name

Ejemplo

Truncate table authors

Create view

Sirve para cuando una instrucción es muy utilizada (ej Select* from xxx where xxx)

En vez de tipear siempre lo mismo, crea una vista y la ejecuta

Sintaxis

Create view view_name

As select_statement

Where search_condition

Ejemplo

Create view titles_view

As select title,type,price,pubdate

From titles

Where price >15

Vista

Title type price pubdate

Fsadff sdf 16 asdfff

Asdf sd 69 asdf

Nota: esto es lo mismo que ejecutar el select nada mas que esto se escribio una sola vez

La vista no puede llevar un order by

Borrar o eliminar una vista

Drop view title_view

Sequencia

Objeto de base de datos que genera en forma automatica numeros para los insert

Sintaxis

Create sequence nombre de la sequencia

[increment_byn]

[start with n]

[{max_value n / no max_value}]

[{min_value n / no min_value}]

[{cycle / no cycle}]

[{cache / not cache}]

Ejemplo

Create sequence authors

Increment by 1

Star whit 23

Max value 99999

No cache

No cycle

Nota: lo que hace esta secuencia es incrementar de uno cuando se introduce un insert a partir de la posicion numero 23

En las pk no se utiliza cycle

Para consultar la secuencia

Select sequence_name, max_value,min_value, increment by, last_number

From user_sequence

Borrar o eliminar una sequence

Drop sequence sequence_name

Ejemplo

Drop sequence authors

Funciones y cálculos

Se puede ejecutar cálculos sobre las columnas numericas o un numero constante sobre esta utilizando operadores matematicos

Operadores matematicos

Ma(+) menos (-), division (/), multiplicacion (*)

Estos operadores se pueden utilizar en el select where order by

Ejemplo

Select title_id, ytd_sales, ytd_sales * 2

From titles

Vista

Title_id ytd_sales

Sdaff 5 10

Sadffffff 11 22

Asgfdsd 152 304

Asdffsad null null

Kjhgjgf 339 678

Nota: cuando se ejecuta un operador aritmetico sobre un valor null el resultado es null

En la clausula where

Ejemplo

Select title_id, ytd_sales, ytd_sales * 2

From titles

Where title= “sales_rep'

And ytd_sales*2 / 0.5 >125

En la clausula order by

Select title_id, ytd_sales, ytd_sales * 2

From titles

Where title= “sales_rep'

And ytd_sales*2 / 0.5 >125

Order by ytd_sales >=300

Funciones

Funciones a nivel de fila

Carácter

Numero

Fecha

Conversión

Estas funciones se utilizan en el select, where , order by.

Caracteres

Lower (column / expresión )

Devuelve la expresión en minúscula

Where lower (title) = ` SSSSSSS `

Upper (column / expresión )

Devuelve la expresion en mayuscula

Select uper (`SSSSS')

From dual

Unitcap (column/ expresion)

Devuelve la primera letra en mayuscula

Select unitcap (`daniel')

From dual

Concat (column1/expresion1, column2/expresion2)

Devuelve la cocatenacion de las expresion

Select concat (`daniel', `gaito')

From dual

Lenght

(column/expresion)

select lenght (`daniel')

from dual

Nul (column/expresion, column/expresion)

Si la primera expresion es nula toma la segunda

Select nul (nul,'res')

From dual

Ltrim (column/expresion)

Select ltrim (................Daniel)

From dual

Lpad lpad (`palabra',longitud, `carácter')

Select lpad (`palacio', 15,'*')

Algunos ejemplos

Select f_name, l_name

From authors

Where lower (l_name) like `%tu%'

Select concat (L_name, F_name)

From authors

Where ytd_sales < 5693

Select upper (l_name)

From authors

Where l_name = ` dannniel'

Select L_name, lengh (l_name)

From authors

Where id = 5

Funciones numéricas

Round

Redondeo

Sintaxis

Round (column/expresion/n)

Ejemplo

Round (823.286,2) = 823,29

Round (823.286,1) = 823,3

Round (823.286,0) = 823

Trunc

Truncar

Sintaxis

Trunc ( column/expresion,n)

Ejemplo

Trunc (823.286,2) = 823,28

Trunc (823.286,1) = 823,2

Trunc (823.286,-1) = 820

Funciones con fecha

Fecha

Se representa de la siguiente manera

dd-mon-yy = 05-04-99

sysdate

La funcion sysdate devuelve la fecha actual

Ejemplo

Sysdate

04-05-99

Con las fechas se pueden hacer operaciones devolviendo un resultado en fechas o números

Fecha + numero = fecha

05-04-99 + 15 = 20-04-99

Fecha - numero = fecha

20-04-99 - 15 = 20-04-99

fecha - fecha = cantidad de dias entre ambas

20-04-99 - 05-04-99 = 15

Fecha + numero / 24 = fecha

Months_between (fecha1,fecha2)

Me devuelve la cantidad de meses

Months_between (15-5-99,15-8-99) =3

Algunos ejemplos

Select l_name (sysdate - starDate)

From authors

Where l_name = `Dannir'

Select lower (L_name), round (salary,2)

From authors

Where l_name = `dd'

Select *

From author

Where st_date < sysdate

And salary > 150

Funciones de grupo

Group by

Las funciones de grupo son

Sum retorna el total de los valores numericos

Avg promedio

Count retorna el total de filas

Max retorna el maximo valor

Min retorna el minimo valor

Ejemplo

Select type, title_id, avg (price), avg (advance)

From title

Group by type

Vista

Type title_id avg(price) avg Advance

Busines asñlkdjf 3.73 3216

Salñdkf salñdkf 13.73 6.281.25

Sdafffsd sdfffff 156 32167

Nota: lo que hace es que toma todo el grupo type y saca el promedio devolviendo el precio promedio y el promedio de venta.

Entoces como dicia mas arriba agarro el conjunto de fila y me devuelve un unico resultado

Group by + where

Select type, avg(price)

From title

Where advance > 5000

Order by type

Vista

Type avg

Busines 2.99

Asdj 5.99

Dg 3.3

Nota: Solamente muestra las filas que son mayores que 5000

Clausula having

El having es una condicion del group by similar a la clausula where

Esta clausula ( having) es usada solamente en el group by

Sintaxis

Select column, funcion de grupo

From table_name

Where serach condition

Group by columna

Having condicion de la funcion del grupo

Ejemplo

Select pub_id, sum (advance), avg (price)

From title

Group by pub_id

Having sum(advance) > 1513

And avg(price) >5.3

Vista

Pub_id sum avg

Dsf 1569 6.3

Dd 5693 10.3

Dsw 1893 9.9

Group by + order by

Ejemplo

Select pub_id, sum (advance), avg (price)

From title

Group by pub_id

Having sum(advance) > 1513

And avg(price) >5.3

Order by pub_id

Vista

Pub_id sum avg

Dd 5693 10.3

Dsf 1569 6.3

Dsw 1893 9.9

Join

Join 2 o mas tablas

La operación con join habilita para traer datos de una o mas tablas o vista de la base de datos

Hay que tener en cuenta que las tablas a comparar se caracteriza por que una tabla va ser padre y la otra tabla va se hijo.

Por eso cuando queremos traer un resultado tenemos que tener encuenta esto.

Ejemplo

Select au_fname, au_lname,pub_name

From authors, publishers

Where authors.city = publishers:city

La clausula where especifica la conexión entre las tablas o vistas nombradas en el from

Alias

Es usado para calificar los nombres de las columnas en el resto del querry

Ejemplo

Select e.L_name, d.name

From s_emp e, s_dept d

Where d. Id = e.dep_id

Nota: tanto la letra e como la d son el arias sin el arias el query seria haci

Select s_emp.l_name, dept.name

From s_emp l_name, s_dept name

Where s_emp.id = dept_id

Como es medio engorroso por eso se pone el arias

NON EQUISJOIN

Ejemplo

Select e.name, e.job, e.sal,s.grado

From emp e, salgrade s

Where e.sal between s.lower_sal

And s.high_sal

Outer join

Filas que no cumplen con la condicion del join (+)

Ejemplo

Select e.last_name, c.name, e.id

From s.emp e , s_customer c

Where e.id (+) = c.sales_dept_id

Order by e.last_name

Self join

Asimismo

Select e.last_name, m.last_name

From s.emp e, s.emp m

Where e.managmet.ed = m.id

Subconsulta (Subquery)

Es un select embebido con otro select tanto en where havy from o delete.

No se puede usar en un order by

Esta subconsulta tiene que estar encerrado entre parentesis

Se utiliza dos tipos de operadores.

1.- de fila simple

2.- de fila multiple

Las de filas simples son <,>,= >=,<= ,<>.

Las de filas compuestas son in not in exist, not exist

Hay que tener en cuenta que primero se ejecuta la subconsulta y despues el select principal.

Paso por paso

Si usted quiere encontrar todo los libros que tienen el mismo precio que ssss. Usted puede ejecutar la tarea en dos pasos.

Primero encuentra el precio de ssss

Select price

From titles

Where title = `sss'

Vista

Price

19.99

Segundo paso

Select title, price

From title

Where price = 19.99

Vista

Title price

Asdf 19.99

Asdffsd 19.99

Asdfff 19.99

Asdfas 19.99

Para mejorar la performance se puede hacer un subquery

Ejemplo

Select title, price

From title

Where price =

(select price

from title

where title = `sss')

con funciones multiples

select au_lname, au:fname

from authors

where state = `ca'

and au_id in

(select au_id

from titleauthors

where royaltype<30)

Ejemplo con delete

Delete sales

Where title_id in

(select title_id

from title

where type = `busines')

Con having

Ejemplo

Select distinct title

From title

Where price >

(select min(price)

from titles

group by type

having type = `sdt'

1

Id

Nombre

Apellido

Direccion

Id_empleados

Proyecto

Id_depto

MANUAL

DE

SQL




Descargar
Enviado por:El remitente no desea revelar su nombre
Idioma: castellano
País: Argentina

Te va a interesar