En algunos casos, puede encontrar casos en los que necesita filtrar registros desde una base de datos utilizando la cláusula WHERE. Esto le permite especificar una condición específica y solo aplicar las acciones establecidas a las filas que coincidan con las condiciones.
Otro caso de uso típico es cuando necesita aplicar un filtro a un grupo de registros como una unidad. Ahí es donde entra la cláusula de tener. Es similar a la cláusula WHERE, pero se puede aplicar a un resultado agregado.
Cuál es la diferencia?
Solo hay una diferencia entre el lugar y tener cláusulas:
- La cláusula WHERE se aplica a filas individuales en una tabla.
- Por otro lado, la cláusula que tiene se aplica a un grupo de filas que cumplen con la condición especificada. También puede usar la cláusula de tener en una función agregada.
DONDE Ejemplo de cláusula
Considere la tabla de empleados que contiene datos de muestra según lo dispuesto en las declaraciones a continuación:
Crear empleados de la mesa (
ID Clave primaria en serie,
Full_name Varchar (255),
Envíe un correo electrónico a Varchar (255),
Departamento Varchar (100),
Fecha de inicio_date,
bool activo,
Categoría Varchar (50)
);
Insertar en empleados (Full_Name, correo electrónico, departamento, inicio_date, activo, categoría)
VALORES
('Meghan Edwards', '
[email protected] ',' Game Development ',' 2016-06-22 ', verdadero,' Dev-G1 '),
('Sam Davis', '
[email protected] ',' Game Development ',' 2014-01-04 ', falso,' dev-g1 '),
('Taylor Miller', '
[email protected] ',' Game Development ',' 2019-10-06 ', verdadero,' dev-g1 '),
('Wilson Smitty', '
[email protected] ',' Desarrollador de bases de datos ',' 2016-12-23 ', True,' Dev-DB1 '),
('Barbara Moore', '
[email protected] ',' desarrollador de bases de datos ',' 2015-12-23 ', verdadero,' dev-db1 '),
('Raj Chan',
[email protected] ',' Desarrollador de bases de datos ',' 2017-12-23 ', falso,' dev-db1 '),
('Susan Brown', '
[email protected] ',' DevOps Engineer ',' 2011-12-23 ', verdadero,' Dev-Ops1 '),
('Marial Anderson', '
[email protected] ',' DevOps Engineer ',' 2015-12-23 ', True,' Dev-Ops1 '),
('Nancy Thomas', '
[email protected] ',' DevOps Engineer ',' 2014-12-23 ', falso,' dev-ops1 ');
Podemos usar la cláusula SELECT with the Where para obtener las filas donde la categoría es igual a 'Dev-OPS-1'.
Una expresión de ejemplo es como se muestra:
SELECCIONAR *
De empleados
Donde categoría = 'dev-ops1';
La consulta anterior se aplica en la fila por fila y devuelve el conjunto de resultados como se muestra:
Tener ejemplo de cláusula
Como se indicó, la cláusula de tener se aplica en agregado. Por ejemplo, considere la tabla con datos de muestra como se muestra en la consulta a continuación:
Crear tabla youtube_stats (
ID Serial,
Channel_id Varchar (50),
video_id varchar (50),
Vistas_Count int
);
Insertar en youtube_stats (canal_id, video_id, vistas_count)
VALORES
('Chan1', 'Vid1', 100000),
('Chan1', 'Vid2', 500000),
('Chan2', 'Vid1', 400000),
('Chan2', 'Vid2', 1000000),
('Chan3', 'Vid1', 800000),
('Chan4', 'Vid1', 262529);
Podemos usar los grupos agregados de la cláusula Having como se muestra:
Seleccionar ID,
CANAL ID,
Video_id,
Sum (Views_Count) como Total_Views
De youtube_stats
Grupo por Channel_id
Tener total_views> = 100000
La consulta anterior debe devolver solo los elementos donde la suma es mayor o igual a la condición anterior.