**1974년 IBM의 어쩌구저쩌구 Sequel에서 기초로 하여 ~~~
이런 구구절절은 그만하고
직역해보면 구조적 질의 언어라고 할 수 있다.
그래서 대체 뭔데???++
한마디로 말하자면
SQL이란 데이터베이스 시스템을 조작하기 위한 문법이라고 할 수 있다.
-> 관계형 데이터베이스 시스템에서는 SQL이라는 공통된 언어를 사용한다.
-> 때문에 어떤 Application Program을 쓰더라도 호환이 가능하다
** nosql이라는 것도 있다. sql이 필요없는 것을 말한다.
ex) mongodb(몽고디비)
SQL은 표준 질의어가 되었다.
관계 대수나 관계 해석은 확실한 이론 배경이 있지만 기호가 너무 복잡해서 솔직히 외우기 싫었다.
하지만 SQL은 우리가 쓰는 언어인 자연어와 비슷해서 쓰이는데 거부감도 없었고 용이했다.
SQL은 크게 2가지로 나눠진다.
1. DDL(Data Definition Language): 데이터 정의 언어
2. DML(Data Manipulation Language): 데이터 조작 언어
데이터 정의 언어란
데이터 저장 구조를 명시하는 언어로 테이블 스키마의 정의, 수정, 삭제 등을 지원한다
데이터 조작 언어란
사용자가 데이터를 접근하고 조작할 수 있게 하는 언어로 레코드의 검색, 삽입, 삭제, 수정 기능을 지원한다.
** 보면 알겠지만 위의 2가지 언어는 다루는 영역이 다르다( 테이블, 레코드)
더 자세히 살펴보자
데이터 정의 언어에서는
1. 테이블 생성(create table)
SQL문
CREATE TABLE <테이블이름> (<필드리스트>) -> 필드리스트는 '필드명 데이터타입을 의미'
2. 기본키, 외래키 설정
위와 같이 테이블을 생성할 때 키를 지정해준다
기본키와 외래키가 쓰이는 방법이다.
** references가 쓰였다는 것을 확인하고 넘어가자. 어떤 테이블의 칼럼을 키로 가지는지 알려줘야한다.
그러므로 키를 설정할 때 중요한 부분이 있다.
**바로 외래키를 필드로 갖는 테이블을 생성할 때에는
외래키가 참조하는 테이블을 먼저 생성해야한다.
3. 테이블 삭제(drop table) -> 왜?? delete라고 쓰지 않는거지? (레코드에 쓰임)
SQL
DROP TABLE <테이블이름>
**다른 테이블에서 외래키로 참조되는 경우 삭제할 수 없다!!!
4. 테이블 수정(alter table) -> 수정? 왜 update라고 쓰지 않는거지? (레코드에 쓰임)
SQL
ALTER TABLE <테이블이름> add <추가할필드>
OR
ALTER TABLE <테이블이름> DROP COLUMN <삭제할필드>
++ 우리가 익숙했던 단어들은 레코드를 조작하기 위해 쓰이는 단어들이었다.
그럼 이제 데이터 조작 언어에 대해서 알아보자
<필드리스트> => 연산에 사용될 테이블의 필드들
<값리스트> => 필드리스트의 순서에 맞춰서 삽입될 값
**그래서 순서를 잘 맞춰줘야 한다.
1. 레코드 삽입
SQL
INSERT INTO <테이블이름> (<필드리스트>) values (<값리스트>)
**삽입할 때 필드리스트의 순서는 변경가능 -> 그에 맞춰서 값리스트도 순서 바꿔주면 됨
++ 값리스트에서 값이 생략되면 NULL이 입력됨 (NOT NULL 조건 하에는 생략할 수 없음)
** 외래키로 사용되는 필드에 대해 데이터를 삽입할 때
참조하는 테이블의 해당 필드에 그 값을 먼저 삽입해야함.
2. 레코드 수정
SQL
UPDATE < 테이블이름> SET < 수정내역> WHERE <조건>
수정내역 => 대상 테이블의 필드에 들어가는 값을 수정하기 위한 산술식
,(comma)를 이용해 여러 필드에 대한 수정 내역 지정가능
조건 => 대상이 되는 레코드의 조건을 기술
** 조건을 붙이지 않으면 모든 레코드에 대해 수정내역을 적용함.
** 외래키로 사용되는 필드에 대해 데이터를 수정할 때
참조하는 테이블의 해당 필드에 그 값을 먼저 수정해야함.
3. 레코드 삭제
SQL
DELETE FROM <테이블이름> WHERE <조건>
위와 같다 다만 조건에 해당하는 레코드를 삭제할 뿐이다.
** 모든 레코드를 삭제하는 것이 테이블 삭제를 의미하는 것은 아님
** 외래키로 사용되는 필드에 대해 데이터를 삭제할 때
참조하는 테이블의 해당 필드에 그 값을 먼저 삭제해야함.
4. 레코드 검색
**제일 많이 사용하는 기능
검색의 종류는 아주 많다
SQL
SELECT <필드리스트> FROM <테이블리스트> WHERE <조건>
SELECT는 질의 결과로 출력할 필드의 리스트
FROM은 질의 실행과정에 필요한 테이블의 리스트
WHERE은 검색되어야 하는 레코드에 대한 조건 (생략하면 테이블 전체를 불러옴)
**중복된 레코드 제거 : DISTINCT
++ FROM 절에 나타난 테이블에서 모든 필드의 값을 추출할 경우에는 *을 모든 필드리스트로 갈음하여 쓴다.
** SELECT 절에서 산술식이나 상수 사용 가능
FROM에 2개 이상의 테이블 사용 가능
레코드의 순서 지정이 가능함.
검색결과를 SORT하여 출력하는 것임. SELECT문에 order by를 추가하면 된다. -> 오름차순
DESC -> 내림차순
재명명 연산
앞서 배웠다시피
테이블이나 필드에 대한 재명명이다.
**실제 테이블 이름이 수정되거나 필드 이름이 바뀌는 것은 아니다.
질의를 처리하는 과정 동안만 일시적 사용이다.
LIKE 연산자라는 것이 있다.
문자열에 대해서 일부분만 일치하는 경우를 찾을 때 사용한다.
'='이 있지만 일부분 일치를 찾아야 하기 때문에 like를 쓴다.
SQL
WHERE < 필드이름> LIKE <문자열패턴>
-> 필드이름에 지정된 문자열 패턴이 있는지 판단
??? 뭔가 정규표현식이랑 비슷하다??? -> ㅎㅎ 맞다.
집합연산 또한 가능하다.
SQL
<SELECT문 1> <집합연산자> <SELECT문 2>
**당연히 언급된 SELECT문은 필드의 개수와 데이터 타입이 같아야 한다.
-UNION
-UNION ALL
-INTERSECT
-MINUS
그리고 조인들까지도 있다.
외부조인
-완전 외부조인
또한 수학에 관한 함수들도 제공한다.
-COUNT
SQL
COUNT( DISTINCT <필드이름>)
-> 해당 필드에 값이 몇개인지 출력
(DISTINCT는 중복된 값이 개수가 필요 없다면 쓴다.) ++ NULL은 계산 제외다.
-SUM
SQL
SUM(<필드 이름>)
-AVG
AVG(<필드 이름>)
-MIN, MAX
둘다 같은 방식으로 씀
MIN(<필드 이름>)
MAX(<필드 이름>)
GROUP BY라는 것이 있음.
-SELECT 절에 집계함수( 통게 함수가 사용될 경우 다른 필드에 SELECT 절에 사용할 수 없음.
SQL
GROUP BY <필드리스트>
GROUP BY절은 SELECT문에서 WHERE 절 다음에 오며
지정된 필드의 값이 같은 레코드들끼리 그룹을 지어 각 그룹별로 집계 함수를 적용한 결과를 출력한다.
예를 들어?
HAVING이라는 것도 있다.
GROUP에 대한 조건을 명시할 때 사용한다.
오류를 정정한다면?
**WHERE절 HAVING절 GROUP BY절을 혼합해서 쓸 때 유의할 점이 있다.
'컴퓨터(Computer Science) > 데이터베이스, DB, DataBase' 카테고리의 다른 글
데이터베이스의 설계( Database Design) (0) | 2020.12.13 |
---|---|
SQL(Structured Query Language) + 보충내용(NULL처리, 중첩질의, 뷰(VIEW)) (0) | 2020.12.12 |
관계형 데이터베이스, Relation Database 란? (0) | 2020.12.11 |
데이터베이스에서의 키(Key) (0) | 2020.12.11 |
파일과 데이터베이스 -> DBMS를 쓰는 이유 (0) | 2020.09.08 |