프로그래밍 노트

BNF로 표기한 SQL문법 본문

데이터베이스

BNF로 표기한 SQL문법

띠리 2007. 5. 15. 10:13

○ 테이블 정의

<테이블 정의> ::= create table <테이블명> ( <테이블요소> [ { , <테이블요소> } ... ] )
<테이블 요소> ::= <속성정의> | <테이블 제약정의>
<속성 정의> ::= <컬럼명> <데이터형> [ <컬럼제약> ]
<데이터형> ::=  
<컬럼 제약> ::= not null [ unique | primary key ]
<테이블 제약 정의> ::= unique | primary key ( <컬럼명> [ { , <컬럼명> } ... ] )

 

○ 질의

<select> ::= select [ all | distinct ] [ <수식> [ { , <수식> } ... ] | * ] <from 구> [<where 구> ] [ <group 구> ] [ <having 구> ] [ <order 구>]
<from 구> ::= from <테이블 지정> [ { , <테이블 지정> } ... ]
<테이블 지정> ::= <테이블명> [ join <테이블명> on <결합 조건> ]
<결합조건> ::= <컬럼 지정> = <컬럼 지정>
<where 구> ::= where <검색조건>
<group 구> ::= group by <컬럼 지정> [ asc | desc ]
<having 구> ::= having <검색조건>
<order 구> ::= order by <컬럼 지정> [ asc | desc ] [ { , <컬럼 지정> [ asc | desc ] } ... ]
<수식> ::= <항> | <수식> + <항> | <수식> + <항>
<항> ::= <인자> | <항> * <인자> | <항> / <인자>
<인자> ::= [ + | - ] <1차인자>
<1차인자> ::= <값지정> | <컬럼 지정> | <집합함수 지정> | ( <수식> )
<속성 지정> ::= [ <테이블명> . ] <컬럼 명>
<집합함수지정> ::= count(*) | <distinct 집합함수> | <all 집합함수>
<distinct 집합함수> ::= { avg | max | min | sum | count } ( distinct <컬럼 명> )
<all 집합함수> ::= { avg | max | min | sum } ( [ all ]<컬럼 명> )
<검색조건> ::= <BOOL항> | <검색조건> or <BOOL항>
<BOOL항> ::= <BOOL인자> | <BOOL항> and <BOOL항>
<BOOL인자> ::= [ not ] <BOOL1차인자>
<BOOL1차인자> ::= <술어> | ( <검색조건> )
<술어> ::= <비교술어> | <between 술어> | <in 술어> | <like 술어> | <null 술어> | <한정술어> | <exists 술어>
<비교술어> ::= <수식> <비교연산자> { <수식> | <부질의> }
<비교연산자> ::= <> | = | < | > | <= | >=
<between 술어> ::= <수식> [ not ] between <수식> and <식>
<in 술어> ::= <수식> [ not ] in { <한정값 리스트} | <부질의> }
<한정값 리스트> ::= <값지정> [ { , <값지정> } ... ]
<like 술어> ::= <속성 지정> [ not ] like <패턴>
<패턴> ::= <값지정>
<null 술어> ::= <컬럼 지정> is [ not ] null
<한정술어> ::= <수식> <비교연산자> <한정자> <부질의>
<한정자> ::= all | <some 술어>
<some 술어> ::= some | any
<exists 술어> ::= exists <부질의>

 

○ 부질의

<질의지정> ::= select [ all | distinct ]  { <수식> | * }  <from 구>  [ <where 구> ]  [ <group 구> ]  [ <having 구> ]

 

○ 복수질의

<질의 지정> ::= select [ all | distinct ] [ <수식> [ { , <수식> } ... ] | * ] <from 구> [ <where 구> ] [ <group 구> ] [ <having 구> ] [ <order 구> ]

 

○ insert문

<insert문> ::= insert into <테이블명> [ { <삽입 컬럼 리스트>} ] { values ( <삼입값 리스트> | <질의 지정> }
<삽입 컬럼 리스트> ::= <컬럼명> [ { , <컬럼명> } ...
<컬럼값 리스트> ::= <추가값> [ { , <추가값> } ...
<추가값> ::= <값지정> | null

 

○ update문

< update문 > ::= update <테이블명> set <설정구:검색> [ { , <설정구:검색> } ... ] [ where <검색조건> ]
<설정구:검색> ::= <대상 컬럼:검색> = { <수식> | null }
<대상 컬럼:검색> ::= <컬럼명>

 

○ delete문

< delete문 > ::= delete from <테이블명> [ where <검색조건> ]


음 이해하기 쉬운듯 어려운 듯....
Comments