시리즈:쉽게 배우는 프로그래밍 입문/SQL: 두 판 사이의 차이

잔글편집 요약 없음
134번째 줄: 134번째 줄:
</source>
</source>


WHERE절은 생략도 가능하다. 하지만 해당 테이블의 모든 행이 업데이트 되버리는 대참사가 발생해버리므로 WHERE절은 꼭 붙여주자.
WHERE절은 생략도 가능하다. 하지만 해당 테이블의 모든 행이 업데이트 되버리는 대참사가 발생해버리므로 WHERE절은 꼭 붙여주자. 특히 현재 운영 중인 서버라면 더욱 더.


== 삭제 쿼리 ==
== 삭제 쿼리 ==
149번째 줄: 149번째 줄:
</source>
</source>


WHERE절은 생략도 가능하다. 하지만 해당 테이블의 모든 행이 삭제되버리는 <del>사상 최악의</del> 대참사가 발생해버리므로 WHERE절은 꼭 붙여주자.
WHERE절은 생략도 가능하다. 하지만 해당 테이블의 모든 행이 삭제되버리는 사상 최악의 대참사가 발생해버리므로 WHERE절은 꼭 붙여주자. 특히 현재 운영 중인 서버라면 더욱 더.


<source lang="tsql">
<source lang="tsql">

2015년 5월 21일 (목) 16:53 판

문서의 내용이 너무 쉬워서 오늘부터 프로그래밍 할 수 있을 것 같습니다.

이 문서에는 독자적으로 연구한 내용이 들어갑니다. 다른 사람의 의견을 존중하면서 무례하지 않도록 작성해 주시고, 의견 충돌 시 토론 문서에서 토론해 주세요.

SQL은 DBMS[1]마다 기본 적인 문법은 같지만 세부적인 부분은 서로 전혀 다르다. 단순한 쿼리 같은 것은 흡사하나 저장 프로시저나 함수 같은 부분만 봐도 완전히 다르다.

용어

데이터 베이스라던가, DB라던가 SQL라던가 모르는 사람들은 위해 엑셀에 빗대어 설명을 해보겠습니다실제로 일반적인 기업들은 엑셀로 데이터베이스의 대용으로 사용하니까

데이터 베이스

엑셀로 치면 엑셀 파일이라고 이해하시면 되겠습니다.

테이블

엑셀 파일에 있는 시트입니다. 엑셀파일의 시트처럼 각각의 디비에는 여러 개의 테이블이 있습니다.

컬럼

시트의 열과 같습니다. 다만, 시트의 열과는 다르게, 각각의 열과는 달리 이름이 배정되고 열의 갯수가 무한정으로 확장되지는 않습니다

SQL

엑셀파일에 있는 시트나 열, 행, 자료를 수정하는 것과 같은 역할을 하는 언어입니다. 마우스와 단축키로 하는 것과 달리 프로그래밍 언어처럼 코드를 써넣음으로서 테이블을 만들고, 데이터를 불러 올 수 있습니다.

조회 쿼리

공통

SELECT 컬럼1, 컬럼2
FROM 테이블

가장 기본 적인 형태로 지정한 테이블에서 지정한 컬럼의 값을 읽어온다. 각 컬럼은 ,로 구분한다. 모든 컬럼을 읽어올 때는 SELECT 부분을 SELECT *로 입력해주면 된다.

SELECT 컬럼1, 컬럼2
FROM 테이블
WHERE 컬럼3 = 'A'

WHERE는 조건을 지정할 때 쓰인다. 위의 경우는 컬럼3의 값이 A인 행들만 조회하기 위한 조건.

SELECT 컬럼1, 컬럼2
FROM 테이블
WHERE 컬럼3 = 'A'
    AND (컬럼4 = 'B' OR  컬럼5 = 'C')

WHERE 조건에 여러개의 조건을 지정할 때는 위와 같이 AND나 OR을 사용한다. AND는 두 가지가 모두 만족해야하며 OR은 둘 중 하나만 만족하면 된다. AND와 OR가 둘다 사용되면 헷갈리지 않게 괄호로 묶어주도록 하자. 위의 경우는 컬럼3의 값이 A이면서 컬럼4의 값이 B이거나 컬럼5의 값이 C인 행만 읽어오게 하기 위한 조건.

SELECT 컬럼1, 컬럼2
FROM 테이블
ORDER BY 컬럼1 ASC

ORDER BY 문을 사용하면 정렬을 할 수 있다. 위의 경우는 컬럼1을 기준으로 오름차순 정렬을 한 것으로 ASC는 생략이 가능하다. 생략시에는 오름차순으로 정렬이 된다. 내림차순으로 정렬하고 싶을 경우에는 ASC 대신 DESC를 입력해주면 된다. WHERE 절과 함께 사용 시에는 WHERE 절 아래에 사용하게 된다.

SELECT DISTINCT 컬럼1, 컬럼2
FROM 테이블

중복된 결과는 제외하고 조회하고 싶을 경우에는 DISTINCT를 붙여주면 된다.

MS-SQL

SELECT TOP 10 컬럼1, 컬럼2
FROM 테이블
ORDER BY 컬럼1 ASC

조회시 최상위의 데이터 몇 행만 가져올 경우에는 TOP을 사용하게 된다. 위의 예제는 컬럼1을 기준으로 오름차순 정렬을 한 후 최상위의 10개 행만 가져오는 예.

MySQL, MariaDB

SELECT 컬럼1, 컬럼2
FROM 테이블
ORDER BY 컬럼1 ASC
LIMIT 10

조회시 최상위의 데이터 몇 행만 가져올 경우에는 LIMIT를 사용하게 된다. 위의 예제는 컬럼1을 기준으로 오름차순 정렬을 한 후 최상위의 10개 행만 가져오는 예.

SELECT 컬럼1, 컬럼2
FROM 테이블
ORDER BY 컬럼1 ASC
LIMIT 5, 10

LIMIT 절에서 위와 같이 값을 2개 준 경우에는 첫번째 값의 행부터 두번째 값의 수만큼 가져오라는 뜻이다. 위의 예제는 6번째 행[2]부터 10개의 행 즉 15번째 행까지 읽어오게 된다. LIMIT 0, 10으로 입력하면 LIMIT 10과 동일하게 된다.

삽입 쿼리

INSERT INTO 테이블 (컬럼1, 컬럼2)
VALUES (값1, 값2)

가장 기본 적인 형태의 삽입 쿼리이다. 입력한 컬럼 수와 입력한 값의 수가 일치해야한다.

INSERT INTO 테이블
VALUES (값1, 값2)

테이블명 옆의 컬럼들은 생략이 가능하다. 하지만 이 경우 VALUES 부분에 모든 컬럼의 값을 컬럼 순서대로 적어주어야 하며 차후 테이블의 컬럼이 추가될 경우 VALUES 부분에도 추가된 컬럼 수 만큼 값의 수를 추가해주지 않으면 오류가 발생하게 되기 때문에 소스에서 이와 같은 방법으로 사용하는 것은 권장하지 않는다. 이 방식을 소스 내에서 사용하면 컬럼이 추가될 경우 이 테이블을 사용하는 모든 프로그램의 소스에서 전부 찾아내서 바꿔야하는데 사실상 힘들기 때문.

INSERT INTO 테이블A (컬럼1-A, 컬럼2-A)
SELECT 컬럼1-B, 컬럼2-B
FROM 테이블B

조회 쿼리로 조회한 결과를 삽입하는 쿼리. SELECT로 조회하는 컬럼 수와 INSERT 하는 컬럼 수가 일치해야한다. 조회쿼리 부분에선 당연히 WHERE절로 조건 주는 것도 가능하며 조인으로 여러 테이블을 묶어서 조회하는 것도 가능하다.

MySQL, MariaDB

INSERT INTO 테이블 (컬럼명1, 컬럼명2)
VALUES (값1-1, 값2-1), (값1-2, 값2-2), (값1-3, 값2-3)

위와 같은 방식으로 여러 행을 한번에 삽입할 수 있다.

수정 쿼리

UPDATE 테이블
SET 컬럼1 = 값1,
    컬럼2 = 값2
WHERE 컬럼3 = 'A'

기본 적인 수정 쿼리. WHERE절은 조회 쿼리의 WHERE절과 사용 방법이 동일하다.

UPDATE 테이블
SET 컬럼1 = 값1,
    컬럼2 = 값2

WHERE절은 생략도 가능하다. 하지만 해당 테이블의 모든 행이 업데이트 되버리는 대참사가 발생해버리므로 WHERE절은 꼭 붙여주자. 특히 현재 운영 중인 서버라면 더욱 더.

삭제 쿼리

DELETE FROM 테이블
WHERE 컬럼1 = 'A'

기본 적인 삭제 쿼리. WHERE절은 조회 쿼리의 WHERE절과 사용 방법이 동일하다.

DELETE FROM 테이블

WHERE절은 생략도 가능하다. 하지만 해당 테이블의 모든 행이 삭제되버리는 사상 최악의 대참사가 발생해버리므로 WHERE절은 꼭 붙여주자. 특히 현재 운영 중인 서버라면 더욱 더.

TRUNCATE TABLE 테이블

DELETE FROM 테이블와 비슷하지만 자동 증가 값도 리셋된다. 조건은 지정할 수 없다. 사실상 테이블을 초기화하는 거나 다름 없다.[3]

MS-SQL

DELETE 테이블
WHERE 컬럼1 = 'A'

FROM은 생략 가능하다. 이 예제는 DELETE FROM 테이블 WHERE 컬럼1 = 'A'와 동일하다.

조인

기본 함수

DBMS별 서로 같은 기능을 하는 함수 일람

MS-SQL MySQL, MariaDB
GETDATE() NOW()
ISNULL() IFNULL()
SCOPE_IDENTITY() LAST_INSERT_ID()

MS-SQL

GETDATE()

서버의 현재 날짜, 시간을 반환하는 함수.

ISNULL(A, B)

A가 NULL인지 체크하고 NULL이 아니면 A 그대로 반환하고 NULL이면 B를 반환하는 함수.

SCOPE_IDENTITY()

현재 연결된 세션에서 가장 마지막에 인서트된 자동 증가 값을 반환하는 함수.

MySQL, MariaDB

NOW()

서버의 현재 날짜, 시간을 반환하는 함수.

CONCAT(A, B, )

입력한 문자열을 하나로 합쳐주는 함수. 문자열은 + 연산자로 합칠 수 없고 이 함수를 사용하여 합쳐야한다.

IF(A, B, C)

조건 A가 참이면 B를 거짓이면 C를 반환하는 함수.

IFNULL(A, B)

A가 NULL인지 체크하고 NULL이 아니면 A 그대로 반환하고 NULL이면 B를 반환하는 함수.

ISNULL(A)

A가 NULL인지 체크하여 NULL이면 1, 아니면 0를 반환하는 함수.

LAST_INSERT_ID()

현재 연결된 세션에서 가장 마지막에 인서트된 데이터의 자동 증가된 값[4]을 반환하는 함수.

저장 프로시저

사용자 정의 함수

트리거

트랜잭션

각주

  1. 오라클이나 MS-SQL이나 MariaDB
  2. 0부터 시작이기 때문에 1번째 행은 0이다.
  3. DELETE FROM 테이블은 행을 전부 삭제해도 자동 증가 값은 남아있다.
  4. AUTO_INCREMENT 속성이 지정된 컬럼의 값

틀:쉽게 배우는 프로그래밍 입문