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;
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;
select ename 이름,comm 보너스 from emp where comm is 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 '김%';
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;
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인 튜플을 (숫자)로 변환
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;
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;
select round(avg(sal),2) from emp;
select round(avg(sal),0) from emp;
select round(avg(sal),-1) from emp;
select round(avg(sal),-2) from emp;
콘솔에 출력
날짜(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;
select to_char(sysdate,'month') from dual;
select to_char(sysdate,'mm') from dual;
select to_char(sysdate,'dd') from dual;
select to_char(sysdate,'yyyy-mm-dd hh24-mi-ss') from dual;
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;
select empno 사원번호,ename 사원명,to_char(sal,'$9,999') 급여 from emp;
SubQuery(서브 쿼리)
- 쿼리 안에 또 다른 쿼리 담김(2가지 질문)
- 서브 쿼리가 먼저 수행되어 그 결과를 메인 쿼리에 전해주고 그 값을 받아 메인 쿼리가 실행
- 서브 쿼리 안에는 order by절 사용 불가
select ename 사원명,sal 급여 from emp where sal>(select avg(sal) from emp);
select * from emp where MGR=(select MGR from emp where ename='WARD');
- 비교해야 하므로 where절의 컬럼과 서브 쿼리의 조회(select) 컬럼은 반드시 동일