Sql

»

SQL

SQL(Structured Query Language)이란?

구조화된 Query 언어 즉 데이터베이스용 프로그래밍 언어

데이터베이스에 query를 보내 원하는 데이터만을 뽑아올 수 있다

Query === ‘질의문’ 예로는 검색창에 적는 검색어도 Query의 일종 즉 저장되어 있는 정보를 필터하기 위한 질문

기본 쿼리문

  • 기본 쿼리문
    • Select
    • Where
    • And, Or, Not
    • Order By
    • Insert Into
    • Null Values
    • Update
    • Delete
    • Count
    • Like
    • Wildcards
    • Aliases
    • Joins
      • Inner Join
      • Left Join
      • Right Join
    • Group By
  • 데이터베이스 관련 용어
    • SQL Create DB
    • SQL Drop DB
    • SQL Create Table
    • SQL Drop Table
    • SQL Alter Table
    • SQL Not Null
    • SQL Unique
    • SQL Primary Key
    • SQL Foreign Key
    • SQL Default
    • SQL Auto Increment
    • SQL Dates

데이터베이스 관련 명령어

데이터베이스 생성

CREATE TABLE 데이터베이스_이름;

데이터베이스 사용

데이터베이스를 이용해 테이블을 만들거나 수정하거나 삭제하는 등의 작업을 하려면, 먼저 데이터베이스를 사용하겠다는 명령을 전달해야 합니다.

USE 데이터베이스_이름;

테이블 생성

필드 이름 / 필드 타입 / 그 외의 속성

// user 테이블 생성
CREATE TABLE user (
  id int PRIMARY KEY AUTO_INCREMENT,
  name varchar(255),
  email varchar(255)
);

테이블 정보 확인

// user 테이블의 정보 확인
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)

SQL 명령어 간략하게 살펴보기

SELECT

SELECT는 데이터셋에 포함될 특성을 특정합니다

SELECT 'hi' // 일반 문자열
SELECT 2 // 숫자
SELECT 15 + 33 // 연산

FROM

테이블과 관련한 작업을 할 경우 반드시 입력해야 합니다. FROM 뒤에는 결과를 도출해낼 데이터베이스 테이블을 명시합니다.

// 특정 특성을 테이블에서 사용
SELECT 특성_1
FROM 테이블_이름

// 몇가지의 특성을 테이블에서 사용
SELECT 특성_1, 특성_2
FROM 테이블_이름

// 테이블의 모든 특성을 선택
SELECT *
FROM 테이블_이름

WHERE

필터 역할을 하는 쿼리문입니다 .WHERE은 선택적으로 사용할 수 있습니다

// 특정 값과 동일한 데이터 찾기
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 = "특정 값"

// 특정 값을 제외한 값을 찾기
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 <> "특정 값"

// 특정 값보다 크거나 작은 데이터를 필터할 때에는 '<', '>', 비교하는 값을 포함하는 '이상', '이하' 값은 '<=', '>='  사용합니다.
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 > "특정 값"

SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 <= "특정 값"

// 문자열에서 특정 값과 비슷한 값들을 필터할 때에는 'LIKE' '\%' 혹은 '\*'  사용합니다.
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 LIKE "%특정 문자열%"

// 리스트의 값들과 일치하는 데이터를 필터할 때에는 'IN'  사용합니다.
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 IN ("특정값_1", "특정값_2")

// 값이 없는 경우 'NULL'  찾을 때에는 'IS'  같이 사용합니다.
SELECT *
FROM 테이블_이름
WHERE 특성_1 IS NULL

// 값이 없는 경우를 제외할 때에는 'NOT'  추가해 이용합니다.
SELECT *
FROM 테이블_이름
WHERE 특성_1 IS NOT NULL

ORDER BY

돌려받는 데이터 결과를 어떤 기준으로 정렬하여 출력할지 결정합니다. ORDER BY는 선택적으로 사용할 수 있습니다.

// 기본 정렬은 오름차순입니다.
SELECT *
FROM 테이블_이름
ORDER BY 특성_1

// 내림차순으로도 정렬할  있습니다.
SELECT *
FROM 테이블_이름
ORDER BY 특성_1 DESC

LIMIT

결과로 출력할 데이터의 갯수를 정할 수 있습니다. LIMIT은 선택적으로 사용할 수 있습니다. 그리고 쿼리문에서 사용할 때에는 가장 마지막에 추가합니다.

// 데이터 결과를 200개만 출력합니다.
SELECT *
FROM 테이블_이름
LIMIT 200

DISTINCT

유니크한 값을 받고 싶을 때에는 SELECT DISTINCT 를 사용할 수 있습니다.

// 특성_1 기준으로 유니크한 값들만 선택합니다.
SELECT DISTINCT 특성_1
FROM 테이블_이름

// 특성_1, 특성_2, 특성_3 유니크한 '조합' 값들을 선택합니다.
SELECT
  DISTINCT
    특성_1
    ,특성_2
    ,특성_3
FROM 테이블_이름

INNER JOIN

INNER JOIN 이나 JOIN 으로 실행할 수 있습니다.

//  이상의 테이블을 서로 공통된 부분을 기준으로 연결합니다.
SELECT *
FROM 테이블_1
JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B

OUTER JOIN

Outer JOIN 은 다양한 선택지가 있습니다.

// 'LEFT OUTER JOIN'으로 LEFT INCLUSIVE 실행합니다.
SELECT *
FROM 테이블_1
LEFT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B

// 'RIGHT OUTER JOIN'으로 RIGHT INCLUSIVE 실행합니다.
SELECT *
FROM 테이블_1
RIGHT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B

여러 쿼리문을 한 번에 써보기

다음은 Brazil에서 온 고객을 도시별로 묶은 뒤에, 각 도시 수에 따라 내름차순 정렬합니다. 그리고 CustomerId에 따라 오름차순으로 정렬한 3개의 결과만 요청하는 예시입니다.

// 여러 쿼리문을  번에 써보기
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

참조

SQL Tutorial