[DB] SQL

이동엽·2023년 1월 30일
0

개요

  • SQL 이란?
    -> 구조화된 Query 언어, 데이터베이스용 프로그래밍 언어
  • 데이터베이스에 query를 보내 원하는 데이터만을 뽑아올 수 있다.(주로 관계형 DB에 사용)
  • SQL 사용할려면 데이터 구조가 고정되어 있어야한다.
  • Query란?
    -> 저장되어있는 정보를 필터 하기 위한 질문

왜 필요한가?

  • In-memory : 끄면 데이터가 없어진다.
  • File I/O : 원하는 데이터만 가져올 수 없고, 항상 모든 데이터를 가져온 뒤 서버에서 필터링 필요하다.

데이터 베이스는 필터링외에도 File I/O로 구현이 힘든 관리를 위한 여러 기능들을 가지고 있는 데이터에 특화된 서버이다.

기본 쿼리문

1.DB 관련 명령어

1.1 DB 생성

데이터베이스를 생성한다.

CREATE DATABASE DB_NAME;

1.2 DB 사용

DB 사용하겠다는 명령

USE DB_NAME;

1.3 테이블 생성

USE를 이용해 DB선택 후 테이블 만들면 된다.
테이블은 필드와 함께 만들어야한다.

CREATE TABLE user(
//조건 id : pk,숫자 name : 문자열(최대 255개까지) email 문자열(최대 255)
	id int PRIMARY KEY AUTO_INCREMENT,
    name varchar(255),
    email varchar(255)
);

1.4 테이블 정보 확인

테이블 정보를 확인할 수 있습니다.

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)

2. SQL 명령어(Insert)

  • SQL에서 데이터를 입력하기 위해선 INSERT문을 사용한다.
  • CRUD의 Create 부분에 해당하는 역할을 수행합니다.

기본적인 INSERT

-- 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

INSERT INTO abo.dept (dept,dname,loc)
VALUES (50,'Team','SEOUL'),(80,'DESIGN TEAM','Busan')

,으로 구분해서 한번에 입력할수 있다.

SELECT 결과 INSERT

  • 테이블의 데이터를 우리가 복사하고자 하는 대상 테이블로 복사하는 구문이다.
  • INSERT문과 차이점은 이 구문은 다른 테이블의 데이터들을 일괄로 한번에 삽입하는 경우 활용할수 있다.
  1. SELECT한 전체 칼럼을 INSERT 하는 방법
INSERT INTO 복사 대상 테이블명(칼럼)
SELECT 칼럼명 FROM 원본테이블명
  1. SELECT한 결과의 일부 칼럼을 INSERT 하는 방법
    INSERT문에 나열한 칼럼과 SELECT한 칼럼이 일치해야한다.
INSERT INTO 삽입될테이블명(COLUMN1, COLUMN2, COLUMN3)
SELECT COLUMN1, COLUMN2, COLUMN3 FROM 조회한테이블명
WHERE ... [조건도 추가 가능]

3. UPDATE문

  • 관계형 데이터베이스의 테이블에서 이미 저장된 값을 수정한다.
  • CRUD의 UPDATE 부분에 해당된다.
  1. 일부 칼럼 데이터 수정하기
---update [테이블명] set [컬럼명]='변경내용' where [컬럼명]='[조건]';
update user set name="상" where grade="A";

->grade가 상인 데이터들은 칼럼name을 상으로 바꿔라

  1. 모든 칼럼 데이터 수정하기
---update[테이블명] set=[변경내용];
update user set name ="중";

->모든 칼럼이 name을 "중"으로 바꾼다.

4. DELETE문

  • 테이블에서 저장된 값을 삭제한다.
  • CRUD의 DELETE 부분에 해당하는 역할을 수행합니다.
  1. 테이블 칼럼 삭제하기
---alter table[테이블명]drop column[칼럼명];
alter table user drop column number;
  1. 테이블 일부 행 삭제 하기
---delete from[테이블명]where[칼럼명]=[조건];
delete from user where name="지나";
  1. 테이블의 일부 행 삭제하기
---delete from [테이블명] where[칼럼명]=[조건];
delete from user where name="지나";

4.테이블 모든 행 삭제하기

---delete from[테이블명];
delete from user;

5. Select문

  • DB 테이블의 데이터를 읽어 출력한다.(조회)
  • 가장 많이 씀

SELECT

조회
테이블에서 필드 목록 조회

--기본 형태
SELECT 필드 목록 FROM 테이블명
-- user 테이블에서 모든 필드 조회
SELECT * FROM user;
-- user 테이블에서 name, id 칼럼 조회
SELECT name,id FROM user;

WHERE

조건(생략가능)
테이블에서 조건에 맞는 경우에 대해, 필드목록 조회

--기본 형태
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;

ORDER BY

테이블을 정렬해주는 구문이다.(선택)

  • 가장 마지막에 실행되는 명령어다.
--오른차순이 디폴트값 (나이)
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;

LIMIT

  • 결과로 출력할 데이터 갯수를 정할수 있다.
  • 선택
  • 쿼리문 가장 마지막에 추가한다.
SELECT *
FROM 테이블_이름
LIMIT 200

DISTINCT

  • 중복제거 키워드
  • 칼럼 조회할때, 중복 값을 제거하고 조회할때 사용한다.
--기본 형태
SELECT DISTINCT 필드 FROM 테이블

--사용(기초)
SELECT DISTINCT Country FROM users;
  1. 키워드 뒤에 2개 이상 칼럼 사용할때
    DISTINCT 뒤에 오는 모든 칼럼에 대해 하나의 행으로 인식하여, 그 행의 중복을 제거한다.
--users 테이블에 name, Country 칼럼 합쳐서 중복인 행을 제거한다.
SELECT DISTINCT name,Country FROM users;

LIKE

문자열의 패턴을 검색하는데에 사용한다.

--기본 형태
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%';

패턴에는 %,를 쓰고, %는 모든 문자, 는 한글자 라는 의미다.

IN

WHERE절 뒤에 붙여서 칼럼이 특정값을 가지고 있는지 확인하는 용도로 쓰인다.

--칼럼 값이 값1 또는 값2에 해당하는 값만 출력
SELECT 칼럼명
FROM 테이블명
WHERE 칼럼명 IN (value1, value2, ...);
--칼럼 값이 값1 또는 값2에 해당하지 않는 값만 출력
SELECT 칼럼명
FROM 테이블명
WHERE 칼럼명 NOT IN (value1, value2, ...);

BETWEEN

WHERE에서 범위를 정하고 싶을때 사용할수 있다.

-- 칼럼값이 값1~값2까지만 출력
SELECT 칼럼명(s)
FROM 테이블명
WHERE 칼럼명 BETWEEN value1 AND value2;

JOIN


출처 :stackoverflow

1. INNER JOIN(JOIN)

둘 이상 테이블을 서로 공통된 부분을 기준으로 연결한다.

  • 내부조인
--기본 형태
SELECT <열 목록>
 FROM <첫 번째 테이블>
          INNER JOIN <두 번째 테이블>
          ON <조인될 조건>
 [WHERE 검색 조건]

INNER JOIN을 JOIN으로 써도 됨.

OUTER JOIN

외부 조인은 한쪽에만 데이터가 있어도 출력된다.

--기본 형태
SELECT <열 목록>
 FROM <첫 번째 테이블(LEFT 테이블)>
          <LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT 테이블)>
           ON <조인될 조건>
 [WHERE 검색 조건]

OUTER JOIN 종류

  • LEFT OUTER JOIN: 왼쪽 테이블의 모든 값이 출력되는 조인
  • RIGHT OUTER JOIN: 오른쪽 테이블의 모든 값이 출력되는 조인
  • FULL OUTER JOIN: 왼쪽 또는 오른쪽 테이블의 모든 값이 출력되는 조인

참고

profile
씨앗

0개의 댓글