W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
SELECT 的語法相對比較復(fù)雜。本節(jié)首先會介紹普通的 SELECT 語法結(jié)構(gòu),然后介紹集合類 SELECT 的語法結(jié)構(gòu)。
該語句用于查詢表中的內(nèi)容。
simple_select:
SELECT [/*+ hint statement */] [ALL | DISTINCT | UNIQUE | SQL_CALC_FOUND_ROWS]
select_expr_list FROM from_list [WHERE condition]
[GROUP BY group_expression_list [WITH ROLLUP] [HAVING condition]]
[ORDER BY order_expression_list]
[limit_clause]
[FOR UPDATE]
select_expr:
table_name.*
| table_alias_name.*
| expr [[AS] column_alias_name]
from_list:
table_reference [, table_reference ...]
table_reference:
simple_table
| joined_table
simple_table:
table_factor [partition_option] [[AS] table_alias_name]
| (select_stmt) [AS] table_alias_name
| (table_reference_list)
joined_table:
table_reference [INNER] JOIN simple_table [join_condition]
| table_reference outer_join_type JOIN simple_table join_condition
partition_option:
PARTITION (partition_name_list)
partition_name_list:
partition_name [, partition_name ...]
outer_join_type:
{LEFT | RIGHT | FULL} [OUTER]
join_condition:
ON expression
condition:
expression
group_expression_list:
group_expression [, group_expression ...]
group_expression:
expression [ASC | DESC]
order_expression_list:
order_expression [, order_expression ...]
order_expression:
expression [ASC | DESC]
limit_clause:
LIMIT {[offset,] row_count |row_count OFFSET offset}
參數(shù) |
描述 |
---|---|
ALL | DISTINCT | UNIQUE | SQL_CALC_FOUND_ROWS |
在數(shù)據(jù)庫表中,可能會包含重復(fù)值。
|
select_expr |
列出要查詢的表達(dá)式或列名,用“,”隔開。也可以用“*”表示所有列。 |
AS othername |
為輸出字段重新命名。 |
FROM table_references |
指名了從哪個表或哪些表中讀取數(shù)據(jù)(支持多表查詢)。 |
WHERE where_conditions |
可選項,WHERE 字句用來設(shè)置一個篩選條件,查詢結(jié)果中僅包含滿足條件的數(shù)據(jù)。where_conditions 為表達(dá)式。 |
GROUP BY group_by_list |
用于進(jìn)行分類匯總。 |
HAVING search_confitions |
HAVING 字句與 WHERE 字句類似,但是 HAVING 字句可以使用累計函數(shù)(如 SUM,AVG 等)。 |
ORDER BY order_list order_list : colname [ASC | DESC] [,colname [ASC | DESC]…] |
用來按升序(ASC)或者降序(DESC)顯示查詢結(jié)果。不指定 ASC 或者 DESC 時,默認(rèn)為 ASC。 |
[LIMIT {[offset,] row_count |row_count OFFSET offset}] |
強(qiáng)制 SELECT 語句返回指定的記錄數(shù)。 LIMIT 接受一個或兩個數(shù)字參數(shù)。參數(shù)必須是一個整數(shù)常量。
|
FOR UPDATE |
對查詢結(jié)果所有行上排他鎖,以阻止其他事務(wù)的并發(fā)修改,或阻止在某些事務(wù)隔離級別時的并發(fā)讀取。 |
PARTITION(partition_list) |
指定查詢表的分區(qū)信息。例如:partition(p0,p1…) |
以如下表 a 為例。
obclient> SELECT name FROM a;
+------+
| name |
+------+
| a |
| b |
| a |
+------+
3 rows in set (0.01 sec)
obclient> SELECT DISTINCT name FROM a;
+------+
| name |
+------+
| a |
| b |
+------+
2 rows in set (0.01 sec)
obclient> SELECT id, name, num/2 AS avg FROM a;
+------+------+----------+
| id | name | avg |
+------+------+----------+
| 1 | a | 50.0000 |
| 2 | b | 100.0000 |
| 3 | a | 25.0000 |
+------+------+----------+
3 rows in set (0.01 sec)
obclient> SELECT id, name, num FROM a WHERE name = 'a';
+------+------+------+
| id | name | num |
+------+------+------+
| 1 | a | 100 |
| 3 | a | 50 |
+------+------+------+
2 rows in set (0.01 sec)
obclient> SELECT id, name, SUM(num) FROM a GROUP BY name;
+------+------+----------+
| id | name | SUM(num) |
+------+------+----------+
| 1 | a | 150 |
| 2 | b | 200 |
+------+------+----------+
2 rows in set (0.00 sec)
obclient> SELECT id, name, SUM(num) as sum FROM a GROUP BY name HAVING SUM(num) < 160;
+------+------+------+
| id | name | sum |
+------+------+------+
| 1 | a | 150 |
+------+------+------+
1 row in set (0.01 sec)
obclient> SELECT * FROM a ORDER BY num ASC;
+------+------+------+
| id | name | num |
+------+------+------+
| 3 | a | 50 |
| 1 | a | 100 |
| 2 | b | 200 |
+------+------+------+
3 rows in set (0.00 sec)
obclient> SELECT * FROM a ORDER BY num DESC;
+------+------+------+
| id | name | num |
+------+------+------+
| 2 | b | 200 |
| 1 | a | 100 |
| 3 | a | 50 |
+------+------+------+
3 rows in set (0.00 sec)
obclient> SELECT * FROM a LIMIT 1,2;
+------+------+------+
| id | name | num |
+------+------+------+
| 2 | b | 200 |
| 3 | a | 50 |
+------+------+------+
2 rows in set (0.00 sec)?
該語句用于對多個 SELECT 查詢的結(jié)果進(jìn)行 UNION,MINUS,INTERSECT。
select_clause_set:
simple_select [ UNION | UNION ALL | EXCEPT | INTERSECT] select_clause_set_left
[ORDER BY sort_list_columns] [limit_clause]
select_clause_set_right:
simple_select |
select_caluse_set
參數(shù) |
描述 |
---|---|
UNION ALL |
合并兩個查詢的結(jié)果 |
UNION |
合并兩個查詢的結(jié)果,并去重 |
EXCEPT |
從左查詢結(jié)果集中去重出現(xiàn)在右查詢中的結(jié)果,并去重 |
INTERSECT |
保留左查詢結(jié)果集中出現(xiàn)在右查詢中的結(jié)果,并去重 |
以如下兩表的數(shù)據(jù)為例:
create table t1 (c1 int, c2 int);
create table t2 (c1 int, c2 int);
insert into t1 values (1, -1), (2, -2);
insert into t2 values (1, 1), (2, -2), (3, 3);
obclient> SELECT C1, C2 FROM T1 UNION ALL SELECT C1, C2 FROM T2;
+------+------+
| C1 | C2 |
+------+------+
| 1 | -1 |
| 2 | -2 |
| 1 | 1 |
| 2 | -2 |
| 3 | 3 |
+------+------+
5 rows in set (0.01 sec)
obclient> SELECT C1, C2 FROM T1 UNION SELECT C1, C2 FROM T2;
+------+------+
| C1 | C2 |
+------+------+
| 1 | -1 |
| 2 | -2 |
| 1 | 1 |
| 3 | 3 |
+------+------+
4 rows in set (0.01 sec)
obclient> SELECT C1, C2 FROM T1 INTERSECT SELECT C1, C2 FROM T2;
+------+------+
| C1 | C2 |
+------+------+
| 2 | -2 |
+------+------+
1 row in set (0.00 sec)
obclient> SELECT C1, C2 FROM T1 EXCEPT SELECT C1, C2 FROM T2;
+------+------+
| C1 | C2 |
+------+------+
| 1 | -1 |
+------+------+
1 row in set (0.00 sec)
obclient> SELECT C1, C2 FROM T1 UNION SELECT C1, C2 FROM T2 ORDER BY C2 DESC LIMIT 2;
+------+------+
| C1 | C2 |
+------+------+
| 3 | 3 |
| 1 | 1 |
+------+------+
2 rows in set (0.00 sec)
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: