테이블 변경 및 조작을 공부하기 전, 실습용 테이블을 먼저 만들어보자!
<도서 테이블>
| 번호 | 제목 | 가격 |
|---|---|---|
| 정수 | 가변길이 문자열 최대길이 = 30 | 정수 |
use 도서관;
create table 도서(번호 int, 제목 varchar(30), 가격 int);
select * from 도서;

이미 테이블을 생성한 후 구조를 어떻게 수정할 수 있을까?
alter table 도서 add 구입일자 datetime default "2023-10-23";

alter table 도서 drop 구입일자;

alter table 도서 add primary key (번호);
alter table 도서 drop primary key;
alter table 도서 add constraint fk_name forign key (번호) reference 참조테이블(참조번호);
alter table 도서 drop foreign key fk_name;
alter table 도서 add constraint chk_price check(가격>=0);
alter table 도서 drop constraint chk_price;
/* ALTER TABLE 테이블_이름
MODIFY 열_이름 새_열_정의; */
alter table 도서 modify 구입일자 date;
/* ALTER TABLE 테이블_이름
CHANGE 이전_열_이름 새_열_이름 새_열_정의; */
alter table 도서
change 번호 도서코드 int not null;
새 열 정의는 생략할 수 없다.
alter table 도서 alter 구입일자 set default "2023-09-22";
alter table 도서 alter 구입일자 drop default;
ALTER TABLE 도서 RENAME TO book ;
ALTER TABLE 도서 RENAME COLUMN 번호 TO 도서코드 ;
DROP TABLE [ IF EXISTS ] 테이블이름 [ RESTRICT | CASCADE ]
DROP { DATABASE | SCHEMA } [ IF EXISTS ] 데이터베이스이름 ;
/* NSERT INTO 테이블이름 [ (열_이름_리스트) ]
VALUES ( 열_값_리스트 ) ; */
INSERT INTO 도서(번호,제목,가격) VALUES
( 101, ‘데이터구조’, 15000 ), ( 102, ‘자바’, 20000 ),
( 103, ‘C프로그래밍’, 20000 ), ( 104, ‘확률통계’, 13000 ) ;
DELETE FROM 도서;
TRUNCATE [TABLE] 도서 ;
– 삭제된 행 개수가 필요치 않다면 TRUCATE가 속도가 더 빠르다.
SELECT 열_리스트 FROM 테이블_리스트 ;
SELECT 제목, 가격-500 [AS] 할인가 FROM 도서;
SELECT [ALL | DISTINCT] 제목 FROM 도서;SELECT * FROM 도서 ORDER BY 가격 ASC ;
SELECT * FROM 도서 ORDER BY 가격 DESC, 번호 ASC ;검색 건수 지정
SELECT * FROM 도서 ORDER BY 가격 LIMIT 3 ;
SELECT * FROM 도서 ORDER BY 가격 LIMIT 3, 2 ;
/* SELECT 열리스트 FROM 테이블리스트 WHERE 조건; */
SELECT * FROM 도서 WHERE 번호 = 100 ;
SELECT 제목, 가격 FROM 도서 WHERE 제목 = ‘확률통계’ ;
SELECT * FROM 도서 WHERE 가격 > 13000;
SELECT * FROM 도서 WHERE 가격 > 13000 ORDER BY 제목;– +, -, *, /, % %: 나머지 연산자
AND, OR, NOT, &&, ||, !
– =, <, <=, >, >=, <>, !=
/* BETWEEN~AND */
SELECT * FROM 도서
WHERE 가격 BETWEEN 15000 AND 20000;
/* IS NULL, IS NOT NULL */
SELECT * FROM 도서
WHERE 가격 IS NOT NULL;
/* IN, NOT IN */
SELECT * FROM 도서
WHERE 가격 IN (13000, 15000);
% : 와 매칭(0개 이상)
_ : 정확히 하나의 문자와 매칭
SELECT * FROM 도서 WHERE 제목 LIKE ‘데이터%’ ;
SELECT * FROM 도서 WHERE 제목 LIKE ‘%프로그래밍’ ;
SELECT * FROM 도서 WHERE 제목 LIKE ‘%프로%’ ;
SELECT * FROM 도서 WHERE 제목 LIKE ‘자_’ ;
SELECT * FROM 도서 WHERE 제목 LIKE ‘__통%’ ;
POW(X,Y), POWER(X,Y): XY
RAND(), RAND(X): 난수(random number)
0 ≤ 𝑣 < 1 (실수) 리턴
𝐹𝐿𝑂𝑂𝑅(𝑖 + 𝑅𝐴𝑁𝐷() ∗ (𝑗 − 𝑖))
SELECT * FROM 도서 ORDER BY RAND();
SELECT 제목, 구입일자, CAST(구입일자 AS DATE) FROM 도서;
길이는 암호화 함수에 따라 달리 설정
REATE TABLE 회원(
아이디 VARCHAR(30) NOT NULL,
비밀번호 BINARY(16) NOT NULL,
이름 VARCHAR(10) NOT NULL,
PRIMARY KEY(아이디));
INSERT INTO 회원 VALUES
(‘abcd’, UNHEX(MD5(‘sku1234’)), ‘홍길동’);
SELECT 아이디, 이름 FROM 회원
WHERE 아이디 = ‘abcd’ AND
비밀번호 = UNHEX(MD5(‘xyz’));
기본 키는 하나밖에 존재하지 못하지만, 외래키는 여러개 존재가 가능하다.
따라서 외래키를 삭제할 때 이름을 추가해야한다.
DEFAULT NULL,// 기본값을 null로 설장한다는 의미
select 제목, 가격,가격-1000 from stdt106.도서;

as를 사용하여 칼럼의 이름 별칭 붙여서 사용 가능
select 제목, 가격 as 원가, 가격-1000 as 할인가 from stdt106.도서;
정렬
select * from 도서 order by 가격 desc, 제목;
가격을 기준으로 내린 차순으로 정렬하되 가격이 동일할 땐 제목을 기준으로 오름차순 정렬을 하고 싶을 때 위와같이 입력
검색결과 개수
select *from 도서 limit 3;
이를 응용
select *from 도서 order by 가격 desc limit 3;
페이징
4번째 행부터 시작해서 2번째 행을 뽑아내는 예시
select *from 도서 order by 가격 desc limit 3,2 ;
= 쓰면 완전히 똑같을 때만 검색이 됨
select * from 도서 where 제목 = '데이터';
따라서 부분 매칭을 하려고 할 땐 like 사용
select * from 도서 where 제목 like '데이터%';
제목의 문자열이 데이터로 사적허눈 모든 데이터를 검색하라.
프로라는 문자열이 어디있는지 모를 때 문자열 내에 이터라는 문자열이 있으면 검색
select * from 도서 where 제목 like '%데이터%';
앞에 두 문자가 있고 다섯 번째가 통이다, 그 다음 문자가 있을수도 없을수도 있다.
select * from 도서 where 제목 like '____조%';
형식
DROP DATABASE;
예를들어 "설정" 테이블에서 값이 "500m"인 행을 삭제하려면
DELETE FROM 설정
WHERE search_radius = '500m';
형식
SELECT 출력하고자하는열 FROM 테이블명 WHERE 조건;
모든 열을 검색하고자 하는 경우 출력하고자 하는 열에 *을 사용한다.
SELECT * FROM 테이블명 WHERE 조건;
예시
SELECT 번호,제목 FROM 도서;