[SQL] PART 1

Sooyeon·2023년 10월 18일
0

문제풀이 

목록 보기
5/95
post-thumbnail

PART1
-특정 열(column) 선택
-모든 열(column) 출력
-컬럼명 변경하기
-연결 연산자
-중복 데이터 제거
-데이터 정렬
-Where절
-산술 연산자
-비교 연산자
-논리 연산자

PART1


  • 테이블에서 특정 열 (column) 선택하기
    ex) 사원 테이블에서 사원 번호와 이름과 월급 출력
SELECT empno,ename,sal
FROM emp;

  • 테이블에서 모든 열(column) 출력하기
    ex) 사원 테이블을 모든 열(column) 을 모두 출력해보기
SELECT *
FROM emp;

-모든 컬럼을 출력하고 맨 끝에 다시 한번 특정 컬럼을 출력해야 하는 경우

SELECT emp.*,empno
FROM emp;

=>테이블명.*,출력하고자 하는 컬럼명 작성

  • 컬럼 별칭을 사용하여 출력되는 컬럼명 변경
    ex)사원 테이블의 사원 번호와 이름과 월급을 출력하는데 컬럼명을 한글로 '사원 번호','사원 이름'으로 출력하기
SELECT empno as "사원 번호",ename as "사원 이름",sal as "Salary"
FROM emp;

=>컬럼별칭:컬럼명 as 출력하고 싶은 컬럼명

※ 컬럼 명칭 양쪽에 "" 마크 감싸주는 경우
1.대소문자 구분할 때
2.공백문자를 출력할 때
3.특수문자를 출력할 때 ($,_,#)만 가능
<->''는 문자열감쌀때 사용

※ 추가
수식을 사용할 경우 출력되는 컬럼명도 수식으로 출력된다.

SELECT ename,sal*(12+3000) as 월급
FROM emp
ORDER BY 월급 desc;

=>컬럼 별칭을 사용하면 order by절을 사용할 때 유용

  • 연결 연산자 ||
    ex)사원 테이블의 이름과 월급을 서로 붙여서 출력하기
SELECT ename||sal
FROM emp;

=>연결 연산자는 컬럼과 컬럼 서로 연결

※ 문자열과 연결 연산자 사용하기

SELECT ename || '의 월급은' || sal || '입니다.' as 월급정보
FROM emp;

  • 중복 데이터 제거(DISTINCT)
    ex)사원 테이블에서 직업을 출력하는데 중복된 데이터를 제외하고 출력하기
SELECT DISTINCT(job)
From emp;

=>DISTINCT(중복컬럼)
==UNIQUE로 사용해도 된다.

  • 데이터 정렬
    ex)이름과 월급을 출력하는데 월급이 낮은 사원부터 출력해보기
SELECT ename,sal 
FROM emp
ORDER BY sal asc;

=>데이터 정렬:ORDER BY
=>ORDER BY는 맨 마지막에 실행된다 .

SELECT절에 사용한 컬럼 명칭을 ORDER BY절에서 사용할 수 있다.

SELECT ename,sal as 월급
FROM emp
ORDER BY 월급 asc;

ORDER BY절에 컬럼명 대신 숫자를 적어줄 수도 있다.
(SELECT절 컬럼의 순서=>숫자)

SELECT ename,deptno,sal
FROM emp
ORDER BY 2 asc, 3 desc;
  • Where절
    1 ) 숫자 데이터 검색
    ex)월급이 3000인 사원들의 이름,월급,직업을 출력
SELECT ename,sal,job
FROM emp
WHERE sal =3000;

=>검색하기 원하는 조건을 WHERE절에 작성
=>WHERE절FROM절 다음에 작성

컬럼 별칭WHERE절에 사용하면 오류 발생

SELECT ename,sal as 월급 
FROM emp
WHERE 월급 =3000;

=>오라클은 FROM절을 실행하고 WHERE절을 실행하므로, 오류 발생

2 ) 문자와 날짜 검색
ex)이름이 SCOTT인 사원의 이름,월급,직업,일사일,부서 번호를 출력해기

SELECT ename,sal,job,hiredate,deptno
FROM emp
WHERE ename='SCOTT';

=>숫자와는 다르게 문자를 검색할 때는
문자 양쪽에 싱글 쿼테이션 마크 필요

ex)81년 11월 17일에 입사한 사원의 이름과 입사일 출력하기

SELECT ename,hiredate
FROM emp
WHERE hiredate='82/11/17';

=>날짜도 양쪽에 싱글 쿼테이션 마크를 감싸줘야 한다.

  • 현재 접속한 세션의 날짜 형식 확인
SELECT *
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER='NLS_DATE_FORMAT';

=>연도 2자리 형식인 YY,RR은 다름
YY는 20~년대
RR은 19~년대

  • 현재 접속 세션 파라미터 변경
ALTER SESSION SET NLS_DATE_FORMAT='YY/MM/DD'
  • 산술 연산자
    ex) 연봉이 36000이상인 사원들의 이름과 연봉 출력
SELECT ename,sal*12 as 연봉
FROM emp
WHERE sal*12 >=36000;

=>WHERE절에서는 별칭 사용 불가

※ 산술 연산자에는 우선순위가 있다.
우선순위 연산자에 괄호 사용

SELECT 300+200*2 
FROM dual;
700

SELECT (300+200)*2 
FROM dual;
1000

ex) 부서 번호가 10번인 사람들의 이름,월급,커미션,월급+커미션을 출력하기

SELECT ename,sal,comm,sal+comm
FROM emp
WHERE deptno=10;

=>NULL값은 데이터가 할당되지 않은 상태 OR
알 수 없는 값이라고 한다.
=>NULL값 +500 =>NULL
=>산술식의 컬럼값이 NULL인경우 숫자로 변경해주어야 계산할 수 있다.

※ NVL함수 (NULL 데이터 처리하는 함수)
NVL(컬럼,0)
컬럼이 NULL이면 0으로 출력

  • 비교 연산자
    1 ) >,<,>=,<=,=,!=,<>,^=
    ex)월급이 1200 이하인 사원들의 이름과,월급,직업,부서 번호를 출력하기
SELECT ename,sal,job,deptno
FROM emp
WHERE sal<=1200;

2 ) BEWTEEN AND
ex)월급이 1000에서 3000 사이인 사원들의 이름과 월급을 출력해보기

SELECT ename,sal
FROM emp
WHERE sal BETWEEN 1000 AND 3000;

# 동일한 SQL
SELECT ename,sal
FROM emp
WHERE (sal>=1000 AND sal<=3000);

ex)월급이 1000에서 3000 사이가 아닌 사원들의 이름과 월급 조회

SELECT ename,sal
FROM emp
WHERE sal NOT BETWEEN 1000 AND 3000;

# 동일한 SQL
SELECT ename,sal
FROM emp
WHERE (sal <1000 OR sal>3000);

3 ) LIKE
ex) 이름의 첫 글자가 S로 시작하는 사원들의 이름과 월급을 출력해보기

SELECT ename,sal
FROM emp
WHERE ename like 'S%';

=>%는 와일드 카드
와일드 카드는 이 자리에 어떠한 철자,개수가 몇개든 관계없다.
=> 와일드 카드는 LIKE연산자를 사용해야함
이퀄 연산자(=)는 안된다.

ex) 이름의 두 번째 철자가 M인 사원의 이름 출력

SELECT ename
FROM emp
WHERE ename LIKE '_M%';

=>언더바(_)는 어떠한 철자가 와도 관계없으나, 자리수는 한자리수여야한다.

ex) 이름의 끝 글자가 T로 끝나는 사원들의 이름을 출력

SELECT ename
FROM emp
WHERE ename LIKE '%T';

ex)이름에 A를 포함하고 있는 사원들의 이름을 출력

SELECT ename
FROM emp
WHERE ename LIKE '%A%';

=>A를 포함하는 사원의 이름은 양쪽으로 와일드카드 기술

4 ) IS NULL
ex)커미션이 NULL 인 사원들의 이름과 커미션을 출력해보기

SELECT ename,comm
FROM emp
WHERE comm is null;

=>알수없는 값이기때문에 이퀄연산자(=)는 사용할 수 없다.
=>NULL값을 검색하기 위해서는 is null 연산자를 사용해야 한다.
=>NULL이 아닌 데이터를 검색할 때도
COMM !=NULL을 사용할 수 없다.

5 ) IN
ex)직업이 SALESMAN,ANALYST,MANAGER인 사원들의 이름,월급,직업을 출력

SELECT ename,sal,job
FROM emp
WHERE job in ('SALESMAN','ANALYST','MANAGER');

# 동일한 SQL
SELECT ename,sal,job
FROM emp
WHERE (job='SALESMAN' or job='ANALYST' or job='MANAGER')

=>이퀄 연산자(=)하나의 값만 조회 가능
=>IN연산자여러 리스트의 값을 조회할 수 있다.

ex)직업이 SALESMAN,ANALYST,MANAGER이 아닌 사원들의 이름과 월급과 직업을 검색

SELECT ename,sal,job
FROM emp
WHERE job NOT in ('SALESMAN','ANALYST','MANAGER');

# 동일한 SQL
SELECT ename,sal,job
FROM emp
WHERE (job !='SALESMAN' and job!='ANALYST' and job!='MANAGER')

  • 논리 연산자 (AND,OR,NOT)
    ex)직업이 SALESMAN이고 월급이 1200이상인 사원들의 이름,월급,직업을 출력
SELECT ename,sal,job
FROM emp
WHERE job='SALESMAN' AND sal>=1200;

=>AND는 둘 모두 TRUE여야만 ,TRUE반환
=>OR는 둘 중에 하나만 TRUE여도 TRUE반환

0개의 댓글