반응형
[SQL] LIKE 검색, NULL 함수, GROUP BY - HAVING (간단한 설명)
LIKE 검색
- 정확한 키워드를 모를 경우 일부만으로 검색하는 방법
- 와일드카드(%, _)를 사용하여 패턴 매칭
- %: 0~n 글자
- _: 한 글자
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 LIKE 패턴
- LIKE 검색은 매칭하기 위해 DBMS에 부담이 많으므로 LIKE에 OR과 같은 논리조건자를 중복해서 사용하지 않는 것이 좋음
--바람직하지 않은 예
SELECT * FROM 테이블명 WHERE LIKE 컬럼명1 LIKE ... OR 컬럼명2 LIKE ... ;
NULL 값
- NULL이랑 해당 컬럼의 값이 없다는 의미 (해당 컬럼이 NULL값을 허용하는 경우)
- NULL값을 가지고 있는 컬럼을 검색하려면 IS NULL
- = NULL 로 검색하면 안 됨
- NULL이 아닌 값을 가지고 있는 컬럼을 검색하려면 IS NOT NULL
NULL 함수
- 숫자 컬럼을 연산해야할 때 NULL을 처리해주는 함수이다.
- NULL값이 나오면 다른 값(주로 0)으로 대체해서 계산에 문제가 없도록 처리해준다.
- NULL 함수
- MySQL: IFNULL, COALESCE
- SQL Server: ISNULL
- Oracle: NVL
- 숫자연산/집합함수(예: SUM())의 경우는 NULL 처리가 내장되어 있으므로 에러가 나지 않지만, 직접 함수나 쿼리에 넣는 경우는 NULL 함수를 사용해야 에러가 나지않는다.
SELECT AVG(LifeExpectancy) FROM country;
SELECT AVG(IFNULL(LifeExpectancy, 0)) FROM country;
GROUP BY
- 집합함수와 같이 사용하여 그룹별 연산을 적용한다.
SELECT 컬럼명, 집합함수명(컬럼명) FROM 테이블명 GROUP BY 컬럼명;
- GROUP BY 연산과 일반 쿼리의 차이점
- GROUP BY는 아래 쿼리들의 합이다.
world DB의 city 중 국가 코드가 'KOR'인 도시의 숫자를 출력하시오.
world DB의 city 중 국가 코드가 'JPN'인 도시의 숫자를 출력하시오.
world DB의 city 중 국가 코드가 'USA'인 도시의 숫자를 출력하시오. - 모든 국가별 도시 숫자를 한꺼번에 출력해주는 면에서 개별 쿼리와 차이가 난다.
- 만약 개별 국가들의 도시 숫자를 원하는 것인지, 모든 국가들의 도시 숫자를 원하는 것인지 구분해서 사용해야 한다.
- GROUP BY는 아래 쿼리들의 합이다.
HAVING
- HAVING은 GROUP BY와 함께 쓰이며, 집합연산에 WHERE 조건절 대체로 사용한다.
--예시
SELECT CountryCode, COUNT(CountryCode) FROM city GROUP BY CountryCode HAVING COUNT(CountryCode) >= 70;
(출처: 실습과 함께하는! 데이터베이스 MySQL편)
반응형
'SQL' 카테고리의 다른 글
[PostgreSQL] ::bpchar, ::character varying 의미 (0) | 2022.06.29 |
---|---|
[SQL] Expected one result (or null) to be returned by selectOne(), but found: 2 해결 방법 (0) | 2022.06.22 |
[SQL] JOIN 개념 및 종류, VIEW(뷰), SELECT INTO, INSERT INTO SELECT, CASE ... WHEN ... END (0) | 2022.04.11 |
[SQL] SQL, CRUD 기초 (간단한 설명) (0) | 2022.04.07 |
[SQL] DBMS, SQL 기초 (간단한 설명) (0) | 2022.03.31 |