SQL은 데이터베이스 언어로, 관계형 데이터베이스에서 사용한다.
MySQL, Oracle, SQLite, PostgreSQL 등 다양한 데이터베이스에서 SQL 구문을 사용할 수 있다.
SQL이란 데이터베이스 용 프로그래밍 언어이다.
데이터베이스에 쿼리를 보내 원하는 데이터를 가져오거나 삽입할 수 있다.
SQL을 사용하기 위해서는 데이터가 구조가 고정되어 있어야 한다.
💡 데이터베이스 생성
CREATE DATABASE 데이터베이스_이름;
💡 데이터베이스 사용
데이터베이스를 이용해 테이블을 만들거나 수정하거나 삭제하는 등의 작업을 하려면, 먼저 데이터베이스를 사용하겠다는 명령을 전달해야 한다.
USE 데이터베이스_이름;
💡 테이블 생성
USE
를 이용해 데이터베이스를 선택했다면, 테이블을 만들 수 있다.
CREATE TABLE user (
id int PRIMARY KEY AUTO_INCREMENT,
name varchar(255),
email varchar(255)
);
SQL 콘솔에서 Enter
키를 이용해 여러 줄의 코드를 입력할 수 있다.
💡 테이블 정보 확인
DESCRIBE user;
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)
SELECT는 데이터셋에 포함될 특성을 특정한다.
SELECT 'hello world' // 일반 문자열
SELECT 9 // 숫자
SELECT 13 + 5 // 간단한 연산
테이블과 관련한 작업을 할 경우 반드시 입력해야 하고, FROM 뒤에는 결과를 도출해낼 데이터베이스 테이블을 명시한다.
SELECT 특성_1
FROM 테이블_이름
// 특정 특성을 테이블에서 사용
SELECT 특성_1, 특성_2
FROM 테이블_이름
// 몇 가지의 특성을 테이블에서 사용
SELECT *
FROM 테이블_이름
// 테이블의 모든 특성을 선택
// *은 와일드카드로 전부 선택할 때에 사용됨.
필터 역할을 하는 쿼리문이다.
SELECT 특성_1, 특성 2
FROM 테이블_이름
WHERE 특성_1 = "특정 값"
// 특정 값과 동일한 데이터 찾기
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 < > "특정 값"
// 특정 값을 제외한 값을 찾기
SELECT 특성_1, 특성_2
FROM 테이블_이름
WEHRE 특성_1 > "특정 값"
SELECT 특성_1, 특성_2
FROM 테이블_이름
WEHRE 특성_1 <= "특정 값"
// 특정 값보다 크거나 작은 데이터를 필터할 때에는 '<', '>',
// 비교하는 값을 포함하는 '이상', '이하' 값은 '<=', '>='을 사용한다.
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 LIKE "%특정 문자열%"
// 문자열에서 특정 값과 비슷한 값들을 필터할 때는 'LIKE'와 '\%' 혹은 '\*'를 사용한다.
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 IN ("특정값_1", "특정값_2")
// 리스트의 값들과 일치하는 데이터를 필터할 때는 'IN'을 사용한다.
SELECT *
FROM 테이블_이름
WHERE 특성_1 IS NULL
// 값이 없는 경우 'NULL'을 찾을 때는 'IS'를 사용한다.
SELECT *
FROM 테이블_이름
WHERE 특성_1 IS NOT NULL
// 값이 없는 경우를 제외할 때는 'NOT'을 추가해 사용한다.
돌려받는 데이터 결과를 어떤 기준으로 정렬하여 출력할지 결정한다.
SELECT *
FROM 테이블_이름
ORDER BY 특성_1
// 기본 정렬은 오름차순
SELECT *
FROM 테이블_이름
ORDER BY 특성_1 DESC
// 내림차순 정렬
결과로 출력할 데이터의 갯수를 정할 수 있다. 쿼리문에서 사용할때는 마지막에 추가한다.
SELECT *
FROM 테이블_이름
LIMIT 200
// 데이터 결과를 200개만 출력한다.
유니크한 값을 받고 싶을 때에는 SELECT DISTINCT
를 사용할 수 있다.
SELECT DISTINCT 특성_1
FROM 테이블_이름
// 특성_1을 기준으로 유니크한 값들만 선택한다.
SELECT
DISTINCT
특성_1
,특성_2
,특성_3
FROM 테이블_이름
// 특성_1, 특성_2, 특성_3의 유니크한 '조합' 값들을 선택한다.
INNER JOIN
이나 JOIN
으로 실행할 수 있다.
SELECT *
FROM 테이블_1
JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
// 둘 이상의 테이블을 서로 공통된 부분을 기준으로 연결한다.
OUTER JOIN
은 다양한 선택지가 있다.
SELECT *
FROM 테이블_1
LEFT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
// 'LEFT OUTER JOIN'으로 LEFT INCLUSIVE를 실행한다.
SELECT *
FROM 테이블_1
RIGHT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
// 'RIGHT OUTER JOIN'으로 RIGHT INCLUSIVE를 실행한다.
SELECT c.CustomerId, c.FirstName, count(c.City) as 'City Count'
FROM customers AS c
JOIN employees AS e ON c.SupportRepId = e.EmployeeId
WHERE c.Country = 'Brazil'
GROUP BY c.City
ORDER BY 3 DESC, c.CustomerId ASC
LIMIT 3