1. 程式人生 > 其它 >redis-cluster手動部署

redis-cluster手動部署

查詢條件

having

having的功能和where一樣,都是用來篩選查詢,不同的是,where在分組之前用,having必須在分組之後使用。

# 查詢每個部門大於30歲的平均工資,並且保留平均工資在10000以上的
1、過濾大於30歲的
select * from dep where age > 30;

2、在大於30歲的這群人中,再分組得到每一個部門
select post, avg(salary) from emp where age > 30 group by post;

3、在分組結果的基礎上,過濾掉平均工資小於10000的部門
select post, avg(salary) as avg_salary from emp where age > 30 group by post having avg(salary) > 10000;

distinct

去重。

select dictinct age from emp;

order by

將資料升序或降序排列。

# order by colunm_name asc; 升序
# order by colunm_name desc; 降序

# 排序也可以指定多個欄位進行排序
select * from emp order by age, salary desc;

# 查詢每個部門中大於30歲的平均工資,並且保留平均工資在10000以上的,按照平均工資降序排列
select post, avg(salary) as avg_salary from emp where age > 30 group by post having avg(salary) > 10000 order by avg(salary) desc;

limit

分頁,限制資料顯示。

select *from emp limit 5;  # 限制前5條資料
select *from emp limit 5, 5;  # 從第5條開始,查詢5條資料

# 查詢工資最高的員工
select max(salary) from emp;
select * from emp order by salary desc, age asc limit 1;

多表查詢

子查詢

也稱之為內查詢,或者說巢狀查詢,將一個SQL語句的結果作為另外一個SQL語句的條件。

使用子查詢必須遵循以下幾個規則:

  • 子查詢必須括在圓括號中。
  • 子查詢的 SELECT 子句中只能有一個列,除非主查詢中有多個列,用於與子查詢選中的列相比較。
  • 子查詢不能使用 ORDER BY,不過主查詢可以。在子查詢中,GROUP BY 可以起到同 ORDER BY 相同的作用。
  • 返回多行資料的子查詢只能同多值操作符一起使用,比如 IN 操作符。
  • SELECT 列表中不能包含任何對 BLOB、ARRAY、CLOB 或者 NCLOB 型別值的引用。
  • 子查詢不能直接用在聚合函式中。
  • BETWEEN 操作符不能同子查詢一起使用,但是 BETWEEN 操作符可以用在子查詢中。
# 基本語法
SELECT column_name [, column_name ]
FROM   table1 [, table2 ]
WHERE  column_name OPERATOR
      (SELECT column_name [, column_name ]
      FROM table1 [, table2 ]
      [WHERE])

連表查詢

將多個表拼接成一張表,當作單表查詢。

select * from table1, table2;
select * from emp,dep where table1.table2_id = table2.id # 篩選條件消除笛卡爾

內連結查詢

查找出同時存在在不同表中的關聯資料形成結果表。

SELECT 欄位1,欄位2,欄位3,…… FROM 表名1 INNER JOIN 表名2 ON 關聯條件;
等同於
SELECT 欄位1,欄位2,欄位3,…… FROM 表名1,表名2 WHERE 關聯條件;

與INNER JOIN組合使用ON子句,而不是WHERE。ON和WHERE後面的指定條件相同, WHERE子句定義條件更簡單明瞭,但某些時候會影響查詢效能,而INNER JOIN語法是ANSI SQL的標準規範,能夠確保不忘記連線條件。

左連線查詢

左連線(LEFT JOIN) 以左表為基準,將右表中的資訊匹配進去,如果右表無對應值,則以空值顯示。

SELECT 欄位1,欄位2,欄位3,…… FROM 表名1 LEFT JOIN 表名2 ON 關聯條件;

若去掉左表有而右表為空的部分,在SELECT語句末尾加上"WHERE 表2.關聯欄位=NULL"

右連線查詢

右連線(RIGHT JOIN) 以右表為基準,將左表中的資訊匹配進去,如果左表無對應值,則以空值顯示。

SELECT 欄位1,欄位2,欄位3,…… FROM 表名1 RIGHT JOIN 表名2 ON 關聯條件;

若去掉右表有而左表為空的部分,在SELECT語句末尾加上"WHERE 表2.關聯欄位=NULL"

union

UNION 操作符用於連線兩個以上的 SELECT 語句的結果組合到一個結果集合中。多個 SELECT 語句會刪除重複的資料。

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
  • expression1, expression2, ... expression_n: 要檢索的列。
  • tables: 要檢索的資料表。
  • WHERE conditions: 可選, 檢索條件。
  • DISTINCT: 可選,刪除結果集中重複的資料。預設情況下 UNION 操作符已經刪除了重複資料,所以 DISTINCT 修飾符對結果沒啥影響。
  • ALL: 可選,返回所有結果集,包含重複資料。