redis-cluster手動部署
阿新 • • 發佈:2021-07-16
查詢條件
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: 可選,返回所有結果集,包含重複資料。