SQL (3) 다양한 조건으로 조회하기(AND, LIKE, BETWEEN, NULL)

미남로그·2021년 8월 27일
2

SQL

목록 보기
3/5

WHERE 조건에 다양한 조건 입력하기

SELECT * FROM 도서대출내역2
WHERE~

위는 기본 형태입니다. WHERE 조건절을 몇 개 더 추가할 수 있습니다.

SELECT * FROM 도서대출내역2
WHERE
	조건1
AND 	조건2
AND	조건3
AND	(조건4 OR 조건5);

이렇게 다양한 조건을 추가할 수 있습니다.

WHERE 조건절 안에서 쓸 수 있는 몇 가지를 살펴보겠습니다.

  1. 특정 문자를 포함하는 row를 가져오고 싶을 때
  2. 특정 기간 혹은 특정 날짜의 전 또는 이후의 row를 가져오고 싶을 때
  3. 특정 숫자 이상 또는 이하의 row를 가져오고 싶을 때

LIKE - 특정 문자 포함

도서대출내역2 테이블에서 문씨 형제의 결과만 가져오겠습니다.

SELECT * FROM 도서대출내역2
WHERE 이름 LKIE "문%";

for row in c.execute('SELECT * FROM 도서대출내역2 WHERE 이름 LIKE "문%" ;'):
	print(row)
    
>>>
('101', '문강태', '2020-06', '20일')
('103', '문상태', '2020-06', '8일')

LIKE는 문자열 컬럼에서 사용할 수 있습니다. 해당 문자를 포함하거나 해당 문자로 시작 또는 종료를 불러올 수 있습니다.

  • "문%": 문으로 시작하는 모든 문자열
  • "%문": 문으로 끝나는 모든 문자열
  • "%문%": 문이 들어가는 모든 문자열

❗ 주의사항

문자열은 꼭 큰 따옴표 "" 를 사용해 감싸주어야합니다.

AND, BETWEEN

특정 기간 혹은 특정 날짜 이전 또는 이후의 row 값을 가져오고 싶을 때

SELECT * FROM 도서대출내역
WHERE 대출일 >= "2020-06-01"
AND 대출일 <= "2020-06-07" ;

for row in c.execute('SELECT * FROM 도서대출내역 WHERE 대출일 >= "2020-06-01" AND 대출일 <= "2020-06-07" ;'):
	print(row)
    
>>>
('101', '문강태', 'aaa', '2020-06-01', '2020-06-05')
('102', '고문영', 'bbb', '2020-06-01', None)
('103', '문상태', 'ccc', '2020-06-01', '2020-06-05')

위처럼 부등호를 사용해 결과를 조회할 수 있고, BETWEEN 이라는 함수를 사용해 활용할 수 있습니다.

SELECT * FROM 도서대출내역
WHERE 대출일 BETWEEN "2020-06-01" AND "2020-06-07" ;

for row in c.execute('SELECT * FROM 도서대출내역 WHERE 대출일 BETWEEN "2020-06-01" AND "2020-06-07" ;'):
	print(row)
    
>>>
('101', '문강태', 'aaa', '2020-06-01', '2020-06-05')
('102', '고문영', 'bbb', '2020-06-01', None)
('103', '문상태', 'ccc', '2020-06-01', '2020-06-05')

특정 숫자 이상 또는 이하의 row를 조회하고 싶을 때

SELECT *, CAST(SUBSTR(대출일수, 1, (length(대출일수)-1)) AS INT) AS 대출일수수정
FROM 도서대출내역2
WHERE 대출일수
수정 > 5;

for row in c.execute('SELECT *, CAST(SUBSTR(대출일수, 1, (length(대출일수)-1)) AS INT) AS 대출일수_수정 FROM 도서대출내역2 WHERE 대출일수_수정 > 5'):
	print(row)
    
>>>
('101', '문강태', '2020-06', '20일', 20)
('102', '고문영', '2020-06', '10일', 10)
('103', '문상태', '2020-06', '8일', 8)

NULL

NULL(NONE)은 정보가 없는 상태입니다.

SELECT * FROM 도서대출내역
WHERE 반납일 IS NOT NULL;

for row in c.execute('SELECT * FROM 도서대출내역 WHERE 반납일 IS NOT NULL;'):
	print(row)
    
>>>
('101', '문강태', 'aaa', '2020-06-01', '2020-06-05')
('101', '문강태', 'ccc', '2020-06-20', '2020-06-25')
('103', '문상태', 'ccc', '2020-06-01', '2020-06-05')

WHERE 반납일 IS NOT NULL 은 반납일이 NULL이 아닌 값의 조회를 원한다는 뜻입니다. 반납일이 NULL이라는 것은 미반납 상태 또는 반납일에 대한 정보가 없다는 뜻입니다. NULL 값이 아닌 사람들은 반납을 한 사람들이겠죠.

NULL인 사람도 조회해보겠습니다.

SELECT * FROM 도서대출내역
WHERE 반납일 IS NULL ;

for row in c.execute('SELECT * FROM 도서대출내역 WHERE 반납일 IS NULL;'):
	print(row)
    
>>>
('102', '고문영', 'bbb', '2020-06-01', None)
('102', '고문영', 'ddd', '2020-06-08', None)
('104', '강기둥', None, None, None)

직접 해보는 실습

Q3. '도서대출내역' 테이블에서 다음 조건들을 만족하는 사용자의 이름을 구하는 쿼리를 작성해 보세요.

  • 조건 1 : 이름이 '태'로 끝나는 데이터를 조회
  • 조건 2 : 대출일이 2020년 6월 19일 이후인 데이터를 조회
  • 조건 3 : ID가 102 아래인 데이터를 조회
  • 조건 4 : 반납일이 NULL이 아닌 데이터를 조회

SELECT 이름 FROM 도서대출내역
WHERE 이름 LIKE "%태"
AND 대출일 >= "2020-06-19"
AND ID < 102
AND 반납일 IN NOT NULL

여기까지 실습을 따라오느라 수고 많으셨습니다!👏 시작의 발걸음을 뗀 그대에게 박수를 드립니다.🥳

profile
미남이 귀엽죠

0개의 댓글