본문 바로가기

Database/MySQL

MySQL

1. 함수 

1) comment 확인

use information_schema;
SELECT
    table_name, column_name, column_comment
FROM
    information_schema.columns
WHERE
    table_schema = 'db_name' AND table_name = 'table_name';

2) 테이블 구조 확인

  • DESC table_name;

3) 문자열 자르기

  • RIGHT(string,size)
  • LEFT(string,size)
  • SUBSTR(string, start, size)

4) 소수점 처리

  • ROUND(num,0~9..)
    • 지정한 숫자에서 반올림
  • FLOOR()
    • 그냥 떨굼
  • CEIL()
    • 무조건 올림

5) AVG

  • null값을 0으로 볼지 혹은 null로 볼지 생각을 해야 한다.
  • ex) null이 2개, record는 10개 라면,
  • if null==0
    • SELECT SUM(num) / COUNT(*) FROM table;
    • : xxx/10
  • if null==null (아무 값도 아님.)
    • SELECT AVG(num) FROM table;
    • : xxx/8
  • 즉, default는 null값을 숫자로 보지 않는다.*

6) GROUP BY

  • 그 그룹에 해당하는 값들을 모아 넣는 기법*
  • 무조건 집계 함수 (SUM(), AVG(), COUNT(), MAX(), MIN() 등)의 함수들과 같이 써야 한다.*
  • 집계 함수와 같이 사용을 하지 않는다면, group  별로 모이면서 값은 정확하게 뜨지 않는다.
  • 조금만 생각해보면 당연하다. id=1, price=10, id=1 price=20, group by id : id=1, price=? 그냥 처음 꺼 하나만 나온다. 이 price를 어떻게 모아서 처리할 건지를 명시해줘야 한다*
  • 당연히 row는 유니크하지 않아도 된다.
  • 하지만 column은 유니크해야만 한다.
    • 예를 들어, table1 : name, address , table2 : name, phone
    • 이 있는데 name으로 그룹핑을 하고 싶다면, GROUP t1.name, t1.address 이렇게 두 개를 적어줘서 유니크하게 만들어서 값을 리턴해줘야 grouping이 정확하게 된다.*

7) Join

  • 조인을 할 때 ON 이후에 내가 구하고자 하는 값들을 어떻게 가지고 올지 조건을 주고 그 조건에 맞게 값들이 어떻게 오겠다는 것을 이해하고 있어야 한다.*
  • inner join
    • 합집합.
  • left join
    • 실무에선 right join은 정말 아예 안 쓴다. 헷갈리므로
    • left Join으로 null 데이터도 같이 보고 싶을 때 사용
    • full outer join 도 실무에서 거의 사용하지 않는다.
  • Self Join
    • 자기 자신을 Join
    • inner Join or left Join 다 사용 가능.
    • 이때, 하나의 테이블을 두 번 써서 1,2로 표현.
    • 가만히 잘 생각해보면 생각보다 쉽다.
    • ex) employee table에 있는 managerId와 매칭 시키고 싶을 때, 테이블 이름을
    • FROM employee INNER JOIN employee AS manager ON employee.managerid = manager.id
    • 라고만 써줘도 알아보기가 아주 편안하다.
    • 즉, 조인을 할 대상(목적)에 따라 AS를 지정해주면 이해하기가 편하다.**

8) Datetime type

  • datetime type 끼리 연산 가능하다*
  • ‘-‘, ‘+’ 연산 사용 가능*
  • integer 값으로 리턴이 된다.*

9) subquery

  • From 절 서브 쿼리
    • 특정 값들에 대한 table을 FROM으로 가져와서 원하는 데이터를 뽑아내는 방법.
    • 특히 그룹과 잘 쓰인다.(최적화하기 좋다)
  • WHERE 절 서브 쿼리
    • 보통 MAX, MIN 같은 1개만 리턴하는 값은 = 을 사용.
    • 복수개를 리턴하면 IN을 사용.

10) window functions

11) INSERT IGNORE

  •  중복 키 에러가 발생했을 때 신규로 입력되는 레코드를 무시하는 단순한 방법이다.
    • 이때 내가 insert 하고자 하는 벨루가 중복이 되었을 때.. 신규로 입력되는 레코드를 무시한다.
    • ex) name=‘dex’ , insert into table (name) values (‘dex’) - 저장 안 됨.
  • AUTO_INCREMENT의 값이 변경되지 않는다.
  • http://jason-heo.github.io/mysql/2014/03/05/manage-dup-key2.html

12) ON DUPLICATE UPDATE

  • 장점은 중복 키 오류 발생 시 사용자가 원하는 값을 직접 설정할 수 있다.
    • 새롭게 저장되는 값을 업데이트시켜준다.

 

2. 특징

  • where 절에는 AS에 쓴 내용을 못쓴다.
  • but HAVING 절에는 AS 쓸수 있다.

'Database > MySQL' 카테고리의 다른 글

데이터베이스 반정규화(Denormalization)  (0) 2022.05.23
데이터베이스 정규화(Normalization)  (0) 2022.05.23
트랜잭션 특징  (0) 2022.05.07
PK, FK 특징  (0) 2022.05.07
mysql settings  (0) 2022.01.30