DB SQL

Hoju·2022년 8월 26일
0

Troble Shting

목록 보기
3/13

1. SELECT

가장 기본인 데이터를 불러오는 쿼리문

  • 테이블명에 해당하는 테이블의 칼럼명에 데이터를 부르는 구문
  • 모든 칼럼을 불러오고 싶을 때 컬럼명에 *을 넣어주세요
SELECT 컬럼명 FROM 테이블명
  • WHERE 구문을 추가해 WHERE절 뒤에 오는 조건이 참인 데이터만 불러온다
  • [컬럼명 = 값]으로 적을 경우 컬럼명의 값이 지정한 값인 데이터행의 데이터만 불러온다
SELECT 컬럼명 FROM 테이블명 WHERE 조건
  • ORDER BY 뒤에 오는 컬럼명을 기준으로 대하여 불러오는 데이터를 정렬합니다
  • ASC는 오름차순, DESC는 내림차순입니다 기본값은 오름차순으로 정렬이 됩니다.
SELECT 컬럼명 FROM 테이블명 WHERE 조건 ORDER BY 컬럼명 ASC or DESC
  • LIMIT 구문을 추가하여 데이터행이 많을 때에는 LIMIT절의 개수만큼 데이터를 불러옴
SELECT 컬럼명 FROM 테이블명 WHERE 조건 ORDER BY 컬럼명 ASC or DESC LIMIT개수

2. INSERT

데이터를 삽입하는 쿼리문

  • 테이블명에 있는 컬럼명에 순서에 맞게 값을 입력, 칼럼명과 값의 개수는 동일해야함
  • 만약 문자열을 값으로 입력하는 경우 작은 따옴표로 문자열을 감싸줘야 합니다. ( ‘ )
INSERT INTO 테이블명 (칼럼명1, 칼럼명2) VALUES (1,2)

ex) INSERT INTO Employees (Employee_id, First_name) VALUES (100, ‘Aiden’);

  • 테이블명 다음에 칼럼명을 입력하지 않은 경우입니다. 이 경우는 테이블에 모든 칼럼에 값을 입력한다는 의미로 모든 칼럼의 수에 맞게 값을 줘야 합니다.
INSERT INTO 테이블명 VALUES (1,2)

3. UPDATE

데이터를 수정하는 쿼리문

UPDATE 테이블명 SET 칼럼명 = 변경할 값
  • 테이블에 있는 모든 데이터의 칼럼 값을 변경합니다
UPDATE 테이블명 SET 칼럼명 = 변경할 값 WHERE 조건
  • WHERE절 조건에 해당하는 데이터만 변경합니다.
    ex) WHERE 컬럼명 = 값
  • 변경할 칼럼이 여러개일 때 콤마 ( , ) 를 사용하여 여러개 값을 변경할 수 있다.
UPDATE 테이블명 SET 칼럼명1 = 변경할 값1, 칼럼명2 = 변경할 값2 WHERE 조건

4. DELETE

테이블에 데이터를 삭제하는 쿼리문

  • 테이블에 있는 모든 데이터를 삭제합니다.
DELETE FROM 테이블명
  • WHERE절에 조건에 합하는 데이터만 삭제합니다.
DELETE FROM 테이블명 WHERE 조건

5. ORDER BY

오름차순과 내림차순으로 정렬할 수 있다.
- 오름차순 : 작은 값 부터 큰 값으로의 순서 ( ASC )
- 내림차순 : 큰 값 부터 작은 값으로의 순서 ( DESC )

설명할 때 쓰일 테이블입니다 테이블 이름은 member입니다.

numnamegradesalaryclassbirthday
1wqsdC450011996-04-13
2dsgB670011998-05-20
3wqasA1050012000-01-01
4SdaA1300031999-11-22
  • ORDER BY절 뒤에 정렬할 기준이되는 칼럼명을 적고 뒤에 DESC 또는 ASC로 내림차순이나 오름차순을 정의해주면 됩니다.
SELECT 칼럼명 FROM 테이블명 ORDER BY 정렬 기준 칼럼명 DESC(내림차순) // ASC(오름차순)
  • 이렇게 하면 Sda - wqas - dsg - wqsd 순으로 위 상태와 정반대로 출력이 됩니다.
SELECT * FROM member ORDER BY num DESC
  • 아래 두개의 구문은 값은 값을 출력합니다 생일 순서가 빠른 사람부터 출력이 돼서
    wqsd - dsg - Sda - wqas가 됩니다.
SELECT * FROM member ORDER BY birthday
SELECT * FROM member ORDER BY birthday ASC

💡 ASC(오름차순)은 기본 설정입니다.

  • 이렇게 하면 A가 값이 적기 때문에 A 값을 가진 칼럼들이 먼저 출력되고 그 다음에
    B 그 다음 C 값을 가진 컬럼들이 출력됩니다.
SELECT * FROM member ORDER BY grade ASC

💡 문자 또한 비교하여 사용 가능합니다

  • 이 경우 앞(왼쪽)에 정의된 칼럼 기준 정렬 후 다음에 나열된 칼럼 기준으로 정렬한다
  • 먼저 클래스 기준으로 오름차순 하여 정렬함. 이때 똑같이 1인 칼럼이 3개나 있는데 이 친구들은grade 값을 기준으로 오름차순 정렬한다는 내용이다.
  • 3반 Sda이 제일 위에 위치하고 1반 친구들은 A B C 순서대로 밑에 나열되게 된다.
SELECT * FROM member ORDER BY class DESC, grade ASC

💡 ORDER BY절에 칼럼을 여러개 지정할 수 있다 ( , ) 작은 따옴표로 구분


6. BETWEEN

SQL범위 검색하는 문

테이블 이름은 member입니다.

numnamegradesalary
1wqsdC4500
2dsgB6700
3wqasA10500
4SdaA13000

샐러리가 5000 이상 10000 이하인 사람의 이름을 검색해 보겠습니다.

  • 이런 식으로 검색을 할 수 있지만 훨씬 간편한 BETWEEN 이 있습니다.
  • 사용법은 WHERE 칼럼명 BETWEEN A AND B 입니다.
  • 칼럼에 A와 B사이에 해당하는 값을 나타냅니다.
SELECT name FROM member WHERE salary ≥ 5000 AND SALARY ≤ 10000

💡 BETWEEN은 앞에 오는 값이 무조건 작은 값 이어야 합니다.

  • 샐러리가 5000 이상 10000 이하인 값인 ‘dsg’ 출력이 됩니다.
SELECT name FROM member WHERE salary BETWEEN 5000 AND 10000
  • 이렇게 하면 샐러리가 5000이상 10000 이하가 아닌 값들 즉 dsg를 제외하고 모두 출력된다.
SELECT * FROM member WHERE salary NOT BETWEEN 5000 AND 10000

💡 NOT BETWEEN을 통해 해당 범위에 해당하지 않는 값을 가져올 수도 있습니다.


7. IN

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

설명에 쓰일 테이블입니다. 테이블 이름은 member입니다.

numnamegradesalaryclassbirthday
3wqasA1050012000-01-01
4SdaA1300031999-11-22
2dsgB670011998-05-20
1wqsdC450011996-04-13
  • 칼럼의 값이 값1 또는 값2에 해당하는 값만 출력
SELECT 칼럼명 FROM 테이블명 WHERE 칼럼명 IN (1,2)
  • 칼럼의 값이 값1, 값2 어디에도 해당하지 않는 것만 출력
SELECT 칼럼명 FROM 테이블명 WHERE 칼럼명 NOT IN (1,2)
  • WHERE절 뒤에 칼럼명 중에 IN 괄호 안에 있는 값을 가진 친구들만 출력하겠다는 내용입니다.
  • name 칼럼에 wqas 또는 dsg 값을 가진 데이터만 출력 되어서 wqas와 dsg Row(행)만 출력이 됩니다.
SELECT * FROM member WHERE name IN ('wqas', ‘dsg’)

8. MAX, MIN, COUNT

MAX : EXPR중 최댓값을 반환하는 함수
MIN : EXPR중 최솟값을 반환하는 함수
COUNT : EXPR의 행의 개수를 반환한다. [ NULL값은 개수에 포함안됨.]

NAMECLASSSALARY
철수A100
짱구B200
초롱이B400
유리A300
맹구A350

MAX,MIN

  • SALARY 칼럼의 가장큰 값과 가장 작은 값을 출력해 달라는 쿼리이다.
  • MAX는 400, MIN은 100이 출력될것이다.
SELECT MAX(SALARY)
  	, MIN(SALARY) 
  FROM 테이블

MAX와 MIN은 그룹함수로서 GROUP BY절을 이용해 그룹별로 최댓값/최솟값을 출력할 수 있다.

  • CLASS 별로 SALARY의 최댓값과 최솟값을 구하는 쿼리
SELECT CLASS 
        , MAX(SALARY)
        , MIN(SALARY)
    FROM 테이블
GROUP BY CLASS
CLASSMAX(SALARY)MIN(SALARY)
A350100
B400200

결과 - A 클래스의 최대값 350 최소값 100 / B클래스의 최대값 400 최소값 200가 출력됨


COUNT

  • SALARY 칼럼에 행의 개수를 출력
SELECT COUNT(SALARY)
    FROM 테이블
COUNT(SALARY)
5

결과 - 5개 ROW가 있고 NULL값은 없기 때문에 5가 출력이 되었다.

COUNT함수는 그룹 함수로써 GROUP BY 절을 이용해 그룹별로 ROW의 개수를 출력할 수 있다.

  • CLASS별로 SALARY칼럼에 행의 개수를 출력
SELECT CLASS
           , COUNT(SALARY)
     FROM 테이블
CLASSCOUNT
A3
B2

결과 - CLASS가 A인 SALARY칼럼 ROW는 3개 / CLASS가 B인 SALARY칼럼 2개 출력되었다.

  • CLASS행의 A의 개수 출력
SELECT COUNT(CLASS) FROM 테이블 WHERE CLASS = A

9. SUM, AVG

SUM : EXPR 총합을 구하는 함수
AVG : EXPR 평균을 구하는 함수

NAMECLASSSALARY
철수A100
초롱이B200
짱구B300
유리A400
맹구A400

SUM

  • SALARY 칼럼의 총합을 구해달라는 내용
SELECT SUM(SALARY) FROM 테이블
SUM(SALARY)
1400

결과 - 하나의 행만 출력되며 모든 행의 SALARY값을 더해 출력이 됩니다.

AVG

  • SALARY칼럼의 평균을 구해달라는 내용
SELECT AVG(SALARY) FROM 테이블
AVG(SALARY)
280

결과 - 하나의 행만 출력되며 SALARY칼럼 모든 행의 평균을 출력합니다.


10. GROUP BY

그룹화 하여 데이터 조회

  • 컬럼 그룹화
SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼;
  • 조건 처리 후에 컬럼 그룹화
SELECT 컬럼 FROM 테이블 WHERE 조건식 GROUP BY 그룹화할 컬럼;
  • 컬럼 그룹화 후에 조건 처리
SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼 HAVING 조건식;
  • ORDER BY 가 존재하는 경우
GROUP BY 그룹화할 컬럼 [HAVING조건식] ORDER BY 컬럼1 [,컬럼 2, 컬럼3…….];

테이블 이름 here_collection

IDXTYPENAME
11탄지로
21네즈코
32젠이츠
42이노스케
53카나오
63시노부
74기유

type 그룹화 하여 name 개수 조회

SELECT type, COUNT(name) AS cnt FROM hero_collection GROUP BY type;

결과

TYPECNT
12
22
32
41

type 그룹화 하여 name 개수를 가져온 후 그 중에 개수가 2개 이상인 데이터 조회

SELECT type, COUNT(name) AS cnt FROM here_colloection GROUP BY type HAVING cnt ≥ 2;

결과

TYPECNT
12
22
32

type 1 초과인 type 그룹화 하여 name 개수를 가져온 후 그 중에 개수가 2개 이상인 데이터를 type 내림차순 정렬로 조회

SELECT type, COUNT(name) AS cnt FROM hero_collection
WHERE type > 1 GROUP BY type HAVING cnt ≥ 2 ORDER BY type DESC;

결과

TYPECNT
32
22

11. DISTINCT

중복 제거 함수

중복적인 값이 정돈 되어있어도 값이 많은경우 어떠한 값들이 있는지 세기 힘들것이다 하지만 이 함수를 이용해 몇 만건이 정렬디어 있더라도 중복값들이 하나씩만 출력된다.

SELECT DISTINC 컬럼FROM 테이블

테이블 이름 Skills

WSI
아침
저녁
저녁
아침
저녁
아침
아침
  • 이를 정리 해주고자 DISTINCT 함수를 사용하면 다음과 같은 값이 나온다.
SELECT DISTINCT** WSI **FROM** Skills;
WSI
아침
저녁
  • 굉장히 깔끔하게 정리된 모습을 볼 수 있다.

12. 조인

  • 두개 이상의 테이블을 서로 묶어서 하나의 결과를 만들어 낸다.

INNER JOIN

  • 두 테이블을 연결할 때 가장 많이 사용하는 내부 조인
  • 일반적으로 조인이라고 하면 내부 조인을 가리킨다.
SELECT 컬럼 FROM 1번 테이블 INNER JOIN 2번 테이블 ON 조인 될 조건 WHERE 조건문;

OUTHER JOIN

  • 내부 조인은 두 테이블에 데이터가 있어야만 결과가 나오지만 외부 조인은 한쪽만 데이터가 있어도 결과가 나옵니다.
  • LEFT OUTER JOIN : 왼쪽 테이블의 모든 값이 출력되는 조인
  • RIGHT OUTER JOIN : 오른쪽 테이블의 모든 값이 출력되는 조인
  • FULL OUTER JOIN : 왼쪽 또는 오른쪽 테이블의 모든 값이 출력되는 조인
SELECT 칼럼 FROM 1번 테이블(LEFT테이블) <LEFT | RIGHT | FULL> OUTER JOIN 2번 테이블(RIGHT테이블) ON 조인될 조건 WHERE 검색 조건

CROSS JOIN

  • 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능입니다. 상호 조인 결과의 전체 행 개수는 두 테이블의 각 행의 개수를 곱한 수만큼 됩니다.
  • 카티션 곱(CARTESIAN PRODUCT) 라고도 합니다.
SELECT * FROM 1번 테이블 CROSS JOIN 2번 테이블

SELF JOIN

  • 자체 조인은 자기 자신과 조인하므로 1개의 테이블을 사용합니다. 별도의 문법이 있는 것은 아니고 1개로 조인하면 자체 조인됩니다.
SELECT 칼럼 FROM 테이블 별칭A INNER JOIN 테이블 별칭B ON 조인될 조건 WHERE 검색 조건
profile
Devops가 되고 싶은 청소년

0개의 댓글