0%

mySQL 1

1. 기본 명령

확인

  • SHOW DATABASE : 현재 데이터 베이스 확인

생성

  • CREATE DATABASE
  • CREATE TABLE

데이터 베이스 선택 확인

  • SELECT DATABASE()

2. 테이블 생성

  • 좌측이 컬럼의 이름, 우측이 컬럼에 들어갈 데이터 타입 > ;(세미콜론) 단위로 끊어서 실행하니. 꼭 주의해서 붙여줄것!
1
2
3
4
5
6
7
CREATE TABLE user1(
user_id INT,
name VARCHAR(20),
email VARCHAR(30),
age INT(3),
rdate DATE
);

데이터 타입에 추가로 조건을 줄수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE user2(
user_id INT PRIMARY KEY AUTO_INCREMENT,
-- PRIMARY KEY : unique + not null 조건을 가짐
-- AUTO_INCREMENT : 1씩 증가한다
name VARCHAR(10) NOT NULL,
email VARCHAR(30) UNIQUE NOT NULL,

-- 데이터가 없으면 '30 들어간다'
age INT(3) DEFAULT 30,

-- 현재시간이 자동으로 들어가는 데이터 타입
rdate TIMESTAMP
);

3. 수정 Alter

데이터 베이스 수정

1
2
SHOW variables like "character_set_database";
ALTER DATABASE test CHARACTER SET = utf8;

테이블 추가, 수정, 삭제

1
2
3
4
5
6
7
8
ALTER TABLE user2 ADD tmp TEXT;
-- user2 테이블에 텍스트 타입을 가지고 있는 tmp라는 컬럼 추가
ALTER TABLE user2 MODIFY COLUMN tmp INT(3);
-- tmp컬럼을 인트타입으로 변경
ALTER TABLE user2 DROP tmp;
-- tmp 컬럼을 삭제
ALTER TABLE user1 CHARACTER SET = utf8;
-- user1테이블을 utf8로 변경

Drop

데이터 베이스 삭제

1
2
3
CREATE DATABASE tmp;
DROP DATABASE tmp;
DROP DATABASE test3;

테이블 삭제

1
2
DROP TABLE user3;
SELECT DATABASE();

Insert : 데이터 추가

1
2
3
4
5
6
7
8
9
INSERT INTO user1(user_id, name, email, age, rdate)
-- user1 테이블에 각 컬럼에다
VALUE(2,"howard2",'yoohowon@gmail.com',31,now()),
(3,"a",'owon@gmail.com',15,now()),
(4,"peter",'yoohowon@gmail.com',12,now()),
(5,"po",'yohowon@gmail.com',2,now()),
(6,"hord",'yoohowon@gmail.com',56,now());
-- 이런 값들을 준다,
-- rdate는 TIMESTAMP 타입, now()는 현재 시간을 입력

4. SELECT : 데이터 조회

컬럼명, 불러올때 as로 이름 지정 가능

1
2
3
4
5
6
7
8
-- 컬럼이름, 불러올때 as로 이름 지정 가능
SELECT user_id as "아이디", name as "이름", age as "나이"
-- 테이블 이름
FROM user1;

-- 전체 선택
SELECT *
FROM user1;

5. DISTINCT 중복제거

1
2
SELECT DISTINCT(name)
FROM user1;

6. WHERE 조건검색

1
2
3
4
5
6
7
8
9
-- 30세 이상인 사용자를 검색해서 이름의 종류(UNIQUE 한) 개수를 출력
SELECT COUNT(DISTINCT(name))
FROM user1
WHERE age >= 30;

SELECT *
FROM user1
WHERE age >= 20 AND age < 40;
-- AND 가능

범위데이터 가져오기 : BETWEEN A AND B

1
2
3
SELECT *
FROM user1
WHERE age BETWEEN 20 AND 39;

ORDER BY ,정렬

1
2
3
SELECT *
FROM user1
ORDER BY name, age DESC;

내림차순, 오름차순 정렬 > ASC: asending > DESC : descending

1
2
3
4
5
-- 나이가 20세 에서 40세 사이에 있는 사용자를 이름 순으로 정렬하고, 중복데이터를 제거 해서 출력
SELECT DISTINCT(name)
FROM user1
WHERE age BETWEEN 20 AND 40
ORDER BY name DESC;

concat

1
2
SELECT name, age, concat(name,"(",age,")") as name_age
FROM user1;

like : where 절에서 특정 문자열이 들어간 데이터 조회

1
2
3
4
5
6
7
SELECT * 
FROM user1
-- %%앞 뒤에 어떤 문자나 숫자가 온다는 뜻
WHERE email like "%@gmail.%";
-- WHERE email not like "%@gmail.%"
-- # 처음부터 시작
-- WHERE email like "p%"

in : 여러 개의 조건을 조회할때 사용

1
2
3
4
SELECT *
FROM user1
-- WHERE name ="howard" or name="po" or name="hord" 보다 아래가 나음
WHERE name in ('howard','po','hord');

in의 활용 : 서브 쿼리

1
2
3
4
5
6
7
SELECT *
FROM user1
WHERE name in (
SELECT DISTINCT(name)
from user1
WHERE age > 30
);

LIMIT : 출력 갯수 제한

1
2
3
4
5
6
7
8
SELECT *
FROM user1
LIMIT 3;

SELECT *
FROM user1
-- 3번째 부터 밑으로 5개
LIMIT 3,5;

6. UPDATE : 데이터를 수정

1
2
3
4
UPDATE user1
SET age=30, rdate="2019-12-12"
WHERE age BETWEEN 30 AND 39;
-- age 컬럼의 값이 30~39인 경우 age=30으로 하고, rdate="2019-12-12로 바꾼다

7. DELETE

1
2
3
4
5
DELETE FROM user1
WHERE rdate < "2020-02-12";
-- rdate가 "2020-02-12"보다 낮은경우 지워라
SELECT *
FROM user1;

HAVING

GROUP BY가 실행되고 난 결과에 조건을 추가, 즉 GROUP BY 밑에(WHERE는 GROUP BY전에(위에)필터링)