논리연산자 (Logical Operations)

Jane의 study note.·2022년 12월 2일
0

MySQL

목록 보기
7/17

실습환경 만들기

zerobase 사용 (이동)
USE zerobase;

만약해당데이터가검색되지않는다면앞단계의실습환경만들기를참고

select * from celeb;

1. AND

  1. AND 문법
    조건을모두만족하는경우 TRUE
SELECT column1, column2, ...
FROM tablename
WHERE condition1 AND condition2 AND condition3 ...;
  1. AND 예제 1
    나이가 29세이고성별이여성인데이터검색
SELECT * FROM celeb WHERE age=29 AND sex='F';
  1. AND 예제 2
    성별이남자이고나이가 40세보다큰데이터를이름의역순으로정렬하여검색
SELECT * FROM celeb WHERE age>40 ORDER BY name DESC;
- celeb 테이블에서성별이남자이고소속사가 YG엔터테이먼트인데이터를 소속사순으로정렬하여조회하세요.
SELECT * FROM celeb WHERE sex='M' and agency='YG엔터테이먼트' order by agency ASC;

- celeb 테이블에서나이가 30세이상이고성별이남자인데이터를나이순으로정렬하여조회하세요.
SELECT * FROM celeb where age >=30 and sex='M' order by age;

2. OR

  1. OR 문법
    하나의조건이라도만족하는경우 TRUE
SELECT column1, column2, ...
FROM tablename
WHERE condition1 OR condition2 OR condition3 ...;
  1. OR 예제 1
    나이가 25세보다작거나 30세보다큰데이터검색
SELECT * FROM celeb WHERE age<25 OR age>30 ORDER BY age;
  1. OR 예제 2 - 1~5
    나이가 29세보다작고여자이거나, 나이가 30세보다크고남자인데이터를나이와성별순으로정렬하여검색
SELECT * FROM celeb WHERE age<29 AND sex='F';
SELECT * FROM celeb WHERE age>30 AND sex='M';
=> SELECT * FROM celeb WHERE (age<29 AND sex='F') OR (age>30 AND sex='M');
=> 
SELECT * FROM celeb
WHERE (age<29 AND sex='F') OR (age>30 AND sex='M') ORDER BY age, sex;
=> sex 오름차순: 여성먼저, 남성 나중
  1. OR 예제 3 - 1~4 (23~26p)
YG엔터테이먼트소속이거나 나무엑터스소속인 연예인중, 나이가 30세보다작은데이터를검색
SELECT * FROM celeb WHERE age <30 and agency='YG엔터테이먼트' OR agency='나무엑터스';
또는
SELECT * FROM celeb WHERE (agency='YG엔터테이먼트' OR agency='나무엑터스') AND age <30;

※오류출력: yg이거나 나무엑터스이면서 30세 미만인 배우 출력 => 이 경우 yg의 40대 배우도 출력됨
SELECT * FROM celeb WHERE agency='YG엔터테이먼트' OR agency='나무엑터스' AND age <30;
- Celeb 테이블에서 소속사가 YG 엔터테이먼트이거나 안테나인 데이터를 소속사순으로 정렬하여 조회하세요.
select * from celeb where agency='YG엔터테이먼트' or agency='안테나' order by agency;

- Celeb 테이블에서남자이면서 YG엔터테이먼트소속이거나, 나이가 30세보다작은데이터를 나이, 소속사순으로정렬하여검색하세요.

select * from celeb where (sex='M' AND agency='YG엔터테이먼트') or age<30 order by age, agency;

- Celeb 테이블에서 아이디가 홀수면서 성별이 남자거나, 아이디가 짝수면서 소속사가 YG엔터테이먼트인데이터를 나이순으로정렬하여검색하세요.

select * from celeb where ( id%2=1 AND sex='M') OR (id%2=0 AND agency='YG엔터테이먼트' )
order by age;

3. NOT

  1. NOT 문법
    조건을만족하지경우 TRUE
성별이여자가아닌데이터검색
SELECT * FROM celeb WHERE NOT sex='F';
  1. NOT 예제 2 - 1~6(p35~40)
    소속사가 YG엔터테이먼트이면서 남자가 아니거나 직업이 가수이면서소속사가 YG엔터테이먼트가아닌데이터검색
SELECT * FROM celeb 
WHERE (agency='YG엔터테이먼트' AND NOT sex='M')
OR (job_title ='가수' AND NOT agency='YG엔터테이먼트');
  1. NOT 예제 3 - 1~6(p41~46)
    생일이 1990년이후이면서 여자가아니거나, 생일이 1979년이전이면서소속사가안테나가아닌데이터검색
SELECT * FROM celeb 
WHERE (birthday >=19900101 AND NOT sex='F')
OR (birthday <19790101 AND NOT agency='안테나');

- Celeb 테이블에서소속사가 YG엔터테이먼트가아니고 나이가 40세이하인데이터를이름순으로정렬하여조회하세요.
SELECT * FROM celeb 
WHERE NOT agency='YG엔터테이먼트' and age <=40
order by name

- Celeb 테이블에서성별이남자가아니거나 나이가 30세이상인데이터를나이의역순으로정렬하여조회하세요.

SELECT * FROM celeb 
WHERE NOT sex='M' or age >=30
order by age DESC;

- Celeb 테이블에서직업이가수가아니면서성별이여자이거나, 나이가 40보다작지않으면서아이디가홀수인데이터를조회하세요.

SELECT * FROM celeb 
WHERE (NOT job_title='가수' and sex='F')
OR (age >= 40 and id%2=1);

4. BETWEEN

  1. BETWEEN 문법

나이가 20세에서 40세사이의데이터검색

SELECT * FROM celeb WHERE age BETWEEN 20 AND 40;

나이가 20세에서 40세사이의데이터검색

SELECT * FROM celeb WHERE age>= 20 AND age<=40;

생년월일이 1980년에서 1995년사이가아니면서여자이거나,
소속사가 YG엔터테이먼트이면서나이가 20세에서 45세사이가아닌데이터검색 p62

SELECT * FROM celeb WHERE (NOT birthday BETWEEN 19800101 AND 19951231 AND sex='F') OR (agency='YG엔터테이먼트' AND NOT age BETWEEN 20 AND 45);

- Celeb 테이블에서나이가 30세에서 60세사이이고성별이남자인데이터를나이순으로정렬하여조회하세요.
SELECT * FROM celeb WHERE (age BETWEEN 30 AND 60 AND sex='M')
order by age;

- Celeb 테이블에서나이가 30세에서 60세사이가아니거나 YG엔터테이먼트소속인데이터를나이의역순으로정렬하여조회하세요.
SELECT * FROM celeb WHERE (NOT age BETWEEN 30 AND 60 or agency='YG엔터테이먼트')
order by age DESC;

- Celeb 테이블에서아이디가 1 에서 5사이의값이면서성별이여자이거나,
아이디가홀수이면서성별이남자이면서나이가 20세에서 30세사이인데이터를조회하세요.

SELECT * FROM celeb WHERE (id BETWEEN 1 AND 5 AND sex='F') OR (id%2=1 AND sex='M' and age between 20 and 30);
=> 아이디가 1에서 5사이: 이는 15를 포함한다는 뜻

5. IN

목록안에조건이존재하는경우 TRUE

나이가 28세, 48세중하나인데이터검색

SELECT * FROM celeb WHERE age=28 OR age=48;

소속사가 나무엑터스, 안테나, 울림엔터테이먼트가아니면서, 성별이여자거나 나이가 45세이상인데이터검색
=> 소속사는 무조건 저 3군데는 아니어야함. 성별은 남자 45세 이상 가능(ex>yg의 차승원 ok)
p77,78
SELECT * FROM celeb WHERE NOT agency IN ('나무엑터스', '안테나','울림엔터테이먼트')
AND (sex='F' or age>=45);

p77 조건 오류로 잘못 출력
SELECT * FROM celeb WHERE NOT agency IN ('나무엑터스', '안테나','울림엔터테이먼트')
AND sex='F' or age>=45;
=> 나이가 45세 이상이면 무조건 출력되서 '소속사가 안테나이면서 성별은 남자인' 유재석(50)이 출력되버림

-celeb 테이블에서아이유, 이미주, 유재석, 송강중에소속사가 ‘나무엑터스’인데이터를조회하세요.
SELECT * FROM celeb WHERE name IN('아이유','이미주','송강') and agency='나무엑터스'; 

-celeb 테이블에서소속사가안테나, YG엔터테이먼트중하나가아니고, 성별이여자인데이터를조회하세요.
SELECT * FROM celeb WHERE NOT agency IN('안테나','YG엔터테이먼트') and sex='F';

-celeb 테이블에서아이유, 송강, 강동원, 차승원중에 YG엔터테이먼트소속이아니거나 나이가 40세에서 50세사이인사람을찾아보세요.
SELECT * FROM celeb WHERE name IN('아이유','송강','강동원','차승원') and (NOT agency='YG엔터테이먼트' or age between 40 and 50);

6. LIKE

LIKE 문법
조건값이패턴에맞으면 TRUE

소속사이름이 ‘YG엔터테이먼트’ 인데이터를검색
SELECT * FROM celeb WHERE agency='YG엔터테이먼트';

‘YG’로시작하는소속사이름을가진데이터를검색
SELECT * FROM celeb WHERE agency LIKE 'YG%';

‘엔터테이먼트’로끝나는소속사이름을가진데이터를검색
SELECT * FROM celeb WHERE agency LIKE '%엔터테이먼트';

직업명에 ‘가수’가포함된데이터를검색
SELECT * FROM celeb WHERE job_title LIKE '%가수%';

소속사이름의두번째글자가 G인데이터를검색
SELECT * FROM celeb WHERE agency LIKE '_G%';

직업명이 ‘가 로시작하고최소 2글자이상인데이터검색
SELECT * FROM celeb WHERE job_title LIKE '가_%';
=> 가_를 통해 최소 2글자를 확보함, %: 그 뒤에 얼마든지 다른 글자가 와도 좋다.

직업명이 '가' 로시작하고최소 5글자이상인데이터검색
SELECT * FROM celeb WHERE job_title LIKE '가____%';
=> 가____(언더바4)를 통해 최소 5글자를 확보함, %: 그 뒤에 얼마든지 다른 글자가 와도 좋다.

직업명이 ‘영'으로시작하고 '모델’로끝나는데이터검색
SELECT * FROM celeb WHERE job_title LIKE '영%모델';

영화배우와텔런트를병행하는연예인검색 p95
=> 영화배우와 탤런트 이 두단어를 포함해야함, 순서는 둘이 바뀌어 와도 됨
SELECT * FROM celeb WHERE job_title LIKE '%영화배우%' and job_title LIKE '%탤런트%';
또는
SELECT * FROM celeb WHERE job_title LIKE '%탤런트%' and job_title LIKE '%영화배우%';

※오류 : LIKE 연산자는 and로 이어줄 수 없음
SELECT * FROM celeb WHERE job_title LIKE '%영화배우%' and '%탤런트%';

직업이 하나 이상인 연예인 중 영화배우 혹은 텔런트가 아닌 연예인검색 p100
SELECT * FROM celeb WHERE job_title LIKE '%,%' 
AND NOT (job_title LIKE '%영화배우%' OR job_title LIKE '%탤런트%');
=> 첫줄을 실행해서 직업이 2개 이상인 경우 보면 가수, 탤런트 이런식으로 표기됨 
     : '%,%' (어떤 문자가 오고 다음에 콤마가 오며 또 어떤 문자가 옴)


- celeb 테이블에서직업중가수가포함되어있고성이이씨인데이터조회하세요.
SELECT * FROM celeb WHERE job_title LIKE '%가수%' and name like '이%';
(※주의: name = '이%';는 조회안됨)

- celeb 테이블에서성별이남자이거나직업명이 ‘텔런트’ 로끝나면서최소 5글자이상인데이터를조회하세요.
SELECT * FROM celeb WHERE sex='M' or job_title like '%__텔런트';
(언더바2)
문제: 아이유가 출력안됨
select * from celeb where name='아이유'; 
=> 확인결과 아이유는 '탤런트'로 표기되어 있었음
아이유 직업명 표기 변경: 가수, 탤런트-> 가수, 텔런트
UPDATE celeb
SET job_title='가수, 텔런트'
where name= '아이유';
select * from celeb where name='아이유'; 
이제 아이유가 출력됨

- celeb 테이블에서이름이두글자인데이터를조회하세요.
select * from celeb where name like '__';

- celeb 테이블에서나이가 30세이상 50세이하면서 개그맨이아닌데이터를조회하세요.
select * from celeb where age between 30 and 50 and not job_title like '%개그맨%';
또는
select * from celeb where age between 30 and 50 and job_title not like '%개그맨%';

-  celeb 테이블에서아이유, 이미주, 유재석, 송강중에소속사이름이 ‘나무’로시작하는데이터를조회하세요.
select * from celeb where name in ('아이유', '이미주', '유재석', '송강') and agency like '나무%';
(※주의 agency='나무%는 아무것도 출력안됨!')

- celeb 테이블에서 아이유, 이미주, 송강, 이수현중에 가수만 직업으로가졌거나, 가수를병행하지않고텔런트를하는사람을찾으세요.
select * from celeb where name in ('아이유', '이미주', '송강', '이수현') and (job_title='가수' 
or (job_title like '%텔런트%' and not job_title like '%가수%'));
=> 조건오류, 가수만 출력됨
select * from celeb where name in ('아이유', '이미주', '송강', '이수현') and (job_title = '가수' or (job_title like '%텔런트%' and not job_title like '%가수%'));
=> 송강 안나옴, 확인결과 송강도 탤런트로 표기되어 있었음
UPDATE celeb
SET job_title='텔런트'
where name='송강';

0개의 댓글