SQL
SQL은 Structured Query Language의 약자로 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어입니다. 그냥 데이터를 뽑아내기 위한 도구라고 생각하면 조금 이해하기 쉬울 것 같습니다. 대부분의 회사에서 데이터를 RDB에 저장하고 있습니다. 많이 사용되는 것은 MySQL, PostgreSQL, MariaDB, Oracle 등이 있습니다.
기본적인 구조는 다음과 같습니다.
SELECT [컬럼 이름]
FROM [테이블 이름]
WHERE [조건]
GROUP BY [그룹화할 컬럼]
LIMIT [제한할 개수]
SELECT / FROM
우선 가장 중심이 되는것은 SELECT와 FROM입니다.
SELECT 뒤에는 찾고싶은 목적 대상들(Column)을 나열하면 되고, FROM 뒤에는 찾을 대상이 있는 공간(Table)을 작성하면 됩니다.
테이블의 전체 열을 검색하고 싶은 경우에는 * 로 표현합니다.
SELECT * FROM 테이블명
WHERE
조건을 주고싶은 경우엔 WHERE 뒤에 작성해주시면 됩니다. WHERE 절은 엑셀 함수에서 IF와 비슷한 느낌이라고 생각하시면 좋을 것 같습니다
조건을 입력하지 않은 경우에는 테이블의 전 데이터를 검색해서 가져오게 되니, 데이터가 많은 테이블을 검색할 때에는 사용에 주의해주세요.
SELECT * FROM 테이블명 WHERE 조건
GROUP BY
여기서 나오는 개념은 GROUP BY 입니다! GROUP BY [컬럼 이름] 이런 방식으로 사용하는데, 직관적으로 설명하자면 컬럼들을 그룹화한다(aggregate)라고 생각해주세요
우선 GROUP BY하기 위해 같은 값들을 모아두고, 그 후에 연산(COUNT 혹은 SUM 같은 집계 함수)을 수행합니다.
SELECT 컬럼1, 컬럼2, COUNT(DISTINCT 컬럼1) AS '별명1', COUNT(컬럼2) AS '별명2'
FROM 테이블명
WHERE 조건
GROUP BY 컬럼1, 컬럼2
- COUNT
- COUNT(컬럼) 이런 방식으로 사용합니다
- COUNT(user_id)를 하면 user_id의 개수를 세주는 것입니다
- DISTINCT
- COUNT(DISTINCT user_id)를 하면 중복을 제외한 고유한 user_id의 개수를 세주는 것입니다
- AS ‘별명’
- 컬럼명을 입력한 별명으로 칭하겠다라는 뜻입니다
ORDER BY
ORDER BY [컬럼 이름] 으로 사용합니다. 기본 옵션은 오름차순이며 DESC을 붙여주면 내림차순으로 정렬됩니다
SELECT 컬럼1, 컬럼2, COUNT(DISTINCT 컬럼1) AS '별명1', COUNT(컬럼2) AS '별명2'
FROM 테이블명
WHERE 조건
ORDER BY 컬럼1
LIMIT
LIMIT은 보여줄 결과를 제한해주는 것입니다. 개수 제한이 필요할 경우 사용하면 됩니다
SELECT * FROM 테이블명 LIMIT 검색갯수
JOIN
JOIN에는 여러가지 방법이 존재하지만 아래의 두가지 방법이 가장많이 사용되고있습니다.
조인 (INNER JOIN) : 기준 테이블과 조인 테이블 모두 데이터가 존재해야 조회됨
아우터 조인 (OUTER JOIN) : 기준 테이블에만 데이터가 존재하면 조회됨
조인 (INNER JOIN)
SELECT a.[컬럼1]
, a.[컬럼2]
, a.[컬럼3]
, b.[컬럼2]
FROM [테이블명1] AS a
INNER JOIN [테이블명2] AS b
ON a.[컬럼1] = b.[컬럼1]
조인은 기준 테이블(emp), 조인 테이블(dept)에 조인 컬럼(deptno)에 해당하는 값이 모두 존재하는 경우에만 데이터가 조회된다.
emp 테이블 "KING"의 deptno "90"은 dept 테이블에 존재하지 않기 때문에 조회되지 않는다.
아우터 조인 (LEFT OUTER JOIN)
SELECT a.[컬럼1]
, a.[컬럼2]
, a.[컬럼3]
, b.[컬럼2]
FROM [테이블명1] AS a
LEFT OUTER JOIN [테이블명2] AS b
ON a.[컬럼1] = b.[컬럼1]
아우터 조인에서 LEFT, RIGHT는 기준 테이블을 지정하는 것이며, 위의 쿼리에서 LEFT OUTER JOIN의 기준 테이블은 emp 테이블이다.
아우터 조인의 경우 조인 테이블(dept)에 데이터가 없어도 기준 테이블(emp)의 모든 데이터가 조회되고 조인 테이블(dept)에 데이터가 존재할 경우 해당 데이터를 참조할 수 있다.
emp 테이블 "KING"의 deptno "90"은 dept 테이블에 존재하지 않아도 조회가 되지만, dname은 참조할 수 없기 때문에 NULL로 표시된다.
'DB관련' 카테고리의 다른 글
#2 SQL(SELECT) 연습문제 (1) | 2022.11.06 |
---|---|
#1 SQL(CREATE & INSERT) (0) | 2022.11.06 |
#1 SQL(CREATE & INSERT) 연습문제 (3) | 2022.11.05 |