[Udemy] The Power of Logical Operators

Creating the dots·2022년 1월 11일
0

SQL

목록 보기
14/21
post-thumbnail

The Ultimate MySQL Bootcamp 11강을 공부하며 정리한 내용입니다.

!= NOT EQUAL

특정 조건과 일치하지 않는 데이터 조회한다.

SELECT title, author_lname 
FROM books
WHERE author_lname != 'Harris';

NOT LIKE

LIKE가 특정 문자열을 포함하거나 시작/끝나는 데이터를 조회하는 것이었다면, NOT LIKE는 특정 문자열을 포함하지 않거나, 시작/끝나지 않는 데이터를 조회한다.

//Select books with titles that don't start with 'w'
SELECT title
FROM books
WHERE title NOT LIKE 'w%';

//Select books with titles that don't contain 'the'
SELECT title
FROM books
WHERE title NOT LIKE '%the%';

GREATER THAN (초과)

주로 숫자와 사용되며, 특정 값보다 큰 데이터를 조회한다.

//Select books with titles, released_year that released after 2000 
SELECT title, released_year 
FROM books
WHERE released_year > 2000
ORDER BY released_year;

GREATER THAN OR EQUAL TO (이상)

주로 숫자와 사용되며, 특정 값보다 크거나 같은 데이터를 조회한다.

📝 만약, greater than, greater than or equal to가 문자와 사용되면, 다음과 같이 동작한다. MySQL에서는 대문자와 소문자를 구분하지 않는다.
SELECT 'a' > 'b'; //0 false
SELECT 'A' > 'a'; //0
SELECT 'A' = 'a'; //1 true

LESS THAN (미만), LESS THAN OR EQUAL TO (이하)

주로 숫자와 사용되며, 특정 값보다 작거나(<) 같은(<=) 데이터를 조회한다.

LOGICAL AND

두 가지 이상의 조건을 동시에 만족하는 데이터를 조회한다.

//Select books written by Dave and published after the year 2010
SELECT * 
FROM books 
WHERE author_lname = 'Eggers' AND released_year > 2010;

LOGICAL OR

두 가지 이상의 조건 중 하나라도 만족하는 데이터를 조회한다.

//Select books written by Dave or published after the year 2010
SELECT title, author_lname, stock_quantity 
FROM books
WHERE author_lname= 'Eggers' 
OR 
released_year > 2010
stock_quantity > 100
;

BETWEEN A AND B

특정 범위(A이상 B이하)에 포함되는 데이터를 조회한다.

//Select all books published between 2004 and 2015
SELECT titles 
FROM books
WHERE released_year >= 2004 AND
released_year <= 2015

SELECT titles
FROM books
WHERE released_year BETWEEN 2004 AND 2015
📝 BETWEEN에서 날짜 또는 시간을 비교 대상으로 사용할 경우, `CAST()`를 사용해 조건의 데이터타입을 일치시키는 것이 좋다.
/*birthdt의 데이터타입이 datetime인 경우, 
BETWEEN으로 비교하려는 값의 데이터타입도 datetime으로 맞춰주는 것이 좋다.*/
SELECT name, birthdt
FROM people
WHERE birthdt BETWEEN CAST('1999-01-01' AS datetime) AND
CAST('2022-01-08' AS datetime);

NOT BETWEEN A AND B

특정범위에 포함되지 않는 데이터를 조회한다.

//Select all books published not between 2004 and 2015
SELECT titles
FROM books
WHERE released_year NOT BETWEEN 2004 AND 2015

IN

특정 조건들 중 하나라도 만족하는 데이터를 조회한다. OR와 같은 기능을 하지만 간결하게 작성할 수 있으며, 쉽게 조건을 변경할 수 있다.

//Select all books written by Carver Or Lahiri Or Smith
SELECT title, author_lname
FROM books
WHERE author_lname = 'Carver' OR
author_lname = 'Lahiri' OR
author_lname = 'Smith';

SELECT title, author_lname 
FROM books
WHERE author_lname
IN ('Carver', 'Lahiri', 'Smith');

NOT IN

특정 조건들을 모두 만족하지 않는 데이터를 조회한다.

//Select all books not published in 2000, 2002, 2004, 2006
SELECT title, released_year 
FROM books
WHERE released_year != 2000 AND
released_year != 2002 AND
released_year != 2004 AND
released_year != 2006 AND;

SELECT title, released_year
FROM books
WHERE released_year NOT IN (2000, 2002, 2004, 2006);

//Select all books that published after 2000 and not published in 2000, 2002, 20004, 2006
SELECT title, released_year
FROM books
WHERE released_year >= 2000 AND
released_year NOT IN (2000, 2002, 2004, 2006);

//Select all books that published after 2000 and not published in even year
SELECT title, released_year
FROM books
WHERE released_year >= 2000 AND
released_year % 2 != 0;

CASE STATEMENTS

테이블에 없는 필드를 조건(WHEN, ELSE)에 따라 만들고, 데이터를 추가할 수 있다. (조건 뒤에는 ,를 쓰지 않는다.)

/*
출판연도가 2000년 이후이면 'GENRE'라는 필드를 만들고, 해당 값을 'Modern Lit'를 추가한다. 
출판연도가 2000년 이전이면 'GENRE'라는 필드를 만들고, 
'20th Century Lit'를 추가한다.
*/
SELECT title, relased_year, 
  CASE 
    WHEN released_year >= 2000 THEN 'Modern Lit'
    ELSE '20th Century Lit'
  END AS GENRE
FROM books;

/*
재고가 0개 이상 50개 이하면 STOCK라는 필드를 만들고, 해당 값으로 '*'를 추가한다. 
재고가 50개 이상 100개 이하면 값으로 '**'을 추가한다.
그 외는 '***'를 추가한다.
*/
SELECT title,
  CASE
    WHEN stock_quantity BETWEEN 0 AND 50 THEN '*'
    WHEN stock_quantity BETWEEN 51 AND 100 THEN '**'
    ELSE '***'
  END AS STOCK
FROM books

//위와 같은 쿼리문이지만, BETWEEN을 사용하지 않고 간결히 작성됐다.
SELECT title,
  CASE
    WHEN stock_quantity <= 50 THEN '*'
    WHEN stock_quantity <= 100 THEN '**'
    ELSE '***'
  END AS STOCK
FROM books
profile
어제보다 나은 오늘을 만드는 중

0개의 댓글