set hive.fetch.task.conversion=more;       -- 避免触发MR job
select distinct name from employee_id limit 2;      -- limit: 随机取出
-- nested SELECT
with t1 as (  -- 第一种方式 nested SELECT using CTE
select * from employee_id
where gender_age.gender = "Male"
)
select name, gender_age.age, gender_age.gender from t1;

select name, gender_age.age, gender_age.gender from ( -- 第二种方式 using nested SELECT after the FROM statement. 更快
select * from employee_id
where gender_age.gender = "Male"
) t1; --given alias

-- where从句中的子查询。
-- 1) IN, NOT IN 仅支持单个字段:
select name, gender_age.age, gender_age.gender  -- 会使用MR job,极其耗时
from employee_id t1
where t1.gender_age in (  -- where中限定字段的表名要使用别称
select gender_age from employee_id
where gender_age.gender = "Male"
);
-- 2) EXIT, NOT EXIT
select name, gender_age.age, gender_age.gender  -- 会使用MR job,极其耗时
from employee_id t1
where exists ( -- 子查询必须同时指向内部和外部表
select * from employee_id t2
where t1.gender_age.gender = t2.gender_age.gender and t2.gender_age.gender = "Male"
);
create table employee_hr (
name string,
employee_id int,
sin_number string,
start_date date
)
row format delimited
fields terminated by "|"
stored as textfile;

-- 内连接:hive不支持unequal join
select emp01.name, emp02.sin_number
from employee_id emp01      -- m ∩ n
join employee_hr emp02 on emp01.name = emp02.name;

select emp01.name, emp02.sin_number
from employee_id emp01, employee_hr emp02 where emp01.name = emp02.name;

    -- 自联接:查询出同一天Apple和IBM的股价
SELECT a.ymd, a.price_close, b.price_close
FROM stocks a JOIN stocks b ON a.ymd = b.ymd
WHERE a.symbol = 'AAPL' AND b.symbol = 'IBM';
    -- 三表联接
select emp01.name, emp02.employee_id, emp01.sin_number
from employee_hr emp01
join employee_id emp02 on emp01.name = emp02.name
join employee_id emp03 on emp02.employee_id = emp03.employee_id;

-- 外连接和交叉联接
join不支持交换律,且始终为左结合
所有join均为:cross join 产生笛卡尔积
--outer join: left join, right join, full join

    -- cross join
set hive.strict.checks.cartesian.product=false;
set hive.mapred.mode=nonstrict;
    1.
select e1.name, e2.sin_number
from employee e1
join employee_hr e2;  -- 若不加条件,则join为交叉联接
    2.
select e1.name, e2.sin_number
from employee e1
join employee_hr e2 on 1 = 1; -- 或者联接条件始终返回true,也为交叉联接

    -- unqual join
select e1.name, e2.sin_number
from employee e1
cross join employee_hr e2   -- join始终在where之前发生
where e1.name <> e2.name;

-- mapjoin
set hive.auto.convert.join=true;   -- hive自动将join转化为map join。
-- regular map-side join
select /*+ mapjoin(employee) */ emp01.name, emp02.sin_number
from employee emp01
cross join employee_hr emp02
where emp01.name <> emp02.name;

-- bucket map join:
set hive.optimize.bucketmapjoin = true;    -- 开启bucket map join
set hive.optimize.bucketmapjoin.sortedmerge = true;
set hive.input.format = org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat;  -- 开启sort-merge join,要求两表有相同的桶数

-- 获取两表的交集并从交集中查询出a表的name字段:
select a.name
from employee a
where exists (
select * from employee_id ei where a.name = ei.name
);
-- left semi join中select和where从句不能引用右侧表的字段,其比内联接更为高效,因为内联接在m * n数集中查询,而左半联接则是若右表满足联接条件,则返回左表中的记录。
-- hive中无右半联接
select a.name
from employee a
left semi join employee_id ei on a.name = ei.name;

-- union all 垂直操作结果集,包含重复元素
select a.name
from employee a
union all   -- 用在外层查询
select b.name
from employee_hr b;

-- 类似于union(去重)
select distanct name
from (  -- union all的子查询中要求:两子查询的字段数相同,并且相同位置的字段类型也相同。
select a.name as name
from employee a
union all
select b.name as name
from employee_hr b
) u1; -- 必须给定查询结果的别名

DQL数据查询的更多相关文章

  1. oracle学习笔记(四) DQL数据查询语言和TCL 事务控制语言

    DML 数据管理语言 Data manage language insert, update, delete以及select语句,不过,有人也把select单独出来,作为DQL 数据查询语言 data ...

  2. Hive(五)【DQL数据查询】

    目录 一. 基本查询 1.1 算数运算符 1.2 常用聚合函数 1.3 limit 1.4 where 1.5 比较运算符(between|in|is null) 1.6 LIKE和RLIKE 1.7 ...

  3. MySQL单表数据查询(DQL)

    数据准备工作: CREATE TABLE student( sid INT PRIMARY KEY AUTO_INCREMENT, sname ), age TINYINT, city ), scor ...

  4. mysql 数据查询全讲

    数据查询 涉及到DQL(Data Query Language)是sql语句的一类 本文全面介绍了mysql下 select 语句的各种查询方式:普通查询,模糊查询,查询排序,分页查询,聚合函数查询  ...

  5. MySql学习笔记(一)之DQL常用查询

    MySql学习笔记(一)之DQL常用查询 前言:mysql是中小型的数据库软件,SQL语言分为DDL,DCL,DML,DQL四种,在这里重点讲解DQL的单表查询. 正文:在学习mysql单表查询之前, ...

  6. MySQL(4)— 数据查询

    四.数据查询(DQL) 4-1.查询指定字段 select 完整 语法: select [distinct] 字段名1 [as] [别名],字段名2 [as] [别名] from 表1 [ left ...

  7. Django models .all .values .values_list 几种数据查询结果的对比

    Django models .all .values .values_list 几种数据查询结果的对比

  8. MVC实用架构设计(三)——EF-Code First(4):数据查询

    前言 首先对大家表示抱歉,这个系列已经将近一个月没有更新了,相信大家等本篇更新都等得快失望了.实在没办法,由于本人水平有限,写篇博客基本上要大半天的时间,最近实在是抽不出这么长段的空闲时间来写.另外也 ...

  9. 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表

    前言 接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL ...

随机推荐

  1. java中double类型显示两个小数,比如12.00

    Double类型的数据如何保留两位小数? 各位大虾,现有Double类型的数据,如何转换为保留两位小数的数,返回值的类型仍然是Double类型的,而不是字符串类型. 比如     0,返回“0.00” ...

  2. 关于windows server 里Let's Encrypt续订的问题

    引言 Let's Encrypt是什么就不详细说了,它是免费的https证书,优点就是免费,缺点就是每三个月就要自己续上.今天主要介绍的是续上有效期的环节. 1.安装certify 下载地址: htt ...

  3. DBMS_SQLTUNE使用方法

    SQL调优工具包DBMS_SQLTUNE的使用方法 oracle 提供了优化建议功能包DBMS_SQLTUNE,该包可以帮助我们分析SQL,并提供优化建议. 原有执行计划alter session s ...

  4. 关于cmake输出动态链接库名字的问题

    使用cmake进行项目编译管理时,我们经常使用 add_library(foo SHARED foo.cpp) 这样的话,输出时,如果在win下面会得到foo.dll,linux下面会得到libfoo ...

  5. SAP成都研究院2018年总共87篇技术文章合集

    2018年很快就要结束了.Jerry在2017年年底准备开始写这个公众号时,给自己定的目标是:2018年至少保证每周发布一篇高质量的文章.如今2018年就快过去了,高质量与否需要大家来反馈,至少从量上 ...

  6. BZOJ4011:[HNOI2015]落忆枫音(DP,拓扑排序)

    Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出这样一个问题.  「相信吧.不然我们是什么,一团肉吗?要不是有灵魂……我们也 ...

  7. 蓝牙BLE4.0的LL层数据和L2CAP层数据的区分与理解

    一直搞不太清楚蓝牙BLE协议,不知道LL层和L2CAP层是如何划分的,后来博士给我讲了讲就理解了,写下来,做个记录: 1. 我们知道,除了蓝牙5.1新出的CTE,所有的BLE都是如下类型的包: 对于连 ...

  8. Linux CentOS6系统安装最新版本Node.js环境及相关文件配置

    Node.js,当前应用非常广泛的Javascript运行环境,采用C++编写的,目前应用较多的用于WEB应用中,执行效率还是非常高的,虽然老左不从业程序的开发,但是有些时候在玩VPS的时候还是会遇到 ...

  9. 【题解】洛谷P2827 [NOIP2016TG] 蚯蚓(优先队列)

    题目来源:洛谷P2827 思路 阅读理解题 一开始以为是裸的优先队列而已 但是发现维护一个切开并且其他的要分别加上一个值很不方便 而且如果直接用优先队列会TLE3到4个点 自测85分 所以我们需要发现 ...

  10. ARM Linux 内核 panic 之cache 一致性 ——cci-400 cache一致互联

    ARM Linux 内核 panic 之cache 一致性 ——cci-400 cache一致互联 CCI-400 集合了互联和一致性功能,有 2 个 ACE slave 接口和 3 个 ACE-Li ...