비교연산자, 논리연산자, NULL

JYJ·2022년 2월 21일
0

SQL / MySQL

목록 보기
6/25

비교연산자

  • A != B : A와 B가 같지 않은
  • A <> B : A와 B가 같지 않은

✔ 나이가 29세가 아닌 데이터 검색

SELECT name, age FROM testtable WHERE age != 29 ORDER BY age;

논리연산자

  • AND : 조건을 모두 만족하는 경우 TRUE
  • OR : 하나의 조건이라도 만족하는 경우 TRUE
  • NOT : 조건을 만족하지 않는 경우 TRUE
  • BETWEEN : 조건값이 범위 사이에 있으면 TRUE
  • IN : 조건값이 목록에 있으면 TRUE
  • LIKE : 조건값이 패턴에 맞으면 TRUE

AND

✔ 남자이고 나이가 40보다 큰 데이터를 이름의 역순으로 정렬하여 조회

SELECT * FROM testtable WHERE sex='M' AND age>40 ORDER BY name DESC;

OR

✔ 나이가 29세 보다 작고 여자이거나, 나이가 30세 보다 크고 남자인 데이터를 나이와 성별 순으로 정렬하여 조회

SELECT * FROM testtable WHERE (age<29 AND sex='F') OR (age>30 AND SEX='M') 
ORDER BY age, sex;

NOT

  • not은 해당하는 컬럼명 바로앞에 써주면 됨

✔ 생일이 1990년 이후이면서 여자가 아니거나, 생일이 1979년 이전이면서 소속사가 안테나가 아닌 데이터 조회

SELECT * FROM testtable
WHERE (birthday > 19891231 AND NOT sex='F')
OR (birthday < '1980-01-01' AND NOT agency ='안테나');


-> date 타입은 19891231 처럼 숫자로만 쓰거나 '1980-01-01'처럼 문자로 쓰면됨

BETWEEN

  • between X and Y 형태로 쓰면됨

  • X와 Y 모두 포함한 범위이다( X <= SSS <= Y )


✔ 생년월일이 1980년에서 1995년 사이가 아니면서 여자이거나, 소속사가 YG엔터테이먼트면서 나이가 20세에서 45세 사이가 아닌 데이터 조회

SELECT * FROM testtable
WHERE (NOT birthday BETWEEN 19800101 AND 19951231 AND sex='F')
OR (agency='YG엔터테이먼트' AND NOT age BETWEEN 20 AND 45);

IN

  • 컬럼명 in ('a', 'b', 'c') 형태로 쓴다.

  • a, b, c 중에 있으면 true이다.


✔ 소속사가 나무엑터스, 안테나, 울림엔터테이먼트가 아니면서, 성별이 여자거나 나이가 45세 이상인 데이터 조회

SELECT * FROM testtable
WHERE NOT agency IN ('나무엑터스', '안테나', '울림엔터테이먼트')
AND (sex='F' OR age>=45);

LIKE

  • 컬럼명 LIKE 'condition'

✔ 'YG'로 시작하는 소속사 이름을 가진 데이터 조회

SELECT * FROM testtable WHERE agency LIKE 'YG%';

✔ '엔터테이먼트'로 끝나는 소속사 이름을 가진 데이터 조회

SELECT * FROM testtable WHERE agency LIKE '%엔터테이먼트';

✔ 직업명에 '가수'가 포함된 데이터 조회

SELECT * FROM testtable WHERE job_title LIKE '%가수%';

✔ 소속사 이름의 두번째 글자가 G인 데이터를 조회

SELECT * FROM testtable WHERE agency LIKE '_G%';

✔ 직업명이 '가'로 시작하고 최소 5글자 이상인 데이터 조회

SELECT * FROM testtable WHERE job_title LIKE '가____%';

✔ 직업명이 '영'으로 시작하고 '모델'로 끝나는 데이터 조회

SELECT * FROM testtable WHERE job_title LIKE '영%모델';

✔ 영화배우와 텔런트를 병행하는 연예인 검색

SELECT * FROM testtable
WHERE job_title LIKE '%영화배우%' AND job_title LIKE '%텔런트%';

✔ 직업이 두개 이상인 연예인 중 영화배우 혹은 텔런트가 아닌 연예인 조회

SELECT * FROM testtable
WHERE job_title LIKE '%,%'
AND NOT (job_title LIKE '%영화배우%' OR job_title LIKE '%텔런트%');

NULL

  • NULL은 값이 없음(결측치)을 나타낸다.

  • NULL과 공백(' ')은 다른 것이다. 공백은 공백이라는 값이 있는 것이다.

  • NULL값이 있을 때 컬럼 끼리(가로방향)는 연산이 불가능하고 (NULL출력), 행 끼리(세로방향)는 연산이 가능하다.(NULL빼고 계산)

  • 'WHERE column IS NULL' 또는 'WHERE column IS NOT NULL' 사용


✔ jokic 테이블에서 lose 칼럼이 NULL인 row들 조회

SELECT * FROM jokic WHERE lose IS NULL;

✔ jokic 테이블에서 lose 칼럼이 NULL이 아닌(값이 있는) row들 조회

SELECT * FROM jokic WHERE lose IS NOT NULL;

COALESCE

  • 지정한 표현식들 중에 NULL이 아닌 첫번째 값을 반환한다.
    • 배타적 OR 관계의 열에서 활용도가 높다.
  • NULL을 어떤값으로 대체할 때 유용하다.

✔ NULL이 아닌 첫번째 값 출력

SELECT COALESCE(1, NULL);  -- 1 리턴
SELECT COALESCE(NULL, 2, 3);  -- 2 리턴
SELECT COALESCE(NULL, NULL, 3);  -- 3 리턴

✔ NULL값을 대체

SELECT COALESCE(ppp, 0)  -- ppp컬럼의 NULL값을 0으로 대체
FROM tablename

profile
Study note

0개의 댓글