給出巢狀查詢語句的文法?

時間 2021-05-29 22:29:29

1樓:lfkdsk

首先要對 SQL 的語法有一定的了解,這個可以簡單看一下 SQL-92 的一些描述和定義:SQL-92 - Wikipedia 。

分析 SQL-92 定義的 BNF 結構,這個在 github 上能找到很多相關的資訊比如: sql-92.bnf 不過我們不一定要對整個 SQL 的 BNF 進行分析和處理,我們可以抽出乙個最簡的實現:

//只包含查詢語法的

BNF 表示式

>:=

SELECT

>FROM

>[WHERE

>]

>:=<

Field

>[,

>]

>:=TableName [,

>]

>:=<

Term

>[AND

>]

>:=<

Expression

>=

>

>:=<

Field

>|

>

>:=FieldName

>:=String

|Integer

根據抽象出來的 BNF 就可以試圖去寫 Parser,我們可以選擇使用自動機的方式,也可以試著用 Parser Combinator 的方式去寫,或者找乙個 yacc like 的工具去生成,這裡方法就很多了。提供乙個之前的實現供參考:

lfkdsk/JustDB

sql迴圈巢狀查詢的使用

吃肉不長肉 oracle資料庫 select from select from select rownum as id,product,New ID,Old ID from tables start with Old ID 1212 connect by prior New ID Old ID or...

SQL語句如何查詢各個使用者最長的連續登陸天數?

Kinglong 可以使用rownumber 給每個uid的logintime排順序,然後通過date sub得到每個日期減去序號的日期 可以理解為每次連續登入開始的前一天 再group by這個日期就能得到每次連續登入對應的天數,再取最大值就能得到最長連續登入天數。例子 UID logintime...

SQL查詢指定某行某列的資料語句如何表達?

愛凡線上 sql中沒有行的固定表達,因為排序規則不一樣,其所處的行也是不一樣的。你要看這一行的資料存不存在主鍵,如果存在主鍵你只要按照主鍵檢索就可以。select from user where uid 第二行資料的ID值 SQL的每一列都有列名的,例如第5列的列名是flag 那麼你的指令可以寫成 ...