개발

쿼리문 정리 본문

DBMS/Mysql

쿼리문 정리

Study 2021. 3. 5. 22:09

MySQL 접속 후 

데이터베이스 목록 조회 
   show  databases;

원하는 데이터베이스 선택 
   use db명; 

선택한 DB에 어떤 테이블이 있는지 조회 
   show  tables;

특정 문자가 들어가는 행 검색
    select ename, sal from emp 
    where ename like '%특정문자%';

특정 문자로 시작하는 행 검색
    select ename, sal from emp 
    where ename like '특정문자%';
   
특정 문자로 끝나는 행 검색
    where ename like '%특정문자';

[ ANSI SQL에서 지원하는 집계함수를 배워본다 ]
총갯수(count)
  * as 다음에 가짜컬럼명 ( alias )
  select count(*) as 총사원수 from emp;

평균(avg)
   select avg(sal) as 급여평균 from emp;

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

최대값(max)
   select max(sal) as 최대급여 from emp;

최소값(min)
   select min(sal) as 최소급여 from emp;

최소급여를 받는 사원의 이름, 급여를 출력 
   * subquery(쿼리문 안에 또 다른 쿼리문을 포함할 수 있는 쿼리문장)
     소괄호로 감싸놓아야 한다..왜? 소괄호를 먼저 수행하기 때문..
   select ename, sal from emp
   where sal=(select min(sal) from emp);

-------------------------------------------------------------


[ 서브쿼리 문제 ]
● ALLEN과 부서가 같은 사원들의 이름, 입사일, 부서번호 출력
select ename, hiredate, deptno from emp
where deptno=(select deptno from emp where ename='ALLEN');

● 이름에 T자가 들어가는 사원들의 급여의 합
select sum(sal) from emp 
where ename like '%T%'

●최대급여를 받는 사원의 입사일
  select hiredate from emp where sal=(select max(sal) from emp);

● 최대급여를 받는 사원보다 입사일이 늦은 사원의 이름, 입사일 출력하되 (입사일을 기준으로 오름차순으로 정렬)
  select ename, hiredate from emp
  where hiredate > ( 
select hiredate from emp where sal=(select max(sal) from emp)
   ) order by hiredate asc;
 
[ 모든 DBMS에는 ANSI 함수이외에도 자체적인 함수가 지원되는데, 어쩔수 없이 DBMS제품마다 암기 및 숙지해야함 ]
 DB마다 많이 비슷...

●사원의 이름과 이름의 글자수를 출력하시오 (length 함수)
   select ename as 사원명, length(ename) as 이름길이 from emp;

●사원의 원래이름과 소문자로 변환한 이름을 출력하시오 (LCASE or LOWER)
  select ename,  lower(ename) from emp;

●사원의 이름 중 KING이라는 사원의 이름을 'KINGDOM' 으로 출력하시오 (replace 함수 )
   형식: replace('조사대상', '어떤문자열?'  ,  '어떻게바꿀건데?')
   select replace(ename, 'KING', 'KINGDOM') from emp;

● 사원명 앞에 name: 붙게 이름을 출력하시오  (concat 함수  )
   형식 : concat('문자열1', '문자열2', '문자열3'...)
   select concat('I am ', ename) from emp;

'DBMS > Mysql' 카테고리의 다른 글

Mysql 설치  (2) 2021.03.02