5_Oracle DML select where 연산자-2(오라클 sql_select_조건출력)
WHERE절을 알아보겠습니다.
1_WHERE_비교연산자
SELECT productname, price
FROM products
WHERE price = 40;
40달러인 상품이 어떤건지 출력해봤습니다.
WHERE는 이렇게 원하는 데이터를 찾아 출력하게 해줍니다.
WHERE절에서 보편적으로 사용하는 비교 연산자입니다.
2_WHERE_산술연산자
SELECT productname, price
FROM products
WHERE price <= 40;
이렇게 조건에 범위를 정해줘서 여러 개의 데이터를 출력할 수도 있습니다.
저는 40달러 이하 조건을 걸어서 상품의 이름을 출력했습니다.
SELECT productid, productname, unit, price
FROM products
WHERE productname = ‘Tofu’;
숫자 뿐만 아니라 문자 데이터도 조건으로 둘 수 있습니다.
이 때 주의해야 할 것은 ''작은 따음표를 사용해야 한다는 점이며,
대 소문자를 구별해서 검색해야 한다는 것입니다.
여기서 만약에 tofu를 검색했다면,
SELECT productid, productname, unit, price
FROM products
WHERE productname = ‘tofu’;
아무것도 안나옵니다.
2_1_UPPER LOWER
테이블 내 특정 문자 데이터를 검색할 때, 대문자와 소문자를 구분해서 검색해야 합니다.
그래서 만약에 데이터가 대문자인지, 소문자인지 정확하지 않을 때
UPPER LOWER를 이용하면 대소문자 모두 출력할 수 있습니다.
SELECT UPPER(productname), LOWER(productname)
FROM products;
Upper함수를 이용해서 대문자로 데이터를 출력할 수있고,
lower함수를 이용해서 소문자로 데이터를 출력할 수 있습니다
2_2_출력 순서
SELECT productname, price*30 as 한달순매출
FROM products
WHERE price*30 >=5000;
제품을 한달에 한개씩 팔았다고 합니다
5000달러 이상의 순매출을 낸 상품을 찾고 싶네요
한달을 30일로 가정하고 커맨드를 작성해주면
다음과 같은 결과가 나옵니다.
여기서 주목해야 할 점이 하나 더 있습니다.
저는 분명히 price컬럼을 한달순매출로 바꿔줬는데
왜 where절에서 다시 price를 사용했을까요??
SELECT productname, price*30 as 한달순매출
FROM products
WHERE 한달순매출*30 >=5000;
Price를 한달순매출로 바꿔서 출력해주면
엉뚱한 결과가 나오게 됩니다.
왜냐하면 코딩 순서와 실행 순서가 다르기 때문입니다
Sql은 select를 제일 마지막으로 실행하기 때문에
Where문을 실행할 때 한달 순매출이라는 열을 찾지 못해, 오류가 나거나 이상한 결과를 출력하게 되는 것입니다.
3_비교연산자
다음 비교연산자들은 where과 함께 사용하는 연산자입니다
하나하나 알아보도록 하겠습니다.
NULL값은 나중에 알아봅니다.
SELECT productname, price
FROM products
WHERE price BETWEEN 80 AND 100;
Between and 를 사용하여
가격이 80부터 100사이인 제품을 찾았습니다.
물론 아래처럼 커맨드를 짜도 되지만
Between and를 사용한다면 더 심플하고 가독성이 좋은 커맨드가 됩니다.
SELECT productname, price
FROM products
WHERE price NOT BETWEEN 80 AND 100;
이렇게 중간에 NOT을 추가해서
가격이 80부터 100사이가 아닌 제품을 찾을 수도 있습니다.
SELECT productname, price
FROM products
WHERE productname LIKE ‘m%’;
상품 이름이 m으로 시작하는 제품의 가격을 알아보겠습니다
이렇게 like를 사용하면 해당 문자를 갖고있는 데이터의 정보를 출력할 수 있습니다.
M 뒤에 %가 사용된 것을 알 수 있습니다.
%는 특정 문자를 찾기위한 와일드 카드입니다.
와일드 카드는 이 자리에 어떤 철자가 와도 상관이 없고, 철자의 개수가 몇 개가 되든 관계가 없다는 뜻입니다..
S다음에 %가 오면, s로 시작하는 단어를 찾아줍니다.
S앞에 %가 오면, s로 끝나는 단어를 찾아줍니다.
%사이에 s가 있으면 s 가 들어있는 단어를 찾아줍니다.
SELECT productname, price
FROM products
WHERE price IN (18, 31, 36);
In을 사용하면, 여러 개의 정보에 대한 결과값을 출력할 수 있습니다.
=을 사용하면 한 가지 정보에 대한 결과값만을 출력할 수 있습니다. 그래서 이렇게 하나하나 입력해줘야 합니다.
똑같은 결과를 출력하지만 아래는 가독성이 너무 떨어지죠??
'컴퓨터 > SQL' 카테고리의 다른 글
7_Oracle DDL 테이블 생성 시 제약 조건, 정규화(ANOMALY) (0) | 2021.08.02 |
---|---|
6_Oracle DDL 테이블 생성 시 제약 조건, 키의 종류와 이상현상(KEY, ANOMALY) (0) | 2021.08.01 |
4_Oracle DML select from 기본, order by 연산자-1(오라클 sql_select_정렬) (0) | 2021.07.29 |
3_데이터 언어_SQL언어 구조 비교(DDL, DML, DCL) (0) | 2021.07.28 |
2_관계DBMS_엑셀과 비교 ( RDBMS, DB시스템, 오라클과 developer) (0) | 2021.07.25 |
댓글