mySQL에서 논리연산자의 사용
1. 논리연산자란 ?
- 한 가지 이상의 값에서, 각 조건에 맞게 연산을 한 후, TRUE 가 되는 값만 출력한다.
1) AND : a와b 조건을 모두 만족한다면 TRUE
2) OR : a와b 조건 둘 중에 하나만 만족한다면 TRUE
3) NOT : 조건을 만족하지 않으면 TRUE
4) BETWEEN : 조건값이 a와b 범위 사이에 있으면 TRUE
5) IN : 조건값이 목록에 있으면 TRUE
6) LIKE : 조건값이 패턴에 맞으면 TRUE
2. AND
- celeb 테이블에서, 나이가 29이고 성별이 여자인 데이터 값을 출력한다. age=29 and sex='f' 이므로, 둘 다 만족하여야 true로 값을 출력할 수 있다.
- 나이가 40이상이면서 남자인 값을 이름 기준 내림차순으로 조회했다.
3. OR
- celeb 테이블에서, age 가 25보다 작거나 30보다 큰 행을 가져온다.
- 나이가 29보다 작고 여자인 사람(= age<29 and sex='m') 또는 나이가 30보다 크고 남자인 사람 (= age>30 and sex='f') 을 구할 때에는 각각 괄호를 치고 or를 해주어야 오류가 발생하지 않는다.
4. NOT
- age = 25 는 age 값이 25인 데이터를 찾는것이고, not age = 25 는 age 값이 25가 아닌 데이터를 찾는것이다.
- yg 엔터이면서 성별이 남자가 아닌 사람 또는 직업이 가수이면서 yg엔터가 아닌사람 을 찾는 문장이다.
- 생일이 1990년 이후이면서 성별이 여자인 사람 또는 생일이 1980년 이전이면서 안테나엔터가 아닌 사람을 찾는 경우이다.
5. BETWEEN
- a와 b 사이에 해당하는 값을 찾으려고 할 때 between a and b 문법을 사용한다.
- 나이가 20 에서 40 사이는, age between 20 and 40 으로 표현할 수도 있고, age >= 20 and b<=40 으로 표현할 수 있다. 같은 표현이다
- birthday 값이 1990년도와 1995년도 사이가 아닌값을 찾고 싶을때는, not birthday between 19800101 and 19951231 으로, 찾고자하는 컬럼명 앞에 not 을 붙인다.
6. IN
-
목록 안에 조건이 존재하는 경우를 TRUE로 , 값을 출력한다. in (a,b) 라고 한다면, 목록안의 a 또는 b 에 해당하면 데이터를 출력함.
-
age 값이 (28,28) 목록안에 있다면 출력한다는 의미이다. 즉, age 가 28 or 48 인 값을 출력한다는 의미와 같다.
-
in 문법에서도 not 을 쓰는 경우에는, 컬럼명 앞에 not 을 붙인다. yg나 안테나가 아닌 사람 중에서, 성별이 여자 또는 나이가 45이상인 사람을 출력한다. and 뒤에 반드시 괄호가 있어야 오류가 발생하지 않는다.
7. LIKE
- 조건값이 패턴에 맞다면 TRUE로, 해당 값을 출력한다.
- agenecy 값이 yg 엔터 인 데이터를 조회하는것과, agenecy like yg엔터 인 값을 조회하는 결과는 같다.
- agenecy 값이 like 'yg%' 으로 조회하면, agenecy 값의 시작이 yg 로 시작하지만 뒤는 무엇일지 모르는 값을 조회한다는 의미이다.
- '%엔터' 로 조회하면, 앞은 %로 뭔지 모르지만 뒤는 엔터 로 끝나는 값을 조회한다.
- 아예 앞의 글자수를 모를때는 %로 표현할 수 있고, 글자수를 지정하고 싶을 땐, '_g' 등으로, 두 글자인 값을 조회하면서 그 중 두번째 글자가 g인 값을 조회할 수 있다.
- %가수% 으로 표현하면, 앞 뒤는 모르지만 가수 라는 값이 포함된 데이터를 조회한다. % 가 쓰여진 자리만 미지수라고 보면된다.
* 직업이 하나 이상이면서, 가수 또는 배우가 아닌 사람 검색
select * from celeb
where job like '%,%'
and not (job like '*가수*' or '%배우%');
이렇게 작성하면, 미지의 직업 값 %,% 두 개 이상을 가지면서,
가수 또는 배우 가 아닌 사람을 조회할 수 있다.