日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

SQL基本語法

本文為您介紹高級搜索中使用的SELECT查詢語句的基本語法。

查詢語法

從數據庫中檢索數據的過程或命令稱為查詢。在SQL中,SELECT命令用于指定查詢。SELECT語句的基本語法如下:

	SELECT [DISTINCT] column1 [AS column_name], column2, function
	FROM table_name
	[JOIN table_name ON join_condition]
	[WHERE search_condition]
	[GROUP BY column1, column2, ...]
	[HAVING search_condition]
	[ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...]
	[LIMIT number_of_rows OFFSET start_row]

SQL關鍵字列表

  • SELECT:指定要檢索的列名。可以是單個列名,也可以是多個列名,用半角逗號(,)分隔。

  • DISTINCT:可選關鍵字,用于去重,保證查詢結果中不會出現重復行。

  • AS:可選關鍵字,用于將查詢結果的列名重命名。

  • FROM:指定要查詢的表名。

  • JOIN:可選關鍵字,用于連接多個表,通常需要指定連接條件。

  • ON:指定JOIN的連接條件。

  • WHERE:可選關鍵字,用于指定查詢的條件,支持多個條件組合使用,多個條件之間用AND或OR連接。

  • GROUP BY:可選關鍵字,用于指定分組依據,查詢結果將按照分組依據進行分組。

  • HAVING:可選關鍵字,用于指定分組后的篩選條件。

  • ORDER BY:可選關鍵字,用于指定查詢結果的排序方式,支持多列排序,列名之間用半角逗號(,)分隔,ASC表示升序,DESC表示降序,默認為ASC。

  • LIMIT:可選關鍵字,用于限制查詢結果返回的行數。

  • OFFSET:可選關鍵字,用于指定查詢結果的起始行。

SQL關鍵字說明

SELECT列表

在SELECT語句中,SELECT列表(位于SELECT和FROM之間)用于指定查詢結果中的列。您可以使用別名為這些列命名一個新的名稱,方便理解。或者使用表達式對列進行計算和操作,使其滿足查詢需求。表達式可以包括函數、運算、字符串操作等。這種靈活的查詢方式可以更好地控制查詢結果的輸出,使其更符合需求。

SELECT語句語法格式如下:

SELECT 
	column1, column2, ... , columnN 
FROM 
	table_name;
  • column1, column2,...columnN為表中字段名。

  • table_name為表名。

您可以根據不同的需求使用以下SQL語句,讀取表中的數據:

查詢所有列:

SELECT
	*
FROM
	table_name;

查詢特定列:

SELECT
	column1, column2, ...columnN
FROM
	table_name;

使用別名:

SELECT 
	column1 AS alias_name 
FROM 
	table_name; 

使用表達式:

SELECT 
	column1 + column2 AS expression 
FROM 
	table_name;

FROM

FROM語句為SELECT聲明一個或者多個源表。如果聲明了多個源表,那么結果就是所有源表的笛卡兒積(交叉連接)。通常會通過WHERE添加一些條件,把返回行限制成笛卡兒積的一個小的子集。

FROM語句可以包括下列元素:

  • table_name:一個現存的表名。

  • alias:為源表命名的別名。別名用于縮寫或者消除歧義。如果提供了別名,那么將會隱藏表的實際名稱。例如:如果給出FROM resources AS a,那么SELECT語句中余下的部分必須通過引用a來訪問resources表的內容。

  • select:可以在FROM語句里出現一個子查詢。此時SELECT語句是一個嵌套查詢的結構,內部子查詢的返回結果會生成一個臨時表,外部查詢將在這個臨時表中返回結果。這個子查詢必須用半角圓括號包圍,并且必須給它命名一個別名。

  • join_type:多表組合連接的結果。更多信息,請參見JOIN

在高級搜索中,resources表是核心數據表,它存儲了資源屬性的相關信息。resources表的結構,請參見查詢表。

JOIN

JOIN語句用于將來自兩個或多個表的行組合在一起,基于這些表之間的共同字段進行關聯。

JOIN有以下五種連接類型。連接類型的選擇取決于您想要的結果集和數據關系。您可以根據需要,使用這些連接類型,將不同的表進行關聯,以獲取所需的數據。

  • CROSS JOIN:交叉連接。它返回兩個表的笛卡爾積,即每個表中的每一行與另一個表中的每一行進行組合。這種連接類型通常用于生成數據的排列組合。

  • INNER JOIN:內連接。它根據兩個表之間的共同字段的匹配將兩個表中的行進行組合,只返回匹配的行。

  • LEFT OUTER JOIN:左外連接。它返回左表中的所有行,以及右表中與之匹配的行。如果右表中沒有匹配的行,則返回NULL值。

  • RIGHT OUTER JOIN:右外連接。它返回右表中的所有行,以及左表中與之匹配的行。如果左表中沒有匹配的行,則返回NULL值。

  • FULL OUTER JOIN:全外連接。它返回左表和右表中的所有行,如果兩個表中沒有匹配的行,則返回NULL值。

WHERE

WHERE語句在SELECT語句中的作用是篩選出符合條件的行數據。它的語法格式如下:

SELECT 
	column1, column2, ... , columnN 
FROM 
	table_name 
WHERE 
	[condition]

您可以使用WHERE語句,根據各種條件過濾數據。條件可以包括比較運算符(如等于、大于、小于等)、邏輯運算符(如AND、OR、NOT等)、LIKE模糊查詢關鍵字、IN、NULL判斷(如IS NULL、IS NOT NULL等)等。

  • 使用比較運算符:

    當使用等于運算符(=)時,會返回精確匹配的行數據。例如:您可以使用等于運算符(=)查詢資源類型為ECS實例的資源。

    SELECT 
    	resource_id,
    	resource_name,
    	resource_type,
     	region_id,
     	account_id 
    FROM 
    	resources 
    WHERE 
    	resource_type = 'ACS::ECS::Instance';

    當使用大于(>)、小于(<)、大于等于(>=)、小于等于(<=)或者不等于(!=)運算符時,會返回滿足指定條件的資源。例如:您可以使用以下語句查詢指定時間后創建的資源。

    SELECT
    	resource_id,
     	resource_name,
     	region_id,
     	resource_type,
     	account_id,
     	create_time
    FROM
     	resources
    WHERE
     	create_time > '20230607';
  • 使用邏輯運算符:

    邏輯運算符用于連接多個條件,常見的邏輯運算符有AND、OR和NOT。

    當使用AND連接多個查詢條件時,只有同時滿足所有查詢條件的行才會被返回。例如:您可以使用AND運算符查詢華東1(杭州)且類型為ECS實例的資源。

    SELECT
    	resource_id,
    	resource_name,
    	resource_type,
    	region_id,
    	account_id
    FROM
    	resources
    WHERE
    	region_id = 'cn-hangzhou'
    	AND resource_type = 'ACS::ECS::Instance';

    使用OR運算符時,滿足任意一個查詢條件的行都會被返回。例如:您可以使用以下語句查詢ECS實例和磁盤資源。

    SELECT
    	resource_id,
    	resource_name,
    	resource_type,
    	region_id,
    	account_id
    FROM
    	resources
    WHERE
    	resource_type = 'ACS::ECS::Disk'
    	OR resource_type = 'ACS::ECS::Instance';
  • 使用LIKE運算符:

    LIKE運算符用于模糊匹配,可以根據指定的模式來過濾數據。LIKE運算符通常與通配符結合使用,通配符表示任意字符,在PostgreSQL中,主要有以下兩種通配符:

    • 百分號(%表示任意長度的字符序列,可以匹配0個或多個字符。

    • 下劃線 (_表示單個字符,可以匹配任意一個字符。

    如果沒有使用以上兩種通配符,LIKE語句和等于運算符(=)得到的結果是一樣的。但是,使用通配符可以更靈活地進行數據的模糊匹配和范圍查詢。例如:我們可以使用以下語句查詢ECS產品的全部資源類型。

    SELECT
     resource_id,
     resource_name,
     region_id,
     zone_id,
     resource_type,
     account_id,
    FROM
     resources
    WHERE
     resource_type LIKE 'ACS::ECS::%';
  • 使用IN運算符:

    IN運算符是一個布爾運算符,用來檢查一個值列表是否包含某個指定的值。如果值列表包含了指定的值,則IN運算符返回真,否則它返回假。

    SELECT 
    	column1, column2, ... , columnN 
    FROM 
    	table_name 
    WHERE 
    	exp IN (value1, value2, ..., valueN);
    • exp可以是一個字段名、值或者其他表達式(比如函數調用、運算等)。

    • value1, value2, ..., valueN是一個值列表,多個值之間使用逗號分隔。

    例如:您可以使用以下語句查詢ECS實例和磁盤資源。

    SELECT
    	resource_id,
    	resource_name,
    	region_id,
    	zone_id,
    	resource_type,
    	account_id,
    FROM
    	resources
    WHERE
    	resource_type IN('ACS::ECS::Instance', 'ACS::ECS::Disk');
  • 使用NULL運算符

    NULL表示空值。IS NULL可以用于判斷某個字段是否為空值,IS NOT NULL用于判斷某個字段是否非空。例如:您可以執行如下語句篩選出資源名稱為空值的資源。

    SELECT
    	resource_id,
    	resource_name,
    	region_id,
    	zone_id,
    	resource_type,
    	account_id,
    FROM
    	resources
    WHERE
    	resource_name IS NULL;

通過使用適當的運算符,您可以根據具體的條件對數據進行篩選和過濾,以獲取您需要的查詢結果。

ORDER BY

ORDER BY語句用于對查詢結果進行排序。它的語法格式如下:

SELECT 
	column1, column2, ... , columnN
FROM 
	table_name
ORDER BY 
	column1, column2, .. columnN ASC | DESC;

在ORDER BY語句中,使用ASC或DESC關鍵字指定排序的順序。ASC表示升序排列(從小到大),而DESC表示降序排列(從大到小)。如果未指定排序順序,默認情況下將使用ASC。

需要注意的是,ORDER BY語句的順序選項只應用于其所跟隨的表達式。例如:ORDER BY column1, column2 DESCORDER BY column1 DESC, column2 DESC是不同的。前者將首先按照column1升序排列(未指明順序時,默認是升序),然后在column1相等的情況下再按照column2降序排列,而后者則首先按照column1降序排列,然后在column1相等的情況下再按照column2降序排列。

您可以在ORDER BY語句指定一個或多個列作為排序依據的屬性,包括未在SELECT列表中出現的列。當有多個列時,用半角逗號(,)分隔,先按照第一列排序,如果有相等的值,則按照下一列進行排序,依次類推。

選擇排序列時,建議:

  • 避開有空值的屬性或進行特殊處理,否則這部分資源無法被正確排序。

  • 如果排序列的屬性值存在重復,多次執行查詢可能會返回不一致的結果,為了保證查詢結果的一致性,建議添加另一個排序列。

例如:您可以先按照資源類型排序,然后在每個資源類型內部再按照資源ID排序。

SELECT
	resource_id,
	resource_name,
	region_id,
	zone_id,
	resource_type,
	account_id,
FROM
	resources
ORDER BY
	resource_type,
	resource_id;

GROUP BY

GROUP BY語句通過指定一個或多個列對查詢結果進行分組歸類,對于每個分組可以再進行統計、聚合或篩選操作。它的語法格式如下:

SELECT 
	column1, column2, ... , columnN
FROM 
	table_name
WHERE 
	[ conditions ]
GROUP BY 
	column1, column2....columnN
ORDER BY 
	column1, column2....columnN

GROUP BY語句必須放在WHERE語句中的條件之后(如果有WHERE語句),ORDER BY語句之前(如果有ORDER BY語句)。

在GROUP BY語句中,可以對一個或多個列進行分組。但被分組的列必須在SELECT列表中出現,否則將會報錯。使用GROUP BY語句時,還可以結合聚合函數(如SUM、COUNT、AVG等)來對每個分組進行計算。聚合函數將根據分組進行計算,返回每個分組的聚合結果。這樣可以很方便地對每個分組進行統計分析,得到匯總數據。

例如:按照資源類型對資源進行分組計數。此查詢的返回結果為兩列,一列為字符串,另一列為數值,針對這類查詢,高級搜索支持通過圖表的方式更直觀地查看結果。

SELECT
 	resource_type,
 	COUNT(*) AS cnt
FROM
 	resources
GROUP BY
 	resource_type
ORDER BY
 	cnt DESC;

LIMIT

LIMIT語句用于限制執行SELECT語句后返回的查詢結果行數。LIMIT語句由兩個獨立的子句構成:

LIMIT 
	count OFFSET start

以下是LIMIT語句與OFFSET語句一起使用時的語法:

SELECT 
	column1, column2, ... , columnN 
FROM 
	table_name 
LIMIT 
	[no of rows] OFFSET [row num]

LIMIT語句用于指定返回結果的行數。例如:LIMIT 10表示最多返回10條記錄。

OFFSET語句用于指定從哪一行開始返回結果??梢酝ㄟ^指定一個具體的行數來確定偏移量,例如:OFFSET 10表示從第11行開始返回結果。如果不指定OFFSET語句,則默認從第一行開始返回結果。

在使用LIMIT和OFFSET語句時,通常需要配合使用ORDER BY語句來指定返回結果的順序。因為未指定順序的查詢其返回結果是不確定的,多次執行可能會得到不同的結果。在不同的查詢順序下使用LIMIT和OFFSET是沒有意義的。因此在使用LIMIT和OFFSET語句時,應該配合使用ORDER BY語句來約束結果行的順序,這樣在截取數據時,才能保證是在一個一致性的數據列表中進行截取。

例如:按照資源ID降序排列,并返回前20個資源的列表。

SELECT
	resource_id,
	resource_name,
	region_id,
	resource_type,
	account_id
FROM
	resources
ORDER BY
	resource_id DESC
LIMIT
	20;

在某些情況下,可能需要從指定的偏移量開始提取記錄。由于高級搜索限制LIMIT的最大值為1000,所以當數據量很大時,可以通過LIMIT和OFFSET的組合來進行分頁查詢。每次查詢時,通過指定LIMIT限制返回結果的數量,通過增加OFFSET獲取下一頁的結果。但是需要注意,為了確保每次截取的數據是連續的,需要使用ORDER BY根據某個字段進行排序。

例如:按照資源ID進行排序,獲取第1001到第2000行的數據。

SELECT
 	resource_id,
 	resource_name,
 	region_id,
 	resource_type,
 	account_id
FROM
 	resources
ORDER BY
 	resource_id DESC
LIMIT
 	1000 OFFSET 1000;

使用示例

更多信息,請參見支持的示例查詢模板。