SQL

SQL
SQL (Structured Query Language)
패러다임선언문
가족쿼리 언어
설계자 :도널드 D.체임벌린
레이먼드 F보이스
디벨로퍼ISO/IEC JTC 1 (공동기술위원회 1) / SC 32 (분과위원회 32) / WG 3 (실무그룹 3)
첫 등장1974;49년전 (1974)
안정적 해제
SQL:2023 / 2023년 6월; 3개월 전 (2023-06)
타이핑규율정적, 강함
OS크로스 플랫폼
웹사이트www.iso.org/standard/76583.html
주요 구현
많이
방언
영향을 받음
데이터로그
영향받은
CQL, LINQ, SPARQL, SOQL, PowerShell,[1] JPQL, jOOQ, N1QL
SQL (파일 형식)
파일 확장자
.sql
인터넷 매체 유형
응용 프로그램/sql[2][3]
개발자 :ISO/IEC
초기출시1986 (1986)
형식 유형데이터베이스
표준.ISO/IEC 9075
오픈 포맷?네.
웹사이트www.iso.org/standard/76583.html

구조화 쿼리 언어(SQL)(/ ːˈɛ ˌɛkju əl/ S-Q-L, / ˈsi ːkw ˌl/ "sequel")는 프로그래밍에 사용되는 도메인별 언어로, 관계형 데이터베이스 관리 시스템(RDBMS)에 저장된 데이터를 관리하거나 관계형 데이터 스트림 관리 시스템(RDSMS)에서 스트림 처리를 위해 설계되었습니다.구조화된 데이터, 즉 개체와 변수 간의 관계를 통합한 데이터를 처리할 때 특히 유용합니다.

1970년대에 소개된 SQL은 ISAM이나 VSAM과 같은 오래된 읽기-쓰기 API에 비해 두 가지 주요 이점을 제공했습니다.첫째, 한 번의 명령으로 많은 기록에 접근하는 개념을 도입했습니다.둘째, 인덱스가 있든 없든 레코드에 도달하는 방법을 지정할 필요가 없습니다.

원래 관계 대수튜플 관계 미적분학에 기초한 SQL은 비공식적으로 하위 언어로 분류될 수 [6]있는 많은 유형의 문으로 구성됩니다. 일반적으로 데이터 쿼리 언어(DQL),[a] 데이터 정의 언어(DDL),[b] 데이터 제어 언어(DCL), 데이터 조작 언어(DML).[c][7]SQL의 범위는 데이터 쿼리, 데이터 조작(삽입, 업데이트, 삭제), 데이터 정의(스킴 생성 및 수정), 데이터 액세스 제어 등입니다.SQL은 기본적으로 선언 언어(4GL)이지만 절차적 요소도 포함합니다.

SQL은 Edgar F를 사용한 최초의 상용 언어 중 하나였습니다. Codd관계형 모델.이 모델은 1970년 그의 영향력 있는 논문인 "대규모 공유 데이터 뱅크를 위한 데이터의 관계형 모델"에서 설명되었습니다.[8]Codd가 설명한 관계형 모델을 완전히 준수하지는 않았지만 SQL은 가장 널리 사용되는 데이터베이스 언어가 되었습니다.[9][10]

SQL은 1986년 미국 표준 협회(ANSI)의 표준이 되었고 1987년 국제 표준화 기구(ISO)의 표준이 되었습니다.[11]그 이후 표준은 더 큰 기능 집합을 포함하고 공통 확장을 통합하도록 여러 번 개정되었습니다.표준이 존재함에도 불구하고, 실제로 존재하는 구현은 이를 완전히 준수하지 않으며, 대부분의 SQL 코드는 다른 데이터베이스 시스템으로 포팅되기 전에 최소한 약간의 변경이 필요합니다.

역사

SQL은 처음에 Donald D에 의해 IBM에서 개발되었습니다. 체임벌린레이먼드 F. 에드가 F로부터 관계형 모델을 알게 된 소년. 1970년대 초 Codd[12].[13]처음에는 SEQUEL(Structured English QUEry Language)이라고 불렸던 이 버전은 1970년대에 IBM San Jose Research Laboratory의 그룹이 개발한 IBM의 원래 준관계형 데이터베이스 관리 시스템인 System R에 저장된 데이터를 조작하고 검색하도록 설계되었습니다.[13]

Chamberlin and Boyce가 관계형 데이터베이스 언어를 처음 시도한 것은 SQUARE(관계형 환경에서의 쿼리 지정)였지만 첨자/첨자 표기법 때문에 사용하기가 어려웠습니다.1973년 새너제이 연구소로 옮긴 뒤 SQUARE의 후속작을 만들기 시작했습니다.[12]'SEQUEL'이 영국에 본사 호커 시들리 다이내믹스 엔지니어링 유한회사의 상표였기 때문에 잉그레스의 쿼리 언어인 QUEL에 대한 말장난으로 널리 여겨지는 SEQUEL이라는 원래 이름이 나중에 SQL(모음을 떨어뜨리는 것)[15]로 바뀌었습니다.[14]SQL이라는 레이블은 나중에 Structured Query Language의 약자가 되었습니다.

시스템의 유용성과 실용성을 판단하기 위해 고객 테스트 현장에서 SQL을 테스트한 후, IBM은 시스템 R 프로토타입을 기반으로 1979년, 1981년, 1983년에 각각 상용화된 시스템/38, SQL/DSIBM Db2를 포함한 상용 제품을 개발하기 시작했습니다.[16]

1970년대 후반, Relational Software, Inc.(현재 Oracle Corporation)는 Codd, Chamberlin 및 Boyce에 의해 기술된 개념의 잠재력을 확인하고, 해군, 중앙 정보국 및 기타 미국 정부 기관에 판매하려는 열망으로 자체 SQL 기반 RDBMS를 개발했습니다.1979년 6월, Relational Software는 VAX 컴퓨터를 위한 SQL, Oracle V2(Version2)의 최초의 상용 구현 중 하나를 선보였습니다.

1986년까지 ANSI와 ISO 표준 그룹은 공식적으로 데이터베이스 언어 SQL의 표준 정의를 채택했습니다.새로운 버전의 표준은 1989년, 1992년, 1996년, 1999년, 2003년, 2006년, 2008년, 2011년,[12] 2016년 그리고 가장 최근인 2023년에 발표되었습니다.[17]

구문

하나의 문을 포함하는 여러 SQL 언어 요소를 보여주는 차트

SQL 언어는 다음과 같은 여러 언어 요소로 세분화됩니다.

  • Clause, 문장 및 쿼리의 구성 요소입니다.(어떤 경우에는 선택 사항입니다.)[18]
  • 스칼라 값 또는 과 데이터 으로 구성된 를 생성할 수 있는 식
  • 술어: SQL 3-값 논리(3VL)(true/false/unknown) 또는 부울 진리값으로 평가할 수 있는 조건을 지정하고 문 및 쿼리의 효과를 제한하거나 프로그램 흐름을 변경하는 데 사용됩니다.
  • 쿼리는 특정 기준에 따라 데이터를 검색합니다.이것은 SQL의 중요한 요소입니다.
  • 스키마 및 데이터에 지속적인 영향을 미치거나 트랜잭션, 프로그램 흐름, 연결, 세션 또는 진단을 제어할 수 있는 문장.
    • SQL 문에는 세미콜론(";") 문 종결자도 포함됩니다.모든 플랫폼에서 필요한 것은 아니지만 SQL 문법의 표준 부분으로 정의됩니다.
  • 중요하지 않은 공백은 일반적으로 SQL 문 및 쿼리에서 무시되므로 가독성을 위해 SQL 코드 형식을 쉽게 지정할 수 있습니다.

절차확장

SQL은 관계형 데이터베이스에 포함된 데이터를 쿼리하는 특정 목적을 위해 설계되었습니다.SQL은 CBASIC과 같은 명령형 프로그래밍 언어가 아닌 집합 기반의 선언형 프로그래밍 언어입니다.그러나 표준 SQL의 확장은 control-of-flow 구성 요소와 같은 절차적 프로그래밍 언어 기능을 추가합니다.

표준 SQL/PSM 확장 및 독점 SQL 확장 외에도 다른 언어와의 DBMS 통합을 통해 절차 및 객체 지향 프로그래밍 기능을 많은 SQL 플랫폼에서 사용할 수 있습니다.SQL 표준은 SQL 데이터베이스에서 Java 코드를 지원하기 위해 SQL/JRT 확장(Java Programming Language의 SQL Routine and Types for the Java Programming Language)을 정의합니다.Microsoft SQL Server 2005SQLCLR(SQL Server Common Language Runtime)을 사용하여 관리되는 호스트를 호스팅합니다.이전 버전의 SQL Server는 주로 C로 작성된 관리되지 않는 확장 저장 프로시저로 제한된 반면, NET 어셈블리는 데이터베이스에 있습니다.포스트그레SQL을 사용하면 Perl, Python, Tcl, JavaScript(PL/V8), C 등 다양한 언어로 함수를 작성할 수 있습니다.[19]

상호운용성 및 표준화

개요

SQL 구현은 벤더 간에 호환되지 않으며 반드시 표준을 완전히 따르지도 않습니다.특히 날짜와 시간 구문, 문자열 연결,NULLs, 그리고 비교 사례 민감도는 공급업체마다 다릅니다.포스트그레표준 준수를 위해 노력하는 SQL[20]Mimer SQL[21], Postgre와 함께SQL은 모든 경우에 표준을 준수하지 않습니다.예를 들어, 따옴표로 묶지 않은 이름을 Postgre에서 소문자로 접는 경우SQL은 따옴표가 붙지 않은 이름을 대문자로 접어야 한다는 SQL 표준과 호환되지 않습니다.[22][23]따라서,Foo와 동등해야 합니다.FOO것은 아니다.foo표준에 의거하여

SQL의 일반적인 구현은 일반적으로 표준 SQL의 기본 기능에 대한 지원을 생략합니다.DATE아니면TIME데이터 유형입니다.가장 명백한 예로, 또한 가장 인기 있는 상용 및 독점 SQL DBMS는 오라클(Oracle)입니다.DATE행세를 보다DATETIME,[24]그리고[24][25] a가 부족합니다.TIMEtype)[26] 및 MS SQL 서버(2008 버전 이전).따라서 SQL 코드를 수정 없이 데이터베이스 시스템 간에 포팅할 수 있는 경우는 거의 없습니다.

호환되지 않는 이유

데이터베이스 시스템 간의 이식성이 부족한 몇 가지 이유는 다음과 같습니다.

  • SQL 표준의 복잡성과 크기는 대부분의 구현자가 전체 표준을 지원하지 않는다는 것을 의미합니다.
  • 이 표준은 몇 가지 중요한 영역(: 인덱스, 파일 저장소)에서 데이터베이스 동작을 지정하지 않으므로 구현에서 동작 방법을 결정할 수 있습니다.
  • SQL 표준은 적합한 데이터베이스 시스템이 구현해야 하는 구문을 정확하게 지정합니다.그러나 언어 구성의 의미론에 대한 표준의 명세는 잘 정의되지 않아 모호함을 초래합니다.
  • 많은 데이터베이스 공급업체가 기존 고객 기반을 크게 보유하고 있습니다. SQL 표준의 최신 버전이 공급업체의 데이터베이스 이전 동작과 충돌할 경우 공급업체는 하위 호환성을 중단하지 않을 수 있습니다.
  • 공급업체가 데이터베이스 공급업체를 쉽게 변경할 수 있는 상업적 유인책은 거의 없습니다(공급업체 잠금 참조).
  • 데이터베이스 소프트웨어를 평가하는 사용자는 표준 적합성보다 성능과 같은 다른 요소를 우선순위에 두는 경향이 있습니다.

표준화이력

SQL은 1986년 ANSI에 의해 SQL-86으로[27], ISO는 1987년에 표준으로 채택되었습니다.[11]ISO/IEC JTC 1, Information Technology, Subcommittee SC 32, Data Management Interchange에 의해 유지됩니다.

1996년까지 NIST(National Institute of Standards and Technology) 데이터 관리 표준 프로그램은 SQL DBMS의 SQL 표준 준수를 인증했습니다.이제 공급업체는 제품의 컴플라이언스를 자체적으로 인증합니다.[28]

원래 표준은 "SQL"의 공식적인 발음이 이니셜리즘이라고 선언했습니다: /ˌɛ ˌkju ːˈɛl/ ("ess cueel").그럼에도 불구하고, 많은 영어권 데이터베이스 전문가들(도널드 체임벌린 자신 포함)은 / ˈsi ːkw əl/ ("sequel")의 두문자 같은 발음을 사용하며, 이 언어의 릴리스 전 개발 이름인 "SEQUEL"을 미러링합니다.
SQL 표준은 다음과 같은 여러 가지 수정을 거쳤습니다.

연도 이름. 별칭 평.
1986 SQL-86 SQL-87 ANSI에 의해 처음 공식화됨
1989 SQL-89 FIPS 127-1 FIPS 127-1로 채택된 무결성 제약 조건을 추가한 약간의 개정판
1992 SQL-92 SQL2, FIPS 127-2 주요 개정판(ISO 9075), 엔트리 레벨 SQL-92가 FIPS 127-2로 채택됨
1999 SQL:1999 SQL3 정규 표현식 매칭, 재귀적 쿼리(예: 경과적 폐쇄), 트리거, 절차 및 흐름 제어 문 지원, 비스케일러 유형(어레이) 및 일부 객체 지향 기능(예: 구조화된 유형) 추가, Java(SQL/OLB) 및 그 반대(SQL/JRT)에 SQL 내장 지원
2003 SQL:2003 소개된 XML 관련 기능(SQL/XML), 창 기능, 표준화된 시퀀스 및 자동 생성된 값을 가진 열(ID 열 포함)
2006 SQL:2006 ISO/IEC 9075-14:2006은 SQL을 XML과 함께 사용할 수 있는 방법을 정의합니다. SQL 데이터베이스에 XML 데이터를 가져와 저장하고, 데이터베이스 내에서 이를 조작하며, XML 데이터와 기존 SQL 데이터를 모두 XML 형태로 게시하는 방법을 정의합니다.또한 W3C(World Wide Web Consortium)에서 발행하는 XML Query Language인 XQuery와 함께 SQL 코드에 쿼리를 통합하여 일반 SQL-데이터 및 XML 문서에 동시에 액세스할 수 있습니다.[31]
2008 SQL:2008 외부 커서 정의를 기준으로 순서를 합법화합니다.트리거 대신 추가, 자르기 문,[32] FETCH 절
2011 SQL:2011 시간 데이터(PERIOD FOR)[33]를 추가합니다(Temporal database#에서 자세한 정보 제공).이력).창 기능 및 FETCH 절에 대한 향상된 기능입니다.[34]
2016 SQL:2016 문자열 필드에 저장된 JSON 데이터에 대한 행 패턴 매칭, 폴리모픽 테이블 함수, 연산을 추가합니다.
2019 SQL:2019 Part 15, 다차원 배열 추가(MD 어레이 유형 및 연산자)
2023 SQL:2023 데이터 유형 JSON(SQL/Foundation)을 추가합니다.파트 16, 속성 그래프 쿼리 추가(SQL/PGQ)

현재기준

표준은 일반적으로 ISO/IEC 9075-n:yyyyPartn:title 또는 단축키로 ISO/IEC 9075 패턴으로 표시됩니다.이해 당사자는 ISO,[35] IEC 또는 ANSI에서 표준 문서를 구입할 수 있습니다.일부 오래된 어음은 자유롭게 구할 수 있습니다.[36][37][38]

ISO/IEC 9075ISO/IEC 13249: SQL 멀티미디어애플리케이션 패키지 및 일부 기술 보고서로 보완됩니다.

SQL 표준의 해부학

SQL 표준은 구식 부품의 인출로 인해 번호에 공백이 있는 11개의 부품으로 구분됩니다.

  • ISO/IEC 9075-1:2023 Part 1: Framework (SQL/Framework).논리적인 개념을 제공합니다.[39]
  • ISO/IEC 9075-2:2023 Part 2: Foundation (SQL/Foundation).언어의 가장 핵심적인 요소를 포함하고 있으며 필수 기능과 선택 기능으로 구성되어 있습니다.[40]
  • ISO/IEC 9075-3:2023 파트 3: 호-레벨 인터페이스 (SQL/CLI)각각 Ada, C++, COBOL, Fortran, MOMS, Pascal 또는 PL/I로 작성된 응용 프로그램에서 SQL 문을 실행하는 데 사용할 수 있는 인터페이스 구성 요소(구조, 절차, 가변 바인딩)를 정의합니다(Java의 경우 파트 10 참조).SQL/CLI는 SQL 문 및 SQL/CLI 프로시저 호출이 호출 애플리케이션의 소스 코드와 별개로 취급되는 방식으로 정의됩니다.Open Database Connectivity는 SQL/CLI의 잘 알려진 상위 집합입니다.표준의 이 부분은 필수 기능으로만 구성되어 있습니다.
  • ISO/IEC 9075-4:2023 파트 4: 영구 저장 모듈(SQL/PSM)제어 흐름, 조건 처리, 문 조건 신호 및 재설정, 커서 및 로컬 변수, 변수 및 매개 변수에 대한 식 할당 등 SQL에 대한 절차 확장을 표준화합니다.또한 SQL/PSM은 지속적인 데이터베이스 언어 루틴(예: "저장 프로시저")의 선언 및 유지보수를 공식화합니다.표준의 이 부분은 옵션 기능으로만 구성되어 있습니다.
  • ISO/IEC 9075-9:2023 Part 9: 외부 데이터 관리(SQL/MED)SQL에서 외부 데이터를 관리할 수 있도록 외부 데이터 래퍼 및 데이터 링크 유형을 정의하는 SQL에 대한 확장 기능을 제공합니다.외부 데이터는 SQL 기반 DBMS에 액세스할 수 있지만 관리되지 않는 데이터입니다. 표준의 이 부분은 옵션 기능으로만 구성됩니다.
  • ISO/IEC 9075-10:2023 Part 10: 객체 언어 바인딩(SQL/OLB)자바에 내장된 SQL인 SQLJ의 구문과 의미론을 정의합니다(파트 3 참조).표준은 또한 SQLJ 응용 프로그램의 이진 이식성을 보장하는 메커니즘을 설명하고 다양한 Java 패키지와 포함된 클래스를 지정합니다.표준의 이 부분은 옵션 기능으로만 구성되어 있습니다.SQL/OLB와 달리 JDBCAPI를 정의하며 SQL 표준의 일부가 아닙니다.[citation needed]
  • ISO/IEC 9075-11:2023 파트 11: 정보정의 스키마 (SQL/Schemata)정보 스키마(Information Schema) 및 정의 스키마(Definition Schema)를 정의하여 SQL 데이터베이스 및 개체를 자체 설명할 수 있는 공통 도구 집합을 제공합니다.이러한 툴에는 SQL 개체 식별자, 구조 및 무결성 제약 조건, 보안 및 승인 사양, ISO/IEC 9075의 기능 및 패키지, SQL 기반 DBMS 구현에서 제공하는 기능 지원, SQL 기반 DBMS 구현 정보 및 사이징 항목, DBMS 구현에서 지원하는 값 등이 포함됩니다.[41]표준의 이 부분에는 필수 기능과 선택 기능이 모두 포함되어 있습니다.
  • ISO/IEC 9075-13:2023 Part 13: Java TM 프로그래밍 언어(SQL/JRT)를 사용한 SQL 루틴유형정적 Java 메서드를 SQL 응용 프로그램('Java-in-the-database') 내에서 루틴으로 호출할 수 있는 기능을 지정합니다.또한 Java 클래스를 SQL structured 사용자 정의 유형으로 사용할 수 있는 기능이 필요합니다.표준의 이 부분은 옵션 기능으로만 구성되어 있습니다.
  • ISO/IEC 9075-14:2023 Part 14: XML 관련 규격(SQL/XML)SQL과 함께 XML을 사용하기 위한 SQL 기반 확장을 지정합니다.XML 데이터 유형과 더불어 SQL 데이터베이스에 XML의 조작 및 저장을 지원하기 위한 여러 루틴, 함수 및 XML-SQL 데이터 유형 매핑이 도입되었습니다.[31]표준의 이 부분은 옵션 기능으로만 구성되어 있습니다.[citation needed]
  • ISO/IEC 9075-15:2023 Part 15: 다차원 배열 (SQL/MDA)SQL에 대한 다차원 배열 유형(MDarray)과 함께 MDarray, MDarray 슬라이스, MDarray 셀 및 관련 기능에 대한 작업을 지정합니다.표준의 이 부분은 옵션 기능으로만 구성되어 있습니다.
  • ISO/IEC 9075-16:2023 Part 16: 속성 그래프 쿼리(SQL/PGQ)SQL 테이블에 저장된 그래프에 액세스하기 위한 매핑 및 쿼리 언어를 지정합니다.

SQL 표준에 대한 확장

ISO/IEC 9075는 ISO/IEC 13249 SQL 멀티미디어애플리케이션 패키지로 보완됩니다.밀접한 관련이 있지만 별개인 이 표준은 동일한 위원회에서 개발한 것입니다.SQL을 기반으로 인터페이스와 패키지를 정의합니다.목적은 텍스트, 사진, 데이터 마이닝 또는 공간 데이터와 같은 일반적인 데이터베이스 애플리케이션에 대한 통합 액세스입니다.

  • ISO/IEC 13249-1:2016 Part 1: 프레임워크
  • ISO/IEC 13249-2:2003 Part 2: 전문
  • ISO/IEC 13249-3:2016 Part 3: 공간
  • ISO/IEC 13249-5:2003 Part 5: 정지영상
  • ISO/IEC 13249-6:2006 Part 6: 데이터 마이닝
  • ISO/IEC 13249-7:2013 Part 7: History
  • ISO/IEC 13249-8:xxxxx 제8부: 메타데이터 레지스트리 액세스 MRA (작업 진행 중)

기술보고서

ISO/IEC 9075에는 ISO/IEC TR 19075로 출판된 일련의 기술 보고서도 함께 제공됩니다.이 기술 보고서에서는 SQL의 일부 기능에 대한 정당성과 사용에 대해 설명하며, 적절한 경우 예를 들어 설명합니다.기술 보고서는 비규범적입니다. 9075와 차이가 있을 경우 9075의 텍스트가 유지됩니다.현재 이용 가능한 19075 기술 보고서는 다음과 같습니다.

  • ISO/IEC TR 19075-1:2011 Part 1: SQL에서의 XQuery 정규 표현식 지원
  • ISO/IEC TR 19075-2:2015 Part 2: 시간관련 정보를 위한 SQL 지원
  • ISO/IEC TR 19075-3:2015 Part 3: 자바 프로그래밍 언어를 사용한 SQL Embedded in Programs
  • ISO/IEC TR 19075-4:2015 Part 4: 자바 프로그래밍 언어를 사용한 루틴 및 유형을 포함한 SQL
  • ISO/IEC TR 19075-5:2016 Part 5: SQL에서의 행 패턴 인식
  • ISO/IEC TR 19075-6:2017 Part 6: 자바스크립트 객체 표기법(JSON)에 대한 SQL 지원
  • ISO/IEC TR 19075-7:2017 Part 7: SQL에서의 다형성 테이블 함수
  • ISO/IEC TR 19075-8:2019 Part 8: 다차원 어레이 (SQL/MDA)
  • ISO/IEC TR 19075-9:2020 Part 9: 온라인 분석 처리(OLAP) 기능

대안

언어로서의 SQL에 대한 대안과 관계형 모델 자체에 대한 대안을 구분해야 합니다.아래는 SQL 언어에 대해 제안된 관계형 대안입니다.관계형 모델의 대안에 대해서는 탐색 데이터베이스NoSQL을 참조하십시오.

분산 SQL 처리

DRDA(Distributed Relational Database Architecture)는 1988년부터 1994년까지 IBM 내 워크그룹에 의해 설계되었습니다.DRDA를 통해 네트워크에 연결된 관계형 데이터베이스가 협력하여 SQL 요청을 처리할 수 있습니다.[43][44]

대화형 사용자 또는 프로그램은 로컬 RDB에 SQL 문을 발행하고 원격 RDB로부터 응답으로 데이터 테이블 및 상태 표시기를 수신할 수 있습니다.SQL 문을 컴파일하여 원격 RDB에 패키지로 저장한 다음 패키지 이름으로 호출할 수도 있습니다.이는 복잡하고 높은 빈도의 쿼리를 발행하는 응용 프로그램의 효율적인 운영을 위해 중요합니다.액세스할 테이블이 원격 시스템에 있을 때 특히 중요합니다.

DRDA의 메시지, 프로토콜 및 구조적 구성요소는 분산 데이터 관리 아키텍처에 의해 정의됩니다.DRDA의 분산 SQL 처리는 기존의 분산 SQL 데이터베이스와 차별화됩니다.

비평

설계.

SQL은 이론적 토대인 관계형 모델과 튜플 미적분학에서 여러 가지 면에서 벗어납니다.해당 모델에서 테이블은 튜플의 집합인 반면, SQL에서 테이블과 쿼리 결과는 의 목록입니다. 동일한 행은 여러 번 발생할 수 있으며, 행의 순서는 쿼리(예: LIMIT 절)에 사용될 수 있습니다.비평가들은 SQL을 엄격하게 원래의 기초로 되돌리는 언어로 대체해야 한다고 주장합니다. 예를 들어, Hugh Darwen과 C.J. Date(2006, ISBN 0-321-39942-0)의 The Third Manifesto를 참조하십시오.

직교성과 완전성

초기 사양에서는 기본 키와 같은 주요 기능을 지원하지 않았습니다.결과 집합의 이름을 지정할 수 없으며 하위 쿼리가 정의되지 않았습니다.이것들은 1992년에 추가되었습니다.[12]

요약 유형의 부족은 SQL의 사용자 정의 유형을 완전히 사용하는 데 걸림돌이 된다고 설명되어 왔습니다.예를 들어, JSON 지원은 2016년에 새로운 표준에 의해 추가되어야 했습니다.[45]

Null

Null의 개념은 약간의 논쟁의 주제입니다.Null 마커는 값이 없음을 나타내며 정수 열의 경우 0의 값 또는 텍스트 열의 경우 빈 문자열과 구별됩니다.Nulls의 개념은 SQL에서 3-value-logic을 적용하며, 이는 일반적인 3-value 로직의 구체적인 구현입니다.[12]

복제품

또 다른 인기 있는 비판은 중복된 행을 허용하여 데이터 유형이 데이터를 정확하게 표현하는 [12]것을 어렵게 할 수 있는 파이썬과 같은 언어와의 통합을 파싱 및 모듈화가 불가능하게 한다는 것입니다.일반적으로 테이블에서 행을 고유하게 식별하는 하나 이상의 열을 사용하여 기본 키 또는 고유한 제약 조건을 선언하면 이를 방지할 수 있습니다.

임피던스 불일치

개체-관계형 임피던스 불일치와 유사한 의미에서 선언 SQL 언어와 일반적으로 SQL이 내장된 절차 언어 간에 불일치가 발생합니다.

SQL 데이터 유형

SQL 표준은 세 가지 종류의 데이터 유형을 정의합니다(SQL/Foundation 4.1.1장).

  • 미리 정의된 데이터 유형
  • 구성된 활자
  • 사용자 정의 유형입니다.

구성된 유형은 ARY, MULTISET, REF(errence), ROW 중 하나입니다. 사용자 정의 유형은 자신의 생성자, 관찰자, 변형자, 메서드, 상속, 오버로드, 덮어쓰기, 인터페이스 등이 있는 개체 지향 언어의 클래스와 유사합니다.미리 정의된 데이터 유형은 구현을 통해 본질적으로 지원됩니다.

미리 정의된 데이터 유형

  • 문자종류
  • 캐릭터(CHAR)
  • 문자 변동(VARCHAR)
  • 문자 큰 개체(CLOB)
  • 국문형
  • 국가문자(NCAR)
  • 국가 문자 가변(NCAR 가변)
  • 국가 문자 큰 개체(NCLOB)
  • 이진 유형
  • 이진(이진)
  • 이진 변동(VARBINARY)
  • 이진 큰 개체(BLOB)
  • 숫자형
  • 정확한 숫자 유형(숫자, DECIAL, SMILINT, INTEGER, BIGINT)
  • 대략적인 숫자 유형(FLOAT, REAL, DUBLE PRECision)
  • 소수점 부동 소수점 유형(DECFLOAT)
  • 날짜 시간 유형(DATE, TIME, TIMESTAMP)
  • 구간종류(INTERVAL)
  • 부울
  • XML
  • 제이손

참고 항목

메모들

  1. ^ 형식적으로는 "SQL-data change" 문을 제외한 "SQL-data" 문입니다. 주로 Select 문입니다.
  2. ^ 공식적으로는 "SQL-schema" 문입니다.
  3. ^ 공식적으로 "SQL-data change" 문

참고문헌

  1. ^ Paul, Ryan (24 October 2005). "A guided tour of the Microsoft Command Shell". Ars Technica. Retrieved 10 April 2011.
  2. ^ "Media Type registration for application/sql". Internet Assigned Numbers Authority. 10 April 2013. Retrieved 10 April 2013.
  3. ^ Shafranovich, Y. (April 2013). "The application/sql Media Type, RFC 6922". Internet Engineering Task Force: 3. doi:10.17487/RFC6922. Retrieved 10 April 2013. {{cite journal}}:저널 요구사항 인용 journal=(도움말)
  4. ^ Beaulieu, Alan (April 2009). Mary E Treseler (ed.). Learning SQL (2nd ed.). Sebastopol, CA, USA: O'Reilly. ISBN 978-0-596-52083-0.
  5. ^ Chamberlin, Donald D. (2001-10-03). "Oral history interview with Donald D. Chamberlin". Retrieved 2020-01-14. We changed the original name "SEQUEL" to SQL because we got a letter from somebody's lawyer that said the name "SEQUEL" belonged to them. We shortened it to SQL, for Structured Query Language, and the product was known as SQL/DS.
  6. ^ SQL-92, 4.22 SQL 문, 4.22.1 SQL 문 클래스 "SQL 문을 분류하는 방법은 최소 5가지가 있습니다:", 4.22.2, 기능별로 분류된 SQL 문 "SQL 문의 주요 클래스는 다음과 같습니다:", SQL:2003 4.11 SQL 문 및 이후 버전.
  7. ^ Chatham, Mark (2012). Structured Query Language By Example - Volume I: Data Query Language. p. 8. ISBN 9781291199512.
  8. ^ Codd, Edgar F. (June 1970). "A Relational Model of Data for Large Shared Data Banks". Communications of the ACM. 13 (6): 377–87. CiteSeerX 10.1.1.88.646. doi:10.1145/362384.362685. S2CID 207549016.
  9. ^ a b Chapple, Mike. "SQL Fundamentals". Databases. About.com. Retrieved 2009-01-28.
  10. ^ "Structured Query Language (SQL)". International Business Machines. October 27, 2006. Retrieved 2007-06-10.
  11. ^ a b "ISO 9075:1987: Information technology – Database languages – SQL – Part 1: Framework (SQL/Framework)". 1987-06-01.
  12. ^ a b c d e f Chamberlin, Donald (2012). "Early History of SQL". IEEE Annals of the History of Computing. 34 (4): 78–82. doi:10.1109/MAHC.2012.61. S2CID 1322572.
  13. ^ a b c Chamberlin, Donald D; Boyce, Raymond F (1974). "SEQUEL: A Structured English Query Language" (PDF). Proceedings of the 1974 ACM SIGFIDET Workshop on Data Description, Access and Control. Association for Computing Machinery: 249–64. Archived from the original (PDF) on 2007-09-26. Retrieved 2007-06-09.
  14. ^ Starkey, Jim. "Dynamic SQL, Plumbing, and the Internal API". www.ibphoenix.com. Retrieved 2023-01-19.
  15. ^ a b Oppel, Andy (February 27, 2004). Databases Demystified. San Francisco, CA: McGraw-Hill Osborne Media. pp. 90–1. ISBN 978-0-07-146960-9.
  16. ^ "History of IBM, 1978". IBM Archives. IBM. 23 January 2003. Retrieved 2007-06-09.
  17. ^ "ISO - ISO/IEC JTC 1/SC 32 - Data management and interchange". www.iso.org. Retrieved 2 January 2021.
  18. ^ ANSI/ISO/IEC 국제표준(IS). 데이터베이스 언어 SQL—제2부: Foundation(SQL/Foundation)1999.
  19. ^ "PostgreSQL server programming". PostgreSQL 9.1 official documentation. postgresql.org. 2011. Retrieved 2012-03-09.
  20. ^ "About PostgreSQL". PostgreSQL 9.1 official website. PostgreSQL Global Development Group. 2012. Retrieved March 9, 2012. PostgreSQL prides itself in standards compliance. Its SQL implementation strongly conforms to the ANSI-SQL:2008 standard
  21. ^ "Mimer SQL, Built on Standards". Mimer SQL official website. Mimer Information Technology. 2009.
  22. ^ "4.1. Lexical Structure". PostgreSQL documentation. 2018.
  23. ^ "(Second Informal Review Draft) ISO/IEC 9075:1992, Database Language SQL, Section 5.2, syntax rule 11". 30 July 1992.
  24. ^ Lorentz, Diana; Roeser, Mary Beth; Abraham, Sundeep; Amor, Angela; Arora, Geeta; Arora, Vikas; Ashdown, Lance; Baer, Hermann; Bellamkonda, Shrikanth (October 2010) [1996]. "Basic Elements of Oracle SQL: Data Types". Oracle Database SQL Language Reference 11g Release 2 (11.2). Oracle Database Documentation Library. Redwood City, CA: Oracle USA, Inc. Retrieved December 29, 2010. For each DATE value, Oracle stores the following information: century, year, month, date, hour, minute, and second
  25. ^ Lorentz, Diana; Roeser, Mary Beth; Abraham, Sundeep; Amor, Angela; Arora, Geeta; Arora, Vikas; Ashdown, Lance; Baer, Hermann; Bellamkonda, Shrikanth (October 2010) [1996]. "Basic Elements of Oracle SQL: Data Types". Oracle Database SQL Language Reference 11g Release 2 (11.2). Oracle Database Documentation Library. Redwood City, CA: Oracle USA, Inc. Retrieved December 29, 2010. The datetime data types are DATE...
  26. ^ Lorentz, Diana; Roeser, Mary Beth; Abraham, Sundeep; Amor, Angela; Arora, Geeta; Arora, Vikas; Ashdown, Lance; Baer, Hermann; Bellamkonda, Shrikanth (October 2010) [1996]. "Basic Elements of Oracle SQL: Data Types". Oracle Database SQL Language Reference 11g Release 2 (11.2). Oracle Database Documentation Library. Redwood City, CA: Oracle USA, Inc. Retrieved December 29, 2010. Do not define columns with the following SQL/DS and DB2 data types, because they have no corresponding Oracle data type:... TIME
  27. ^ "Finding Aid". X3H2 Records, 1978–95. American National Standards Institute.
  28. ^ Doll, Shelley (June 19, 2002). "Is SQL a Standard Anymore?". TechRepublic's Builder.com. TechRepublic. Archived from the original on 2012-07-05. Retrieved 2016-04-12.
  29. ^ a b Gillespie, Patrick. "Pronouncing SQL: S-Q-L or Sequel?". Retrieved 12 February 2012.
  30. ^ Melton, Jim; Alan R Simon (1993). "1.2. What is SQL?". Understanding the New SQL: A Complete Guide. Morgan Kaufmann. p. 536. ISBN 978-1-55860-245-8. SQL (correctly pronounced "ess cue ell," instead of the somewhat common "sequel")...
  31. ^ a b Wagner, Michael (2010). SQL/XML:2006 - Evaluierung der Standardkonformität ausgewählter Datenbanksysteme. Diplomica Verlag. p. 100. ISBN 978-3-8366-9609-8.
  32. ^ "SQL:2008 now an approved ISO international standard". Sybase. July 2008. Archived from the original on 2011-06-28.
  33. ^ Krishna Kulkarni, Jan-Eike Michels (September 2012). "Temporal features in SQL:2011" (PDF). SIGMOD Record. 41 (3).
  34. ^ Fred Zemke (2012). "What's new in SQL:2011" (PDF). Oracle Corporation.
  35. ^ "ISO/IEC 9075".
  36. ^ SQL:1992 draft (text)
  37. ^ SQL:2008 draft (Zip), Whitemarsh Information Systems Corporation
  38. ^ SQL:2011 draft (Zip), Whitemarsh Information Systems Corporation
  39. ^ "ISO/IEC 9075-1:2023: Information technology – Database languages – SQL – Part 1: Framework (SQL/Framework)".
  40. ^ "ISO/IEC 9075-2:2023: Information technology -- Database languages -- SQL -- Part 2: Foundation (SQL/Foundation)". June 2023.
  41. ^ ISO/IEC 9075-11:2008: Information and Definition Schemas (SQL/Schemata). 2008. p. 1.
  42. ^ Fernando Saenz-Perez. "Outer Joins in a Deductive Database System" (PDF). Lbd.udc.es. Retrieved 2017-01-16.
  43. ^ Reinsch, R. (1988). "Distributed database for SAA". IBM Systems Journal. 27 (3): 362–389. doi:10.1147/sj.273.0362.
  44. ^ Distributed Relational Database Architecture Reference. IBM Corp. SC26-4651-0. 1990.
  45. ^ Brandon, Jamie (July 2021). "Against SQL". Retrieved 2 August 2021.

원천


외부 링크