The Ultimate MySQL Bootcamp 11강을 공부하며 정리한 내용입니다.
특정 조건과 일치하지 않는 데이터 조회한다.
SELECT title, author_lname
FROM books
WHERE author_lname != 'Harris';
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%';
주로 숫자와 사용되며, 특정 값보다 큰 데이터를 조회한다.
//Select books with titles, released_year that released after 2000
SELECT title, released_year
FROM books
WHERE released_year > 2000
ORDER BY released_year;
주로 숫자와 사용되며, 특정 값보다 크거나 같은 데이터를 조회한다.
SELECT 'a' > 'b'; //0 false
SELECT 'A' > 'a'; //0
SELECT 'A' = 'a'; //1 true
주로 숫자와 사용되며, 특정 값보다 작거나(<
) 같은(<=
) 데이터를 조회한다.
두 가지 이상의 조건을 동시에 만족하는 데이터를 조회한다.
//Select books written by Dave and published after the year 2010
SELECT *
FROM books
WHERE author_lname = 'Eggers' AND released_year > 2010;
두 가지 이상의 조건 중 하나라도 만족하는 데이터를 조회한다.
//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
;
특정 범위(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
/*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);
특정범위에 포함되지 않는 데이터를 조회한다.
//Select all books published not between 2004 and 2015
SELECT titles
FROM books
WHERE released_year NOT BETWEEN 2004 AND 2015
특정 조건들 중 하나라도 만족하는 데이터를 조회한다. 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');
특정 조건들을 모두 만족하지 않는 데이터를 조회한다.
//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;
테이블에 없는 필드를 조건(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