PRIMARY KEY : unuque, not null 속성을 가짐
일반적으로 primary key는 최소 1개는 선택되어있어야함
PRIMARY KEY로 만든 column은 인덱스에 자동생성됨
CREATE TABLE MEMBER(
mem_id CHAR(8) PRIMARY KEY,
mem_name VARCHAR(10) NOT NULL,
mem_number INT NOT NULL,
addr CHAR(2) NOT NULL,
phone1 CHAR(3), -- 지역번호 --
phone2 CHAR(8),
height SMALLINT, -- INT보다 작은 범위 --
debut_date DATE
);
INSERT INTO member VALUES('TWC', '트와이스', 9, '서울', '02', '11111111', 167, '2015.10.19');
INSERT INTO member VALUES('BLK', '블랙핑크', 4, '경남', '055', '22222222', 163, '2016.08.08');
INSERT INTO member VALUES('WMN', '여자친구', 6, '경기', '031', '33333333', 166, '2015.01.15');
INSERT INTO member VALUES('OMY', '오마이걸', 7, '서울', NULL, NULL, 160, '2015.04.21');
INSERT INTO member VALUES('GRL', '소녀시대', 8, '서울', '02', '44444444', 168, '2007.08.02');
INSERT INTO member VALUES('ITZ', '잇지', 5, '경남', NULL, NULL, 167, '2019.02.12');
INSERT INTO member VALUES('RED', '레드벨벳', 4, '경북', '054', '55555555', 161, '2014.08.01');
INSERT INTO member VALUES('APN', '에이핑크', 6, '경기', '031', '77777777', 164, '2011.02.10');
INSERT INTO member VALUES('SPC', '우주소녀', 13, '서울', '02', '88888888', 162, '2016.02.25');
INSERT INTO member VALUES('MMU', '마마무', 4, '전남', '061', '99999999', 165, '2014.06.19');
id char(20)
pwd varchar(10)
데이터베이스의 물리적 단위 : 페이지
char
로 만든 id를 aaa로 설정하면 남는공간 17 있지만
varchar
로 만든 pwd는 1234로 설정하면 남는공간없이 애초에 char(4)로 생성한것처럼 됨.
id는 변경이 안되기때문에 데이터베이스의 페이지에 영향을 주지 않으므로 varchar로 설정하는것이 낫고
pwd는 변경이 가능하기때문에 공간이 미리 확보가 되어있도록 char로 설정하는것이 나음
※ smallint : int보다 적은 수의 범위(공간 절약)
테이블의 행이 몇개인지 알수있는 함수
SELECT COUNT(*) FROM 테이블명;
SELECT COUNT(*) FROM MEMBER;`
외래키 : 다른 테이블 참조(REFERENCES)
FOREIGN KEY (본인테이블의 컬럼)
REFERENCES 참조하고자하는테이블명(참조하고자하는 테이블의 컬럼명)
CREATE TABLE buy(
num INT AUTO_INCREMENT PRIMARY KEY,
mem_id CHAR(8) NOT NULL,
prod_name CHAR(6) NOT NULL,
GROUP_name CHAR(4),
price INT NOT NULL,
amount SMALLINT NOT NULL,
FOREIGN KEY(mem_id) REFERENCES MEMBER(mem_id) -- 외래키 --
)
INSERT INTO buy VALUES(NULL, 'BLK', '지갑', NULL, 30, 2);
INSERT INTO buy VALUES(NULL, 'BLK', '맥북프로', '디지털', 1000, 1);
INSERT INTO buy VALUES(NULL, 'APN', '아이폰', '디지털', 200, 1);
INSERT INTO buy VALUES(NULL, 'MMU', '아이폰', '디지털', 200, 5);
INSERT INTO buy VALUES(NULL, 'BLK', '청바지', '패션', 50, 3);
INSERT INTO buy VALUES(NULL, 'MMU', '에어팟', '디지털', 80, 10);
INSERT INTO buy VALUES(NULL, 'GRL', '혼공SQL', '서적', 15, 5);
INSERT INTO buy VALUES(NULL, 'APN', '혼공SQL', '서적', 15, 2);
INSERT INTO buy VALUES(NULL, 'APN', '청바지', '패션', 50, 1);
INSERT INTO buy VALUES(NULL, 'MMU', '지갑', NULL, 30, 1);
INSERT INTO buy VALUES(NULL, 'APN', '혼공SQL', '서적', 15, 1);
INSERT INTO buy VALUES(NULL, 'MMU', '지갑', NULL, 30, 4);
buy 테이블을 member 테이블에 연결
✏️입력
CREATE TABLE tbl부서(
부서id CHAR(5) PRIMARY KEY,
부서명 CHAR(10) NOT NULL
);
INSERT tbl부서 VALUES ('A01', '총무부');
INSERT tbl부서 VALUES ('B01', '영업부');
INSERT tbl부서 VALUES ('C01', 'IT부');
SELECT * FROM tbl부서;
CREATE TABLE tbl사원(
사원id CHAR(5) PRIMARY KEY,
사원명 CHAR(5) NOT NULL,
부서id CHAR(5) NOT NULL,
FOREIGN KEY (부서id) REFERENCES tbl부서(부서id) -- 외래키 추가 --
);
tbl사원 테이블을 생성하면서 외래키로 부서id 컬럼을 tbl부서id 컬럼을 참조하게 되면
tbl사원테이블에는 tbl부서 테이블의 부서id에 없는 데이터를 생성할 수 없게 됨.
✏️입력
INSERT tbl사원 VALUES ('z001', '아이유', 'D01');
💻실행
✏️입력
INSERT tbl사원 VALUES ('z001', '아이유', 'C01');
💻실행
정상적으로 데이터가 입력이 된다.
SELECT m.mem_id, m.mem_name
FROM member m;
WHERE ~
위와같은 형식으로 member 테이블의 별병을 m으로 지정해서 mamber테이블의 컬럼을 m.mem_id로 불러올수 있다.
테이블의 수가 많아지면서 컬럼명이 겹치는 경우가 많아지므로 명시성을 위해 테이블의 별칭을 설정해두는것이 좋다.
SELECT m.mem_name AS "이름", m.debut_date AS '데뷔날짜'
FROM member m
데이터를 가져올때 위와같이 AS를 이용하여 컬럼명을 변경하여 가져올수 있다.
이 때, 데이터가 문자형이면 쌍따옴표(" "), 숫자/날짜형이면 (' ')이용.
컬럼명에 별칭을 달아줄 때 : 칼럼명 AS "별칭이름" ,
테이블명에 별칭을 달아줄 때 : 테이블명 ^ 별칭
SELECT *
FROM member
WHERE mem_name = '블랙핑크';
mem_name이 char타입이라서 조건설정시 '홑따옴표' 사용
SELECT *
FROM member
WHERE mem_number = 4;
숫자타입의 조건은 따옴표 사용 X
멤버가 5명 이상인 걸그룹의 mem_id와 mem_name, addr를 가져오시오
SELECT mem_id, mem_name, addr
FROM member
WHERE mem_number >= 5;
멤버의 평균키가 167 미만의 컬그룹의 mem_id와 height를 가져오시오
SELECT mem_id, height
FROM member
WHERE height < 167
ORDER BY height DESC;
※ order by는 식에서 제일 마지막에 적용이 됨 --
SELECT mem_name, height, mem_number
FROM member
WHERE height >= 165 AND mem_number > 6;
member 테이블에서
height가 165 이상 이면서 mem_number이 6 초과인
mem_name, height, mem_number 컬럼의 데이터
SELECT mem_name, height, mem_number
FROM member
WHERE height >= 165 or mem_number > 6;
member 테이블에서
height가 165 이상이거나 mem_number이 6인
mem_name, height, mem_number 컬럼의 데이터
-- height : 163~165 --
SELECT mem_name, height, mem_number
FROM member
WHERE height >= 163 AND height <= 165
ORDER BY height;
member 테이블에서
height가 163 이상 이면서 height가 165이하 (163~165)인
mem_name, height, mem_number 컬럼의데이터를
height 컬럼기준으로 오름차순으로 보기
※다른방법? -> between A and B
SELECT mem_name, height, mem_number FROM member WHERE height BETWEEN 163 AND 165 -- 범위설정 : between A and B --
범위설정 :
between A and B
-- 주소가 경기, 전남, 경남 =--
SELECT mem_id, mem_name, addr
FROM member
WHERE addr IN('경기', '전남', '경남')
-- = (WHERE addr addr ='경기' OR addr = '전남' OR addr='경남') --
ORDER BY addr;
WHERE 조건에서 IN(A, B, C)
는 A or B or C
와 동일한 의미
SELECT mem_id, mem_name, addr
FROM member
WHERE addr != '경기'
ORDER BY addr;
addr이 경기가 아닌(=!:부정의 의미not)
mem_id, mem_name, addr 컬럼
SELECT mem_id, mem_name, addr
FROM member
WHERE addr NOT IN('경기', '전남', '경남') -- ? --
ORDER BY addr;
SELECT mem_id, mem_name, addr
FROM member
WHERE addr NOT IN('경기', '전남', '경남') -- ? --
ORDER BY addr;
SELECT *
FROM member
WHERE mem_name LIKE '우%';
'우'로 시작하는 이름 검색 --
SELECT *
FROM member
WHERE mem_name LIKE '%핑크';
'핑크'로 끝나는 이름 검색 --
SELECT *
FROM member
WHERE mem_name LIKE '__핑크';
_
(언더바) 하나는 한 글자를 뜻함,
핑크
앞의 앞글자가 2글자이면서 핑크로끝나는이름을 검색