首頁 > 軟體

MySQL ClickHouse不同於SQL的語法介紹

2022-11-03 14:02:41

下面只展示和MySQL或HIVE區別較大的語法

例如ClickHouse建庫語法和MySQL幾乎1卵樣的不予展示

ClickHouse的JOIN邏輯

# 建立左表
CREATE TABLE default.temp_left(
    `a` String COMMENT '匹配鍵'
)ENGINE = MergeTree
ORDER BY (a);
INSERT INTO default.temp_left
SELECT 'A1' AS a UNION ALL
SELECT 'A1' AS a UNION ALL
SELECT 'A2' AS a UNION ALL
SELECT 'A3' AS a;
# 建立右表
CREATE TABLE default.temp_right(
    `a` String COMMENT '匹配鍵',
    `b` Nullable(UInt32),
    `c` UInt32
)ENGINE = MergeTree
ORDER BY (a);
INSERT INTO default.temp_right
SELECT 'A2' AS a,9 AS b,8 AS c UNION ALL
SELECT 'A3' AS a,9 AS b,8 AS c UNION ALL
SELECT 'A4' AS a,9 AS b,8 AS c;
# 左聯
SELECT *
FROM default.temp_left le
LEFT JOIN default.temp_right ri ON le.a=ri.a

左聯測試結果

在右表中,b允許空,ac冇允許空 左聯後,聯不上的a是空字串,聯不上的bNULL,聯不上的c是0

INSERT SELECT

INSERT INTO t2
WITH a AS (SELECT * FROM t1)
SELECT * FROM a;

和HIVE、MySQL等不一樣,ClickHouse的INSERT寫在WITH之前

臨時表

  • 當回話結束時,臨時表將隨對談一起消失
  • 臨時表僅能用Memory表引擎
  • 無法為臨時表指定資料庫,它是在資料庫之外建立的
  • 當查詢沒有指定庫,且臨時表與另一個表名相同 時,會優先使用臨時表
CREATE TEMPORARY TABLE temp_t(`a` String,`b` Int32);
INSERT INTO temp_t VALUES ('AB',3),('CC',4);
SELECT * FROM temp_t;
# 結束對談後,臨時表不存在

視窗函數

CREATE TEMPORARY TABLE sales(
name  String  COMMENT '產品',
city  String  COMMENT '城市',
sale  Int32   COMMENT '銷量');
INSERT INTO sales VALUES
('椰子','佛山',99),('雪梨','佛山',77),('蘋果','佛山',88),
('椰子','廣州',80),('雪梨','廣州',80),('蘋果','廣州',70);

SELECT city
      ,groupArray(name) OVER (PARTITION BY city)
FROM sales;

SELECT
    city,
    name,
    sale,
    rank() OVER(PARTITION BY city ORDER BY sale DESC)
FROM sales;

單引號和雙引號

多數情況使用單引號

SELECT "abc";
# 報錯
SELECT 'abc';
# 正常查詢,返回字串
CREATE TABLE default.temp_t(
  `a` String COMMENT "匹配鍵"
)ENGINE=Log;
# 欄位註釋使用雙引號報錯
CREATE TABLE default.temp_t(
  `a` String COMMENT '匹配鍵'
)ENGINE=Log;
# 正常建表

到此這篇關於MySQL ClickHouse不同於SQL的語法介紹的文章就介紹到這了,更多相關MySQL ClickHouse內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com