CUBRID學習筆記 41 sql語法之select

来源:http://www.cnblogs.com/wang2650/archive/2016/03/18/5291317.html
-Advertisement-
Play Games

cubrid的中sql查詢語法 SELECT [ ] [{TO | INTO} ] [FROM ] [WHERE ] [GROUP BY {col_name | expr} [ASC | DESC], ...[WITH ROLLUP]] [HAVING ] [ORDER BY {col_name |


cubrid的中sql查詢語法


SELECT [ ]
[{TO | INTO} ][FROM ]
[WHERE ][GROUP BY {col_name | expr} [ASC | DESC], ...[WITH ROLLUP]]
[HAVING ]
[ORDER BY {col_name | expr} [ASC | DESC], ... [NULLS {FIRST | LAST}][LIMIT [offset,] row_count]
[USING INDEX { index_name [,index_name, ...] | NONE }][FOR UPDATE [OF ]]

<qualifier> ::= ALL | DISTINCT | DISTINCTROW | UNIQUE

<select_expressions> ::= * | <expression_comma_list> | *, <expression_comma_list>

<variable_comma_list> ::= [:] identifier, [:] identifier, ...

<extended_table_specification_comma_list> ::=
    <table_specification>   [
                                {, <table_specification> } ... |
                                <join_table_specification> ... |
                                <join_table_specification2> ...
                            ]

::=
[] [WITH ()] |
[ ] |
|
TABLE ( )

::= [AS] [()]

::= [ONLY] |
ALL [ EXCEPT ]

::= CLASS

::=
[INNER | {LEFT | RIGHT} [OUTER]] JOIN ON

::= CROSS JOIN

::= READ UNCOMMITTED

  • 還是看例子吧

distinct 去重
SELECT DISTINCT host_nation
FROM olympic;

分頁
SELECT host_year as col1, host_nation as col2
FROM olympic
ORDER BY col2 LIMIT 5;

SELECT CONCAT(host_nation, ', ', host_city) AS host_place
FROM olympic
ORDER BY host_place LIMIT 5;

還可以
SELECT 1+1 AS sum_value;

其實就類似子查詢

SELECT SUM (n)
FROM (SELECT gold FROM participant WHERE nation_code = 'KOR'
UNION ALL
SELECT silver FROM participant WHERE nation_code = 'JPN') AS t(n);

換個姿勢
SELECT nation_code, host_year, gold
FROM participant p
WHERE gold > (SELECT AVG(s)
FROM (SELECT silver + bronze
FROM participant
WHERE nation_code = p.nation_code
AND silver > 0
AND bronze > 0)
AS t(s));

where條件

WHERE

<search_condition> ::=
    <comparison_predicate>
    <between_predicate>
    <exists_predicate>
    <in_predicate>
    <null_predicate>
    <like_predicate>
    <quantified_predicate>
    <set_predicate>
  
  比較運算
  
  = <> != > < >= <=
  
  成立是1 不成立是0 
  
  any  some  all運算
  
  any 任一個條件符合 some 是一部分(文檔暫缺)
  
  SELECT * FROM condition_tbl WHERE dept_name = ANY{'devel','sales'};
  
  all  條件全部符合
  
  SELECT * FROM condition_tbl WHERE salary > ALL{3000000, 4000000, NULL};
  

  SELECT * FROM condition_tbl WHERE (

(0.9 * salary) < ALL (SELECT salary FROM condition_tbl
WHERE dept_name = 'devel')
);

between 運算符

SELECT * FROM condition_tbl WHERE salary BETWEEN 3000000 AND 4000000;

SELECT * FROM condition_tbl WHERE (salary >= 3000000) AND (salary <= 4000000);

SELECT * FROM condition_tbl WHERE salary NOT BETWEEN 3000000 AND 4000000;

SELECT * FROM condition_tbl WHERE name BETWEEN 'A' AND 'E';

exists 運算符

SELECT 'raise' FROM db_root WHERE EXISTS(
SELECT * FROM condition_tbl WHERE salary < 2500000);

SELECT 'raise' FROM db_root WHERE NOT EXISTS(
SELECT * FROM condition_tbl WHERE salary < 2500000);

in 運算符

SELECT * FROM condition_tbl WHERE dept_name IN {'devel','sales'};

SELECT * FROM condition_tbl WHERE dept_name = ANY{'devel','sales'};

SELECT * FROM condition_tbl WHERE dept_name NOT IN {'devel','sales'};

isnull

SELECT * FROM condition_tbl WHERE salary IS NULL;

SELECT * FROM condition_tbl WHERE salary IS NOT NULL;

SELECT * FROM condition_tbl WHERE salary = NULL;

like 運算符
轉義用\
SELECT * FROM condition_tbl WHERE name LIKE '%s%';

SELECT * FROM condition_tbl WHERE UPPER(name) LIKE '_O%';

SELECT * FROM condition_tbl WHERE name LIKE '___';

REGEXP, RLIKE 運算符
這個例子用的少,轉碼比較
SELECT ('a' collate utf8_en_ci REGEXP BINARY 'A' collate utf8_en_ci);
0
SELECT ('a' collate utf8_en_cs REGEXP BINARY 'A' collate utf8_en_cs);
0
SELECT ('a' COLLATE iso88591_bin REGEXP 'A' COLLATE iso88591_bin);
1
SELECT ('a' COLLATE iso88591_bin REGEXP BINARY 'A' COLLATE iso88591_bin);
0
主要看這個
支持正則表達式嘍
SELECT name FROM athlete where name REGEXP '^[a-d]';

下麵更像是演示正則表達式
匹配特殊的字元
SELECT ('new\nline' REGEXP 'new
line');

SELECT ('cubrid dbms' REGEXP '^cub');
SELECT ('this is cubrid dbms' REGEXP 'dbms$');

SELECT ('cubrid dbms' REGEXP '^c.*$');
SELECT ('Aaaapricot' REGEXP '^A+pricot');
SELECT ('Apricot' REGEXP '^Aa?pricot');
SELECT ('Aapricot' REGEXP '^Aa?pricot');
('Aapricot' regexp '^Aa?pricot')

1 代表成立
SELECT ('Aaapricot' REGEXP '^Aa?pricot');

('Aaapricot' regexp '^Aa?pricot')

0
-- (cub)* : match zero or more instances of the sequence abc.

SELECT ('cubcub' REGEXP '^(cub)*$');

('cubcub' regexp '^(cub)*$')

1
-- [a-dX], [^a-dX] : matches any character that is (or is not, if ^ is used) either a, b, c, d or X.

SELECT ('aXbc' REGEXP '^[a-dXYZ]+');

('aXbc' regexp '^[a-dXYZ]+')

1
SELECT ('strike' REGEXP '^[^a-dXYZ]+$');

('strike' regexp '^[^a-dXYZ]+$')

1

case 運算符

SELECT a,
CASE WHEN a=1 THEN 'one'
WHEN a=2 THEN 'two'
ELSE 'other'
END
FROM case_tbl;

結果
a case when a=1 then 'one' when a=2 then 'two' else 'other' end

        1  'one'
        2  'two'
        3  'other'
     NULL  'other'
     
     
     SELECT a,
   CASE a WHEN 1 THEN 'one'
          WHEN 2 THEN 'two'
          ELSE 'other'
   END

FROM case_tbl;

SELECT a,
CASE WHEN a=1 THEN 1
WHEN a=2 THEN 1.2345
ELSE 1.234567890
END
FROM case_tbl;

SELECT a,
CASE WHEN a=1 THEN 'one'
WHEN a=2 THEN 'two'
ELSE 1.2345
END
FROM case_tbl; //報錯,類型轉換錯誤

COALESCE 函數
對null處理的函數
類似
CASE WHEN a IS NOT NULL
THEN a
ELSE b
END

當a的值為null的時候 返回10.0000
SELECT a, COALESCE(a, 10.0000) FROM case_tbl;

decode 函數
類似
CASE WHEN a = b THEN c
WHEN a = d THEN e
ELSE f
END

參數有三個,
第一個 可以是表達式要或者比較的值 如下例的a
第二個 結果 如下例的1 ,2
第三個 預設值 如other
a 列
1
2
3
NULL

執行
SELECT a, DECODE(a, 1, 'one', 2, 'two', 'other') FROM case_tbl;
結果
1 'one'
2 'two'
3 'other'
NULL 'other'

a為1 等於one a為2 等於two a為3和null ,沒有符合條件的項,使用預設值other

SELECT a, DECODE(a, 1, 1, 2, 1.2345, 1.234567890) FROM case_tbl;
註意以下的結果,數字都是單精度的.隱式轉換了. 以預設結果的類型為準.
1 1.000000000
2 1.234500000
3 1.234567890
NULL 1.234567890
下麵的這個會失敗,因為one不能轉為 double
SELECT a, DECODE(a, 1, 'one', 2, 'two', 1.2345) FROM case_tbl;

GREATEST 函數
獲取最大的值

SELECT gold, silver , bronze, GREATEST (gold, silver, bronze)
FROM participant
WHERE nation_code = 'KOR';

結果是三個參數列每行值中的的最大值
gold silver bronze greatest(gold, silver, bronze)

        9           12            9                              12
        8           10           10                              10
        7           15            5                              15
       12            5           12                              12
       12           10           11                              12
       
     c#,net,cubrid,教程,學習,筆記歡迎轉載 ,轉載時請保留作者信息。本文版權歸本人所有,如有任何問題,請與我聯繫[email protected] 。 過錯  

if函數
三個參數,
第一個表達式返回真假
第二個表示真的時候返回的值
第三個表示假的時候返回的值

類似
CASE WHEN a IS TRUE THEN b
ELSE c
END

SELECT a, IF(a=1, 'one', 'other') FROM case_tbl;

IFNULL NVL函數
給null的列設預設值,註意返回的類型,取決於預設值的類型.ifnull和Nvl類似.但是Nvl支持集合類型.
類似
CASE WHEN a IS NULL THEN b
ELSE a
END

例如SELECT a, IFNULL(a, 'UNKNOWN') FROM case_tbl;
結果
1 '1'
2 '2'
3 '3'
NULL 'UNKNOWN'

ISNULL函數 返回整數 1或者0

LEAST函數
參數可以是多個表達式,返回最小的值, 參數是null則返回null

SELECT gold, silver , bronze, LEAST(gold, silver, bronze) FROM participant
WHERE nation_code = 'KOR';
結果
gold silver bronze least(gold, silver, bronze)

        9           12            9                            9
        8           10           10                            8
        7           15            5                            5
       12            5           12                            5
       12           10           11                           10

NULLIF 函數
相等返回null 否則原樣返回
類似CASE
WHEN a = b THEN NULL
ELSE a
END

      SELECT a, NULLIF(a, 1) FROM case_tbl; 
      結果 a是1的時候返回null
       a  nullif(a, 1)

        1          NULL
        2             2
        3             3
     NULL          NULL
     
     

NVL2(expr1, expr2, expr3) 函數
第一個表達式不等於null的是否返回第二個表達式,等於null返回第三個表達式
SELECT a, NVL2(a, a+1, 10.5678) FROM case_tbl;

     a  nvl2(a, a+1, 10.5678)

        1                      2
        2                      3
        3                      4
     NULL                     11

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在一些下載應用里整個頁面都是按鈕,有好多好多,但是仔細觀察不難發現他們很有規律。就像下麵一樣👇 很有規律的排列在屏幕上,那麼這需要我們怎麼去做能。 正如標題,我們需要瞭解兩個知識點,分別是自定義按鈕和九宮格,九宮格是一種演算法。在這裡我給大家列出方法,並不過多解釋,希望會對大家有幫助。 代碼如下:
  • 原文地址 下載並打開xcode。 接著新建一個工程,如下圖所示: 點擊Create a new Xcode project,之後選擇ios下的Application,點擊Single View Application來創建我們的第一個項目。如圖所示: 創建完項目後,我們來編寫我們的第一個ios項目。
  • 它是什麼? 我每天讀一章。大約每天3小時,在索引,查詢處理那兩章花了8小時以上,在範式那節重新整理下以前的看法,非常不錯的書,翻譯的也不錯。相比國內的《資料庫系統概論》,這書適合自學,並且非常詳細,演算法偽代碼多。在索引一章,完全可以通過他的演算法加例子很好的理解索引的原理和應用,在查詢處理一節,對演算法
  • 今天用到的oracle資料庫,但是發現以前設置的密碼,忘記了,怎麼輸入都不對,所以從網上找了一下資料,解決了,然後整理分享給大家。 一、遇到的問題: 1.、忘記除SYS、SYSTEM用戶之外的用戶的登錄密碼。 2.、忘記SYS用戶,或者是SYSTEM用戶的密碼。 3.、如果SYS,SYSTEM用戶的
  • 在伺服器A資料庫TEST新建了一個本地發佈(Local Publications)RPL_GES_MIS_TEST,在伺服器B資料庫RPL_TEST上創建了一個本地訂閱(Local Subscriptions),它訂閱了了這個發佈RPL_GES_MIS_TEST.如下截圖所示,本地發佈只有DB_OB...
  • Spark官方文檔 中文翻譯 轉載請註明出處: "http://www.cnblogs.com/BYRans/" "1 概述(Overview)" "2 引入Spark(Linking with Spark)" "3 初始化Spark(Initializing Spark)" "3.1 使用Spar
  • cubrid的中sql查詢語法insert into 官方文檔是英文的,看不明白可以參看ocracle的同類函數說明.很多都是一樣的. INSERT INTO a_tbl1(id) VALUES (4), (5); insert a single row with SET clauses INSER
  • cubrid的中sql查詢語法groupby GROUP BY ... HAVING Clause 按dept_no分組 SELECT dept_no, avg(sales_amount) FROM sales_tbl GROUP BY dept_no; 分組前先執行條件比較 SELECT dept
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...