SQL 쿼리
SQL(Structured Query Language)은 간단한 선언적 문을 통해 관계형 데이터베이스에 저장된 데이터를 관리합니다. ANSI SQL-92 표준을 사용하여 ODBC 데이터베이스 및 내장형 데이터베이스를 쿼리합니다.
SQL 문법
하향식 SQL 파서는 다음과 같은 이유로 간소화된 버전의 표준 SQL 문법을 기반으로 합니다.
- FactoryTalk Optix는 표준 SQL의 하위 집합만 지원합니다.
- 간소화된 표준 SQL 문법은 하향식 파서 구현에 가장 적합합니다.
- 간소화된 표준 SQL 문법은 결과 AST의 가독성을 높여줍니다.
문
팁:
특수 문자가 있는 열 이름을 다음과 같은 방식으로 이스케이프합니다.
SELECT MAX(
"/Variable1"
) FROM mystore.recipeschema1;FactoryTalk Optix Studio
는 SQL 쿼리에서 다음의 문을 지원합니다.- SELECT문을 사용하여 데이터베이스에서 데이터를 선택합니다. 이 문은 열 이름과 값 표현식뿐만 아니라ALL및DISTINCT집합 한정자를 모두 지원합니다.예:SELECT *, FROM Table1 SELECT *, Timestamp AS T FROM Table1 SELECT Column1 FROM Table1 SELECT *, 10 FROM Table1 SELECT 10, * FROM Table1 SELECT *, 'text value' FROM Table1 SELECT COUNT(*) FROM Table1 SELECT DINSTINCT Column1 FROM Table1노트:CASE및WHEN표현식은 지원되지 않습니다.중요:SQL 표준에서는*를 파생 열과 결합하는 것을 허용하지 않습니다.SELECT *, Timestamp FROM Table1SELECT *, ROW_NUMBER() OVER (ORDER BY Timestamp) FROM DataLoggerFactoryTalk Optix는 스파크라인 차트에 대한 쿼리 조작을 허용하기 위해 이 표준을 지원합니다.
- 테이블의 기존 레코드를 삭제하려면DELETE문을 사용합니다.예:SELECT * FROM Table1 WHERE ... DELETE FROM Table1 WHERE ... UPDATE Table1 SET column1 = 10 WHERE column2 > 20 ...
- 테이블의 기존 레코드를 수정하려면UPDATE문을 사용합니다.예:SELECT * FROM Table1 WHERE ... DELETE FROM Table1 WHERE ... UPDATE Table1 SET column1 = 10 WHERE column2 > 20 ...
FactoryTalk Optix Studio
는 SQL 쿼리에서 다음의 문을 부분적으로 지원합니다.- 테이블 또는 데이터베이스 테이블을 만들려면CREATE문을 사용합니다. 이 문은TABLE및INDEX를 부분적으로 지원합니다.예:CREATE UNIQUE INDEX Table_Index ON Table1 (Column1) CREATE INDEX IF NOT EXISTS Table_Index ON Table1 (Column1)CREATE TABLE TempTable AS SELECT Column1 FROM MyTable WHERE Column1 > 5 CREATE TEMPORARY TABLE TempTable AS SELECT Column1 FROM MyTable WHERE Column1 > 5CREATE TEMPORARY TABLE Table2 AS SELECT Column1 FROM Table1 WHERE Column1 > 5 CREATE UNIQUE INDEX Column1_Index ON Table1 (Column1) DROP TABLE Table1
- DROP문은 기존 데이터베이스 또는 데이터베이스의 테이블을 삭제합니다.예:DROP TABLE TemporaryTable DROP TABLE Table1
리터럴 값
리터럴 값 유형 | 예제 | 참고 |
---|---|---|
정수 | 1520 | 천 단위 구분 기호를 사용하지 마십시오. Int32 유형을 사용합니다. |
실수 | 15.025 | . 을 소수 구분 기호로 사용합니다.Double 유형을 사용합니다. |
실수의 과학적 표기 | 2.7000001072883606E-1 | |
Boolean |
| 부울 값에는 소문자를 사용합니다. |
문자열 | 'string value' | 작은따옴표를 사용하여 텍스트를 구분합니다. 작은따옴표( ' )를 다른 작은따옴표로 이스케이프 처리하여 텍스트 문자열에 작은따옴표를 삽입합니다. 예를 들어, 'string' 을 쓰려면 문자열에 두 개의 작은따옴표 ''string'' 을 사용합니다. |
날짜 및 시간 | "2004-05-23T14:25:10.487" | 큰따옴표로 구분된 ISO8601 형식을 사용합니다. 날짜 및 시간 표기법은 모호성 없이 DATE , TIME 및 TIMESTAMP 키워드를 피하는 데 사용되는 비표준 ANSI SQL입니다. |
표준 식별자 |
| 공백을 사용하지 마십시오. 대문자 또는 소문자로 시작합니다. 숫자, 문자 및 밑줄 문자 _ 를 사용할 수 있습니다. |
구분 식별자 |
| 큰따옴표( " )를 구분 기호로 사용합니다.식별자에서 " 문자를 제외한 모든 문자를 사용합니다.식별자 끝에 있는 공백은 무시됩니다. |
조인
INNER
, UNION
, LEFT
, RIGHT
, FULL
, NATURAL
및 CROSS
와 같은 모든 종류의 조인이 지원됩니다.
노트:
일부 조인은 모든 DBMS에서 완벽하게 지원되지 않습니다.
별칭
식별자, 파생 열 하위 쿼리 및 테이블에서 별칭을 사용할 수 있습니다.
다음은 별칭이 있는 쿼리의 예입니다.
SELECT Timestamp AS T FROM Table1 WHERE ...
SELECT * FROM Table1 AS T WHERE ...
SELECT * FROM (SELECT * FROM Table1) AS SubQuery WHERE ...
CREATE TABLE Table1 AS SELECT Timestamp, Column1 FROM Table2
테이블 참조
FROM
절은 다음 테이블 참조를 지원합니다.참조 | 예제 |
---|---|
정규화된 참조 | ... FROM table_name ... FROM schema_name.table_name ... FROM database_name.schema.name.table_name |
하위 쿼리 | ... FROM (SELECT * FROM Table2) WHERE ... |
노트:
정규화된 이름은 열 참조로도 지원됩니다.
예:
... WHERE Table1.Column1 > 10... WHERE Table1."order id" > 10 SELECT * FROM Table1 AS T WHERE T."order id" > 10 ... WHERE "my table"."order id" > 10
연산자
연산자 | 예제 |
---|---|
IN |
|
BETWEEN |
|
LIKE |
|
EXISTS |
|
IS |
|
NOT |
NOT 연산자는 다른 모든 연산자에 적용됩니다. |
노트:
ANY
및 ALL
연산자는 지원되지 않습니다.창 함수
함수 | 예제 |
---|---|
ROW_NUMBER |
|
RANK |
|
DENSE_RANK |
|
AVG |
|
SUM , MIN , MAX |
|
COUNT |
|
노트:
PARTITION BY
절은 열 식별자만 지원합니다.토큰
토큰 | 정규식 |
---|---|
regular_identifier | [a-zA-Z][a-zA-Z0-9_]* |
delimited_identifier | ".*?" |
real | |
boolean | |
기타 사소한 토큰 | 단일 문자 또는 단일 단어 토큰에 대한 정규식 |
노트:
렉서는 날짜 및 시간 값을 토큰으로 인식하지 않고
delimited_identifier
로 구문 분석합니다. 의미 분석기는 r
정규식에 따라 delimited_identifier
에서 모든 날짜 및 시간 값을 추출합니다.SQL
쿼리
의견을 작성 부탁드립니다.