https://www.w3schools.com/sql/default.asp 참조 가능

SELECT FROM부터 DELETE까지. 학교 시험 준비용이므로 간략하게 정리한 것. 틀린 부분 있을 수 있음.


SELECT column_C

FROM table_T;

table T 상에서 column C를 추출해 나타낸다. (이 때 column C의 자리에 *를 입력하면 전체 schema를 커버하는 것.)


SELECT DISTINCT column_C

FROM table_T;

table T 상에서 column C를 추출해 나타내되, 중복되는 항목은 한 번만 나타낸다. (예컨대 Customers라는 테이블에 customerName이 Anne이라는 사람이 여러 명 있다고 해도, SELECT DISTINCT customerName FROM Customers를 실행할 경우 Anne이라는 이름은 단 한 번 나오게 된다.)


SELECT COUNT(column_C)

FROM table_T;

column C의 항목이 몇 개 있는지 세어줌. SELECT COUNT(DISTINCT column C) FROM (table T); 등 중복되지 않는 항목들을 셀 때에도 사용 가능하다.


SELECT column_C

FROM table_T

WHERE condition_N;

condition N에 들어맞는 data만을 추출해내는 statement. 이 때 condition문에서 요구되는 조건이 문자일 때는 condition='requiredCondition'과 같은 식으로 '' 안에 필요한 조건이 들어가고(WHERE Name='Anne'), 요구되는 조건이 숫자일 경우에는 ''를 사용하지 않는다(WHERE Age=22). WHERE clause에서는 =, <>(!=), >, <, >=, <=, BETWEEN, LIKE, IN 등이 사용된다.


SELECT column_C

FROM table_T

WHERE [NOT] condition_N1 AND/OR condition_N2;

WHERE clause에서는 AND, OR, NOT의 사용으로 전체 SQL문이나 WHERE문을 간략화할 수 있다. 사용법은 다른 프로그래밍 언어와 같다. 조건 N2나 N3 중 최소한 하나를 만족하는 동시에 N1를 만족하는 결과를 얻고 싶다면 WHERE N1 AND (N2 OR N3) 등으로도 조합이 가능하다.


SELECT column_C

FROM table_T

ORDER BY special_column_S ASC/DESC;

ORDER BY는 결과를 특정 열 S의 값들에 따라 올림차순(ASC) 혹은 내림차순(DESC)으로 정렬할 수 있게 해준다. ORDER BY의 기본 정렬 방식은 ASC이므로, 단순히 한 열의 값에 따라 올림차순으로 정렬하고 싶은 거라면 ASC를 쓰지 않아도 괜찮다. 이는 여러가지 방식으로 응용이 가능한데, 정렬할 때 필요한 special column S으로 한 개 이상의 열을 사용할 수 있기 때문이다. 예컨대 C1이라는 열로 올림차순 순으로 정렬을 한 뒤, C2라는 열로 내림차순으로 추가 정렬을 하고 싶은 거라면 ORDER BY C1 ASC, C2 DESC;라는 clause를 사용하면 된다.


INSERT INTO table_T (column_C)

VALUES (value_V);

만약 table T의 모든 열에 대한 값을 새로 집어넣으려는 것이라면 (column C) 부분은 생략이 가능하다. 단 이 때는 value V의 순서가 table에 있는 열 순서와 같게 집어넣어야 한다. (열이 Name, Age, University 순일 때 35, 'A University', 'John' 순서로 집어넣으면 눈물이 나온다.)

INSERT를 할 때 전체 열이 아닌 몇몇 열에 대한 값만 집어넣는 경우에는 새로운 행의 나머지 부분은 어떻게 되는지 궁금할 수 있다. 예를 들어 ID, Name, Age, University, Sex 다섯 개의 열로 이루어진 table Students에 1, 'John', 35, 'A University'만을 집어넣었다고 해보자.

INSERT INTO STUDENTS (ID, Name, Age, University)

VALUES (1, 'John', 35, 'A University');

이 때 John의 생물학적 성별은 테이블 상에서는 알 수 없는 값이 된다. 이럴 경우 RDMS는 John의 성별에 NULL이라는 값을 넣는다. (0을 값으로 갖는 경우나 스페이스를 포함하는 필드와는 경우가 다르다. NULL은 기록을 만들 때 정보가 채워지지 않은 부분을 채운다.) NULL에는 WHERE clause에서 사용 가능했던 비교 연산자들을 사용할 수가 없다.


SELECT column_C

FROM table_T

WHERE special_column_S IS [NOT] NULL;

그래서 사용되는 것이 IS NULL, 혹은 IS NOT NULL이다. 이 statement를 통해 특정 열 S의 값이 NULL인, 혹은 NULL이 아닌 값들만 추출이 가능하다.


이제 John의 성별이 남성이라는 것을 알게 되었다고 하자. 그리고 A 대학에 다니던 그가 이젠 B 대학에 다니게 되었다고 하자. 그렇다면 테이블 상의 있는 A 대학에 다니고 성별을 알 수 없는 John에 대한 기록은 의미가 없어졌다. 업데이트가 필요한 시점인 것이다.

UPDATE table_T

SET column_C1=value_V1

WHERE condition_N;

John의 기록 중 새로 업데이트할 정보는 Sex와 University이다. 그리고 John만이 갖는 고유한 값은(다른 학생의 정보가 같이 바뀌는 걸 막기 위해) ID이다. 그러므로 John만의 정보를 바꾸기 위해서는 다음과 같이 쓸 수 있다.

UPDATE Students

SET Sex='Male', University='B University'

WHERE ID=1;

UPDATE를 사용할 때 중요한 것은 WHERE문이다. 만약 WHERE문을 적절하게 사용하지 않으면 학생들이 전부 B 대학을 다니게 되고 남자가 될 수도 있기 때문이다.(WHERE clause를 생략해버렸을 경우) 돌이킬 수 없어 눈물이 난다.


그런데 이런... John이 죽었다. 젊은 나이에. 상관없다. 어쨌든 그가 더 이상 학생 신분이 아니라는 것은 확실하기 때문이다. Students 테이블은 더 이상 John의 기록을 가지고 있을 이유가 없다. 죽은 동시에 학생일 수 있는 존재는 없으므로. 트와일라잇 시리즈에서 사실상 죽은 존재이지만 햇볕에 나가면 반짝이는 몸을 가지고 있는 에드워드는 무시하도록 하자. 학생이었다가 죽은 존재가 된 벨라도.

DELETE FROM table_T

WHERE condition_N;

세상의 모든 John이 죽는 전염병이 돈 것도 아니고, B 대학에 다니며 35살 남성이고 ID가 1인 John만이 죽었으므로 WHERE문의 조건은 다음과 같이 쓰면 된다.

DELETE FROM Students

WHERE ID=1;

이렇게 John은 Students 테이블에서 사라졌다. 그냥 취직해서 사회인이 되었다고 할 걸. 만약 모든 학생들을 삭제하고 싶으면 WHERE문을 깜빡해서 빼먹으면 된다.

+ Recent posts