5.20
alter table mytable(기존테이블) rename person(바꿀 테이블명);
alter table person(테이블) add column agee(열) double(열 형태/double, int 등)

alter table person modify column agee int(바꿀 형태);
alter table person change column agee age int;
alter table person drop column age;
drop animal(테이블명)

- insert into person(id, name, age, sex)
-> values (1, '이효리', 43, 'F');- insert into person
-> values (2, '이상순', 48, 'M');
selcet * from person
select name, age, sex from person: name, age, sex 열의 values 만 가져온다.

update person set

delete from person where
- order by 열(column), order by 열(column) ASC : 열 기준으로 오름차순 정렬
- order by 열(column) DESC : 열 기준으로 내림차순 정렬







ex. 나이가 25세보다 작거나, 30세보다 큰 데이터 검색

ex. 나이가 29세보다 작고 여자이거나, 나이가 30세보다 크고 남자인 데이터 검색

and 조건문 끼리 ()를 해주기! (보기 편하게) / 안해도 정상 작동하긴 함
ex. YG 소속이거나 나무엑터스 소속인 30세 이상 연예인

위의 방법처럼 하면 내가 원하는 값을 찾을 수 없음
꼭 괄호를 잘 해줘야 내가 원하는 값을 얻을 수 있다!
5.21
기본 문법
select *
from tablename
where not condition
where not age<30;
ex. 생일이 1990년 이후이면서 여자가 아닌 데이터

- 생일이 n년 이후는 'brithday > 19891231' 의 형식으로 작성해야 함
아이디가 홀수인 데이터
- (id % 2) = 1
select *
from tablename
where column1 BETWEEN value1 AND value2;

기본 문법
select *
from tablename
where column IN (value1, value2 ...)
나이가 28세, 48세 중 하나인 데이터 검색

- where age = 28 or age = 48 이라고 써도 결과값 같음!
select *
from tablename
where column LIKE pattern;
- n으로 시작하는~ : 'n%'
- n으로 끝나는~ : '%n'
- n을 포함하는~ : '%n%'
- 2번째 글자가 G인~ : '_G%' / 언더바 사용
- 첫번째 글자가 '가'로 시작하면서 최소 2글자 이상인~ : '가_%'
- 첫번째 글자가 '가'로 시작하면서 최소 5글자 이상인~ : '가_%'
- 첫번째 글자가 '영'으로 시작하면서 모델로 끝나는~ : '영%모델'
소속사 이름이 'YG엔터테이먼트'인 데이터 검색

'YG'로 시작하는 소속사 이름을 가진 데이터 검색

- where column LIKE 'YG%';
직업명이 2가지 이상인 데이터 중에 영화배우나 탤런트가 아닌 데이터 검색

- not (job_title LIKE '%영화배우%' or job_title LIKE '%탤런트%');
- 맨 앞에 not 을 쓰고 괄호로 묶어서 작성해주기!
아이유, 이미주, 송강, 이수현 중에 가수만 직업으로 가졌거나, 가수를 병행하지 않고 텔런트를 하는 데이터 검색

- 여러 개의 SQL 문을 합쳐서 하나의 SQL 문으로 만들어주는 방법
- 주의: 컬럼의 갯수가 같아야 한다
select column1, column2, ... from test1
UNION | UNION ALL
select column1, column2, ... from test2
예제 전 데이터 테이블 2개

예제1 UNION ALL: '이수현' 값이 두 번 나타남

예제2 UNION: '이수현' 값이 한 번만 나타난 모습

예제3 UNION: 열의 갯수를 단순히 맞춰준다고 해서 UNION이 제대로 작동하는 것은 아님

- 첫번째 UNION이 에러가 난 건 열의 갯수가 다르기 때문
- 두번째 쿼리의 열을 하나 지우고 실행했더니, '강동원'의 생년월일이 job_title에 들어감
-> 단순히 열의 갯수만 조정하면 안되고, 내가 원하는 값의 열을 잘 맞춰서 쿼리를 작성해야 함!
문제1
: 직업이 가수인 (가수를 포함하는) 데이터를 검색하는 쿼리와
직업이 텔런트인 (텔런트를 포함하는) 데이터를 검색하는 쿼리를
중복을 제거하여 합쳐서 실행

문제2
: 성이 이씨인 데이터를 검색하는 쿼리와 1970년대생을 검색하는 쿼리를
중복을 포함하여 합쳐서 실행

5.22
두 개의 테이블에서 공통된 요소들을 통해 결합하는 조인방식(교집합)
select column1, column2 ...
from tableA
INNER JOIN tableB
ON tableA.column = tableB.column
where conditions;
-예제: snl_show에 호스트에 출연한 celeb을 기준으로 celeb 테이블과 snl_show 테이블을 inner join 하기

두 개의 테이블에서 공통영역을 포함해 왼쪽 테이블의 다른 데이터를 포함하는 조인 방식
select column1, column2 ...
from tableA
LEFT JOIN tableB
ON tableA.column = tableB.column
where conditions;

두 개의 테이블에서 공통영역을 포함해 오른쪽 테이블의 다른 데이터를 포함하는 조인 방식
select column1, column2 ...
from tableA
RIGHT JOIN tableB
ON tableA.column = tableB.column
where conditions;

두 개의 테이블에서 공통영역을 포함해 양쪽 테이블의 다른 영역을 모두 포함하는 조인 방식(합집합)
- LEFT JOIN & RIGHT JOIN 을 UNION으로 합쳐줘야 함
SELECT column1, column2 ...
FROM table A
LEFT JOIN table B
ON tableA.column = tableB column
UNION
SELECT column1, column2 ...
FROM table A
RIGHT JOIN table B
ON tableA.column = tableB column
- 기존에 배웠던 대로 사용하면 오류가 나타남
select column1, column2 ...
from tableA
GULL OUTER JOIN tableB
ON tableA.column = tableB.column
where conditions;
-> MYSQL 에서는 FULL JOIN를 지원하지 않고 있기 때문- 오류

SELECT column1, column2 ...
FROM tableA, tableB ...
WHERE condition;
예제1: snl_show 호스트로 출연한 celeb을 기준으로 celeb 테이블과 snl_show 테이블을 self join

예제2: celeb 테이블의 연예인 중, snl_show 에 host로 출연했고, 소속사가 안테나인 사람의 이름과 직업을 검색
- step1: celeb 테이블 중 소속사가 안테나인 사람 검색
- step2: celeb 테이블 중 snl_show에 host로 출연한 사람 검색
- step3: 위의 step1,2를 합쳐서 최종 데이터 검색

예제3: celeb 테이블의 연예인 중, snl_show에 host로 출연했고, 영화배우는 아니면서 YG엔터테이먼트 소속이거나, 40세 이상이면서 YG엔터테이먼트 소속이 아닌 연예인의 나이, 직업, 소속사, 시즌, 에피소드 정보를 검색

예제4: snl_show에 출연한 연예인의 snl_show 아이디, 시즌, 에피소드, 이름, 직업정보 검색

참고: 동일한 컬럼명이 존재하는 경우에만 테이블명 명시(안그럼 오류남)

예제5: 답안이 이상한 것 같아 스킵
문제1: snl_show 에 출연한 celeb 테이블의 연예인 중, 영화배우나 텔런트가 아닌 연예인의
아이디, 이름, 직업, 시즌, 에피소드 정보 검색

문제2: snl_show 에 출연한 celeb 중, 작년 9월 15일 이후에 출연했거나
소속사 이름이 ‘엔터테이먼트’ 로 끝나지 않으면서 영화배우나 개그맨이 아닌 연예인의
celeb 아이디, 이름, 직업, 소속사 검색

5.25
여러 문자열을 하나로 합치거나 연결
SELECT CONCAT('str1', 'str2', ...);
예제1: 문자 + 문자 연결

예제2: 문자 + table 안의 열 값과 연결

컬럼이나 테이블에 이름 별칭 생성
column
select column as alias
from tablename
table
select *
from tablename as alias;
예제1: name 을 이름으로 별칭을 만들어 검색
: select name as '이름' from celeb;
예제2: name은 이름으로, agency는 소속사로 별칭을 만들어 검색
: select name as '이름', agency as '소속사' from celeb;
예제3: name과 job_title 합쳐서 profile 이라는 별칭 만들어 검색
: concat (name, ' : ', job_title) as profile from celeb;
예제4: snl_show에 출연한 celeb을 기준으로 두 테이블을 조인하여 테이블은 c, snl_show 테이블은 s라는 별칭을 만들어서 출연한 시즌과 에피소드, 이름, 직업 검색
: select s.season, s.episode, c.name, c.job_title
from celeb as c, snl_show as s
where c.name = s.host;

예제5: snl_show에 출연한 celeb을 기준으로 두 테이블을 조인하여 다음과 같이 별칭을 사용하여 검색
- 시즌, 에피소드, 방송일을 합쳐서 '방송정보'
- 이름, 직업을 합쳐서 '출연자정보'
: select concat(s.season, '-', s.episode, '(', s.broadcast_date, ')') as '방송정보',
concat(c.name, '(', c.job_title, ')') as '출연자정보',
from celeb as c, snl_show as s
where c.name = s.host;

as 는 꼭 넣지 않아도 문법만 잘 지켜주면 알아서 인식 함!
문제1: 이름이 3글자인 연예인 정보 다음과 같이 검색

문제2: 앞을자가 2글자이고, '엔터테이먼트'로 끝나는 소속사 연예인 중 SNL에 출연한 연예인의 신상정보(나이, 성별)와 출연정보(시즌-에피소드, 방송날짜), 소속사 정보를 방송날짜 최신순으로 정렬하여 다음과 같이 검색
: select agency as '소속사 정보',concat('나이 : ', c.age, '(', c.sex, ')') as '신상정보',concat(s.season, '-', s.episode, ', ', '방송날짜 :', s.broadcast_date)as '출연정보'
from celeb as c, snl_show as s
where c.name = s.host and c.agency like '__엔 터테이먼트'
order by s.broadcast_date DESC;

검색한 결과의 중복 제거
SELECT DISTINCT column1, column2 ...
FROM tablename;
예제: 연예인 소속사 종류를 검색-중복 제거
: select distinct agency from celeb ;
: 검색 결과를 정렬된 순으로 주어진 숫자만큼만 조회
SELECT column1, column2 ...
FROM tablename
WHERE condition
LIMIT number;
예제1: 나이순으로 2개만 검색

예제2: snl에 출연한 연예인의 정보를 나이순으로 2개만 검색

5.26
mysql -h <엔드포인트> -P <포트> -u <마스터 사용자 이름> -p