실습 DB 선택
use zerobase;
SQL
복사
사용할 table 생성
create table person
-> (
-> id int,
-> name varchar(16),
-> age int,
-> sex char
-> );
SQL
복사
INSERT - 데이터 추가
insert into tablename (col1, col2, ....)
values (val1, val2, ....)
SQL
복사
실습) id 가 1, 이름은 이효리, 43세, 여자(F)인 데이터 추가
insert into person (id, name, age, sex)
-> values (1, '이효리', 43, 'F');
SQL
복사
select * from person;
SQL
복사
컬럼 이름 생략하기 - 모든 컬럼값을 넣어줘야 할때
insert into tablename
values (val1, val2, ...);
SQL
복사
물론, 이때도 컬럼의 순서와 일치하게 값을 넣어줘야 한다
실습) id 가 2, 이름은 이상순, 48세, 남자(M)인 데이터 추가
SELECT - 데이터 조회
select col1, col2,...
from tablename;
SQL
복사
where - 조건에 따른 데이터 조회하기
select col1, col2, ..
from tablename
where condition;
SQL
복사
UPDATE - 데이터 수정
update tablename
set col1 = val1, col2 = val2, ...
where condition;
SQL
복사
실습) 이효리 나이를 43 → 23세로 바꾸자.
update person
set age=23
where name='이효리';
SQL
복사
DELETE - 데이터 삭제
delete from tablename
where condition;
SQL
복사
실습) 이상순 데이터를 삭제하자.
delete from person where name='이상순';
SQL
복사
ORDER BY - 특정 컬럼 기준으로 정렬
실습 - celeb 테이블 만들기
create table celeb
-> (
-> ID int not null auto_increment primary key,
-> NAME varchar(32) not null default '',
-> BIRTHDAY date,
-> AGE int,
-> SEX char(1),
-> JOB_TITLE varchar(32),
-> AGENCY varchar(32)
-> );
SQL
복사
not null : null 값을 허용하지 않는다.
auto_increment : 값이 없으면 자동으로 값을 1씩 증가시켜준다
primary key : key 컬럼 설정
default : 값이 없다면 어떤 값을 default 값으로 넣어줄 것인지 설정
INSERT INTO 로 데이터 추가해주기
/* 아래와 같은 방식으로 반복 */
insert into celeb values(7,'이수현','1999-05-04',23,'F','가수','YG엔터테인먼트');
SQL
복사
ORDER BY
컬럼을 여러 개 써주면, 순차적으로 컬럼을 기준으로 정렬해준다.
•
오름차순 : ASC(생략 가능)
•
내림차순 : DESC
select col1, col2,...
from tablename
order by col1, col2, ..asc | desc;
SQL
복사
비교 연산자
논리 연산자
select *
-> from celeb
-> where (id % 2 != 0 and sex='M') or (id % 2 = 0 and agency='YG엔터테인먼트')
-> order by age;
SQL
복사
NOT
•
where 에 쓰일 경우 : 조건을 만족하지 않을 경우 TRUE
select col1, col2, ...
from tablename
where not condition;
SQL
복사
실습 ) 소속사가 YG엔터테인먼트이면서 남자가 아니거나 직업이 가수이면서 소속사가 YG엔터테인먼트가 아닌 데이터 검색
select *
-> from celeb
-> where (agency='YG엔터테인먼트' and not sex='M')
-> or (job_title in ('가수') and not agency='YG엔터테인먼트');
SQL
복사
실습 ) 생일이 1990년 이후인 데이터
select *
from celeb
where birthday > 19891231; -- date 타입에서 조건을 사용할 때, 이렇게 사용해도 된다.
SQL
복사
LIKE
•
‘문자%’ : ‘문자’ 로 시작하는 데이터를 필터링
select *
from celeb
where agency like 'YG%';
SQL
복사
•
‘%문자’ : ‘문자’로 끝나는 데이터를 필터링
select *
from celeb
where agency like '%엔터테인먼트';
SQL
복사
•
‘%문자%’ : ‘문자’를 포함하는 데이터를 필터링
select *
from celeb
where job_title like '%가수%';
SQL
복사
•
‘_문자%’ : 두번째 글자가 ‘문자’인 데이터를 필터링
select *
from celeb
where agency like '_G%';
SQL
복사
•
‘문자_%’ : ‘문자’ 로 시작하고, 최소 2글자 이상인 데이터를 필터링
select *
from celeb
where job_title like '가_%';
SQL
복사
•
‘문자____%’ : ‘문자’로 시작하고 최소 5글자 이상인 데이터를 필터링
select *
from celeb
where job_title like '가____%';
SQL
복사
•
‘문자%문자2’ : ‘문자’ 로 시작하고 ‘문자2’ 로 끝나는 데이터를 필터링
select *
from celeb
where job_title like '영%모델';
SQL
복사
LENGTH / CHAR_LENGTH
•
length(문자열) : 문자열의 길이를 출력
•
char_length(문자열) : 문자열의 길이를 출력
# celeb 테이블에서 이름이 두글자인 데이터 조회
select *
from celeb
where name like '__';
SQL
복사
select *
from celeb
where char_length(name) = 2;
SQL
복사
UNION
여러 개의 SQL 문을 합쳐서 하나의 SQL 문으로 만드는 방법
•
UNION : 중복된 값을 제거해서 union
•
UNION ALL : 중복된 값도 보여준다
FULL OUTER JOIN
MySQL 은 FULL OUTER JOIN 문법을 지원하지 않는다.
대신, 아래와 같이 활용하면 된다.
select column1, column2, ...
from tableA
left join tableB on tableA.column = tableB.column
union
select column1, column2, ...
from tableA
right join tableB on tableA.column = tableB.column
where condition;
SQL
복사
즉, left join, right join 한 결과값을 union 해주면 full outer join 을 만들 수 있다
SELF JOIN
기능은 결국 INNER JOIN 과 동일하다.
concat
문자열을 합쳐주는 기능