select~from

  • table 조회 시 사용
  • select (column) “(alias)” from (table);
    • : 전체 컬럼 의미
select ename,job from emp;

select * from emp;

Alias(별칭)

  • 방법 3가지 : (column) “(alias)” / (column) (alias) / (column) as (alias)
  • 연산된 컬럼 값, 그룹함수의 결과 컬럼 값도 alias 부여 가능
select name "이름",grade as "학년",birthday 생일 from student;

DISTINCT

  • 컬럼 내에서 중복된 값을 제거하고 출력
select DISTINCT job 직업군 from emp;

연산자

합성연산자(||)

  • 여러 컬럼의 내용을 붙여서 하나의 컬럼으로 출력
  • select (column) || (column) “(alias)” from (table);
select name||grade 학년별학생명 from student;

산술연산자

  • +, -, *, / 등 컬럼 내용 간 산술 연산을 통해 나온 값을 하나의 컬럼으로 출력
  • (column) (산술연산자) (column or 숫자) (산술연산자) (column or 숫자) “(alias)”
  • 문자열과의 비교(=) 시 문자열은 ‘(문자열)’ (홑따옴표)로 표현
select ename 사원명,sal 급여,sal*12 "급여*1*2",comm 보너스,sal*12+comm 급여총계 from emp;

표현식

  • 컬럼의 내용과 문자열을 순서에 맞게 출력
  • 합성연산자와 ‘ ‘(홑따옴표)를 사용하여 표현
select ename||'님의job은'||job||'입니다' from emp; // smith님의 job은 clerk 입니다

Where절

  • 조건 입력
select ename 사원명,sal 급여,deptno 부서번호 from emp where deptno=10;
  • 문자열 혹은 날짜는 ‘ ‘(홑따옴표) 내부에 입력하여 비교 가능
  • 날짜는 ‘yyyy/mm/dd’형식으로 입력해야 인식 비교 가능
select ename 사원명,hiredate 입사일 from emp where hiredate>='1982/01/01';

Between (사잇값)

  • 사잇값 구할 시 사용
  • where (column) between a and b (반드시 a<b)
select name 학생명,height 키 from student where height between 160 and 180;

In (선택 조회)

  • 컬럼의 내용 중 원하는 값의 튜플만 선택 조회 시 사용
  • where (column) in(a,b) : a, b 값의 튜플만 조회
select ename 사원명,deptno 부서번호 from emp where deptno in(20,30);

Is & Is Not

  • null 값만 혹은 null이 아닌 값만 구할 시 사용
  • where (column) is / is not null;
--emp에서 comm이 null인사람의 이름과 보너스를 출력하시오
select ename 이름,comm 보너스 from emp where comm is null;

--emp에서 comm이 null이 아닌사람의 이름과 보너스를 출력하시오
select ename 이름,comm 보너스 from emp where comm is not null;

Like ‘% & _’(UnderScore) (특정 알파벳 조회)

  • 컬럼의 내용 중 특정 위치의 특정 알파벳을 가진 튜플을 조회 시 사용
  • where (column) like ‘(alphabet)%’ / ‘%(alphabet)%’ / ‘(alphabet)%’;
  • where (column) like ‘_(alphabet)
--학생테이블에서 김씨만 조회하여 모든열을 출력
select * from student where name like '김%';

--emp에서 사원명이 2번째글자가 a인사람 또는 3번째 글자가 a인사람의 사원명 출력
select ename 사원명 from emp where ename like '_A%'or ename like'__A%';

And / Or

  • 다중 조건 시 사용
select ename 사원명,job 직업군 from emp where job='SALESMAN' or job='MANAGER';

select ename 사원명,job 직업군,sal 급여 from emp where sal>=2000 and sal<=3000;

정렬

  • 오름 차순, 내림 차순
  • order by (column) asc / desc;
  • 오름 차순은 asc(생략가능), 내림 차순은 desc
  • 컬럼 번호로도 조회 가능(조회하는 컬럼의 순서에 따라 컬럼 번호 부여됨)
select name 학생명,birthday 생일 from student order by name asc;--asc는 생략가능

select ename 사원명,job 직업,sal 급여 from emp order by 3 desc;--컬럼번호로도 조회가능

다중 정렬

  • ,(comma)를 통해서 여러 정렬 조건을 나열
  • 앞에 입력된 정렬 조건이 우선권 가짐(앞 조건 먼저 정렬 후 앞 조건 같은 튜플은 뒤 조건 정렬)
select empno 사원번호,ename 사원명,sal 급여 from emp order by sal desc,ename asc;

Union & Intersect

  • 2개의 코드의 결과에 대한 집합
  • union은 합집합, intersect는 교집합 그리고 union all은 중복 포함 합집합 개념
select name,deptno1,deptno2 from student where deptno1=101 union
select name,deptno1,deptno2 from student where deptno2=201;

NVL (null, 숫자 변환)

  • null 값을 숫자로 변환 (연산 목적)
  • nvl( (column), (숫자) ) : (column)의 내용 중 null인 튜플을 (숫자)로 변환
--null값 0으로 바꾸기
select ename 사원명,nvl(comm,0) 보너스 from emp;

SQL 그룹 함수

  • 하나의 컬럼으로 출력되므로 컬럼의 이름도 alias로 변경 가능
select count(*) cnt from student;

Count

  • 컬럼의 튜플 개수 출력
  • count(*) : 전체 테이블의 튜플 개수 출력(null 값 포함)
  • count(column) : 해당 컬럼의 튜플 개수 출력(null 값 제외)
select count(*),count(hpage) from professor; --null 개수에 따라 결과값 다르게 출력

Sum & Avg(Average)

  • 컬럼 내용들의 값의 총합과 평균 출력
  • sum(column) / avg(column)
select sum(bonus) from professor;

select avg(bonus) from professor;

Max & Min

  • 컬럼 내용 중 최대값과 최소값 출력(날짜에도 적용 가능)
select max(sal),min(sal) from emp;

select max(hiredate),min(hiredate) from emp; --날짜에도 적용 가능

Round (소수점, 반올림)

  • round( (column),(소수 자릿수) )
  • 마지막 자리 아래 자리에서 반올림한 결과
  • 정수 자릿수도 음수로 표현 가능
select round(avg(sal),1) from emp; --소수점 1자리 //2073.2
select round(avg(sal),2) from emp;                //2073.21
select round(avg(sal),0) from emp; --반올림       //2073
select round(avg(sal),-1) from emp; --10단위      //2070
select round(avg(sal),-2) from emp; --100단위     //2100

콘솔에 출력

  • from dual;

날짜(sysdate)

--현재날짜를 콘솔에 출력
select sysdate from dual;

--내일날짜를 콘솔에 출력
select sysdate+1 from dual;

To_Char(문자로 변환)

  • 날짜 및 수치 데이터를 문자로 변환
  • to_char( (데이터), ‘(변환 형식)’ )
--날짜에서 년도만 추출
select to_char(sysdate,'year') from dual;--영어로 나옴
select to_char(sysdate,'yyyy') from dual;--2023

select to_char(sysdate,'month') from dual;--7월
select to_char(sysdate,'mm') from dual; --07
select to_char(sysdate,'dd') from dual;

--hh24는 24시간 기준 hh는 12시간 기준, 분은 mi(mm 월과 중복 회피)
select to_char(sysdate,'yyyy-mm-dd hh24-mi-ss') from dual;

--to_char 숫자에도 적용가능(천단위 구분)
select to_char(981260173,'999,999,999') from dual;

select ename 사원명,hiredate 입사일자 from emp where to_char(hiredate,'mm')='05';
  • to_char( (숫자) , ‘(9를 통한 자릿수 및 천 단위 구분 기호)’ )
select empno 사원번호,ename 사원명,to_char(hiredate,'yyyy') 년도 from emp;

--emp에서 사원번호,사원명,급여 출력(급여는 천단위구분기호)
select empno 사원번호,ename 사원명,to_char(sal,'$9,999') 급여 from emp;

SubQuery(서브 쿼리)

  • 쿼리 안에 또 다른 쿼리 담김(2가지 질문)
  • 서브 쿼리가 먼저 수행되어 그 결과를 메인 쿼리에 전해주고 그 값을 받아 메인 쿼리가 실행
  • 서브 쿼리 안에는 order by절 사용 불가
--emp에서 평균급여보다 많이 받는 사람의 사원명,급여를 나타내시오
select ename 사원명,sal 급여 from emp where sal>(select avg(sal) from emp);

--emp에서 이름이 WARD인 사람의 MGR과 같은값을 가진사람의 목록출력
select * from emp where MGR=(select MGR from emp where ename='WARD');
  • 비교해야 하므로 where절의 컬럼과 서브 쿼리의 조회(select) 컬럼은 반드시 동일
profile
초보개발자

0개의 댓글