○ SELECT 문
- DB에 저장되어 있는 데이터를 조회
- 형식)
select 칼럼명1, 칼럼명2, 칼럼명3, ...
from 테이블명;
--전체 레코드 조회
SELECT uname, kor, mat, eng, aver, addr, wdate
FROM sungjuk;
SELECT * -- * : 모든 칼럼 조회
FROM sungjuk;
- 전체 행 개수 구하기 : select count(*) from 테이블명;
select count(*) from sungjuk;
○ 별칭(Alias) 설정
- 형식)
select 칼럼명1 as 별칭1, 칼럼명2 as 별칭2, 칼럼명3 as 별칭3, ...
from 테이블명;
-- 칼럼명 임시 변경(보여지는 것만 잠시 바꿈)
select uname, kor as korea, eng as english, mat as math from sungjuk;
-- as는 생략가능
select uname, kor korea, eng english, mat math from sungjuk;
○ WHERE 절
- SELECT문으로 데이터 조회할 떄 특정한 조건을 만족하는 칼럼만 찾고 싶을 때
- 조건을 만족하는 행들만 검색
- 조건에 만족하는 레코드만 대상으로 조회(select), 수정(update), 삭제(delete)하기 위해서 필요
- 형식)
select 칼럼명1 as 별칭1, 칼럼명2 as 별칭2, 칼럼명3 as 별칭3, ...
from 테이블명
where 조건;
--Q1) 국어점수가 50점이상인 행을 조회하시오
select uname, kor
from sungjuk
where kor>=50;
--Q2) 영어 점수가 50점미만인 행을 조회하시오
select uname, eng
from sungjuk
where eng<50;
--Q3) 이름이 '곽윤기'인 행을 조회(출력)하시오
select uname, kor, eng, mat
from sungjuk
where uname='곽윤기';
--Q4) 이름이 '곽윤기'가 아닌 행을 조회하시오
select *
from sungjuk
where uname!='곽윤기'; -- 좌우가 서로 같지 않다
select *
from sungjuk
where uname<>'곽윤기'; -- 좌우가 서로 같지 않다
--Q5) 국어, 영어, 수학 세과목의 점수가 모두 90이상인 행을 조회하시오
select *
from sungjuk
where kor>=90 and eng>=90 and mat>=90;
--Q6) 국어, 영어, 수학 중에서 한과목이라도 40미만 행을 조회하시오
select *
from sungjuk
where kor<40 or eng<40 or mat<40;
--Q7) 국어점수가 80 ~ 89점 사이인 행을 조회하시오
select uname, kor, eng, mat
from sungjuk
where kor>=80 and kor<=89;
--Q8) 이름이 '곽윤기', '조인성'인 행을 조회하시오
select uname, kor, eng, mat
from sungjuk
where uname='곽윤기' or uname='조인성';
○ LIKE 연산자
- 문자열 데이터에서 비슷한 유형을 검색(조회)할 때
- % : 글자 개수와 상관없음
- _ (underbar) : 글자 개수까지 일치해야함
-- Q1) 이름이 '황'으로 시작하는 사람을 조회하시오
select uname
from sungjuk
where uname like '황%';
-- Q2) 이름이 '서'로 끝나는 사람을 조회하시오
select uname
from sungjuk
where uname like '%서';
-- Q3) 이름에 '기'가 있는 사람을 조회하시오
select uname
from sungjuk
where uname like '%기%';
-- Q4) 두글자 이름 중 '서'로 끝나는 이름을 조회하시오
select uname
from sungjuk
where uname like '_서'; -- 언더바 하나가 한 글자
-- Q5) 이름 세 글자 중에서 가운데 글자가 '윤'인 행을 조회하시오
select uname
from sungjuk
where uname like '_윤_';
○ Sort (정렬)
- 어떤 특정값을 기준으로 순서대로 재배치
- 오름차순 Ascending ASC 기본값 1→10 A→Z a→z ㄱ→ㅎ
- 내림차순 Descending DESC
- 형식) order by 칼럼1, 칼럼2, 칼럼3, ...
-- 전체 행을 이름순으로 정렬해서 조회하시오
select uname
from sungjuk
order by uname asc; -- asc: 오름차순 정렬
select uname
from sungjuk
order by uname desc; -- desc: 내림차순 정렬 / 최신글부터 보이는 게시판은 내림차순 정렬이다
select uname
from sungjuk
order by uname; -- asc 생략가능
-- 국어점수 순으로 정렬해서 조회하시오
select uname, kor
from sungjuk
order by kor asc;
-- 1차정렬: 국어점수 순으로 정렬
-- 2차정렬: 국어점수가 같다면 이름을 기준으로 내림차순 정렬
select kor, uname
from sungjuk
order by kor asc, uname desc;
-- 문6) 국어점수가 50점 이상인 행에 대해서평균(avr)를 구하시오
update sungjuk
set tot=kor+eng+mat, avr=(kor+eng+mat)/3
where kor>=50;
-- 문7) 문6에서 평균 70점 이하인 행을 이름순으로 조회하시오
select uname, avr
from sungjuk
where avr<=70
order by uname;
select uname, avr
from sungjuk
order by uname
where avr<=70; -- 에러 ORA-00933 (정렬은 가장 마지막에)
○ NULL
- 비어있는 값
-- 평균에 null이 있는 행의 개수를 구하시오
select count(*)
from sungjuk
where tot is null; -- tot=null을 사용하지 않는다
-- 평균이 비어있지 않은 행의 개수를 구하시오(null이 아닌 값)
select count(*)
from sungjuk
where tot is not null; -- !=이나 <>를 사용하지 않는다
○ 연산자
① between A and B 연산자
- A부터 B까지 (A이상 B이하)
--국어점수가 80~89점 사이인 행을 조회하시오
select uname, kor
from sungjuk
where kor>=80 and kor<=89; -- 1)
select uname, kor
from sungjuk
where kor between 80 and 89; -- 1)번과 같은 결과 / 두가지 다 많이 사용
② in 연산자
- 목록에서 찾기
-- 이름이 '곽윤기', '황대헌'인 사람을 조회하시오
select uname
from sungjuk
where uname='곽윤기' or uname='황대헌';
select uname
from sungjuk
where uname in ('무궁화', '봉선화'); -- like연산자에선 in 사용불가
-- 국어점수가 50, 60, 80점인 행을 국어점수 순으로 조회하시오.
select uname, kor
from sungjuk
where kor in (50, 60, 80)
order by kor asc;
③ not 연산자
- 부정 연산자
-- 국영수 모두 100점이 아닌 행을 조회하시오
select uname, kor, eng, mat
from sungjuk
where kor<>100 or mat<>100 or eng<>100;
select uname, kor, eng, mat
from sungjuk
where not (kor=100 and mat=100 and mat=100);
④ 결합 연산자
- || (쌍파이프) : 문자열과 컬럼을 합쳐줌
select uname || '의 평균은' || aver || '입니다'
from sungjuk;
○ 서브쿼리(Subquery)
- 테이블 내에서 다시 한번 쿼리문에 의해 레코드 조회 및 검색
- 쿼리문 안의 쿼리문
-- 문1) 국어점수가 평균(66)이상인 행을 조회하시오
select uname, kor
from sungjuk
where kor>=(select avg(kor) from sungjuk);
-- 문2) 국어 점수가 서울지역의 국어점수의 평균이상인 사람의 주소, 이름, 국어 점수를 조회하시오
select round(avg(kor), 0) from sungjuk where addr='Seoul'; -- 서울의 국어 점수 평균(73)
select addr, uname, kor
from sungjuk
where kor>=(select round(avg(kor), 0) from sungjuk where addr='Seoul');
-- 문3) 국어 점수가 서울지역의 국어점수 평균 이상인 사람이 서울과 다른 지역에 있는지 조회하시오
select addr, uname, kor
from sungjuk
where kor>=(select round(avg(kor), 0) from sungjuk where addr='Seoul') and addr!='Seoul';
-- 문4) 국어점수의 최소값 이하인 점수가 수학 또는 영어 점수 중에 있는지 조회하시오
select min(kor) from sungjuk; -- 국어 점수 최소값(20)
select uname, eng, mat
from sungjuk
where eng<=(select min(kor) from sungjuk) or mat<=(select min(kor) from sungjuk);
'Backend > Oracle DB' 카테고리의 다른 글
06.Oracle DB, 그룹화 (distinct, group by, 집계함수, having, case when ) (0) | 2022.05.16 |
---|---|
05. Oracle DB, 제약조건 (Constraint) (0) | 2022.05.16 |
03. SQL 기초(DCL, DDL, DML) (0) | 2022.05.13 |
02. Oracle Database 18c XE & Oracle SQL Developer 설치 (0) | 2022.05.12 |
01. 데이터베이스란 (관계형 DB, NoSQL DB) (0) | 2022.05.11 |
댓글