{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Consultas de Selección: IN. LIKE, IS NULL \n",
"\n",
"## Conexión a la Base de Datos"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import psycopg2\n",
"import sqlalchemy\n",
"import matplotlib as plt\n",
"\n",
"%matplotlib inline\n",
"\n",
"from sqlalchemy import create_engine\n",
"\n",
"POSTGRES_ADDRESS = 'localhost' # Este es el servidor, puede ser una IP\n",
"POSTGRES_PORT = '5432'\n",
"POSTGRES_USERNAME = 'postgres' \n",
"POSTGRES_PASSWORD = '1234' \n",
"POSTGRES_DBNAME = 'dvdrental' \n",
"\n",
"# Ahora se configura la cadena de conexión.\n",
"# Esta es una cadena que contiene los parámetros necesarios para establecer una\n",
"# conexión con posgres.\n",
"postgres_str = ('postgresql://{username}:{password}@{ipaddress}:{port}/{dbname}'.format(username=POSTGRES_USERNAME,\n",
" password=POSTGRES_PASSWORD,\n",
" ipaddress=POSTGRES_ADDRESS,\n",
" port=POSTGRES_PORT,\n",
" dbname=POSTGRES_DBNAME))\n",
"# A continuación se crea la conexión\n",
"cnx = create_engine(postgres_str)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## El Operador IN\n",
"\n",
"Se utiliza el operador IN en la cláusula WHERE para comprobar si un valor coincide con algún valor en una lista de valores."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" customer_id | \n",
" rental_id | \n",
" return_date | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2 | \n",
" 15145 | \n",
" 2005-08-31 15:51:04 | \n",
"
\n",
" \n",
" 1 | \n",
" 1 | \n",
" 15315 | \n",
" 2005-08-30 01:51:46 | \n",
"
\n",
" \n",
" 2 | \n",
" 2 | \n",
" 14743 | \n",
" 2005-08-29 00:18:56 | \n",
"
\n",
" \n",
" 3 | \n",
" 1 | \n",
" 15298 | \n",
" 2005-08-28 22:49:37 | \n",
"
\n",
" \n",
" 4 | \n",
" 2 | \n",
" 14475 | \n",
" 2005-08-27 08:59:32 | \n",
"
\n",
" \n",
" 5 | \n",
" 1 | \n",
" 14825 | \n",
" 2005-08-27 07:01:57 | \n",
"
\n",
" \n",
" 6 | \n",
" 2 | \n",
" 15907 | \n",
" 2005-08-25 23:23:35 | \n",
"
\n",
" \n",
" 7 | \n",
" 2 | \n",
" 12963 | \n",
" 2005-08-23 11:37:04 | \n",
"
\n",
" \n",
" 8 | \n",
" 1 | \n",
" 13176 | \n",
" 2005-08-23 08:50:54 | \n",
"
\n",
" \n",
" 9 | \n",
" 1 | \n",
" 14762 | \n",
" 2005-08-23 01:30:57 | \n",
"
\n",
" \n",
" 10 | \n",
" 1 | \n",
" 12250 | \n",
" 2005-08-22 23:05:29 | \n",
"
\n",
" \n",
" 11 | \n",
" 1 | \n",
" 13068 | \n",
" 2005-08-20 14:44:16 | \n",
"
\n",
" \n",
" 12 | \n",
" 2 | \n",
" 11614 | \n",
" 2005-08-20 07:04:18 | \n",
"
\n",
" \n",
" 13 | \n",
" 1 | \n",
" 11824 | \n",
" 2005-08-19 10:11:54 | \n",
"
\n",
" \n",
" 14 | \n",
" 1 | \n",
" 11299 | \n",
" 2005-08-10 16:40:52 | \n",
"
\n",
" \n",
" 15 | \n",
" 1 | \n",
" 10437 | \n",
" 2005-08-10 12:12:04 | \n",
"
\n",
" \n",
" 16 | \n",
" 2 | \n",
" 11177 | \n",
" 2005-08-10 10:55:48 | \n",
"
\n",
" \n",
" 17 | \n",
" 2 | \n",
" 11087 | \n",
" 2005-08-10 10:37:41 | \n",
"
\n",
" \n",
" 18 | \n",
" 2 | \n",
" 9236 | \n",
" 2005-08-08 18:52:43 | \n",
"
\n",
" \n",
" 19 | \n",
" 2 | \n",
" 9296 | \n",
" 2005-08-08 11:57:13 | \n",
"
\n",
" \n",
" 20 | \n",
" 2 | \n",
" 8230 | \n",
" 2005-08-06 19:52:59 | \n",
"
\n",
" \n",
" 21 | \n",
" 2 | \n",
" 9465 | \n",
" 2005-08-06 16:43:53 | \n",
"
\n",
" \n",
" 22 | \n",
" 2 | \n",
" 10466 | \n",
" 2005-08-06 06:28:26 | \n",
"
\n",
" \n",
" 23 | \n",
" 2 | \n",
" 9248 | \n",
" 2005-08-05 11:19:11 | \n",
"
\n",
" \n",
" 24 | \n",
" 2 | \n",
" 11256 | \n",
" 2005-08-04 16:39:53 | \n",
"
\n",
" \n",
" 25 | \n",
" 1 | \n",
" 11367 | \n",
" 2005-08-04 13:19:38 | \n",
"
\n",
" \n",
" 26 | \n",
" 2 | \n",
" 9031 | \n",
" 2005-08-04 10:45:10 | \n",
"
\n",
" \n",
" 27 | \n",
" 2 | \n",
" 7376 | \n",
" 2005-08-04 10:35:02 | \n",
"
\n",
" \n",
" 28 | \n",
" 2 | \n",
" 10136 | \n",
" 2005-08-03 19:44:56 | \n",
"
\n",
" \n",
" 29 | \n",
" 1 | \n",
" 9571 | \n",
" 2005-08-02 23:26:18 | \n",
"
\n",
" \n",
" 30 | \n",
" 2 | \n",
" 10918 | \n",
" 2005-08-02 21:23:56 | \n",
"
\n",
" \n",
" 31 | \n",
" 2 | \n",
" 7459 | \n",
" 2005-08-02 21:07:20 | \n",
"
\n",
" \n",
" 32 | \n",
" 2 | \n",
" 7346 | \n",
" 2005-08-02 16:48:42 | \n",
"
\n",
" \n",
" 33 | \n",
" 2 | \n",
" 8705 | \n",
" 2005-08-02 16:01:29 | \n",
"
\n",
" \n",
" 34 | \n",
" 2 | \n",
" 8598 | \n",
" 2005-08-01 08:39:59 | \n",
"
\n",
" \n",
" 35 | \n",
" 1 | \n",
" 8326 | \n",
" 2005-08-01 05:16:49 | \n",
"
\n",
" \n",
" 36 | \n",
" 1 | \n",
" 7273 | \n",
" 2005-07-31 06:50:22 | \n",
"
\n",
" \n",
" 37 | \n",
" 1 | \n",
" 8033 | \n",
" 2005-07-30 17:56:23 | \n",
"
\n",
" \n",
" 38 | \n",
" 1 | \n",
" 7841 | \n",
" 2005-07-30 12:37:45 | \n",
"
\n",
" \n",
" 39 | \n",
" 1 | \n",
" 8116 | \n",
" 2005-07-29 22:54:07 | \n",
"
\n",
" \n",
" 40 | \n",
" 1 | \n",
" 8074 | \n",
" 2005-07-29 20:17:39 | \n",
"
\n",
" \n",
" 41 | \n",
" 2 | \n",
" 5755 | \n",
" 2005-07-19 17:02:56 | \n",
"
\n",
" \n",
" 42 | \n",
" 1 | \n",
" 6163 | \n",
" 2005-07-19 13:15:46 | \n",
"
\n",
" \n",
" 43 | \n",
" 1 | \n",
" 5244 | \n",
" 2005-07-14 14:01:07 | \n",
"
\n",
" \n",
" 44 | \n",
" 1 | \n",
" 4526 | \n",
" 2005-07-14 01:19:05 | \n",
"
\n",
" \n",
" 45 | \n",
" 1 | \n",
" 5326 | \n",
" 2005-07-13 18:02:01 | \n",
"
\n",
" \n",
" 46 | \n",
" 2 | \n",
" 5636 | \n",
" 2005-07-13 02:36:24 | \n",
"
\n",
" \n",
" 47 | \n",
" 1 | \n",
" 4611 | \n",
" 2005-07-12 13:25:56 | \n",
"
\n",
" \n",
" 48 | \n",
" 1 | \n",
" 3284 | \n",
" 2005-06-28 03:28:45 | \n",
"
\n",
" \n",
" 49 | \n",
" 1 | \n",
" 1476 | \n",
" 2005-06-25 02:26:46 | \n",
"
\n",
" \n",
" 50 | \n",
" 2 | \n",
" 2128 | \n",
" 2005-06-24 00:41:58 | \n",
"
\n",
" \n",
" 51 | \n",
" 1 | \n",
" 1185 | \n",
" 2005-06-23 02:42:12 | \n",
"
\n",
" \n",
" 52 | \n",
" 1 | \n",
" 2308 | \n",
" 2005-06-22 03:36:48 | \n",
"
\n",
" \n",
" 53 | \n",
" 1 | \n",
" 2363 | \n",
" 2005-06-19 17:40:59 | \n",
"
\n",
" \n",
" 54 | \n",
" 1 | \n",
" 1422 | \n",
" 2005-06-19 15:54:53 | \n",
"
\n",
" \n",
" 55 | \n",
" 1 | \n",
" 1725 | \n",
" 2005-06-17 21:05:57 | \n",
"
\n",
" \n",
" 56 | \n",
" 1 | \n",
" 76 | \n",
" 2005-06-03 12:00:37 | \n",
"
\n",
" \n",
" 57 | \n",
" 1 | \n",
" 573 | \n",
" 2005-06-03 06:32:23 | \n",
"
\n",
" \n",
" 58 | \n",
" 2 | \n",
" 320 | \n",
" 2005-05-28 04:30:24 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" customer_id rental_id return_date\n",
"0 2 15145 2005-08-31 15:51:04\n",
"1 1 15315 2005-08-30 01:51:46\n",
"2 2 14743 2005-08-29 00:18:56\n",
"3 1 15298 2005-08-28 22:49:37\n",
"4 2 14475 2005-08-27 08:59:32\n",
"5 1 14825 2005-08-27 07:01:57\n",
"6 2 15907 2005-08-25 23:23:35\n",
"7 2 12963 2005-08-23 11:37:04\n",
"8 1 13176 2005-08-23 08:50:54\n",
"9 1 14762 2005-08-23 01:30:57\n",
"10 1 12250 2005-08-22 23:05:29\n",
"11 1 13068 2005-08-20 14:44:16\n",
"12 2 11614 2005-08-20 07:04:18\n",
"13 1 11824 2005-08-19 10:11:54\n",
"14 1 11299 2005-08-10 16:40:52\n",
"15 1 10437 2005-08-10 12:12:04\n",
"16 2 11177 2005-08-10 10:55:48\n",
"17 2 11087 2005-08-10 10:37:41\n",
"18 2 9236 2005-08-08 18:52:43\n",
"19 2 9296 2005-08-08 11:57:13\n",
"20 2 8230 2005-08-06 19:52:59\n",
"21 2 9465 2005-08-06 16:43:53\n",
"22 2 10466 2005-08-06 06:28:26\n",
"23 2 9248 2005-08-05 11:19:11\n",
"24 2 11256 2005-08-04 16:39:53\n",
"25 1 11367 2005-08-04 13:19:38\n",
"26 2 9031 2005-08-04 10:45:10\n",
"27 2 7376 2005-08-04 10:35:02\n",
"28 2 10136 2005-08-03 19:44:56\n",
"29 1 9571 2005-08-02 23:26:18\n",
"30 2 10918 2005-08-02 21:23:56\n",
"31 2 7459 2005-08-02 21:07:20\n",
"32 2 7346 2005-08-02 16:48:42\n",
"33 2 8705 2005-08-02 16:01:29\n",
"34 2 8598 2005-08-01 08:39:59\n",
"35 1 8326 2005-08-01 05:16:49\n",
"36 1 7273 2005-07-31 06:50:22\n",
"37 1 8033 2005-07-30 17:56:23\n",
"38 1 7841 2005-07-30 12:37:45\n",
"39 1 8116 2005-07-29 22:54:07\n",
"40 1 8074 2005-07-29 20:17:39\n",
"41 2 5755 2005-07-19 17:02:56\n",
"42 1 6163 2005-07-19 13:15:46\n",
"43 1 5244 2005-07-14 14:01:07\n",
"44 1 4526 2005-07-14 01:19:05\n",
"45 1 5326 2005-07-13 18:02:01\n",
"46 2 5636 2005-07-13 02:36:24\n",
"47 1 4611 2005-07-12 13:25:56\n",
"48 1 3284 2005-06-28 03:28:45\n",
"49 1 1476 2005-06-25 02:26:46\n",
"50 2 2128 2005-06-24 00:41:58\n",
"51 1 1185 2005-06-23 02:42:12\n",
"52 1 2308 2005-06-22 03:36:48\n",
"53 1 2363 2005-06-19 17:40:59\n",
"54 1 1422 2005-06-19 15:54:53\n",
"55 1 1725 2005-06-17 21:05:57\n",
"56 1 76 2005-06-03 12:00:37\n",
"57 1 573 2005-06-03 06:32:23\n",
"58 2 320 2005-05-28 04:30:24"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# conocer la información de alquiler de los ID de cliente 1 y 2\n",
"\n",
"sql = ''' \n",
"SELECT customer_id, rental_id, return_date\n",
"FROM rental\n",
"WHERE customer_id IN (1, 2)\n",
"ORDER BY return_date DESC;\n",
"'''\n",
"\n",
"pd.read_sql_query(sql, cnx)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" customer_id | \n",
" rental_id | \n",
" return_date | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2 | \n",
" 15145 | \n",
" 2005-08-31 15:51:04 | \n",
"
\n",
" \n",
" 1 | \n",
" 1 | \n",
" 15315 | \n",
" 2005-08-30 01:51:46 | \n",
"
\n",
" \n",
" 2 | \n",
" 2 | \n",
" 14743 | \n",
" 2005-08-29 00:18:56 | \n",
"
\n",
" \n",
" 3 | \n",
" 1 | \n",
" 15298 | \n",
" 2005-08-28 22:49:37 | \n",
"
\n",
" \n",
" 4 | \n",
" 2 | \n",
" 14475 | \n",
" 2005-08-27 08:59:32 | \n",
"
\n",
" \n",
" 5 | \n",
" 1 | \n",
" 14825 | \n",
" 2005-08-27 07:01:57 | \n",
"
\n",
" \n",
" 6 | \n",
" 2 | \n",
" 15907 | \n",
" 2005-08-25 23:23:35 | \n",
"
\n",
" \n",
" 7 | \n",
" 2 | \n",
" 12963 | \n",
" 2005-08-23 11:37:04 | \n",
"
\n",
" \n",
" 8 | \n",
" 1 | \n",
" 13176 | \n",
" 2005-08-23 08:50:54 | \n",
"
\n",
" \n",
" 9 | \n",
" 1 | \n",
" 14762 | \n",
" 2005-08-23 01:30:57 | \n",
"
\n",
" \n",
" 10 | \n",
" 1 | \n",
" 12250 | \n",
" 2005-08-22 23:05:29 | \n",
"
\n",
" \n",
" 11 | \n",
" 1 | \n",
" 13068 | \n",
" 2005-08-20 14:44:16 | \n",
"
\n",
" \n",
" 12 | \n",
" 2 | \n",
" 11614 | \n",
" 2005-08-20 07:04:18 | \n",
"
\n",
" \n",
" 13 | \n",
" 1 | \n",
" 11824 | \n",
" 2005-08-19 10:11:54 | \n",
"
\n",
" \n",
" 14 | \n",
" 1 | \n",
" 11299 | \n",
" 2005-08-10 16:40:52 | \n",
"
\n",
" \n",
" 15 | \n",
" 1 | \n",
" 10437 | \n",
" 2005-08-10 12:12:04 | \n",
"
\n",
" \n",
" 16 | \n",
" 2 | \n",
" 11177 | \n",
" 2005-08-10 10:55:48 | \n",
"
\n",
" \n",
" 17 | \n",
" 2 | \n",
" 11087 | \n",
" 2005-08-10 10:37:41 | \n",
"
\n",
" \n",
" 18 | \n",
" 2 | \n",
" 9236 | \n",
" 2005-08-08 18:52:43 | \n",
"
\n",
" \n",
" 19 | \n",
" 2 | \n",
" 9296 | \n",
" 2005-08-08 11:57:13 | \n",
"
\n",
" \n",
" 20 | \n",
" 2 | \n",
" 8230 | \n",
" 2005-08-06 19:52:59 | \n",
"
\n",
" \n",
" 21 | \n",
" 2 | \n",
" 9465 | \n",
" 2005-08-06 16:43:53 | \n",
"
\n",
" \n",
" 22 | \n",
" 2 | \n",
" 10466 | \n",
" 2005-08-06 06:28:26 | \n",
"
\n",
" \n",
" 23 | \n",
" 2 | \n",
" 9248 | \n",
" 2005-08-05 11:19:11 | \n",
"
\n",
" \n",
" 24 | \n",
" 2 | \n",
" 11256 | \n",
" 2005-08-04 16:39:53 | \n",
"
\n",
" \n",
" 25 | \n",
" 1 | \n",
" 11367 | \n",
" 2005-08-04 13:19:38 | \n",
"
\n",
" \n",
" 26 | \n",
" 2 | \n",
" 9031 | \n",
" 2005-08-04 10:45:10 | \n",
"
\n",
" \n",
" 27 | \n",
" 2 | \n",
" 7376 | \n",
" 2005-08-04 10:35:02 | \n",
"
\n",
" \n",
" 28 | \n",
" 2 | \n",
" 10136 | \n",
" 2005-08-03 19:44:56 | \n",
"
\n",
" \n",
" 29 | \n",
" 1 | \n",
" 9571 | \n",
" 2005-08-02 23:26:18 | \n",
"
\n",
" \n",
" 30 | \n",
" 2 | \n",
" 10918 | \n",
" 2005-08-02 21:23:56 | \n",
"
\n",
" \n",
" 31 | \n",
" 2 | \n",
" 7459 | \n",
" 2005-08-02 21:07:20 | \n",
"
\n",
" \n",
" 32 | \n",
" 2 | \n",
" 7346 | \n",
" 2005-08-02 16:48:42 | \n",
"
\n",
" \n",
" 33 | \n",
" 2 | \n",
" 8705 | \n",
" 2005-08-02 16:01:29 | \n",
"
\n",
" \n",
" 34 | \n",
" 2 | \n",
" 8598 | \n",
" 2005-08-01 08:39:59 | \n",
"
\n",
" \n",
" 35 | \n",
" 1 | \n",
" 8326 | \n",
" 2005-08-01 05:16:49 | \n",
"
\n",
" \n",
" 36 | \n",
" 1 | \n",
" 7273 | \n",
" 2005-07-31 06:50:22 | \n",
"
\n",
" \n",
" 37 | \n",
" 1 | \n",
" 8033 | \n",
" 2005-07-30 17:56:23 | \n",
"
\n",
" \n",
" 38 | \n",
" 1 | \n",
" 7841 | \n",
" 2005-07-30 12:37:45 | \n",
"
\n",
" \n",
" 39 | \n",
" 1 | \n",
" 8116 | \n",
" 2005-07-29 22:54:07 | \n",
"
\n",
" \n",
" 40 | \n",
" 1 | \n",
" 8074 | \n",
" 2005-07-29 20:17:39 | \n",
"
\n",
" \n",
" 41 | \n",
" 2 | \n",
" 5755 | \n",
" 2005-07-19 17:02:56 | \n",
"
\n",
" \n",
" 42 | \n",
" 1 | \n",
" 6163 | \n",
" 2005-07-19 13:15:46 | \n",
"
\n",
" \n",
" 43 | \n",
" 1 | \n",
" 5244 | \n",
" 2005-07-14 14:01:07 | \n",
"
\n",
" \n",
" 44 | \n",
" 1 | \n",
" 4526 | \n",
" 2005-07-14 01:19:05 | \n",
"
\n",
" \n",
" 45 | \n",
" 1 | \n",
" 5326 | \n",
" 2005-07-13 18:02:01 | \n",
"
\n",
" \n",
" 46 | \n",
" 2 | \n",
" 5636 | \n",
" 2005-07-13 02:36:24 | \n",
"
\n",
" \n",
" 47 | \n",
" 1 | \n",
" 4611 | \n",
" 2005-07-12 13:25:56 | \n",
"
\n",
" \n",
" 48 | \n",
" 1 | \n",
" 3284 | \n",
" 2005-06-28 03:28:45 | \n",
"
\n",
" \n",
" 49 | \n",
" 1 | \n",
" 1476 | \n",
" 2005-06-25 02:26:46 | \n",
"
\n",
" \n",
" 50 | \n",
" 2 | \n",
" 2128 | \n",
" 2005-06-24 00:41:58 | \n",
"
\n",
" \n",
" 51 | \n",
" 1 | \n",
" 1185 | \n",
" 2005-06-23 02:42:12 | \n",
"
\n",
" \n",
" 52 | \n",
" 1 | \n",
" 2308 | \n",
" 2005-06-22 03:36:48 | \n",
"
\n",
" \n",
" 53 | \n",
" 1 | \n",
" 2363 | \n",
" 2005-06-19 17:40:59 | \n",
"
\n",
" \n",
" 54 | \n",
" 1 | \n",
" 1422 | \n",
" 2005-06-19 15:54:53 | \n",
"
\n",
" \n",
" 55 | \n",
" 1 | \n",
" 1725 | \n",
" 2005-06-17 21:05:57 | \n",
"
\n",
" \n",
" 56 | \n",
" 1 | \n",
" 76 | \n",
" 2005-06-03 12:00:37 | \n",
"
\n",
" \n",
" 57 | \n",
" 1 | \n",
" 573 | \n",
" 2005-06-03 06:32:23 | \n",
"
\n",
" \n",
" 58 | \n",
" 2 | \n",
" 320 | \n",
" 2005-05-28 04:30:24 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" customer_id rental_id return_date\n",
"0 2 15145 2005-08-31 15:51:04\n",
"1 1 15315 2005-08-30 01:51:46\n",
"2 2 14743 2005-08-29 00:18:56\n",
"3 1 15298 2005-08-28 22:49:37\n",
"4 2 14475 2005-08-27 08:59:32\n",
"5 1 14825 2005-08-27 07:01:57\n",
"6 2 15907 2005-08-25 23:23:35\n",
"7 2 12963 2005-08-23 11:37:04\n",
"8 1 13176 2005-08-23 08:50:54\n",
"9 1 14762 2005-08-23 01:30:57\n",
"10 1 12250 2005-08-22 23:05:29\n",
"11 1 13068 2005-08-20 14:44:16\n",
"12 2 11614 2005-08-20 07:04:18\n",
"13 1 11824 2005-08-19 10:11:54\n",
"14 1 11299 2005-08-10 16:40:52\n",
"15 1 10437 2005-08-10 12:12:04\n",
"16 2 11177 2005-08-10 10:55:48\n",
"17 2 11087 2005-08-10 10:37:41\n",
"18 2 9236 2005-08-08 18:52:43\n",
"19 2 9296 2005-08-08 11:57:13\n",
"20 2 8230 2005-08-06 19:52:59\n",
"21 2 9465 2005-08-06 16:43:53\n",
"22 2 10466 2005-08-06 06:28:26\n",
"23 2 9248 2005-08-05 11:19:11\n",
"24 2 11256 2005-08-04 16:39:53\n",
"25 1 11367 2005-08-04 13:19:38\n",
"26 2 9031 2005-08-04 10:45:10\n",
"27 2 7376 2005-08-04 10:35:02\n",
"28 2 10136 2005-08-03 19:44:56\n",
"29 1 9571 2005-08-02 23:26:18\n",
"30 2 10918 2005-08-02 21:23:56\n",
"31 2 7459 2005-08-02 21:07:20\n",
"32 2 7346 2005-08-02 16:48:42\n",
"33 2 8705 2005-08-02 16:01:29\n",
"34 2 8598 2005-08-01 08:39:59\n",
"35 1 8326 2005-08-01 05:16:49\n",
"36 1 7273 2005-07-31 06:50:22\n",
"37 1 8033 2005-07-30 17:56:23\n",
"38 1 7841 2005-07-30 12:37:45\n",
"39 1 8116 2005-07-29 22:54:07\n",
"40 1 8074 2005-07-29 20:17:39\n",
"41 2 5755 2005-07-19 17:02:56\n",
"42 1 6163 2005-07-19 13:15:46\n",
"43 1 5244 2005-07-14 14:01:07\n",
"44 1 4526 2005-07-14 01:19:05\n",
"45 1 5326 2005-07-13 18:02:01\n",
"46 2 5636 2005-07-13 02:36:24\n",
"47 1 4611 2005-07-12 13:25:56\n",
"48 1 3284 2005-06-28 03:28:45\n",
"49 1 1476 2005-06-25 02:26:46\n",
"50 2 2128 2005-06-24 00:41:58\n",
"51 1 1185 2005-06-23 02:42:12\n",
"52 1 2308 2005-06-22 03:36:48\n",
"53 1 2363 2005-06-19 17:40:59\n",
"54 1 1422 2005-06-19 15:54:53\n",
"55 1 1725 2005-06-17 21:05:57\n",
"56 1 76 2005-06-03 12:00:37\n",
"57 1 573 2005-06-03 06:32:23\n",
"58 2 320 2005-05-28 04:30:24"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# conocer la información de alquiler de los ID de cliente 1 y 2\n",
"# esta es equivalente a la anterior\n",
"sql = ''' \n",
"SELECT customer_id, rental_id, return_date\n",
"FROM rental\n",
"WHERE customer_id = 1 OR customer_id = 2\n",
"ORDER BY return_date DESC;\n",
"'''\n",
"\n",
"pd.read_sql_query(sql, cnx)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" customer_id | \n",
" rental_id | \n",
" return_date | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 459 | \n",
" 2 | \n",
" 2005-05-28 19:40:33 | \n",
"
\n",
" \n",
" 1 | \n",
" 408 | \n",
" 3 | \n",
" 2005-06-01 22:12:39 | \n",
"
\n",
" \n",
" 2 | \n",
" 333 | \n",
" 4 | \n",
" 2005-06-03 01:43:41 | \n",
"
\n",
" \n",
" 3 | \n",
" 222 | \n",
" 5 | \n",
" 2005-06-02 04:33:21 | \n",
"
\n",
" \n",
" 4 | \n",
" 549 | \n",
" 6 | \n",
" 2005-05-27 01:32:07 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 15980 | \n",
" 74 | \n",
" 16046 | \n",
" 2005-08-27 18:02:47 | \n",
"
\n",
" \n",
" 15981 | \n",
" 114 | \n",
" 16047 | \n",
" 2005-08-25 02:48:48 | \n",
"
\n",
" \n",
" 15982 | \n",
" 103 | \n",
" 16048 | \n",
" 2005-08-31 21:33:07 | \n",
"
\n",
" \n",
" 15983 | \n",
" 393 | \n",
" 16049 | \n",
" 2005-08-30 01:01:12 | \n",
"
\n",
" \n",
" 15984 | \n",
" 130 | \n",
" 1 | \n",
" 2005-05-26 22:04:30 | \n",
"
\n",
" \n",
"
\n",
"
15985 rows × 3 columns
\n",
"
"
],
"text/plain": [
" customer_id rental_id return_date\n",
"0 459 2 2005-05-28 19:40:33\n",
"1 408 3 2005-06-01 22:12:39\n",
"2 333 4 2005-06-03 01:43:41\n",
"3 222 5 2005-06-02 04:33:21\n",
"4 549 6 2005-05-27 01:32:07\n",
"... ... ... ...\n",
"15980 74 16046 2005-08-27 18:02:47\n",
"15981 114 16047 2005-08-25 02:48:48\n",
"15982 103 16048 2005-08-31 21:33:07\n",
"15983 393 16049 2005-08-30 01:01:12\n",
"15984 130 1 2005-05-26 22:04:30\n",
"\n",
"[15985 rows x 3 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Se encuentra que todos los alquileres cuyo ID de cliente no es 1 o 2\n",
"sql = ''' \n",
"SELECT customer_id, rental_id, return_date\n",
"FROM rental\n",
"WHERE customer_id NOT IN (1, 2);\n",
"'''\n",
"\n",
"pd.read_sql_query(sql, cnx)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" customer_id | \n",
" rental_id | \n",
" return_date | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 459 | \n",
" 2 | \n",
" 2005-05-28 19:40:33 | \n",
"
\n",
" \n",
" 1 | \n",
" 408 | \n",
" 3 | \n",
" 2005-06-01 22:12:39 | \n",
"
\n",
" \n",
" 2 | \n",
" 333 | \n",
" 4 | \n",
" 2005-06-03 01:43:41 | \n",
"
\n",
" \n",
" 3 | \n",
" 222 | \n",
" 5 | \n",
" 2005-06-02 04:33:21 | \n",
"
\n",
" \n",
" 4 | \n",
" 549 | \n",
" 6 | \n",
" 2005-05-27 01:32:07 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 15980 | \n",
" 74 | \n",
" 16046 | \n",
" 2005-08-27 18:02:47 | \n",
"
\n",
" \n",
" 15981 | \n",
" 114 | \n",
" 16047 | \n",
" 2005-08-25 02:48:48 | \n",
"
\n",
" \n",
" 15982 | \n",
" 103 | \n",
" 16048 | \n",
" 2005-08-31 21:33:07 | \n",
"
\n",
" \n",
" 15983 | \n",
" 393 | \n",
" 16049 | \n",
" 2005-08-30 01:01:12 | \n",
"
\n",
" \n",
" 15984 | \n",
" 130 | \n",
" 1 | \n",
" 2005-05-26 22:04:30 | \n",
"
\n",
" \n",
"
\n",
"
15985 rows × 3 columns
\n",
"
"
],
"text/plain": [
" customer_id rental_id return_date\n",
"0 459 2 2005-05-28 19:40:33\n",
"1 408 3 2005-06-01 22:12:39\n",
"2 333 4 2005-06-03 01:43:41\n",
"3 222 5 2005-06-02 04:33:21\n",
"4 549 6 2005-05-27 01:32:07\n",
"... ... ... ...\n",
"15980 74 16046 2005-08-27 18:02:47\n",
"15981 114 16047 2005-08-25 02:48:48\n",
"15982 103 16048 2005-08-31 21:33:07\n",
"15983 393 16049 2005-08-30 01:01:12\n",
"15984 130 1 2005-05-26 22:04:30\n",
"\n",
"[15985 rows x 3 columns]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Equivalente a la anterior\n",
"sql = ''' \n",
"SELECT customer_id, rental_id, return_date\n",
"FROM rental\n",
"WHERE customer_id <> 1 AND customer_id <> 2;\n",
"'''\n",
"\n",
"pd.read_sql_query(sql, cnx)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Subconsultas con el operador IN\n",
"\n",
"Suponga que se desea consultar el nombre completo de las personas que tienen préstamos con fecha de devolución al 30 de mayo del 2005."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" customer_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 5 | \n",
"
\n",
" \n",
" 1 | \n",
" 14 | \n",
"
\n",
" \n",
" 2 | \n",
" 16 | \n",
"
\n",
" \n",
" 3 | \n",
" 21 | \n",
"
\n",
" \n",
" 4 | \n",
" 23 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 93 | \n",
" 538 | \n",
"
\n",
" \n",
" 94 | \n",
" 554 | \n",
"
\n",
" \n",
" 95 | \n",
" 574 | \n",
"
\n",
" \n",
" 96 | \n",
" 575 | \n",
"
\n",
" \n",
" 97 | \n",
" 578 | \n",
"
\n",
" \n",
"
\n",
"
98 rows × 1 columns
\n",
"
"
],
"text/plain": [
" customer_id\n",
"0 5\n",
"1 14\n",
"2 16\n",
"3 21\n",
"4 23\n",
".. ...\n",
"93 538\n",
"94 554\n",
"95 574\n",
"96 575\n",
"97 578\n",
"\n",
"[98 rows x 1 columns]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Primero, consultamos lista de identificadores de clientes de la \n",
"# tabla rental (prestamos) con la fecha de devolución 2005-05-27\n",
"# Sin embargo, esta tabla no tiene los nombres de las personas\n",
"\n",
"sql = ''' \n",
"SELECT customer_id\n",
"FROM rental\n",
"WHERE CAST(return_date AS DATE) = '2005-05-30'\n",
"ORDER BY customer_id;\n",
"'''\n",
"\n",
"pd.read_sql_query(sql, cnx)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" customer_id | \n",
" full_name | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 5 | \n",
" Elizabeth Brown | \n",
"
\n",
" \n",
" 1 | \n",
" 14 | \n",
" Betty White | \n",
"
\n",
" \n",
" 2 | \n",
" 16 | \n",
" Sandra Martin | \n",
"
\n",
" \n",
" 3 | \n",
" 21 | \n",
" Michelle Clark | \n",
"
\n",
" \n",
" 4 | \n",
" 23 | \n",
" Sarah Lewis | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 89 | \n",
" 538 | \n",
" Ted Breaux | \n",
"
\n",
" \n",
" 90 | \n",
" 554 | \n",
" Dwayne Olvera | \n",
"
\n",
" \n",
" 91 | \n",
" 574 | \n",
" Julian Vest | \n",
"
\n",
" \n",
" 92 | \n",
" 575 | \n",
" Isaac Oglesby | \n",
"
\n",
" \n",
" 93 | \n",
" 578 | \n",
" Willard Lumpkin | \n",
"
\n",
" \n",
"
\n",
"
94 rows × 2 columns
\n",
"
"
],
"text/plain": [
" customer_id full_name\n",
"0 5 Elizabeth Brown\n",
"1 14 Betty White\n",
"2 16 Sandra Martin\n",
"3 21 Michelle Clark\n",
"4 23 Sarah Lewis\n",
".. ... ...\n",
"89 538 Ted Breaux\n",
"90 554 Dwayne Olvera\n",
"91 574 Julian Vest\n",
"92 575 Isaac Oglesby\n",
"93 578 Willard Lumpkin\n",
"\n",
"[94 rows x 2 columns]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Para obtener los nombres de las personas, la sentencia anterior se usa como subconsulta en IN...\n",
"\n",
"sql = ''' \n",
"SELECT customer_id, first_name || ' ' || last_name as full_name\n",
"FROM customer\n",
"WHERE customer_id IN (\n",
" SELECT customer_id\n",
" FROM rental\n",
" WHERE CAST (return_date AS DATE) = '2005-05-30'\n",
")\n",
"ORDER BY customer_id;\n",
"'''\n",
"\n",
"pd.read_sql_query(sql, cnx)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" customer_id | \n",
" full_name | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 5 | \n",
" Elizabeth Brown | \n",
"
\n",
" \n",
" 1 | \n",
" 14 | \n",
" Betty White | \n",
"
\n",
" \n",
" 2 | \n",
" 16 | \n",
" Sandra Martin | \n",
"
\n",
" \n",
" 3 | \n",
" 21 | \n",
" Michelle Clark | \n",
"
\n",
" \n",
" 4 | \n",
" 23 | \n",
" Sarah Lewis | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 93 | \n",
" 538 | \n",
" Ted Breaux | \n",
"
\n",
" \n",
" 94 | \n",
" 554 | \n",
" Dwayne Olvera | \n",
"
\n",
" \n",
" 95 | \n",
" 574 | \n",
" Julian Vest | \n",
"
\n",
" \n",
" 96 | \n",
" 575 | \n",
" Isaac Oglesby | \n",
"
\n",
" \n",
" 97 | \n",
" 578 | \n",
" Willard Lumpkin | \n",
"
\n",
" \n",
"
\n",
"
98 rows × 2 columns
\n",
"
"
],
"text/plain": [
" customer_id full_name\n",
"0 5 Elizabeth Brown\n",
"1 14 Betty White\n",
"2 16 Sandra Martin\n",
"3 21 Michelle Clark\n",
"4 23 Sarah Lewis\n",
".. ... ...\n",
"93 538 Ted Breaux\n",
"94 554 Dwayne Olvera\n",
"95 574 Julian Vest\n",
"96 575 Isaac Oglesby\n",
"97 578 Willard Lumpkin\n",
"\n",
"[98 rows x 2 columns]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# ¿Por qué la siguiente sentencia no entrega los mismos resultados?\n",
"\n",
"sql = ''' \n",
"SELECT c.customer_id, c.first_name || ' ' || c.last_name as full_name\n",
"FROM customer as c, ( SELECT customer_id\n",
" FROM rental\n",
" WHERE CAST (return_date AS DATE) = '2005-05-30'\n",
" ) as ids\n",
"WHERE ids.customer_id = c.customer_id\n",
"ORDER BY customer_id;\n",
"'''\n",
"\n",
"pd.read_sql_query(sql, cnx)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" customer_id | \n",
" full_name | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 5 | \n",
" Elizabeth Brown | \n",
"
\n",
" \n",
" 1 | \n",
" 14 | \n",
" Betty White | \n",
"
\n",
" \n",
" 2 | \n",
" 16 | \n",
" Sandra Martin | \n",
"
\n",
" \n",
" 3 | \n",
" 21 | \n",
" Michelle Clark | \n",
"
\n",
" \n",
" 4 | \n",
" 23 | \n",
" Sarah Lewis | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 89 | \n",
" 538 | \n",
" Ted Breaux | \n",
"
\n",
" \n",
" 90 | \n",
" 554 | \n",
" Dwayne Olvera | \n",
"
\n",
" \n",
" 91 | \n",
" 574 | \n",
" Julian Vest | \n",
"
\n",
" \n",
" 92 | \n",
" 575 | \n",
" Isaac Oglesby | \n",
"
\n",
" \n",
" 93 | \n",
" 578 | \n",
" Willard Lumpkin | \n",
"
\n",
" \n",
"
\n",
"
94 rows × 2 columns
\n",
"
"
],
"text/plain": [
" customer_id full_name\n",
"0 5 Elizabeth Brown\n",
"1 14 Betty White\n",
"2 16 Sandra Martin\n",
"3 21 Michelle Clark\n",
"4 23 Sarah Lewis\n",
".. ... ...\n",
"89 538 Ted Breaux\n",
"90 554 Dwayne Olvera\n",
"91 574 Julian Vest\n",
"92 575 Isaac Oglesby\n",
"93 578 Willard Lumpkin\n",
"\n",
"[94 rows x 2 columns]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# sentencia equivalente a la operación IN\n",
"\n",
"sql = ''' \n",
"SELECT c.customer_id, c.first_name || ' ' || c.last_name as full_name\n",
"FROM customer as c, ( SELECT distinct customer_id\n",
" FROM rental\n",
" WHERE CAST (return_date AS DATE) = '2005-05-30'\n",
" ) as ids\n",
"WHERE ids.customer_id = c.customer_id\n",
"ORDER BY customer_id;\n",
"'''\n",
"\n",
"pd.read_sql_query(sql, cnx)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Operadores LIKE y ILIKE\n",
"\n",
"Se usa para consultar datos usando coincidencias de patrones simples, mediante comodines (%) para buscar cualquier coincidencia con n cantidad de caracteres y guión bajo ( _ ) para un solo caracter.\n"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" first_name | \n",
" last_name | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Albert | \n",
" Crouse | \n",
"
\n",
" \n",
" 1 | \n",
" Alberto | \n",
" Henning | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" first_name last_name\n",
"0 Albert Crouse\n",
"1 Alberto Henning"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Buscar las coincidencias de los nombres que comiencen por Albert\n",
"sql = ''' \n",
"SELECT first_name, last_name\n",
"FROM customer\n",
"WHERE first_name LIKE 'Albert%'\n",
"ORDER BY first_name;\n",
"'''\n",
"\n",
"pd.read_sql_query(sql, cnx)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" first_name | \n",
" last_name | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Alberto | \n",
" Henning | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" first_name last_name\n",
"0 Alberto Henning"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Buscar las coincidencias de los nombres que comiencen por Albert y finalicen con una letra\n",
"sql = ''' \n",
"SELECT first_name, last_name\n",
"FROM customer\n",
"WHERE first_name LIKE 'Albert_'\n",
"ORDER BY first_name;\n",
"'''\n",
"\n",
"pd.read_sql_query(sql, cnx)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" first_name | \n",
" last_name | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Cheryl | \n",
" Murphy | \n",
"
\n",
" \n",
" 1 | \n",
" Sherri | \n",
" Rhodes | \n",
"
\n",
" \n",
" 2 | \n",
" Sherry | \n",
" Marshall | \n",
"
\n",
" \n",
" 3 | \n",
" Theresa | \n",
" Watson | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" first_name last_name\n",
"0 Cheryl Murphy\n",
"1 Sherri Rhodes\n",
"2 Sherry Marshall\n",
"3 Theresa Watson"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Buscar las coincidencias de los nombres que comiencen por una letra\n",
"# que contengan her y finalicen con ningun o varios caracteres\n",
"\n",
"sql = ''' \n",
"SELECT first_name, last_name\n",
"FROM customer\n",
"WHERE first_name LIKE '_her%'\n",
"ORDER BY first_name;\n",
"'''\n",
"\n",
"pd.read_sql_query(sql, cnx)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" first_name | \n",
" last_name | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Calvin | \n",
" Martel | \n",
"
\n",
" \n",
" 1 | \n",
" Carl | \n",
" Artis | \n",
"
\n",
" \n",
" 2 | \n",
" Carla | \n",
" Gutierrez | \n",
"
\n",
" \n",
" 3 | \n",
" Carlos | \n",
" Coughlin | \n",
"
\n",
" \n",
" 4 | \n",
" Carmen | \n",
" Owens | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 518 | \n",
" Willie | \n",
" Markham | \n",
"
\n",
" \n",
" 519 | \n",
" Wilma | \n",
" Richards | \n",
"
\n",
" \n",
" 520 | \n",
" Yolanda | \n",
" Weaver | \n",
"
\n",
" \n",
" 521 | \n",
" Yvonne | \n",
" Watkins | \n",
"
\n",
" \n",
" 522 | \n",
" Zachary | \n",
" Hite | \n",
"
\n",
" \n",
"
\n",
"
523 rows × 2 columns
\n",
"
"
],
"text/plain": [
" first_name last_name\n",
"0 Calvin Martel\n",
"1 Carl Artis\n",
"2 Carla Gutierrez\n",
"3 Carlos Coughlin\n",
"4 Carmen Owens\n",
".. ... ...\n",
"518 Willie Markham\n",
"519 Wilma Richards\n",
"520 Yolanda Weaver\n",
"521 Yvonne Watkins\n",
"522 Zachary Hite\n",
"\n",
"[523 rows x 2 columns]"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Encontrar los nombres que no comienzan por A o B\n",
"sql = ''' \n",
"SELECT first_name, last_name\n",
"FROM customer\n",
"WHERE first_name NOT LIKE 'A%' AND first_name NOT LIKE 'B%'\n",
"ORDER BY first_name\n",
"'''\n",
"\n",
"pd.read_sql_query(sql, cnx)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" first_name | \n",
" last_name | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Natalie | \n",
" Meyer | \n",
"
\n",
" \n",
" 1 | \n",
" Nathan | \n",
" Runyon | \n",
"
\n",
" \n",
" 2 | \n",
" Nathaniel | \n",
" Adam | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" first_name last_name\n",
"0 Natalie Meyer\n",
"1 Nathan Runyon\n",
"2 Nathaniel Adam"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# ILIKE compara el valor sin distinción entre mayúsculas y minúsculas\n",
"sql = ''' \n",
"SELECT first_name, last_name\n",
"FROM customer\n",
"WHERE first_name ILIKE 'NAT%';\n",
"'''\n",
"\n",
"pd.read_sql_query(sql, cnx)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Valores NULOS y Operador IS NULL\n",
"\n",
"NULL significa información faltante o no aplicable. NULL no es un valor, por lo tanto, no puede compararlo con otros valores como números o cadenas. La comparación de NULL con un valor siempre dará como resultado NULL, lo que significa un resultado desconocido.\n",
"\n",
"* NULL no es igual a NULL, esta operación siempre será NULL\n"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sql = '''\n",
"CREATE TABLE contactos(\n",
" id INT GENERATED BY DEFAULT AS IDENTITY,\n",
" nombre VARCHAR(50) NOT NULL,\n",
" apellido VARCHAR(50) NOT NULL,\n",
" correo VARCHAR(255) NOT NULL,\n",
" telefono VARCHAR(15),\n",
" PRIMARY KEY (id)\n",
");\n",
"'''\n",
"\n",
"cnx.execute(sql)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sql = '''\n",
"INSERT INTO contactos(nombre, apellido, correo, telefono)\n",
" VALUES ('Natalia','Rosas','natalia.rosas@rebrand.com', NULL),\n",
" ('Lilana','Posada','lily.pos@gmail.com','305 234 27 64'),\n",
" ('Lucio','Vasquez','lvasquez@gmail.com','305 234 34 65');\n",
"'''\n",
"\n",
"cnx.execute(sql)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" id | \n",
" nombre | \n",
" apellido | \n",
" correo | \n",
" telefono | \n",
"
\n",
" \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
"Empty DataFrame\n",
"Columns: [id, nombre, apellido, correo, telefono]\n",
"Index: []"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Cuáles son los contactos que no tienen número de teléfono\n",
"# No se retorna ninguna fila\n",
"sql = ''' \n",
"SELECT *\n",
"FROM contactos\n",
"WHERE telefono = NULL;\n",
"'''\n",
"\n",
"pd.read_sql_query(sql, cnx)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" id | \n",
" nombre | \n",
" apellido | \n",
" correo | \n",
" telefono | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" Natalia | \n",
" Rosas | \n",
" natalia.rosas@rebrand.com | \n",
" None | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" id nombre apellido correo telefono\n",
"0 1 Natalia Rosas natalia.rosas@rebrand.com None"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Cuáles son los contactos que no tienen número de teléfono\n",
"# No se retorna ninguna fila\n",
"sql = ''' \n",
"SELECT *\n",
"FROM contactos\n",
"WHERE telefono is NULL;\n",
"'''\n",
"\n",
"pd.read_sql_query(sql, cnx)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" id | \n",
" nombre | \n",
" apellido | \n",
" correo | \n",
" telefono | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2 | \n",
" Lilana | \n",
" Posada | \n",
" lily.pos@gmail.com | \n",
" 305 234 27 64 | \n",
"
\n",
" \n",
" 1 | \n",
" 3 | \n",
" Lucio | \n",
" Vasquez | \n",
" lvasquez@gmail.com | \n",
" 305 234 34 65 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" id nombre apellido correo telefono\n",
"0 2 Lilana Posada lily.pos@gmail.com 305 234 27 64\n",
"1 3 Lucio Vasquez lvasquez@gmail.com 305 234 34 65"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Cuáles son los contactos que tienen número de teléfono\n",
"# No se retorna ninguna fila\n",
"sql = ''' \n",
"SELECT *\n",
"FROM contactos\n",
"WHERE telefono IS NOT NULL;\n",
"'''\n",
"\n",
"pd.read_sql_query(sql, cnx)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sql = '''\n",
"DROP TABLE contactos;\n",
"'''\n",
"\n",
"cnx.execute(sql)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}