MySQL/MySQL icia 25일차

MySQL 연산자와 예제 등

swkn 2023. 3. 28. 15:24

https://swkn.tistory.com/80

 

MySQL에 대해서 ( 확장자 , 코드 저장 , 접근권한 설정 , 데이터베이스 정렬 )

1. MySQL의 확장자 MySQL의 확장자는 .sql 이다. 2. MySQL 코드 저장하기 3. MySQL 계정을 생성하고 DataBase 생성하고 접근권한 설정 user_dbclass 계정을 만들고 비밀번호 1234로 지정 데이터베이스 db.dbclass 생

swkn.tistory.com

데이터는 이곳과 같다.

 

     

    검색했을때 검색어를 포함하는 내용이 검색되려면 문법이 있다

    -- like 연산자
    select * from emp where ename like 'm%'; -- m이 맨 앞자리
    select * from emp where ename like '%m'; -- m이 맨 뒷자리
    select * from emp where ename like '%m%'; -- m 포함 모두
    select * from emp where ename like '_m%'; -- m이 2번째자리
    select * from emp where ename like '__m%'; -- m이 3번째자리

     

    테이블 구조 확인

    -- 테이블 구조 확인
    desc emp;
    str_to_date

     

    sum(), avg(), max(), min(), count(), round()

     

    sum()

    sum()함수는 컬럼 내 레코드 값의 총 합을 내주는 함수이다.

    select sum(컬럼명) from (테이블명);

    select sum(컬럼명1),sum(컬럼명2) .... from (테이블명); 으로 사용된다.

    select sum(sal) from emp;

    select sum(sal) as '급여총합' from emp;

    -- salesman 급여 총합
    select sum(sal) from emp where job = 'salesman';


    avg()

    avg()는 컬럼 내 레코드 값의 평균을 구해준다.

    select avg(컬럼명) from (테이블명);

    select avg(컬럼명1),avg(컬럼명2) ... from (테이블명); 으로 사용된다.

    avg함수는 컬럼의 자료형이 수치형일 때만 사용할 수 있다.

    -- 전체 사원의 평균 급여 조회
    select avg(sal) from emp;

    -- 평균 급여를 소수 들째자리까지 표현
    select round(avg(sal),2) from emp;


    max()

    테이블에 존재하는 데이터의 최대값을 가져올 때 사용한다

    max() 함수는 숫자만이 아닌 문자형 데이터에도 사용할 수 있다.

    -- 가장 높은 급여 값 조회
    select max(sal) from emp;


    min()

    테이블에 존재하는 데이터의 최소값을 가져올 때 사용한다

    min() 함수는 숫자만이 아닌 문자형 데이터에도 사용할 수 있다.

    -- 가장 낮은 급여 값 조회
    select min(sal) from emp;


    count()

    count() 함수는 컬럼 내 레코드의 개수를 세주는 함수이다.

    select count(컬럼명1) from 테이블명;

    select count(컬럼명1),count(컬럼명2).... from 테이블명;

    으로 사용할 수 있다.

    count()함수는 레코의 자료형에 상관없이 사용할 수 있는데 ,

    특별한 경우를 제외한다면 집계함수와 일반 컬럼을 함께 사용할 경우 오류가 발생할 수도 있다.

    -- 전체 사원 수 조회 count = 줄 수를 세준다
    select count(*) from emp;

    전체 사원 수 조회

    --  부서번호가 20인 사원수 조회
    select count(*) from emp where deptno = 20;

    부서번호가 20인 사원 수 조회


    round()

    -- round()
    select round(12.345, 2) from dual; -- 12.35
    select round(12.345, 1) from dual; -- 12.3
    select round(12.345, 0) from dual; -- 12

     

    각 반올림된것을 확인 할 수 있다

    round ( 값 , 자리수 ) 라는것을 확인 할 수 있다.

    round(숫자 , 반올림할 자리수) - 숫자를 반올림할 자릿수 +1 자릿수에서 반올림된다.

     


    truncate()

    truncate()- 숫자를 버릴 자릿수 아래로 버린다

    * 반드시 버릴 자릿수를 명시해 줘야 한다 *


     

    그룹화 ( Group by )

    예를 들어 유형별로 갯수를 가져오고 싶은데 단순히 count() 함수로 데이터를 조회하면 전체 갯수만 가져오니

    이렇게 유형별로 갯수를 알고싶을때 컬럼에 데이터를 그룹화 할 수 있는 Group by를 사용한다

     

    Group by를 사용할땐 두가지가 중요하다

    1. 특정 컬럼을 그룹화하는 Group by

    2. 특정 컬럼을 그룹화한 결과에 조건을 거는 Having

     

    where랑 having이랑 혼동되기 쉬운데 where은 그룹화 하기 전이고 having은 그룹화 후의 조건이다

    사용법

    컬럼 그룹화

    select 컬럼 from 테이블 group by 그룹화할 컬럼;

    조건 처리 후에 컬럼 그룹화

    select 컬럼 from 테이블 where 조건식 group by 그룹화할 컬럼;

    컬럼 그룹화 후에 조건 처리

    select 컬럼 from 테이블 group by 그룹화할 컬럼 having 조건식;

    조건 처리 후에 컬럼 그룹화 후에 조건 처리

    select 컬럼 from 테이블 where 조건식 group by 그룹화할 컬럼 having 조건식;

    Order by 가 존재하는 경우

    select 컬럼 from 테이블 [where 조건식]
    group by 그룹화할 컬럼 [having 조건식] order by 컬럼 [, 컬럼2, 컬럼3 ... ];

     

    예제)

    -- 그룹화(동일한 데이터끼리 묶는것 grouping)
    -- 직급으로 그룹핑
    -- 조회결과는 그룹핑한 컬럼이름 또는 집계함수 등을 사용함 *= !
    select * from emp group by job;

    *을 사용할 수 없다.

     

    -- 직급별 평균 급여
    select job, avg(sal) from emp group by job;

    직급별 평균 급여

    -- 부서별 평균 급여
    select deptno, avg(sal) from emp group by deptno;

    부서별 평균 급여

     

     


    예제)

    -- 직급별 사원수 조회
    select job , count(*) from emp group by job;

    직급별로 사원수 조회

     

    -- 직급별 평균 급여 , 사원 수 조회
    select job , avg(sal),count(*) from emp group by job ;

    직급별 평균 급여, 사원수 조회

    -- 위의 결과에서 직급값을 오름차순으로 정렬
    select job , avg(sal),count(*) from emp group by job order by job asc;

    위의 결과에서 직급값을 오름차순으로 정렬

    -- 위의 결과에서 평균 급여를 소수점 첫째자리까지 조회
    select job , round(avg(sal),2),count(*) from emp group by job order by job asc;

    위의 결과에서 평균 급여를 소수점 첫째자리까지 조회

    -- 위의 결과에서 job은 직급으로 급여 평균값은 평균급여로, 사원수 조회값은 사원수로 표현하여 조회
    select job as '직급' , round(avg(sal),1) as '평균급여',count(*) as '사원수' from emp group by job order by job asc;

     

    직급 , 평균급여 , 사원수로 변경