# create database dataBaseName default character set characterSetName;
create database zerobase default character set utf8mb4; # 다국어 지원, 이모지 사용
show databases;
# create table tableName(columnName dataType, columnName dataType ...);
create table mytable(id int, name varchar(16)); # int는 정수형, varchar는 가변 문자형
show tables;
# desc tableName;
desc mytable;
# alter table tableName rename newTableName;
alter table mytable rename person;
# alter table tableName add column columnName dataType;
alter table person add column agee double; # double은 실수형
# alter table tableName modify column columnName dataType;
alter table person modify colum agee int;
# alter table tableName change column oldColumnName newColumnName newDataType;
alter table person change column agee age int; # 데이터형도 동시에 바꿀 수 있음.
# alter table tableName drop column columnName;
alter table person drop column age;
# drop table tableName;
drop table person;
# 데이터베이스 생성
create database zerobase default character set utf8mb4; # 다국어 지원, 이모지 사용
# 데이터베이스 사용
use zerobase;
# person 테이블 생성
create table person
(
id int,
name varchar(16),
age int,
sex char
);
# 테이블 정보 확인
desc person;
insert into peson (id, name, agem sex)
values (1, '이효리', 43, 'F');
# person 테이블의 모든 데이터 확인
select * from person;
insert into person # 지정하지 않아도 됨.
values (2, '이상순', 48, 'M');
# person 테이블의 모든 데이터 확인
select * from person;
select name, age, sex from person;
# 테이블 내의 모든 컬럼에 대한 데이터를 조회
select * from person;
select * from person where sex='F';
# 이효리의 나이를 23세로 수정
update person set age=23 where name='이효리';
# 데이터 확인
select * from person where name='이효리';
# 이상순 데이터 삭제
delete from person where name='이상순';
# 데이터 확인
select * from person;
# 데이터베이스 생성
create database zerobase default character set utf8mb4; # 다국어 지원, 이모지 사용
# 데이터베이스 사용
use zerobase;
# celeb 테이블 생성
create table celeb
(
# 대문자 표기 주의!
ID int NOT NULL AUTO_INCREMENT PRIMARY KEY, # null을 허용하지 않음, 자동 증가, id를 key 값으로 사용
NAME varchar(32) NOT NULL DEFAULT '', # default는 공백
BRITHDAY date, # 날짜형 데이터
AGE int,
SEX char(1), # 문자
JOB_TITLE varchar(32), # 문자열
AGENCY varchar(32)
);
# 테이블 정보 확인
desc celeb;
# 실습할 데이터 추가 (여기부터 문법 대문자로 표기하겠음.)
INSERT INTO celeb VALUES (1, '아이유', '1993-05-16', 29, 'F', '가수, 텔런트', 'EDAM엔터테이먼트');
INSERT INTO celeb VALUES (2, '이미주', '1994-09-23', 28, 'F', '가수', '울림엔터테이먼트');
INSERT INTO celeb VALUES (3, '송강', '1994-04-23', 28, 'M', '텔런트', '나무엑터스');
INSERT INTO celeb VALUES (4, '강동원', '1981-01-18', 41, 'M', '영화배우, 텔런트', 'YG엔터테이먼트');
INSERT INTO celeb VALUES (5, '유재석', '1972-08-14', 50, 'M', 'MC, 개그맨', '안테나');
INSERT INTO celeb VALUES (6, '차승원', '1970-06-07', 48, 'M', '영화배우, 모델', 'YG엔터테이먼트');
INSERT INTO celeb VALUES (7, '이수현', '1999-05-04', 23, 'F', '가수', 'YG엔터테이먼트');
# 테이블 데이터 확인;
SELECT * FROM celeb;
# celeb 테이블에서 이름과 나이를 나이순으로 조회
SELECT age, name
FROM celeb
ORDER BY age ASC;
# celeb 테이블에서 이름과 나이를 나이와 이름순으로 정렬하여 조회
SELECT age, name
FROM celeb
ORDER BY age, name;
# celeb 테이블에서 이름과 나이를 나이의 역순으로 정렬한 뒤 이름순으로 정렬하여 조회
SELECT age, name
FROM celeb
ORDER BY age DESC, name ASC;
# 데이터베이스 생성
CREATE DATABASE zerobase DEFAULT CHARACTER SET utf8mb4; # 다국어 지원, 이모지 사용
# 데이터베이스 사용
USE zerobase;
# 테이블 정보 확인
DESC celeb;
# 나이가 29세인 데이터 검색
SELECT name, age FROM celeb WHERE age=29;
# 나이가 29세가 아닌 데이터 검색
SELECT name, age FROM celeb WHERE age!=29;
SELECT name, age FROM celeb WHERE age<>29;
# 나이가 29세보다 큰 데이터 검색, 나이 순으로 정렬
SELECT name, age FROM celeb WHERE age>29 ORDER BY age;
# 나이가 29세보다 작거나 같은 데이터 검색, 나이 순으로 정렬
SELECT name, age FROM celeb WHERE age<=29 ORDER BY age;
# 데이터베이스 생성
CREATE DATABASE zerobase DEFAULT CHARACTER SET utf8mb4; # 다국어 지원, 이모지 사용
# 데이터베이스 사용
USE zerobase;
# 테이블 정보 확인
SELECT * FROM celeb;
논리 연산자 (Logical Operators)
- AND : 조건을 모두 만족하는 경우 TRUE
- OR : 조건을 하나라도 만족하는 경우 TRUE
- NOT : 조건을 만족하지 않는 경우 TRUE
- BETWEEN : 조건값이 범위 사이에 있으면 TRUE
- IN : 조건값이 목록에 있으면 TRUE
- LIKE : 조건값이 패턴에 맞으면 TRUE
AND 문법 : 조건을 모두 만족하는 경우 TRUE
# 나이가 29세이고 성별이 여성인 데이터 검색
SELECT * FROM celeb WHERE age=29 AND sex='F';
# 성별이 남자이고 나이가 40세보다 큰 데이터를 이름의 역순으로 정렬하여 검색
SELECT * FROM celeb WHERE sex='M' AND age>40 ORDER BY name DESC;
# 나이가 25세보다 작거나 30세보다 큰 데이터 검색(나이 순으로 정렬)
SELECT * FROM celeb WHERE age<25 OR age>30 ORDER BY age;
# 나이가 29세보다 작고 여자이거나, 나이가 30세보다 크고 남자인 데이터를 나이와 성별 순으로 정렬하여 검색
SELECT * FROM celeb
WHERE (age<29 AND sex='F') OR (age>30 AND sex='M') # 그냥 섞이면 AND가 우선순위 OR보다 높음.
ORDER BY age, sex;
# YG엔터테이먼트 소속이거나 나무엑터스 소속인 연예인 중, 나이가 30세보다 작은 데이터를 검색
SELECT * FROM celeb
WHERE (agency='YG엔터테이먼트' OR agency='나무엑터스') AND age<30;
# celeb 테이블에서 아이디가 홀수이면서 성별이 남자거나,
# 아이디가 짝수면서 소속사가 YG엔터테이먼트인 데이터를 나이순으로 정렬하여 검색
SELECT * FROM celeb
WHERE ((id%2) = 1 AND sex='M') OR ((id%2) = 0 AND agency='YG엔터테이먼트')
ORDER BY age;
# 성별이 여자가 아닌 데이터 검색
SELECT * FROM celeb WHERE NOT sex='F';
# 소속사가 YG엔터테이먼트이면서 남자가 아니거나
# 직업이 가수이면서 소속사가 YG엔터테이먼트가 아닌 데이터 검색
SELECT * FROM celeb
WHERE (agency='YG엔터테이먼트' AND NOT sex='M')
OR (job_title='가수' AND NOT agency='YG엔터테이먼트');
# 생일이 1990년 이후이면서 여자가 아니거나,
# 생일이 1979년 이전이면서 소속사가 안테나가 아닌 데이터 검색
SELECT * FROM celeb
WHERE (birthday>19891231 AND NOT sex='F')
OR (birthday<19800101 AND NOT agency='안테나');
# celeb 테이블에서 소속사가 YG엔터테이먼트가 아니고 나이가 40세 이하인 데이터를
# 이름순으로 정렬하여 조회
SELECT * FROM celeb
WHERE NOT agency='YG엔터테이먼트' AND age<=40
ORDER BY name;
# celeb 테이블에서 직업이 가수가 아니면서 성별이 여자이거나,
# 나이가 40보다 작지 않으면서 아이디가 홀수인 데이터를 조회
SELECT * FROM celeb
WHERE (NOT job_title='가수' AND sex='F')
OR (NOT age<40 AND (id%2)=1);
# 나이가 20세에서 40세 사이의 데이터 검색
# 1
SELECT * FROM celeb WHERE age BETWEEN 20 AND 40;
# 2
SELECT * FROM celeb WHERE age>=20 AND age<=40;
# 생년월일이 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);
# 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);
# 나이가 28세, 48세 중 하나인 데이터 검색
SELECT * FROM celeb WHERE age IN (28, 48);
SELECT * FROM celeb WHERE age=28 OR age=48;
# 소속사가 나무엑터스, 안테나, 울림엔터테이먼트가 아니면서,
# 성별이 여자거나 나이가 45세 이상인 데이터 검색
SELECT * FROM celeb
WHERE NOT agency IN ('나무엑터스', '안테나', '울림엔터테이먼트')
AND (sex='F' OR age>=45);
# celeb 테이블에서 아이유, 이미주, 유재석, 송강 중에 소속사가 '나무엑터스'인 데이터 조회
SELECT * FROM celeb
WHERE name IN ('아이유', '이미주', '유재석', '송강')
AND agency = '나무엑터스';
# celeb 테이블에서 아이유, 송강, 강동원, 차승원 중에 YG엔터테이먼트 소속이 아니거나,
# 나이가 40세에서 50세 사이인 사람
SELECT * FROM celeb
WHERE name IN ('아이유', '송강', '강동원', '차승원')
AND (NOT agency='YG엔터테이먼트' OR age BETWEEN 40 AND 50);
# 소속사 이름이 'YG엔터테이먼트'인 데이터를 검색
SELECT * FROM celeb WHERE agency LIKE '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%'; # 세번째이면 '__G%'
# 직업명이 '가'로 시작하고 최소 2글자 이상인 데이터 검색
SELECT * FROM celeb WHERE job_title LIKE '가_%'; # 최소 5글자 '가____%'
# 직업명이 '영'으로 시작하고 '모델'로 끝나는 데이터 검색
SELECT * FROM celeb WHERE job_title LIKE '영%모델';
# 영화배우와 텔런트를 병행하는 연예인 검색
SELECT * FROM celeb
WHERE job_title LIKE '%영화배우%' AND job_title LIKE '%텔런트%';
# 직업이 하나 이상인 연예인 중 영화배우 혹은 텔런트가 아닌 연예인 검색
SELECT * FROM celeb
WHERE job_title LIKE '%,%'
AND NOT (job_title LIKE '%영화배우%' OR job_title LIKE '%텔런트%');
# celeb 테이블에서 직업중 가수가 포함되어 있고 성이 이씨인 데이터 조회
SELECT * FROM celeb
WHERE job_title LIKE '%가수%' AND name LIKE '이%';
# celeb 테이블에서 성별이 남자 이거나
# 직업명이 ‘텔런트’ 로 끝나면서 최소 5글자 이상인 데이터를 조회
SELECT * FROM celeb
WHERE sex='M' OR job_title LIKE '%__텔런트';
# celeb 테이블에서 이름이 두글자인 데이터를 조회
SELECT * FROM celeb
WHERE name LIKE '__';
# celeb 테이블에서 나이가 30세 이상 50세 이하면서 개그맨이 아닌 데이터를 조회
SELECT * FROM celeb
WHERE age BETWEEN 30 AND 50 AND NOT job_title LIKE '%개그맨%'; # NOT LIKE 도 가능
# celeb 테이블에서 아이유, 이미주, 유재석, 송강 중에
# 소속사 이름이 ‘나무’로 시작하는 데이터를 조회
SELECT * FROM celeb
WHERE name IN ('아이유', '이미주', '유재석', '송강')
AND agency LIKE '나무%';
# celeb 테이블에서 아이유, 이미주, 송강, 이수현 중에
# 가수만 직업으로 가졌거나, 가수를 병행하지 않고 텔런트를 하는 사람
SELECT * FROM celeb
WHERE name IN ('아이유', '이미주', '송강', '이수현')
AND (job_title LIKE '가수' OR (NOT job_title LIKE '%가수%' AND job_title LIKE '%텔런트%'));