티스토리 뷰

반응형

안녕하세요!

오늘은 SQL에 대해 정리해보았어요.

가장 메인인 Select, From 에 대해서 말이죠!

항상 배웠어도 시간이 지나면 머릿속에서 지워지는 친구들..

보기 쉽게 정리해서 잊어버리지 않도록 해보아요!


시작하기 전에

어디서 많이 봤을법한 가장 기본적인 slq문이죠?

select * from student; 

=> student 테이블에 있는 모든 데이터를 모여줘! 라는 의미입니다.

 

그 다음은 특정 테이블의 구조를 조회하는 DESC

desc student; 

=> student 테이블의 구조를 보여줘!


Column은 해당 테이블의 컬럼명

Nullable은 Null의 여부 확인, not null은 null이 허용되지 않는 구조입니다. 

그런데 잠깐! 데이터베이스에서 NULL은 비어있다. 이런 의미가 아니라 아직 값이 확정되지 않은 상태입니다. 

Type은 럼의 데이터 타입, 정해진 타입의 데이터만 넣을 수 있습니다. 데이터타입(최대 허용 바이트)


이제 본격적으로...!

 

1. SELECT

 

SELECT는 데이터를 조회하기 위한 문법, 말 그대로 선택하다(데이터를 선택하다.)

FROM은 어떤 테이블에서 데이터를 조회할지, 말 그대로 ~에서(~테이블에서, ~테이블에 있는)

 

 select에는 표현하고자하는 대상(컬럼명)저장되어있는 데이터를 변환(SAL*1.1)하여저장되어있지 않는 데이터를 함께 사용할 수 있습니다.

 

1. 컬럼명을 select할 경우

 

select * from EMP;

=>emp 테이블에 있는 모든(*) 데이터(column)을 보여줘!

 

select EMPNO from EMP;

=>emp 테이블에 있는 empno column만 선택해서 보여줘!

 

select EMPNO, ENAME, SAL from EMP;

=>emp 테이블에 있는 EMPNO, ENAME, SAL Column만 선택해서 보여줘!

 

여기서, 오라클은 대소문자를 구분하지 않습니다. 그렇기 때문에 섞어서 사용하는것도 가능하지만 되도록이면 통일해서 쓰는 것이 좋겠죠? 들쑥날쑥 한 것 보다..

만일, 섞어서 사용하게되면 같은 sql문이더라도 서로 다른 sql문으로 인식하거나 아예 인식을 못 할 수 있어요! 띄어쓰기도 또한 신경써주어야 합니다.

 

 

2. 표현식을 select할 경우

 

또 select문에 사용할 수 있는 표현식이란

컬럼명을 제외한 모든 식(함수연산컬럼과 결합해서 사용할 수 있는 표현 가능한 모든 식을 의미합니다.

 

이제 보기 쉽게 두 줄로 나눠서 사용해볼게요.

만약 직원의 연봉(sal)을 10%씩 인상한 데이터를 보고싶다면?!

 

select EMPNO, ENAME, SAL*1.1

from EMP;

 

여기서 SAL*1.1 이 표현식이겠죠?!

그럼 결과는 SAL 데이터에 1.1을 곱한 데이터가 출력됩니다.

 

 

3. 저장되어있지 않은 컬럼값을 select할 경우

 

기존에 저장되지않은 컬럼값을 사용하면 모든 행에 해당 값이 표현됩니다.

 

select EMPNO, ENAME, SAL*1.1, 100

from EMP;

 

 여기서, 100은 숫자로 인식하기때문에 문제가 없지만 aaa 처럼 문자를 입력할 시 부적합한 식별자라는 에러가 출력될 수 있어요. 이는 aaa를 컬럼 이름으로 해석했기 때문에 그런거랍니다! aaa 문자가 컬럼이 아닌 일반 문자열이라는 것을 알려주기위해 홑따움표(' ')를 사용해주면 됩니다.

 

select EMPNO, ENAME, SAL*1.1, 100, 'aaa'

from EMP;

   

이렇듯 숫자문자를 잘 구분해주어야 합니다.

 

 

4. select문에 distinct 옵션을 줄 경우

 

DISTINCT는 뚜렷한, 분명한 이라는 뜻을 가지고있죠?

비슷한듯 아닌듯 데이터베이스에서도 distinct는 테이블에서 중복을 제거한 데이터들을 조회하기 위한 옵션이랍니다.

어디에 사용될까..? 라고 생각되지만 개수, 종류 확인에 유용하게 쓰인다고합니다.

여기서 'distinct value' 라는 말도 있는데 이 뜻은 '중복 제거된 값'이 몇인지 를 의미합니다.

 

select distinct GRADE

from STUDENT;

=>중복을 제거한 학년의 수, 대학교같은 경우 4학년까지 있으니 4개의 row 데이터가 조회되겠죠?

 

select distinct GRADE, NAME

from STUDENT;

=> 중복을 제거한 학년:이름의 수,

어떤 결과가 나올까요?! 이 같은 경우는 같은 학년의 동명이인을 제외하고는 다 조회될꺼에요.

즉, distinct는 뒤의 조합이 완벽할 때의 개수를 세어줍니다.

 

 

 5. select문의 alias

 

alias는 ~라 불리는 이라는 뜻을 가지고 있어요.

말 그대로 컬럼 명을 ~라 불러주는 것입니다.

 

즉, 저장된 컬럼명 외에 내가 원하는 명칭으로 출력하고 싶다면 alias를 사용는데, 컬럼명이 바뀌는게 아니라 출력 때만 바뀌어 보이는거에요. 복잡한 표현식을 사용하여 출력하는 경우 컬럼명이 복잡한 표현식 그대로 출력되는데 이러한 경우 컬럼명을 alias로 바꿔주면 좋겠죠?

 

select EMPNO AS 사원번호, ENAME, SAL

from EMP;

=> 결과로 ''EMPNO'라는 컬럼명대신 '사원번호'로 컬럼명이 출력되겠죠?

 

select EMPNO, ENAME, SAL*1.1 AS "10%인상급여"

from EMP;

=> 이렇게 표현식이 있을 경우 컬럼명이 'SAL*1.1' 로 표현되겠지만 '10%인상급여' 보기 좋게 바꿔서 출력해줄 수 있는거죠

 

그리고 식에서 as를 사용하지 않고 생략 가능하지만 가독성이 떨어지므로 써주는게 좋습니다.

 

select EMPNO AS 사원번호, ENAME, SAL from EMP;

select EMPNO 사원번호, ENAME, SAL from EMP;

=> AS를 써준게 더 가독성이 좋죠?!

 

그렇다면 여기서 컬럼명을 소문자로 출력하고 싶을 때, 어떻게 해야할까요!

select EMPNO 사원번호, ENAME, SAL from EMP;

 

 

6. Oracle에서 쌍따움표(" ")를 사용해야하는 순간

 

1. 컬럼명을 소문자로 출력하고 싶을 때(alias의 대소를 구분하고 싶을 때)

before> select EMPNO AS 사원번호, ENAME, SAL AS sal from EMP;

after> select EMPNO AS 사원번호, ENAME, SAL AS "sal" from EMP;

 

2. 공백이 삽입될 경우

before> select EMPNO 사원 번호, ENAME, SAL AS "sal" from EMP;

after> select EMPNO "사원 번호", ENAME, SAL AS "sal" from EMP;

 

3.alias에 특수 기호를 삽입해야할 경우

before> select EMPNO "사원 번호", ENAME 이름!, SAL AS "sal" from EMP;

after> select EMPNO "사원 번호", ENAME "이름!!!", SAL AS "sal" from EMP;

 

 

7. 연결 연산자

 

분석을 하다보면 연결 연산자를 사용해야할 때가 종종있다고 합니다.

원본 데이터 가공을 위해 R, Python도 많이 사용하지만 보다 sql이 훨씬 빠르다고 하네요.

   그래서 데이터 가공을 위해 sql을 사용하는게 가장 좋고 중요합니다.

   그 후 R, Python은 분석으로 사용하면 좋겠죠?!

 

다시 본론으로! 연결 연산자는 여러 컬럼을 하나의 컬럼으로 표현하기 위해 사용해요.

컬럼 대 컬럼컬럼 대 표현식 사이에 들어간다는 점!

 

select EMPNO, ENAME from EMP;

select EMPNO || ENAME from EMP;

select EMPNO || '-' || ENAME from EMP;

 

각각 어떻게 출력이 될까 생각해보세요!!

 

select EMPNO, '', ENAME, '입니다.' from EMP;

select EMPNO || ' ' || ENAME || '입니다.' AS 소개 from EMP;

 

select * 

from STUDENT;

 

select NAME || '의 키는 ' || HEIGHT || ' cm, 몸무게는 ' || WEIGHT || ' kg 입니다.'

 from STUDENT;



8. 행 번호 붙여주기

- select에서 rownum을 사용하면 행 번호를 붙여줍니다

select rownum, ENAME

 from EMP


여기까지가 SQL문의 select, from 으로 데이터 조회하기였습니다 !!



참고: KIC 캠퍼스 머신러닝기반의 빅데이터분석 양성과정

반응형
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday