데이터 베이스는 필터링외에도 File I/O로 구현이 힘든 관리를 위한 여러 기능들을 가지고 있는 데이터에 특화된 서버이다.
데이터베이스를 생성한다.
CREATE DATABASE DB_NAME;
DB 사용하겠다는 명령
USE DB_NAME;
USE를 이용해 DB선택 후 테이블 만들면 된다.
테이블은 필드와 함께 만들어야한다.
CREATE TABLE user(
//조건 id : pk,숫자 name : 문자열(최대 255개까지) email 문자열(최대 255)
id int PRIMARY KEY AUTO_INCREMENT,
name varchar(255),
email varchar(255)
);
테이블 정보를 확인할 수 있습니다.
DESCRIBE user;
mysql> describe user;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
-- INSERT INTO 테이블명(컬럼1, 컬럼2, ...) VALUES(데이터1, 데이터2, ...)
INSERT INTO abo.dept (dept,dname,loc)
VALUES (50,'Team','SEOUL')
입력할 칼럼의 갯수와 값 갯수를 동일하게 입력해야한다.
INSERT INTO abo.dept VALUES (50,'Team','SEOUL')
입력할 테이블의 모든 칼럼을 입력할 경우 입력할 칼럼 선언은 생략해도 된다.
테이블에 칼럼이 추가되면 INSERT 쿼리 문도 수정해야 하므로 권장하지는 않는다.
되도록이면 귀찮아도 입력할 칼럼을 선언하여 쿼리문을 작성할 것을 권장한다.
INSERT INTO abo.dept (dept,dname,loc)
VALUES (50,'Team','SEOUL'),(80,'DESIGN TEAM','Busan')
,으로 구분해서 한번에 입력할수 있다.
INSERT INTO 복사 대상 테이블명(칼럼)
SELECT 칼럼명 FROM 원본테이블명
INSERT INTO 삽입될테이블명(COLUMN1, COLUMN2, COLUMN3)
SELECT COLUMN1, COLUMN2, COLUMN3 FROM 조회한테이블명
WHERE ... [조건도 추가 가능]
---update [테이블명] set [컬럼명]='변경내용' where [컬럼명]='[조건]';
update user set name="상" where grade="A";
->grade가 상인 데이터들은 칼럼name을 상으로 바꿔라
---update[테이블명] set=[변경내용];
update user set name ="중";
->모든 칼럼이 name을 "중"으로 바꾼다.
---alter table[테이블명]drop column[칼럼명];
alter table user drop column number;
---delete from[테이블명]where[칼럼명]=[조건];
delete from user where name="지나";
---delete from [테이블명] where[칼럼명]=[조건];
delete from user where name="지나";
4.테이블 모든 행 삭제하기
---delete from[테이블명];
delete from user;
조회
테이블에서 필드 목록 조회
--기본 형태
SELECT 필드 목록 FROM 테이블명
-- user 테이블에서 모든 필드 조회
SELECT * FROM user;
-- user 테이블에서 name, id 칼럼 조회
SELECT name,id FROM user;
조건(생략가능)
테이블에서 조건에 맞는 경우에 대해, 필드목록 조회
--기본 형태
SELECT 필드목록 FROM 테이블 WHERE 조건
--age가 20초과인 모든 칼럼 조회
SELECT * FROM user WHERE age>20;
--age가 20초과인 모든 id,name 칼럼 조회
SELECT id,name FROM user WHERE age>20;
--name이 '지애'인 모든 칼럼 조회
SELECT * FROM user WHERE name = "지애";
--name이 '지애'가 아닌 모든 칼럼 조회
SELECT * FROM user WHERE name != "지애";
SELECT * FROM user WHERE NOT(name = "지애");
--name이 '지애'이면서, age가 20이상 이거나, home이 서울만 모든 칼럼 조회
SELECT * FROM user WHERE name = '지애'AND (age>=20 OR home ='서울');
--baby가 NULL인 모든 칼럼 조회
--NULL은 비어있는 값을 의미함. ->IS 연산자로 연산함
SELECT * FROM user WHERE baby IS NULL;
테이블을 정렬해주는 구문이다.(선택)
--오른차순이 디폴트값 (나이)
SELECT * FROM Customers
ORDER BY age;
== SELECT * FROM Customers
ORDER BY age ASC;
--내림차순 (나이)
SELECT * FROM Customers
ORDER BY age DESC;
--열 번호로 해도 된다.(2번째 열)
SELECT * FROM Customers
ORDER BY 2 DESC;
SELECT *
FROM 테이블_이름
LIMIT 200
--기본 형태
SELECT DISTINCT 필드 FROM 테이블
--사용(기초)
SELECT DISTINCT Country FROM users;
--users 테이블에 name, Country 칼럼 합쳐서 중복인 행을 제거한다.
SELECT DISTINCT name,Country FROM users;
문자열의 패턴을 검색하는데에 사용한다.
--기본 형태
SELECT * FROM 테이블명 WHERE 칼럼 LIKE '패턴'
--name a로 시작하는 행 조회
SELECT * FROM users
WHERE name LIKE 'a%';
--name a로 끝나는 행 조회
SELECT * FROM users
WHERE name LIKE '%a';
--name 'bb'가 있는 행 조회
SELECT * FROM users
WHERE name LIKE '%bb%';
--name 'll'로 끝나고,앞에 2글자만 있는 행 조회
SELECT * FROM users
WHERE name LIKE '__ll%';
패턴에는 %,를 쓰고, %는 모든 문자, 는 한글자 라는 의미다.
WHERE절 뒤에 붙여서 칼럼이 특정값을 가지고 있는지 확인하는 용도로 쓰인다.
--칼럼 값이 값1 또는 값2에 해당하는 값만 출력
SELECT 칼럼명
FROM 테이블명
WHERE 칼럼명 IN (value1, value2, ...);
--칼럼 값이 값1 또는 값2에 해당하지 않는 값만 출력
SELECT 칼럼명
FROM 테이블명
WHERE 칼럼명 NOT IN (value1, value2, ...);
WHERE에서 범위를 정하고 싶을때 사용할수 있다.
-- 칼럼값이 값1~값2까지만 출력
SELECT 칼럼명(s)
FROM 테이블명
WHERE 칼럼명 BETWEEN value1 AND value2;
출처 :stackoverflow
둘 이상 테이블을 서로 공통된 부분을 기준으로 연결한다.
--기본 형태
SELECT <열 목록>
FROM <첫 번째 테이블>
INNER JOIN <두 번째 테이블>
ON <조인될 조건>
[WHERE 검색 조건]
INNER JOIN을 JOIN으로 써도 됨.
외부 조인은 한쪽에만 데이터가 있어도 출력된다.
--기본 형태
SELECT <열 목록>
FROM <첫 번째 테이블(LEFT 테이블)>
<LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
ON <조인될 조건>
[WHERE 검색 조건]
OUTER JOIN 종류