SQL 명령어 정리
sudo mysql -u root -p
db접속
1. 디비만들고
2. 테이블만들고 ( 어떤 데이터들로 구성할지에 대한것만, 데이터 삽입은 X )
3. 테이블에 데이터 넣는 것.
CREATE 쪽
CREATE DATABASE 디비명
USE 디비명
CREATE TABLE 테이블명
( 필드명 필드타입 .....);
create table tb1
-> ( id int,
-> name VARCHAR(20),
-> ph int
-> );
ALTER 쪽
ALTER DATABASE 디비명 CHARACTER SET= 문자집합명 ;
ALTER TABLE 테이블명 ADD 필드명 필드타입 ;
ALTER TABLE 테이블명 DROP 필드명 ;
ALTER TABLE 테이블명 MODIFY COLUMN 필드명 필드타입 ;ALTER TABLE member MODIFY COLUMN phone VARCHAR(30);
ALTER TABLE 테이블명 MODIFY COLUMN 피드명 필드타입 AFTER 필드명 ;ALTER TABLE member MODIFY COLUMN depart CHAR(10) AFTER name ;
DROP 쪽
DROP DATABASE 디비명 ;
DROP DATABASE IF EXITS 디비명 ;
DROP TABLE 테이블명 ;
DROP TABLE IF EXISTS 테이블명 ;
DROP TABLE CASCADE CONSTRAINTS ;삭제하려는 테이블과 외래키로 연결된 테이블이 존재하는 경우 함께 삭제
TRUNCATE TABLE 테이블명 ;테이블 드랍 후 재생성
INSERT INTO 테이블명(필드이름1, 필드이름2, ..) VALUES (데이터1, 데이터2, ...);
INSERT INTO member(id, name , phone) VALUES (4,'kai','01011111111') ;
서브쿼리를 이용해서도 사용가능
INSERT INTO 테이블명 (SELECT * FROM 테이블명);
INSERT INTO 테이블명(필드이름1, 필드이름2, ..) VALUES (데이터1, 데이터2, ...) ON DUPLICATE KEY UPDATE (필드이름) = (데이터);
INSERT INTO MEMBER VALUES (1,'tom','robot','01011111111') ON DUPLICATE KEY UPDATE phone = '01011111111';
혼자서 해보는 간단 예제
INSERT 쪽
INSERT INTO test2(id,name) VALUES (1,'liam');
show tables;
+------------------+
| Tables_in_test_1 |
+------------------+
| member |
| test2 |
+------------------+
select * from test2;
+------+------+
| id | name |
+------+------+
| 1 | liam |
+------+------+
INSERT INTO test2(id,name) VALUES(2,'tom');
select * from test2;
+------+------+
| id | name |
+------+------+
| 1 | liam |
| 2 | tom |
+------+------+
create table tb1
-> ( id int,
-> name VARCHAR(20),
-> ph int
-> );
INSERT tb1(id,name,ph) VALUES(1,'liam',2283);
show tables;
+------------------+
| Tables_in_test_1 |
+------------------+
| member |
| tb1 |
+------------------+
select * from tb1;
+------+------+------+
| id | name | ph |
+------+------+------+
| 1 | liam | 2283 |
+------+------+------+
INSERT INTO tb1(id,name,ph) VALUES(2,'tom',1234);
select * from tb1;
+------+------+------+
| id | name | ph |
+------+------+------+
| 1 | liam | 2283 |
| 2 | tom | 1234 |
+------+------+------+
UPDATE 쪽
UPDATE tb1
-> SET ph='7777'
-> WHERE name='tom';
select * FROM tb1;
+------+------+------+
| id | name | ph |
+------+------+------+
| 1 | liam | 2283 |
| 2 | tom | 7777 |
+------+------+------+
DELETE 쪽
DELETE FROM tb1 WHERE name='tom';
select * from tb1;
+------+------+------+
| id | name | ph |
+------+------+------+
| 1 | liam | 2283 |
+------+------+------+
INSERT INTO tb1(id,name,ph) VALUE(2,'tom',7777);
INSERT INTO tb1(id,name,ph) VALUE(3,'jin',4444);
select * from tb1;
+------+------+------+
| id | name | ph |
+------+------+------+
| 1 | liam | 2283 |
| 2 | tom | 7777 |
| 3 | jin | 4444 |
+------+------+------+
SELECT 쪽
SELECT name,ph FROM tb1 WHERE name='tom';
+------+------+
| name | ph |
+------+------+
| tom | 7777 |
+------+------+
SELECT * FROM tb1 ORDER BY id DESC;
+------+------+------+
| id | name | ph |
+------+------+------+
| 3 | jin | 4444 |
| 2 | tom | 7777 |
| 1 | liam | 2283 |
+------+------+------+
INSERT INTO tb1(id,name,ph) VAL
UES(4,'jin',4445);
Query OK, 1 row affected (0.016 sec)
INSERT INTO tb1(id,name,ph) VALUES(5,'jin',4446);
Query OK, 1 row affected (0.006 sec)
INSERT INTO tb1(id,name,ph) VALUES(6,'jin',4447);
Query OK, 1 row affected (0.016 sec)
SELECT * FROM tb1 ;
+------+------+------+
| id | name | ph |
+------+------+------+
| 1 | liam | 2283 |
| 2 | tom | 7777 |
| 3 | jin | 4444 |
| 4 | jin | 4445 |
| 5 | jin | 4446 |
| 6 | jin | 4447 |
+------+------+------+
SELECT * FROM tb1 GROUP BY name;
+------+------+------+
| id | name | ph |
+------+------+------+
| 3 | jin | 4444 |
| 1 | liam | 2283 |
| 2 | tom | 7777 |
+------+------+------+
SELECT + HAVING,WHERE쪽 사용법
SELECT * FROM tb1 HAVING name='jin';
+------+------+------+
| id | name | ph |
+------+------+------+
| 3 | jin | 4444 |
| 4 | jin | 4445 |
| 5 | jin | 4446 |
| 6 | jin | 4447 |
+------+------+------+
SELECT * FROM tb1 WHERE name='jin' ;
+------+------+------+
| id | name | ph |
+------+------+------+
| 3 | jin | 4444 |
| 4 | jin | 4445 |
| 5 | jin | 4446 |
| 6 | jin | 4447 |
+------+------+------+
요딴식으로 쓰면 같아 보일 순 있지만 , 차이가 있다. WHERE은 GRUOP전에, HAVING은 GROUP다음에 쓴다.
SELECT * FROM tb1 GROUP BY name HAVING name='jin';
+------+------+------+
| id | name | ph |
+------+------+------+
| 3 | jin | 4444 |
+------+------+------+
SELECT * FROM tb1 WHERE id>=5 GROUP BY name;
+------+------+------+
| id | name | ph |
+------+------+------+
| 5 | jin | 4446 |
+------+------+------+
이렇게 쓰면 다름
SELECT id AS t_id, name AS t_na
me FROM tb1;
+------+--------+
| t_id | t_name |
+------+--------+
| 1 | liam |
| 2 | tom |
| 3 | jin |
| 4 | jin |
| 5 | jin |
| 6 | jin |
+------+--------+
SELECT CONCAT(id, " : ",name) A
S memeber, ph FROM tb1;
+----------+------+
| memeber | ph |
+----------+------+
| 1 : liam | 2283 |
| 2 : tom | 7777 |
| 3 : jin | 4444 |
| 4 : jin | 4445 |
| 5 : jin | 4446 |
| 6 : jin | 4447 |
+----------+------+
제약조건
1) NOT NULL
- NOT NULL 제약 조건을 설정하면 해당 필드는 NULL 값을 저장할 수 없음
2) UNIQUE
- UNIQUE 제약 조건을 설정하면 해당 필드는 서로 다른 값을 가져야 함
3) PRIMARY KEY
- PRIMARY KEY 제약 조건을 설정하면 해당 필드는 NOT NULL과 UNIQUE 특징 모두 가짐
4) FOREIGN KEY
- FOREIGN KEY 제약 조건을 설정하면 기준이 되는 테이블의 내용을 참조해서 레코드가 입력됨
5) DEFAULT
- DEFAULT 제약 조건은 해당 필드의 기본값을 설정할 수 있게 함
테이블 생성예시
CREATE TABLE tutorial.tb_robot_pages (
robot_location VARCHAR(20) NOT NULL COMMENT '로봇 위치',
customer VARCHAR(50) NOT NULL COMMENT '고객구분',
page_id VARCHAR(50) NOT NULL COMMENT '페이지 아이디',
page_name VARCHAR(30) NULL COMMENT '페이지 이름',
page_type VARCHAR(20) DEFAULT 'NORMAL' NULL COMMENT '페이지 타입',
page_wait_ss INT DEFAULT 0 NULL COMMENT '페이지 대기 시간',
CONSTRAINT robot_pages_pk PRIMARY KEY (robot_location,customer,page_id))
ENGINE=InnoDBDEFAULT CHARSET=utf8COLLATE=utf8_general_ci;
이걸 보고
이걸 떠올릴 수 있는 정도면 될 듯 하다.
인덱스 생성예시
담에 할꺼임
그냥 평범한 인덱스 개념인데 생각보다 안 간단함
조인 예시
담에 할꺼임
간단히 말하면 A테이블이랑 B테이블이랑 합치는 거임 ( 방법이 3개 있다 )
사실 제약조건도 많고 잘못 합치면 인생 망한다. 물어보고 조인하자. 백업무조건 해놓고
집합으로 예시를 많이 든다.
교집합(inner join) : 똥글뱅이 두개에서 중간 부분만 모아서 테이블 만드는거임
좌집합?(Left join) : 똥글뱅이 두개에서 왼쪽 부분만 모아서 테이블 만드는거임
우집합?(right join) : 똥글뱅이 두개에서 오른쪽 부분만 모아서 테이블 만드는거임