sql join

sql 复制代码
-- 创建事实表
CREATE TABLE product_facts (
    id INT AUTO_INCREMENT PRIMARY KEY,
    product_name VARCHAR(255),
    price DECIMAL(10, 2)
);

-- 插入数据
INSERT INTO product_facts (product_name, price) VALUES ('Product A', 100.00);
INSERT INTO product_facts (product_name, price) VALUES ('Product B', 150.50);
INSERT INTO product_facts (product_name, price) VALUES ('Product C', 200.25);
INSERT INTO product_facts (product_name, price) VALUES ('Product D', 75.80);
INSERT INTO product_facts (product_name, price) VALUES ('Product E', 300.00);

-- 创建产品维度表
CREATE TABLE product_dimension (
    product_name VARCHAR(255) PRIMARY KEY,
    product_attribute VARCHAR(255),
    product_source VARCHAR(255)
);

-- 插入数据
INSERT INTO product_dimension (product_name, product_attribute, product_source) 
VALUES ('Product A', 'Attribute 1', 'Source 1');
INSERT INTO product_dimension (product_name, product_attribute, product_source) 
VALUES ('Product B', 'Attribute 2', 'Source 2');
INSERT INTO product_dimension (product_name, product_attribute, product_source) 
VALUES ('Product C', 'Attribute 3', 'Source 3');
INSERT INTO product_dimension (product_name, product_attribute, product_source) 
VALUES ('Product F', 'Attribute 6', 'Source 6');
  • product_facts

  • product_dimension

  • inner join

sql 复制代码
SELECT * from product_facts t1 inner join product_dimension t2 on t1.product_name=t2.product_name;
  • left join
sql 复制代码
SELECT * from product_facts t1 left join product_dimension t2 on t1.product_name=t2.product_name;
  • right join
sql 复制代码
SELECT * from product_facts t1 RIGHT join product_dimension t2 on t1.product_name=t2.product_name;
  • full join
sql 复制代码
SELECT * from product_facts t1 FULL JOIN product_dimension t2 on t1.product_name=t2.product_name;

--在MySQL中,没有FULL JOIN关键字,而是使用LEFT JOIN和RIGHT JOIN的组合来模拟FULL JOIN
SELECT * 
FROM product_facts t1 
LEFT JOIN product_dimension t2 ON t1.product_name = t2.product_name
UNION
SELECT * 
FROM product_facts t1 
RIGHT JOIN product_dimension t2 ON t1.product_name = t2.product_name;
  • 使用LEFT SEMI JOIN时,通常是为了获取左表中存在于右表的数据,但不需要右表的数据
sql 复制代码
--MySQL
SELECT
	t1.* 
FROM
	product_facts t1
	LEFT JOIN product_dimension t2 ON t1.product_name = t2.product_name 
WHERE
	t2.product_name IS NOT NULL;

-- 子查询中的EXISTS子句会检查表B中是否存在与表A中的行相匹配的数据。如果存在匹配的数据,那么这些行就会被包含在结果集中。
SELECT *
FROM product_facts t1
WHERE EXISTS (
    SELECT 1
    FROM product_dimension t2
    WHERE t1.product_name = t2.product_name 
);

-- hive sql
-- 这个查询使用LEFT SEMI JOIN从表A中选择那些在表B中存在匹配的行的数据。LEFT SEMI JOIN只返回左表中存在于右表的行,而不返回右表的数据。
SELECT A.*
FROM table_a A
LEFT SEMI JOIN table_b B ON A.column = B.column;
相关推荐
陈丹阳(滁州学院)2 小时前
若依添加添加监听容器配置(删除键,键过期)
数据库·oracle
远方16093 小时前
14-Oracle 23ai Vector Search 向量索引和混合索引-实操
数据库·ai·oracle
GUIQU.4 小时前
【Oracle】数据仓库
数据库·oracle
恰薯条的屑海鸥4 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第十六期-SSRF模块)
数据库·学习·安全·web安全·渗透测试·网络安全学习
咖啡啡不加糖4 小时前
Redis大key产生、排查与优化实践
java·数据库·redis·后端·缓存
曼汐 .4 小时前
数据库管理与高可用-MySQL高可用
数据库·mysql
2301_793102494 小时前
Linux——MySql数据库
linux·数据库
喵叔哟4 小时前
第4章:Cypher查询语言基础
数据库
刘 大 望4 小时前
数据库-联合查询(内连接外连接),子查询,合并查询
java·数据库·sql·mysql
从零开始学习人工智能5 小时前
Doris 数据库深度解析:架构、原理与实战应用
数据库·架构