SQL WHERE
※ 연습 데이터
WHERE : 테이블에서 내가 원하는 튜플만 조건에 따라 뽑아옴
비교 조건 | =, !=, >, <, >=, <= 등 |
논리 조건 | AND, OR, NOT |
산술 조건 | +, -, *, / |
결합 조건 | || |
NULL 조건 | IS NULL, IS NOT NULL |
SQL 연산자 | IN, LIKE, BETWEEN |
1. 비교 조건
① 성별이 '남'인 직원들의 정보를 모두 출력
SELECT *
FROM 직원
WHERE 성별 = '남';
② 연봉이 8000이상인 직원들의 직원ID, 이름, 나이, 입사일시 출력
SELECT 직원ID
, 이름
, 나이
, 입사일시
FROM 직원
WHERE 연봉 >= 8000 ;
③ 연봉이 9000보다 큰 직원들의 직원ID, 이름, 나이, 입사일시 출력
SELECT 직원ID
, 이름
, 나이
, 입사일시
FROM 직원
WHERE 연봉 > 9000 ;
④ 이름이 '이현정'인 직원의 정보를 모두 출력
SELECT *
FROM 직원
WHERE 이름 = '이현정';
⑤ 패스워드 길이가 6이하인 대상을 모두 출력
SELECT *
FROM 직원
WHERE length(패스워드) <= 6;
2. 논리 조건
① 연봉이 5000 이상이면서 연봉이 7000 이하인 직원들의 정보를 모두 출력
SELECT *
FROM 직원
WHERE 연봉 >= 5000
AND 연봉 <= 7000 ;
② 연봉이 5000 이상이면서 연봉이 7000 이하인 직원이면서 부서ID 가 ‘D005’인 대상을 모두 출력
SELECT *
FROM 직원
WHERE 연봉 >= 5000
AND 연봉 <= 7000
AND 부서ID = 'D005' ;
③ 직원 테이블에서 부서가 D001 이거나 D002인 직원을 모두 출력
SELECT *
FROM 직원
WHERE 부서ID = 'D001'
OR 부서ID = 'D002' ;
④ 이름이 “이현정“ 이 아닌 직원의 정보를 모두 출력
SELECT *
FROM 직원
WHERE NOT 이름 = '이현정';
SELECT *
FROM 직원
WHERE 이름 != '이현정';
※ 논리 조건 AND와 OR가 함께 사용되면 AND가 우선 실행된다.(OR를 실행하고 싶으면 괄호를 사용)
SELECT *
FROM 직원
WHERE 부서ID = 'D001'
OR 부서ID = 'D002'
AND 이름 = '김철수' ;
SELECT *
FROM 직원
WHERE (부서ID = 'D001'
OR 부서ID = 'D002')
AND 이름 = '김철수' ;
3. NULL 조건
① 나이 값이 정해지지 않은(NULL) 직원을 추출
SELECT *
FROM 직원
WHERE 나이 IS NULL ;
② 부서ID가 ‘D003’ 이면서 나이 값이 정해지지 않은(NULL) 직원을 추출
SELECT *
FROM 직원
WHERE 나이 IS NULL
AND 부서ID = 'D003' ;
4. IN / BETWEEN / LIKE 조건 (SQL 연산자)
- IN : 뒤에 나열된 파라미터를 OR 조건으로 출력, NULL은 무시
- NOT IN : 뒤에 나열된 파라미터를 제외한 대상을 출력
- BETWEEN : 범위 연산
- LIKE : _, %를 이용하여 특정값을 찾는 매칭 연산 가능
① 직원 테이블에서 직원ID가 ‘A0001’ , ‘A0003’ , ‘A0005’ , ‘A0010’ 인 대상을 출력
SELECT *
FROM 직원
WHERE 직원ID IN ('A0001', 'A0003', 'A0005', 'A0010');
② 직원 테이블에서 직원ID가 ‘A0001’ , ‘A0003’ , ‘A0005’ , ‘A0010’ 이 아닌 대상을 출력
SELECT *
FROM 직원
WHERE 직원ID NOT IN ('A0001', 'A0003', 'A0005', 'A0010');
③ 직원들 중에 나이가 30세 이상 40세 이하인 직원들을 모두 출력
SELECT *
FROM 직원
WHERE 나이 BETWEEN 30 AND 40;
④ 직원들 중 이름이 ‘강’ 으로 시작하는 모든 대상을 출력
SELECT *
FROM 직원
WHERE 이름 LIKE '강%';
⑤ 직원들 중 이름 가운데에 ‘홍’ 이 포함된 모든 대상을 출력
SELECT *
FROM 직원
WHERE 이름 LIKE '%홍%';
⑥ 직원들 중 패스워드가 ‘123’ 으로 끝나는 모든 대상을 출력
SELECT *
FROM 직원
WHERE 패스워드 LIKE '%123';
⑦ 직원들 중 이름의 세번째 글자가 ‘수’ 인 세글자인 모든 대상을 출력
SELECT *
FROM 직원
WHERE 이름 LIKE '__수';
⑧ 직원들 중 주민등록번호의 7번째 자리가 1인 대상을 모두 출력
SELECT *
FROM 직원
WHERE 주민등록번호 LIKE '_______1%';
⑨ 직원들 중 2015년에 입사한 대상을 출력
SELECT *
FROM 직원
WHERE 입사일시 >= TO_DATE('20150101')
AND 입사일시 < TO_DATE('20160101');
SELECT *
FROM 직원
WHERE TO_CHAR(입사일시, 'YYYY') = '2015';
▶ 실습
① 직원 테이블에서 이름에 '철' 이 포함되는 직원의 직원ID, 이름, 나이 를 출력
SELECT 직원ID
, 이름
, 나이
FROM 직원
WHERE 이름 LIKE '%철%';
② 직원 테이블에서 나이가 아직 정해지지 않은 회원들의 모든 정보를 출력
SELECT *
FROM 직원
WHERE 나이 IS NULL ;
③ 직원 중에 2015년도에 입사를 했거나, 입사일시가 정해지지 않은 직원의 모든 정보를 출력
SELECT *
FROM 직원
WHERE 입사일시 IS NULL
OR TO_CHAR(입사일시, 'YYYY') = 2015;
④ 직원 중에 연봉이 7000 ~ 9000 사이인 직원들의 다음 정보를 출력
출력할 컬럼 : 직원ID, 패스워드, 이름, 주민등록번호 앞 6자리를 추출해 AS 생년월일로 표현
SELECT 직원ID
, 패스워드
, 이름
, SUBSTR(주민등록번호, 1, 6) AS 생년월일
FROM 직원
WHERE 연봉 BETWEEN 7000 AND 9000 ;
⑤ 직원 중에 성별이 '남' 이면서 나이가 20대인 직원의 모든 정보를 출력
SELECT *
FROM 직원
WHERE 성별 = '남'
AND 나이 BETWEEN 20 AND 29;
⑥ 2017년부터 지금까지 입사한 모든 직원을 출력
SELECT *
FROM 직원
WHERE TO_CHAR(입사일시, 'YYYY') >= 2017;
⑦ 직원 중에 직원ID 가 'A0001' , 'A0002' , 'A0003' 이 아닌 직원들을 모두 출력
SELECT *
FROM 직원
WHERE 직원ID NOT IN ('A0001', 'A0002', 'A0003') ;
⑧ 직원주소 테이블에서 주소가 '동구' 로 시작하는 모든 데이터를 출력
SELECT *
FROM 직원주소
WHERE 주소 LIKE '동구%' ;
⑨ 직원 패스워드 길이가 8글자 이하인 대상은 패스워드를 다시 설정해야 합니다.
패스워드 길이가 8글자 이하인 대상을 모두 추출해주세요.
SELECT *
FROM 직원
WHERE LENGTH(패스워드) <= 8 ;
'Oracle SQL Developer' 카테고리의 다른 글
SQL GROUP BY, HAVING, ORDER BY (0) | 2023.01.24 |
---|---|
SQL FROM, JOIN (0) | 2023.01.24 |
SQL SELECT 연산, 내장형 함수 (0) | 2023.01.09 |
SQL 기본 (0) | 2023.01.08 |
DB 데이터 모델링(Data Modeling) (0) | 2023.01.05 |
댓글