CS Interview

SQL - 기본

게임이 더 좋아 2021. 11. 29. 18:54
반응형
728x170

 

데이터 조작어에는 크게 4가지가 있다.

SELECT -> 테이블에서 튜플 검색 (기본)

INSERT -> 테이블에 새로운 튜플 삽입

DELETE -> 테이블에서 튜플 삭제

UPDATE -> 테이블에서 튜플 갱신

 

위 4가지를 활용해보자

 

또한 조건을 달 때에는 일반적인 프로그래밍 언어와 다르기 때문에 알고 들어가자

논리 연산자와 비교연산자가 조금 다르다.

논리연산자로는

연산자 설명
ALL 하나의 값을 다른 값들의 집합의 모든 값들과 비교할 때 사용
AND SQL 문의 WHERE 절에 여러 개의 조건이 존재할 수 있게 해줍니다. ★★★★★
ANY 조건을 따르는 목록에 해당하는 값을 비교하기 위해 사용됩니다.
BETWEEN 최소값과 최대값을 지정한 값의 범위 내에 있는 값들을 검색하기 위해 사용됩니다.
EXISTS 특정한 기준으로 구체화한 테이블에서 행이 존재하는지를 찾기 위해 사용됩니다.
IN 어떤 값을 구체화된 리터럴 값의 목록과 비교하기 위해 사용됩니다.
LIKE 와일드카드 연산자를 사용하여 해당 값과 유사한 값을 찾으려 할 때 사용됩니다.
NOT 사용하려는 논리 연산자의 의미를 반전시킵니다. 사용 예: NOT EXISTS, NOT BETWEEN, NOT IN 등. 이 연산자가 부정 연산자입니다.
OR SQL 문의 WHERE 절에서 여러 조건을 합치기 위해 사용됩니다. ★★★★★
IS NULL 해당 값을 NULL 값과 비교할 때 사용됩니다.
UNIQUE 유일성을 가지도록 구체화된 테이블의 모든 행을 검색합니다. (중복 불허)

 

비교 연산자

연산자 설명
= 두 피연산자가 서로 같은 값인지 아닌지 확인합니다. 같으면 참(true)이됩니다. ★★★★★ (a = b) 는 참이 아닙니다.
!= 두 피연산자가 서로 같은 값인지 아닌지 확인합니다. 서로 다른 값이면 참이 됩니다. ★★ (a != b) 는 참입니다.
<> 두 피연산자가 서로 같은 값인지 아닌지 확인합니다. 서로 다른 값이면 참이 됩니다. (a <> b) 는 참입니다.
> 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 큰지 확인합니다. 크면 해당 조건은 참이 됩니다. (a > b) 는 참이 아닙니다.
< 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작은지를 확인합니다. 작으면 해당 조건은 참이 됩니다. (a < b) 는 참입니다.
>= 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 크거나 같은지를 확인합니다. 맞으면 조건은 참이 됩니다. (a >= b) 는 참이 아닙니다.
<= 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작거나 같은지를 확인합니다. 맞으면 조건은 참이 됩니다. (a <= b) 는 참입니다.
!< 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작지 않은지를 확인합니다. 맞으면 조건은 참이됩니다. (a !< b) 는 거짓입니다.
!> 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 크지 않은지를 확인합니다. 맞으면 조건은 참이됩니다. (a !> b) 는 참입니다.

 

 

 

 


 

1. 삽입

 

기본적인 형식

INSERT INTO 테이블 이름( 속성1, 속성2, ...)
VALUES (값1, 값2 ...);

 

-> 해당 테이블에 속성 1에 값 1을 넣고 속성 2에 값 2를 넣고... 해서 새로운 튜플 삽입.

 

EX) Table1 에 있는 속성 3이 "잘함"  조건을 만족하는 튜플들을 Table 2에 삽입하고 싶다?

INSERT INTO Table 2 ( 속성 1, 속성 2, 속성 3)
SELECT (속성 1, 속성 2, 속성3)
FROM Table1
WHERE 속성 3 = "잘함";

-> 속성 3이 "잘함"인 Table 1에서 속성 1,2,3을 뽑아서 Table 2에 넣는 것이다.

 

 

 


 

2. 삭제

 

기본적인 형식

DELETE
FROM 테이블 이름
WHERE 조건;

 

해당 조건을 만족하는 튜플을 삭제함

(행 별로 데이터를 삭제하고 싶다면 그것은 UPDATE를 해서 값을 바꾸는 것으로 해야함)

 

Table1 의 모든 레코드를 삭제하고 싶다?

DELETE
FROM Table1

 

 

 


 

3. 갱신

 

기본적인 형식

UPDATE 테이블 이름
SET 속성1 = 데이터1, 속성2 = 데이터2 ....
WHERE 조건;

 

 


 

응용 검색

 

FROM 절에 Table이 2개 이상있는 SQL문을 보자

SELECT *
FROM Table1, Table2
WHERE table1.num = table2.num

-> Table1, Table2 에서 num를 공통으로 갖는 튜플의 모든 속성을 검색

 

 

하지만 FROM 절 테이블 단순히 2개를 포함시켜 카디션 프로덕트를 만들기보다는

테이블 간의 레코드에 대한 관계가 명시된 조인, 자연 조인의 의미를 가진다.

 

다른 예시를 보자 ****

SELECT 속성1, 속성2
FROM Table1 (INNER) JOIN Table2
WHERE Table2. Name = "가나다" AND Table2.id = Table1.id

 

-> 테이블 1, 2에서 테이블2의 Name이 "가나다" 튜플의 id 와 Table1의 id가 같은 튜플의 속성 1,2를 검색

-> 즉, Table2의 "가나다"의 id와  Table2의 id가 같은 속성 1과 속성2 검색

 

**내부 조인은 JOIN 조건에서 동일한 값이 있는 행만을 반환한다는 특징이 있다.

반대로 외부 조인은 테이블의 데이터를 함께 출력하고 데이터가 없는 경우에는 NULL 값으로 출력한다.

 

 

내부 조인

SELECT 속성 1, 속성 2, ...
FROM table1
    INNER JOIN
    table2
WHERE 조건

이 말은 table1 과 table2의 레코드를 결합해서 속성을 뽑아내겠다는 말이다.

-> 참조키를 통해서 레코드를 결합한다.

table1과 table2를 합치고 그 중에서 조건에 맞는 속성 1과 속성 2를 검색하는 것이다.

 

예를 들어 두가지 테이블이 있다고 하자.

table1(사람)

id name num
pkpk abc 1
sksk cde 2
hkhk ggg 3
agag hkl 4

 

table2(부동산)

id place place_num idx
pkpk pp 3 22
hkhk qq 4 22
pkpk ee 5 23
sksk rr 6 24
hkhk tt 7 25

 

우리는 name이 ggg인 사람이 가지고 있는 부동산의 모든 정보를 알고 싶다.

-> name이 ggg인 사람에서 참조키인 id를 알아내어 table2의 모든 열에 대해 출력

 

SELECT * 
FROM table1
    INNER JOIN
    table2
WHERE table2.name = ggg AND table1.id = table2.id

 

다음으로는 집합 연산이 있다.

서로 다른 SELECT 문의 실행결과들에 대해

합집합, 교집합, 차집합을 수행할 수 있다.

 

1. 합집합

 

기본적인 형식

SELECT 문
UNION
SELECT문

 

SELECT 문의 가운데 놓여진다.

중복되는 값은 사라진다.

 

 

2. 교집합

 

기본적인 형식

SELECT 문
INTERSECT
SELECT문

 

SELECT 문의 가운데 놓여진다.

중복되는 값은 사라진다.

 

3. 차집합

 

기본적인 형식

SELECT문
MINUS
SELECT문

 

 

다만 여기서는 순서에 따라 결과가 달라지는데

앞에 나온 SELECT문이 기준이 된다.

 

 


참고링크

 

https://injun379.tistory.com/113

 

728x90
반응형
그리드형