select 컬럼리스트 | 5. 컬럼 지정(보고 싶은 열만 가져오기) > Projection
from 테이블 | 1. 테이블 지정
where 조건 | 2. 조건 지정(레코드에 대한 조건 - 개인조건) > Selection
group by 기준 | 3. (레코드)그룹을 나눈다.
having 조건 | 4. 조건 지정(그룹에 대한 조건 - 그룹조건 >> 집계함수에 대해 조건)
order by 정렬기준 | 6. 순서(정렬)
1. select
- 데이터 조회
- 조회하고 싶은 컬럼만 뽑아온다.
- '*' : 모든 컬럼
- 순서 상관없이 테이블 구조대로 출력된다.
select * from tblcomedian;
select first, last, gender, height, weight, nick from tblcomedian;
2. from
- 어떤 테이블로부터 데이터를 가져와라
-- tblcomedian 테이블에서 모든 컬럼을 조회
select * from tblcomedian;
3. where
- 조건 지정(보고 싶은 행만 가져오기) > Selection
- 레코드(행)을 검색한다.
-- 1. 몸무게가 60kg 이상이고, 키가 170cm 미만인 사람을 조회하시오.
SELECT *
FROM TBLCOMEDIAN
WHERE weight>=60 AND height<170;
-- 2. 몸무게가 70kg 이하인 여자만 조회하시오
SELECT *
FROM TBLCOMEDIAN
WHERE weight<=70 AND GENDER ='f';
1) between
- 컬럼명 between 최솟값 and 최댓값
- 범위 조건문
- 가독성 향상을 위해 사용한다.
- 최소값, 최대값 포함한다.
-- and 사용
SELECT * FROM TBLINSA
WHERE BASICPAY >= 1000000 AND BASICPAY <= 1200000;
-- BETWEEN 사용
SELECT * FROM TBLINSA
WHERE BASICPAY BETWEEN 1000000 AND 1200000;
-- 문자열도 비교 가능
SELECT * FROM EMPLOYEES
WHERE FIRST_NAME BETWEEN 'J' AND 'L';
2) in
- 컬럼명 in (값, 값, 값...)
- 열거형 조건
--개발부 + 총무부 직원 조회
-- or 사용
SELECT * FROM TBLINSA
WHERE BUSEO = '개발부' OR BUSEO = '총무부';
-- in 사용
SELECT * FROM TBLINSA
WHERE BUSEO IN ('개발부', '총무부');
3) like
- 컬럼명 like '패턴 문자열'
- 정규 표현식의 초간단 버전
- 패턴 문자열 구성 요소
- _: 임의의 문자 1개(.)
- %: 임의의 문자 N개 0~무한대(.*)
-- 김oo 조회
SELECT * FROM TBLINSA WHERE name LIKE '김__';
SELECT * FROM TBLINSA WHERE name LIKE '_길_';
SELECT * FROM TBLINSA WHERE name LIKE '김%'; -- 김으로 시작하는 모든 문자
SELECT * FROM TBLINSA WHERE name LIKE '%길%'; -- 길이 포함된 모든 문자
4) null
- 컬럼명 is null
- 컬럼값(셀)이 비어있는 상태
- null 상수 제공
- 대부분의 언어는 null은 연산의 대상이 될 수 없다.('****')
-- 인구수가 기재된 나라
SELECT * FROM TBLCOUNTRY WHERE POPULATION IS NOT NULL; -- 더 많이 사용함
SELECT * FROM TBLCOUNTRY WHERE NOT POPULATION IS NULL;
-- 도서관 > 대여 테이블(컬럼 : 대여날짜, 반납날짜)
-- 아직 반납을 안한 사람은?
SELECT * FROM 도서대여 WHERE 반납날짜 IS NULL ;
-- 반납이 완료된 사람은?
SELECT * FROM 도서대여 WHERE 반납날짜 IS NOT NULL ;
4. group by
- 그룹별 통계값을 구한다.
- group by 사용시 : select 컬럼리스트에 일반 컬럼 사용 불가
- select 컬럼리스트에 집계함수와 group by 컬럼만 가능하다.
SELECT
buseo,
count(*) AS 부서별인원수,
round(avg(basicpay)) AS 부서별평균급여,
sum(basicpay) AS 부서별지급액,
max(basicpay) AS 부서내최고급여,
min(basicpay) AS 부서내최저급여
FROM tblinsa
GROUP BY buseo;
-- 다중 그룹
SELECT
buseo, jikwi,
count(*)
FROM tblinsa
GROUP BY buseo, jikwi
ORDER BY buseo, jikwi;
-- tblInsa. 남/여자 직원수
SELECT
substr(ssn, 8, 1),
decode(substr(ssn, 8, 1), '1', '남자', '2', '여자') AS 성별,
count(*)
FROM tblinsa
GROUP BY substr(ssn, 8, 1);
5. having
- 조건 지정(그룹에 대한 조건)
- 그룹조건 : 집계함수에 대해 조건
WHERE 절 조건 vs HAVING 절 조건
- WHERE 절 조건
SELECT --4. 각 그룹별 집계함수 실행
buseo,
round(avg(basicpay))
FROM tblinsa --1. 60명의 데이터를 가져온다.
WHERE basicpay >= 1500000 --2. 60명을 대상으로 조건을 검사한다.
GROUP BY buseo; --3. 2번을 통과한 사람들(27명) 대상으로 그룹을 짓는다.
- HAVING 절 조건
SELECT --4. 그룹화된 부서와, 부서별 급여 평균
buseo,
round(avg(basicpay))
FROM tblinsa --1. 60명의 데이터를 가져온다.
GROUP BY buseo --2. 부서를 기준으로 그룹화한다.
HAVING round(avg(basicpay)) >= 1500000; --3. 집합에 대한 조건 > 집게 함수 조건
-- 부서 인원수가 10명이 넘는 부서
SELECT
buseo, count(*)
FROM tblinsa
GROUP BY buseo
HAVING count(*) >= 10;
-- 부서 과장/부장(where) 인원수가 3명이 넘는(having) 결과
SELECT
buseo, count(*)
FROM tblinsa
WHERE jikwi IN ('과장','부장')
GROUP BY buseo
HAVING count(*)>=3;
6. order by
- 원본 테이블 정렬하는 것이 아닌 결과 테이블을 정렬하는 것
- order by 컬럼명 [ASC|DESC]
-- 1차 정렬
SELECT *
FROM TBLINSA
ORDER BY BUSEO ASC ;
-- 2차 정렬
SELECT *
FROM TBLINSA
ORDER BY BUSEO ASC , JIKWI DESC ;
-- 3차 정렬
SELECT *
FROM TBLINSA
ORDER BY BUSEO ASC , JIKWI DESC, BASICPAY DESC ;
-- 컬럼리스트의 컬럼 순서 > 유지보수에 취약하므로 비권장함
SELECT name, buseo, jikwi
FROM TBLINSA
ORDER BY 2; -->> 1 : name, 2 : buseo, 3 : jikwi
-- 가공된 값의 정렬
SELECT name, jikwi
FROM TBLINSA
ORDER BY CASE
WHEN JIKWI = '사원' THEN 1
WHEN JIKWI = '대리' THEN 2
WHEN JIKWI = '과장' THEN 3
WHEN JIKWI = '부장' THEN 4
END DESC ;
-- 가공된 값의 정렬 - alias 사용
SELECT name, jikwi,
CASE
WHEN JIKWI = '사원' THEN 1
WHEN JIKWI = '대리' THEN 2
WHEN JIKWI = '과장' THEN 3
WHEN JIKWI = '부장' THEN 4
END AS rank
FROM TBLINSA
ORDER BY rank DESC ;
'ORACLE' 카테고리의 다른 글
[Oracle] 연산자 및 별칭(alias) (0) | 2023.09.18 |
---|---|
[Oracle] DDL 기초 및 간단한 예제(create, drop, alter) (0) | 2023.09.18 |
[Oracle] DML 기초 및 간단한 예제(insert, update, delete) (0) | 2023.09.18 |
[Oracle] SQLDeveloper, DBeaver 새 데이터베이스 접속하기 (0) | 2023.09.17 |
[Oracle] 프로그램 설치(Oracle 11g ex, sqldeveloper, DBeaver) (0) | 2023.09.16 |