DB 관련/mariaDB_사용법

SQL 명령어 정리

알 수 없는 사용자 2022. 4. 14. 19:20

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) : 똥글뱅이 두개에서 오른쪽 부분만 모아서 테이블 만드는거임