SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명
ORDER BY 구를 사용하면 검색결과의 행 순서를 바꿀 수 있다.
FROM 구 뒤에 사용하기만 하면 된다.
정렬의 순서는 오름차순이 기본값이다. 만약 내림차순으로 하고 싶다면 열명 뒤 DESC을 붙이면 된다. 오름차순은 ASC다.
이렇게 정렬된 값은 실제 데이터에는 영향을 주지 않는다. 그렇게 참조만 하는 것 뿐이다.
NULL값은 MySQL 기준으로는 가장 작은 값으로 간주되어서 오름차순으로 정렬할 시 항상 맨 위에 오게 된다. 하지만 제품에 따라 다르기 때문에, 차이을 알아둘 필요가 있다.
SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명1 (ASC|DESC) 열명2 (ASC|DESC)...
여러 열을 고려해서 정렬을 하고 싶을 수 있다. 그럴 떼에는, ORDER BY 뒤에 여러 개의 열을 붙이면 된다. 이 때에는, 앞에 붙은 열을 우선으로 정렬한 뒤, 뒤에 붙은 열을 나중에 정렬한다.
SELECT 열명 FROM 테이블명 LIMIT 행수 [OFFSET 시작행]
블로그나 쇼핑몰에서 제품 수 기준으로 인덱싱을 하는 것처럼, MySQL도 몇 개를 기준으로 해서 표시되는 행을 제한할 수 있다.
이때 이 문법은 표준 문법은 아니고, MySQL과 PostgreSQL에서만 사용 가능하다.
만약 데이터를 3개로 제한하고, 4번째 데이터부터 출력하고 싶다면 다음과 같이 쓰면 된다.
SELECT 열명 FROM 테이블명 LIMIT 3 OFFSET 3
OFFSET 뒤에 3을 붙인 건 프로그래밍 언어에서 배열이 0에서 시작하는 것처럼 생각하면 된다.
이건 그냥... 연산자 자체는 그냥 다른 언어들의 연산자랑 비슷하다.
연산은 SELECT나 WHERE 어디서든 모두 사용이 가능하다.
이 때, 테이블의 이름에 별명을 붙이는 방법이 있다.
SELECT 열명, a*b AS mul FROM 테이블명
위 처럼 AS 별명, 아니면 바로 별명을 붙이면 저 연산을 수행한 테이블이 해당 별명으로 표시가 된다.
이 때, 만약 SELECT에서 지정한 별명을 가지고 WHERE에서 검색을 하는 것은 불가능하다. 검색 순서가 WHERE 다음 SELECT이기 때문이다. 따라서 반대는 또 가능하다.
MySQL에서는 NULL을 가지고 계산을 하면 무조건 값이 NULL이 된다. 하지만, 이 또한 언어에 따라 다르기 때문에 차이를 알아둘 필요가 있다.
말 그래도 문자열을 합치고 추출하고 이런 연산들을 말한다.
SUBSTRING('20230930', 1, 4)
SELECT CURRENT_TIMESTAMP;
만약 현재 시스템 날짜를 확인하고 싶다면 위의 함수를 사용하면 된다. 인자는 없다.
날짜 데이터에 +- N일을 할 수도 있고, 날짜끼리 뺄 수도 있다.
다른 언어의 if 같은 문법이다.
CASE의 조건에 따라서 내가 원하는 대로 데이터를 출력할 수 있다.
예를 들어, 여자면 0, 남자면 1을 출력하고 싶다면 이렇게 하면 된다.
SELECT sex,
CASE
WHEN sex = '여자' then 0
WHEN sex = '남자' then 1
END
그런데 이걸 또 switch처럼 간락한 버전으로도 쓸 수가 있다.
SELECT sex,
CASE sex when
'여자' then 0
'남자' then 1
END
뤌씬 간단하다.
다만, 값이 NULL인지를 확인하기 위해서는 ISNULL을 사용해야 하기 때문에, 간략한 버전으로는 NULL인지를 검사할 수는 없다.
INSERT INTO 테이블명 VALUES(값1, 값2, ...)
테이블의 구조에 맞춰서 INSERT 연산을 수행하면 테이블의 맨 아래에 값이 들어간다. 다음처럼 하면 된다.
INSERT INTO 테이블명 VALUES (2, 'NAME');
원하는 열을 선택해서 일부만 추가할 수도 있다.
INSERT INTO 테이블명(no) VALUES (2);
이 때, 추가하지 않은 열에는 DEFAULT값이 들어간다. 이 값은 DESC 명령을 통해 확인할 수 있다.
DESC 명령을 통해서는 열에 NOT NULL 조건 여부도 확인할 수 있다. 만약 NOT NULL이 설정되어 있다면, 해당 열에는 NULL을 추가할 수 없다.
DELETE FROM 테이블명 WHERE 조건식
이 명령을 수행하면 조건식에 해당하는 모든 행이 삭제된다.
UPDATE 테이블명 SET 열1 = 값1, 열2 = 값2,... WHERE 조건식
이 명령을 해당하면 WHERE에 해당되는 행에 대해서 열의 값을 변경할 수 있다. WHERE을 반드시 붙여야 하는 것은 아니다.
이 때, SET 뒤에 복수의 열을 지정할 수도 있는데, MySQL에서는 이러면 변경되는 순서가 앞에서 뒤 순서가 된다. 앞의 열을 먼저 변경하고, 뒤의 열을 나중에 변경하는 것이다. 이는 또 언어에 따라 다르다고 한다.
물리삭제는 정말 물리적으로 데이터베이스에서 해당 값을 지워버리는 것이고, 논리삭제는 삭제했음을 의미하는 플래그를 갱신하는 것으로 이 데이터가 삭제됐음을 간접적으로 나타내는 방법이다.
물리삭제를 하면 그만큼 데이터가 정말 지워지기 때문에 용량상 이점을 얻을 수 있겠지만, 만약 그 데이터가 이후에 필요할 때에는 다시 복구하지 못 할 것이다. 논리삭제는 반대로, 삭제되기 이전으로 간단하게 되돌릴 수 있지만, 데이터가 커지면 커질 수록 용량도 증가하고, 검색 속도도 늘어날 것이다.
따라서 둘의 장단점이 각각 존재하기 때문에, 상황에 맞춰 적절한 삭제 방식을 선택하는 것이 중요하다.