Structured Query Language, 구조적 질의 언어
관계형 데이터베이스 시스템(RDBMS)을 제어하는 컴퓨터 언어
많은 정보를 DB 에서 조작하고 관리하기 위해서 사용
→ DB 는 SQL 언어로 해야 대화가 통함. 그래서 SQL 언어로 바꿔줘야 한다.
일반적인 프로그래밍 언어(범용 언어)와 달리 대화식 언어이기 때문에, 명령문이 짧고 간결합니다.
SQL 자체는 범용 언어에 비해 한계가 있으므로,
단독으로 사용하기 보단 고수준 언어(C#, Java, Python, PHP ...)와 함께 쓰는 것이 일반적
DB 가 이해할 수 있도록(RDBMS 를 칭함), 변형된 언어
실행시키면(Run), 테이블이 자동으로 등록됨
SELECT 의 첫번째 글자 'S'부터 하나씩 읽어가면서, 사용자의 요청을 분석한다.
S, E, L, E, C, T 까지 읽는다.
띄어쓰기를 만나면, 이전까지의 글자를 합친다.
(S, E, L, E, C, T → SELECT)
사용자가 SELECT 를 입력했다는 것을 알게된다.
예약어
정의(예약)돼있지 않은 단어를 사용하면, DB 는 SQL 질의를 이해하지 못한다.
(예시 : SELECT는 이해O. CHOOSE는 이해X)
// SELECT 다음에는 FROM 이 이고, FROM 다음에는 데이터를 가져오고싶은 테이블의 이름이 위치하도록 정의돼있다.
SELECT FROM 테이블 이름
위의 예시처럼
DBMS 는 앞에서부터 한 글자씩 읽어가면서
예약어를 이해하고, 각 예약어의 규칙을 기반으로 문장을 이해해나간다.
tTable 테이블이 있다고 가정
// 단일 라인 명령
SELECT * FROM tTable;
// 멀티 라인 명령
SELECT *
FROM tTable
WHERE city = 'Seoul';
-- Select Example (이 부분은 실행되지 않음)
SELECT * FROM tTable;
맨 앞에 -- 를 붙여서 사용
/* 여러줄 주석 예시
Select All Records from tTable
Where city in Seoul (SQL의 조건문)
*/
SELECT * FROM tTable WHERE city = 'Seoul';
/* */ 로 감싸준다.
명령어와 테이블 이름을 대소문자 구분없이 사용한 경우
// 두 명령어는 동일함
SELECT * FROM tTable;
Select * from ttable;
(문자열을 제외하고) 일반적으로 대소문자를 가리지 않는다.
다만, 대소문자 구분을 통해 가독성을 향상시킬 수도 있다.
예시
1. 컬럼 이름은 소문자로, DB 이름은 첫 글자만 대문자로 하는 등... 대소문자를 통해 컬럼과 DB 를 구분할 수 있다.
2. DBMS 에서 DB 이름, 테이블 이름, 컬럼 이름 등... 에서 대소문자를 구분하도록 설정
SELECT * FROM EMP WHERE NAME = 'James';
SELECT `COST`, `TYPE` FROM `INVOICE`;
Database Management System
다수의 사용자들이 DB 내의 데이터에 접근할 수 있도록, DB 를 관리/운영해주는 소프트웨어 도구의 집합
Relational DBMS, 관계형 데이터베이스
관계형 데이터베이스를 생성, 갱신, 관리하기 위한 시스템
테이블(table)이라는 최소 단위로 구성
→ 이 테이블은 열(column)과 행(row)으로 이루어져 있음
레코드 단위로 데이터 읽기/쓰기가 이루어진다.
C/S 구조 : 클라이언트가 요청을 보내면 서버가 처리
(SQL : 클라이언트가 요청을 보낼 때에 주로 사용하는 언어)
사용자가 데이터를 조회하고 싶을 때
SQL 문으로 작성한 요청을 RDBMS에 보내면 RDMBS는 요청된 데이터를 반환
(이 때 RDMBS는 2차원 표 형태의 데이터를 반환)
단, 어떤 RDBMS를 쓰는지에 따라 SQL 문법이 조금씩 달라질 수는 있다.
-윈도우 시스템 환경을 지원 (마이크로소프트가 개발했기 때문)