스터디노트 (SQL 6~7)

zoe·2023년 4월 12일
0

실습환경 만들기

  • zerobase 사용(이동)
use zerobase;
  • 테이블 정보 확인
desc celeb;
select * from celeb;




Comparison Operator (비교 연산자)

  • A = B : A와 B가 같은

  • A > B : A와 B보다 큰(초과)

  • A < B : A와 B보다 작은(미만)

  • A >= B : A와 B보다 크거나 같은(이상)

  • A <= B : A와 B보다 작거나 같은(이하)

  • A <> B : A와 B보다 크거나 작은(같지 않은)

  • A != B : A와 B가 같지 않은

  • 예제1 (A = B) : 나이가 29세인 데이터 검색

select name, age from celeb where age = 29 order by age;
  • 예제2 (A != B) : 나이가 29세가 아닌 데이터 검색
 select name, age from celeb where age != 29 order by age;
  • 예제3 (A > B) : 나이가 29세보다 큰 데이터 검색
select name, age from celeb where age > 29 order by age;
  • 예제4 (A < B) : 나이가 29세보다 작은 데이터 검색
select name, age from celeb where age < 29 order by age;
  • 예제5 (A >= B) : 나이가 29세보다 크거나 같은 데이터 검색
select name, age from celeb where age >= 29 order by age;
  • 예제6 (A <= B) : 나이가 29세보다 작거나 같은 데이터 검색
select name, age from celeb where age <= 29 order by age;
  • 예제7 (A <> B) : 나이가 29세 크거나 작은(같지 않은) 데이터 검색
select name, age from celeb where age <> 29 order by age;

문제 1. celeb 테이블에서 나이(age)가 30세 이하인 데이터의 이름과 나이를 나이순으로 조회

 select name, age from celeb where age <= 30 order by age, name;

문제 2. celeb 테이블에서 이름이 '아이유'인 데이터의 이름과 나이, 성별, 직업, 소속사를 조회

select name, age, sex, job_title, agency from celeb where name='아이유';

문제 3. celeb 테이블에서 소속사가 YG엔터테이먼트가 아닌 데이터의 이름, 직업, 소속사를 소속사순으로 정렬하여 조회

select name, job_title, agency from celeb where agency != 'YG엔터테이먼트' order by agency;

문제 4. celeb 테이블에서 성별이 남자인데 데이터의 이름, 성별, 소속사 정보를 나이의 역순으로 정렬하여 조회

 select name, sex, agency from celeb where sex = 'M' order by age desc, agency asc;

문제 5. celeb 테이블에서 나이가 50세 미만인 데이터의 성별, 소속사, 이름 나이를 성별 순으로 정렬한 뒤 소속사 역순으로 정렬하고 마지막으로 이름순으로 정렬하여 조회

select sex, agency, name, age from celeb where age < 50 order by sex asc, agency desc, name asc;




실습환경 만들기

  • zerobase 사용(이동)
use zerobase;
  • 실습할 테이블 정보 확인
select * from celeb;




Logical Operators (논리 연산자)

  • AND : 조건을 모두 만족하는 경우 TRUE
  • OR : 하나의 조건이라도 만족하는 경우 TRUE
  • NOT : 조건을 만족하지 않는 경우 TRUE
  • BETWEEN : 조건값이 범위 사이에 있으면 TRUE
  • IN : 조건값이 목록에 있으면 TRUE
  • LIKE : 조건값이 패턴에 맞으면 TRUE




AND

  • AND : 조건을 모두 만족하는 경우 TRUE
select column1, column2, ...
from tablename
where condition1 and condition2 and condition3 ...;

  • 예제1 나이가 29세이고 성별이 여성인 데이터 검색
select * from celeb where age = 29 and sex = 'F';
  • 예제2 성별이 남자기고 나이가 40세 보다 큰 데이터를 이름의 역순으로 정렬하여 검색
select * from celeb where sex = 'M' and age > 40 order by name desc;

문제 1. celeb 테이블에서 성별이 남자이고 소속사가 YG엔터테이먼트인 데이터를 소속사 순으로 정렬하여 조회

select * from celeb where sex = 'M' and agency = 'YG엔터테이먼트' order by agency;

문제 2. celeb 테이블에서 나이가 30세 이상이고 성별이 남자인 데이터를 나이순으로 정렬하여 조회

select * from celeb where age >= 30 and sex = 'M' order by age asc;




OR

  • OR : 하나의 조건이라도 만족하는 경우 TRUE
select column1, column2, ...
from tablename
where condition1 or condition2 or condition3 ...;

  • 예제 1 나이가 25세보다 작거나 30세보다 큰 데이터 검색
select * from celeb where age < 25 or age > 30 order by age;
  • 예제 2 나이가 29세보다 작고 여자아이거나, 나이가 30세보다 크고 남자인 데이터를 나이와 성별 순으로 정렬하여 검색
select * from celeb where (age < 29 and sex = 'F') or (age > 30 and sex = 'M') order by age asc, sex asc;
  • 예제 3 YG엔터테이먼트 소속이거나 나무엑터스 소속인 연예인 중, 나이가 30세 보다 작은 데이터를 검색
select * from celeb where (agency = 'YG엔터테이먼트' or agency = '나무엑터스') and age < 30 order by age;

문제 1. Celeb 테이블에서 소속사가 YG 엔터테이먼트 이거나 안테나인 데이터를 소속사 순으로 정렬하여 조회

select * from celeb where agency = 'YG엔터테이먼트' or agency = '안테나' order by agency asc;

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

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

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

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




💡 NOT

  • NOT : 조건을 만족하지 않는 경우 TRUE
select column1, column2, ...
from tablename
where not condition;

  • 예제 1 성별이 여자가 아닌 데이터 검색
select * from celeb where not sex = 'F';
  • 예제 2 소속사가 YG엔터테이먼트이면서 남자가 아니거나 직업이 가수이면서 소속사가 YG엔터테이먼트가 아닌 데이터 검색
 select * from celeb where (agency = 'YG엔터테이먼트' and not sex = 'M') or (job_title = '가수' and not agency = 'YG엔터테이먼트');
  • 💡 예제 3 생일이 1990년 이후이면서 여자가 아니거나, 생일이 1979년 이전이면서 소속사가 안테나가 아닌 데이터 검색
select * from celeb where (birthday >19891231 and not sex = 'F') or (birthday < 19790101 and not agency='안테나');

문제 1. Celeb 테이블에서 소속사가 YG 엔터테이먼트가 아니고 40세 이하인 데이터를 이름순으로 정렬하여 조회

select * from celeb where not agency = 'YG엔터테이먼트' and age <= 40 order by name asc;

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

select * from celeb where not sex = 'M' or age >= 30 order by age desc;

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

select * from celeb where (not job_title = '가수' and sex = 'F') or (not age < 40 and (id%2)=1);




BETWEEN

  • BETWEEN : 조건값이 범위 사이에 있으면 TRUE
select column1, column2, ...
from tablename
where condition1 between value1 and value2;

  • 예제 1 나이가 20세에서 40세 사이의 데이터 검색
select * from celeb where age between 20 and 40;
  • 예제 2 생년월일이 1980년에서 1995년 사이가 아니면서 여자이거나, 소속사가 YG엔터테이먼트이면서 나이가 20세에서 45세 사이가 아닌 데이터 검색
select * from celeb where (not birthday between 19800101 and 19951231 and sex = 'F') or (agency = 'YG엔터테이먼트' and not age between 20 and 45);

문제 1. Celeb 테이블에서 나이가 30세에서 60세 사이이고 성별이 남자인 데이터를 나이순으로 정렬하여 조회

select * from celeb where age between 30 and 60 and sex = 'M' order by age asc;

문제 2. Celeb 테이블에서 나이가 30세에서 60세 사이가 아니거나 YG엔터테이먼트 소속인 데이터를 나이의 역순으로 정렬하여 조회

select * from celeb where not age between 30 and 60 or agency = 'YG엔터테이먼트' order by age desc;

문제 3. 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);




IN

  • IN : 목록 안에 조건이 존재하는 경우 TRUE
select column1, column2, ...
from tablename
where column in (value1, value2, ...);

  • 예제 1 나이가 28세, 48세 중 하나인 데이터 검색
 select * from celeb where age in (28, 48);
  • 예제 1 - 2 나이가 28세, 48세 중 하나인 데이터 검색
select * from celeb where age = 28 or age = 48;
  • 💡 예제 2 소속사가 나무엑터스, 안테나, 울림엔터테이먼트가 아니면서, 성별이 여자거나 나이가 45세 이상인 데이터 검색
select * from celeb where not agency in ('나무엑터스', '안테나', '울림엔터테이먼트') and (sex = 'F' or age >= 45);

문제 1. celeb 테이블에서 아이유, 이미주, 유재석, 송강 중에 소속사가 ‘나무엑터스’인 데이터를 조회

select * from celeb where name in ('아이유', '이미주', '유재석', '송강') and agency = '나무엑터스';

문제 2. celeb 테이블에서 소속사가 안테나, YG엔터테이먼트 중 하나가 아니고, 성별이 여자인 데이터를 조회

select * from celeb where not agency in ('안테나', 'YG엔터테이먼트') and sex = 'F';

문제 3. celeb 테이블에서 아이유, 송강, 강동원, 차승원 중에 YG엔터테이먼트 소속이 아니거나나이가 40세에서 50세 사이인 사람을 찾기

select * from celeb where (name in ('아이유', '송강', '차승원') and agency != 'YG엔터테이먼트') or age between 40 and 50;




LIKE

  • LIKE : 조건값이 패턴에 맞으면 TRUE
    - '-' : 어떤 글자가 와도 상관 없다, 글자수만큼 입력한다
    • '%' : %부분부터 모든 문자들이 와도 상관 없다
select column1, column2, ...
from tablename
where column like pattern;

  • 예제 1 소속사 이름이 ‘YG엔터테이먼트’ 인 데이터를 검색
select * from celeb where agency like 'YG엔터테이먼트';
  • 예제 1 - 2 소속사 이름이 ‘YG엔터테이먼트’ 인 데이터를 검색
select * from celeb where agency = 'YG엔터테이먼트';
  • 예제 2 소속사 이름이 ‘YG엔터테이먼트’ 인 데이터를 검색
select * from celeb where agency like 'YG%';
  • 예제 3 ‘엔터테이먼트’로 끝나는 소속사 이름을 가진 데이터를 검색
select * from celeb where agency like '%엔터테이먼트';
  • 예제 4 직업명에 ‘가수’가 포함된 데이터를 검색
select * from celeb where job_title like '%가수%';
  • 💡 예제 5 소속사 이름의 두번째 글자가 G인 데이터를 검색
select * from celeb where agency like '_G%';
  • 💡 예제 6 직업명이 ‘가' 로 시작하고 최소 2글자 이상인 데이터 검색
select * from celeb where job_title like '가_%';
  • 💡 예제 7 직업명이 '가' 로 시작하고 최소 5글자 이상인 데이터 검색
select * from celeb where job_title like '가____%';
  • 💡 예제 8 직업명이 ‘영'으로 시작하고 '모델’로 끝나는 데이터 검색
select * from celeb where job_title like '영%모델';
  • 💡 예제 9 영화배우와 텔런트를 병행하는 연예인 검색
select * from celeb where job_title like '%영화배우%' and job_title like '%탤런트%';
  • 💡 예제 10 직업이 하나 이상인 연예인 중 영화배우 혹은 텔런트가 아닌 연예인 검색
select * from celeb where job_title like '%,%' and not (job_title like '%영화배우%' or job_title like '%텔런트%');

문제 1. celeb 테이블에서 직업중 가수가 포함되어 있고 성이 이씨인 데이터 조회

select * from celeb where job_title like '%가수%' and name like '이%';

💡 문제 2. celeb 테이블에서 성별이 남자 이거나 직업명이 ‘텔런트’ 로 끝나면서 최소 5글자 이상인 데이터를 조회

 select * from celeb where sex = 'M' or job_title like '%__텔런트';

문제 3. celeb 테이블에서 이름이 두글자인 데이터를 조회

select * from celeb where name like '__';

문제 4. celeb 테이블에서 나이가 30세 이상 50세 이하면서 개그맨이 아닌 데이터를 조회

select * from celeb where age between 30 and 50  and not job_title like '%개그맨%';

문제 5. celeb 테이블에서 아이유, 이미주, 유재석, 송강 중에 소속사 이름이 ‘나무’로 시작하는 데이터를 조회

select * from celeb where name in ('아이유', '이미주', '유재석', '송강') and agency like '나무%';

문제 6. celeb 테이블에서 아이유, 이미주, 송강, 이수현 중에 가수만 직업으로 가졌거나, 가수를 병행하지 않고 텔런트를 하는 사람을 찾기

select * from celeb where name in ('아이유', '이미주', '송강', '이수현') and (job_title like '가수' or ( not job_title like '%가수%' and job_title like '%텔런트%'));

💻 출처 : 제로베이스 데이터 취업 스쿨

profile
#데이터분석 #퍼포먼스마케팅 #데이터 #디지털마케팅

0개의 댓글