[ SELECT로 특정 데이터 추출하기 목차 ]
1. WHERE 조건과 비교 연산자
1) 비교 연산자
2) 문자 데이터 조회
3) 날짜 데이터 조회
2. 논리 연산자
1) AND
2) OR
3) NOT
3. BETWEEN AND 연산자
4. IN 연산자
5. LIKE 연산자와 와일드카드
1) 와일드카드 ( % ) 사용하기
2) 와일드카드 ( _ ) 사용하기
3) NOT LIKE 연산자
6. NULL을 위한 연산자
7. 정렬을 위한 ORDER BY절
1) ASC
2) DESC
[ 1 ] WHERE 조건과 비교 연산자
- 원하는 로우만 얻으려면 제한하는 조건을
SELECT 문에 WHERE 절을 추가하여 제시하면 된다.
SELECT * FROM EMP
WHERE SAL >= 3000;
-- SAL가 3000 이상인 애들만 출력된다.
-- 가독성이 좋게 한줄씩 띄어주자! 아래 코드처럼 한줄로 다 붙여 쓰지 말구,,
-- SELECT * FROM EMP WHERE SAL >= 3000;
* WHERE -> 원하는 로우 출력
SELECT -> 칼럼 출력
1. 비교 연산자
연산자 | 의미 | 예제 |
= | 같다. | SELECT EMPNO, ENAME, SAL FROM EMP WHERE SAL=3000; |
> | 보다 크다. | SELECT EMPNO, ENAME, SAL FROM EMP WHERE SAL>3000; |
< | 보다 작다. | SELECT EMPNO, ENAME, SAL FROM EMP WHERE SAL<3000; |
>= | 보다 크거나 같다. | SELECT EMPNO, ENAME, SAL FROM EMP WHERE SAL>=3000; |
<= | 보다 작거나 같다. | SELECT EMPNO, ENAME, SAL FROM EMP WHERE SAL<=3000; |
<>, !=, ^= | 다르다. | SELECT EMPNO, ENAME, SAL FROM EMP WHERE SAL<>3000; |
* <> : 크고 작고,, 즉, 같지 않다는 의미
^ (캐롯 이라고 읽는다)
-- 아래는 쉅 시간에 한 코드
-- 1-1. SELECT 문에서 WHERE 조건과 비교 연산자
SELECT * FROM EMP
WHERE SAL >= 3000;
SELECT EMPNO, ENAME, SAL FROM EMP
WHERE SAL != 3000;
--WHERE SAL <> 3000;
--WHERE SAL ^= 3000;
-- !=, <>, ^= 다 똑같이 같지않다 를 의미한다.
2. 문자 데이터 조회
- SQL 에서 문자열이나 날짜는 반드시 작은 따옴표 ( ' ' )안에 표시해야 한다.
* 별칭 적어줄땐 " " 이다!! 헷갈리지 말것!!
SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE ENAME='FORD';
SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE ENAME='ford';
-- 테이블 내에 저장된 데이터 값은 대소문자를 구분한다.
-- 위에서 'FORD' 로 하면 ENAME이 FORD인 사람이 출력되지만
-- 'ford'로 적어서 출력하려고 하면 아무것도 안나온다.
-- 아래는 쉅 시간에 한 코드
-- 1-2.문자 데이터 조회
DESC EMP;
SELECT EMPNO, ENAME "이름", SAL
FROM EMP
WHERE ENAME ='FORD';
--WHERE ENAME ='ford';
-- 문자열은 대소문자를 구별하기 때문에 유의하자!!
3. 날짜 데이터 조회
- 날짜는 문자열과 마찬가지로 단일 따옴표(' ') 안에 기술해야 한다.
-- 아래는 쉅 시간에 한 코드
-- 1-3. 날짜 데이터 조회
SELECT * FROM EMP
WHERE HIREDATE<='82/01/01';
-- 82년 전에 입사(HIREDATE)한 사람들 조회되어 출력해준다.
[ 2 ] 논리 연산자
연산자 | 의미 |
AND | 두가지 조건을 모두 만족해야만 검색할 수 있다. SELECT * FROM emp WHERE deptno=10 AND job='MANAGER'; |
OR | 두가지 조건 중에서 한가지만 만족하더라도 검색할 수 있다. SELECT * FROM emp WHERE deptno=10 OR job='MANAGER'; |
NOT | 조건에 만족하지 못하는 것만 검색한다. SELECT * FROM emp WHERE NOT deptno=10; |
1. AND 연산자
- 두 가지 조건을 모두 만족할 경우에만 검색할 수 있도록 하기 위해서는
AND 연산자를 사용한다.
SELECT *
FROM EMP
WHERE DEPTNO=10 AND JOB='MANAGER';
-- DEPTNO=10 이면서 JOB='MANAGER'인거에 해당하는 것 출력
2. OR 연산자
- 두 가지 조건 중에서 한 가지만 만족하더라도 검색할 수 있도록 하기 위해서는
OR 연산자를 사용한다.
SELECT * FROM EMP
WHERE DEPTNO=10 OR JOB='MANAGER';
-- DEPTNO가 10이거나 JOB이 MANAGER인거에 해당하는 사람들 출력
3. NOT 연산자
- NOT 연산자는 참은 거짓으로 거짓은 참으로
즉, 반대되는 논리값을 구하는 연산자이다.
SELECT *
FROM EMP
WHERE NOT DEPTNO=10;
SELECT *
FROM EMP
WHERE DEPTNO<>10;
-- 아래는 쉅 시간에 한 코드
SELECT * FROM EMP
--WHERE NOT DEPTNO=10;
WHERE DEPTNO != 10;
-- DEPTNO 가 10이 아닌 사람들 출력
--WHERE NOT DEPTNO=10; 와 WHERE DEPTNO != 10; 는 같은 값이 출력된다. --> 같은 의미,,?
[ 3 ] BETWEEN AND 연산자
- 오라클에서는 특정 범위의 값을 조회하기 위해서는
BETWEEN AND 연산자를 사용할 수 있다.
SELECT *
FROM EMP
WHERE SAL>=2000 AND SAL<=3000;
SELECT *
FROM EMP
WHERE SAL BETWEEN 2000 AND 3000;
SELECT *
FROM EMP
WHERE SAL NOT BETWEEN 2000 AND 3000;
SELECT *
FROM EMP
WHERE HIREDATE BETWEEN '1987/01/01' AND '1987/12/31';
-- 아래는 쉅 시간에 한 코드
-- 3. BETWEEN AND 연산자
SELECT *
FROM EMP
--WHERE SAL>=2000 AND SAL<=3000;
-- 2000 <= SAL <= 3000 이거를 위의 코드처럼 AND 로 안적고 BETWEEN AND 로 다음과 같이적을 수 있다.
WHERE SAL BETWEEN 2000 AND 3000;
SELECT *
FROM EMP
WHERE HIREDATE BETWEEN '1987/01/01' AND '1987/12/31';
[ 4 ] IN 연산자
- 동일한 필드가 여러 개의 값 중에 하나인 경우인지를 살펴보기 위해서
비교 연산자와 논리 연산자 OR을 사용하여 복잡하게 쿼리문을 작성하지 않고
IN 연산자를 사용하여 훨씬 간단하게 표현할 수 있다.
* OR 연산자 안쓰고 IN 연산자 사용하면 간단하게 표현 가능하다.
<>, !=, ^= 연산자 안쓰고 NOT IN 연산자 사용하면 간단하게 표현 가능하다.
SELECT * FROM EMP WHERE COMM=300 OR COMM=500 OR COMM=1400;
SELECT * FROM EMP WHERE COMM IN(300, 500, 1400);
SELECT * FROM EMP WHERE COMM<>300 AND COMM<>500 AND COMM<>1400;
SELECT * FROM EMP WHERE COMM NOT IN(300, 500, 1400);
-- 아래는 쉅 시간에 한 코드
-- 4. IN 연산자
SELECT *
FROM EMP
WHERE COMM=300 OR COMM=500 OR COMM=1400;
-- 300 이거나 500이거나 1400인 COMM 출력
SELECT *
FROM EMP
WHERE COMM IN(300,500,1400);
-- COMM이 300 또는 500 또는 1400 중에 있는지 확인하고 출력해준다.
-- WHERE COMM=300 OR COMM=500 OR COMM=1400; 반대의 케이스
SELECT *
FROM EMP
--WHERE COMM<>300 AND COMM<>500 AND COMM<>1400;
-- 300도 아니고 500도 아니고 1400도 아닌 COMM 출력을 바로 위 코드와 바로 아래의 코드로 적어서 사용할 수 있다.
WHERE COMM NOT IN(300,500,1400);
[ 5 ] LIKE 연산자와 와일드카드
- LIKE 연산자는 검색하고자 하는 값을 정확하게 모르는 경우에도
검색이 가능하도록 하기 위해서 와일드카드와 함께 사용하여
원하는 내용을 검색하도록 한다.
- LIKE 다음에는 pattern 을 적어줘야 하는데 pattern 에는 다음과 같이
두 가지 와잍드카드가 사용된다.
와일드 카드 | 의미 |
% | 문자가 없거나, 하나 이상의 문자가 어떤 값이 와도 상관없다. |
_ | 하나의 문자가 어떤 값이 와도 상관없다. |
1. 와일드카드 ( % ) 사용하기
- 검색하고자 하는 값을 정확히 모르는 경우
즉, 특정 문자가 포함되기만 하고 그 이전이나 이후에
어떤 문자가 몇 개가 오든지 상관없다는 의미를 표현하기 위해서는
LIKE 연산자와 함께 % 를 사용해야한다.
-- 5.1 % 사용
SELECT *
FROM EMP
WHERE ENAME LIKE 'F%';
-- ENAME 중에서 F로 시작하는 ENAME 을 출력
SELECT *
FROM EMP
WHERE ENAME LIKE '%A%';
-- ENAME 중에서 A 앞과 뒤에 어떤 문자가 와도 상관없이 그냥 A가 들어간 ENAME을 출력
SELECT *
FROM EMP
WHERE ENAME LIKE '%N';
-- ENAME 중에서 N으로 끝나는 ENAME 을 출력
-- 즉, N 앞에는 어떤 문자가 와도 상관없지만 N 뒤엔 문자가 들어가 있으면 안됨
2. 와일드카드 ( _ ) 사용하기
- % 와 마찬가지로 _ 역시 어떤 문자가 오든 상관없다는 의미로
사용되는 와일드카드이다.
- 그 둘의 차이점은 % 는 몇 개의 문자가 오든 상관없지만
_ 는 단 한 문자에 대해서만 와일드카드 역할을 한다.
* _ 를 적는 다는 것은 어떤 문자든 상관없이 한문자만 있다는 것을 의미함
-- 5.2 _ 사용
SELECT *
FROM EMP
WHERE ENAME LIKE '_A%';
-- ENAME 중 A 앞에 무조건 한글자가 있고 A 뒤에는 몇글자가 나오든 상관없는 ENAME 출력
-- 즉, A가 두번째 글자인 ENAME 출력한다.
SELECT *
FROM EMP
WHERE ENAME LIKE '__A%';
-- ENAME 중 A 앞에 무조건 두글자가 있고 A 뒤에는 몇글자가 나오든 상관없는 ENAME 출력
-- 즉, A가 세번째 글자인 ENAME 출력한다.
3. NOT LIKE 연산자
-- 5.3 NOT LIKE 연산자
SELECT *
FROM EMP
WHERE ENAME NOT LIKE '%A%';
-- ENAME 중 A 글자가 들어가있지 않는 ENAME 출력
[ 6 ] NULL을 위한 연산자
- 어떤 컬럼을 NULL 즉, 모르는 값과 같다 ( = ) 하는 것을 의미상으로
말이 되지 않기 때문에 = 대신 IS NULL 연산자를 사용해야 한다.
* NULL 은 모르는 값을 의미하기 때문에 = 연산자로 비교할 수 없다!
SELECT * FROM EMP WHERE COMM=NULL; -- NULL 값을 = 연산자로 판단할 수 없다.
SELECT * FROM EMP WHERE COMM IS NULL; -- EMP 테이블에서 COMM 컬럼이 NULL 사원을 출력한다.
SELECT * FROM EMP WHERE COMM IS NOT NULL;
-- 아래는 쉅 시간에 한 코드
-- 6. NULL 위한 연산자
SELECT *
FROM EMP
--WHERE COMM=NULL;
--WHERE COMM IS NULL;
-- COMM 칼럼의 값이 NULL 인지 물어보고 NULL 인 애들 출력
WHERE COMM IS NOT NULL;
-- COMM 칼럼의 값이 NULL 이 아닌지 물어보고 NULL 이 아닌 애들 출력
[ 7 ] 정렬을 위한 ORDER BY절
- 정렬이란 크기 순서대로 나열하는 것을 의미한다.
- 오름차순 (ascending) 정렬 방식
- 작은 것이 위에 출력되고 아래로 갈수록 큰 값이 출력
- 내림차순 (descending) 정렬 방식
- 큰 값이 위에 출력되고 아래로 갈수록 작은 값이 출력
- 로우를 정렬하기 위해서는 SELECT 문에 ORDER BY절을 추가하고
어떤 컬럼을 기준으로 어떤 정렬을 할 것인지를 결정해야 한다.
ASC (오름차순) | DESC (내림차순) | |
숫자 | 작은 값부터 정렬 | 큰 값부터 정렬 |
문자 | 사전 순서로 정렬 | 사전 반대 순서로 정렬 |
날짜 | 빠른 날짜 순서로 정렬 | 늦은 날짜 순서로 정렬 |
NULL | 가장 마지막에 나온다. | 가장 먼저 나온다. |
1. 오름차순 정렬을 위한 ASC
- 오름차순 정렬은 작은 값부터 큰 값으로 정렬하는 것을 의미한다.
ex) 1 ~ 9 , 'A' ~ 'Z'
이것을 위해선 ASC 를 칼럼 다음에 적어야 하는데 만일 ASC 생략하게 되면
디폴트로 ASC 로 지정되어 있기 때문에 생략해도 오름차순으로 출력된다.
SELECT * FROM EMP ORDER BY SAL ASC;
SELECT * FROM EMP ORDER BY SAL;
SELECT * FROM EMP ORDER BY ENAME;
-- 문자 데이터의 경우 아스키 코드 값으로 저장되므로 아스키 코드 값을 기준으로 정렬된다.
2. 내림차순 정렬을 위한 DESC
- 내림차순 정렬은 큰 값부터 작은 값으로 정렬을 하는 것이다.
ex) 9 ~ 1 , 'Z' ~ 'A'
주의할 점!
디폴트로 ASC로 지정되어 있기 때문에 DESC 를 생략하면
내림차순이 아닌 오름차순으로 정렬이 된다!
SELECT * FROM EMP ORDER BY SAL DESC;
SELECT * FROM EMP ORDER BY HIREDATE DESC;
SELECT * FROM EMP ORDER BY SAL DESC, ENAME ASC;
-- 쉅 시간에 한 코드
-- 7. 정렬을 위한 ORDER BY절
-- 하나의 줄을 '절' 이라고 한다.
-- SELECT * <-- 이건 SELECT 절
-- FROM EMP <-- 이건 FROM 절
-- WHERE COMM IS NOT NULL <-- 이건 WHERE 절
-- 이 외에도 '정렬 절' 이란걸 여기에 추가로 적을 수 있다!!
SELECT *
FROM EMP
--ORDER BY SAL ASC;
-- SAL 기준으로 오름차순 정렬을 한 것이 출력
-- ASC 오름차순은 디폴트이기 때문에 ASC를 생략해서 적어도 오름차순 한걸 출력해준다.
ORDER BY SAL;
SELECT *
FROM EMP
ORDER BY SAL DESC;
SELECT *
FROM EMP
ORDER BY ENAME;
-- ENAME 기준으로 오름차순
SELECT *
FROM EMP
ORDER BY HIREDATE DESC;
-- HIREDATE 기준으로 내림차순
SELECT *
FROM EMP
ORDER BY SAL DESC, ENAME ASC;
-- SAL 을 내림차순으로 정렬한 후 ENAME을 오름차순으로 정렬하여 출력
4장 과제문제는 맥카페 들어가서 확인하기!!
'DataBase' 카테고리의 다른 글
06_그룹 쿼리와 집합 연산자 (2) | 2022.12.14 |
---|---|
05_SQL 주요 함수 (0) | 2022.12.13 |
03_SQL*Plus 명령어 (1) | 2022.12.13 |
02_SQL의 기본 (0) | 2022.12.12 |
01_데이터베이스(DB) 개념 및 오라클 설치 (0) | 2022.12.10 |