반응형

반응형

MySQL SELECT한 레코드에서 또 SELECT하기 하위 질의

 

하위 질의란?

하위 질의는 서브 쿼리라고도 합니다. 하위 질의는 질의를 실행해서 추출한 데이터를 이용해서 다시 질의를 하는 것을 말합니다.

하위 질의를 이용해서 sales의 최대값 레코드를 표시해 보겠습니다.

 

select * from table_sales;

 

select * from table_sales

where sales in(select max(sales) from table_sales);

 

GROUP BY 함수

MAX(), AVG(), SUM()등 집계를 하는 함수를 GROUP BY 함수라고 하는데 그룹화했을 때 값을 처리하는 함수입니다. GROUP BY 가 없는 경우에는 테이블 전체를 하나의 그룹으로 처리합니다.

 

평균 이상의 레코드 추출하기.

평균나이 이상인 레코드를 추출해 보겠습니다.

 

select * from table_member;

 

select * from table_member

where age >= (select avg(age) from table_member);

 

IN 사용하기 컬럼을 반환하는 하위 질의

이번에는 하위 질의가 컬럼을 반환하는 예입니다.

1단계의 하위 질의에서 조건에 일치하는 컬럼을 반환하고 2단계에서 그 컬럼을 포함한 값을 추출합니다.

명령문은 다음과 같습니다.

select 컬럼명 from 테이블명

where 컬럼명 in (select를 이용한 하위 질의로 추출한 컬럼);

 

table_sales 에서 sales 100이상인 number를 추출하고 table_member에서 해당하는 레코드를 표시해 보겠습니다.

select * from table_member

where number

in (select number from table_sales where sales >= 100)

 

 

EXISTS를 사용해서 존재하는 레코드를 대상으로 검색하기.

exists는 특정 컬럼이 아닌 대상이 되는 레코드가 존재하고 있다는 의미입니다.

Table_salesnumbertable_membernumber가 양쪽에 모두 존재하는 레코드를 추출하고 table_member에서 해당하는 레코드를 표시해 보겠습니다..

 

select * from table_member as A

where exists (select * from table_sales as B

where A.number = B.number);

 

 

select * from table_sales as B where A.number = B.number 은 특정 컬럼이 아니라 조건에 맞는 레코드를 추출하는 것입니다. 그리고 exists를 사용해서 table_member에 존재하는 해당 레코드만 표시합니다.

 

NOT EXISTS 사용하기.

not exists 는 하위 질의로 추출되지 않은 레코드를 대상으로 합니다.

위의 exists 명령문에 not exists를 적용해서 비교해 보겠습니다.

 

select * from table_member as A

where not exists (select * from table_sales as B

where A.number = B.number);

 

 

 

하위 질의를 이용한 순위 정하기.

하위 질의를 사용하면 다양한 방법으로 순위를 매길 수 있습니다.

하위 질의를 사용해서 순위를 정하는 방법을 알아 보겠습니다.

 

1.     table_sales 컬럼 구조만 복사해서 table_rating 를 생성합니다.

2.     table_rating 에 연속 번호 기능을 설정한 rating를 추가합니다.

3.     하위 질의를 사용해서 table_sales의 컬럼 sales를 내림차순으로 정렬하고, number, sales, month table_rating에 추가합니다.

 

create table table_rating like table_sales;

alter table table_rating

add rating int auto_increment primary key;

insert into table_rating (number, sales, month)

(select number, sales, month from table_sales

order by sales desc);

select * from table_rating;

 

 

 

반응형

'MySQL' 카테고리의 다른 글

MySQL 저장 프로시저 활용하기.  (0) 2017.12.18
MySQL 뷰 이용하기.  (0) 2017.12.13
MySQL 셀프 조인.  (2) 2017.12.08
MySQL 외부 JOIN 사용하기.  (0) 2017.12.07
MySQL 내부 JOIN ON 사용하기.  (0) 2017.12.06
Posted by 컴스터
,
반응형

MySQL 계산하거나 문자열을 결합해서 표시하기, MySQL 함수 사용하기

 

MySQL 컬럼 값을 계산해서 표시하기

컬럼이 a, b가 있다면 a, b끼리 사칙 연산을 해서 출력할 수 있습니다.

더하기 : select a + b from 테이블명;

빼기: select a – b from 테이블명;

곱하기: select a * b from 테이블명;

나누기: select a / b from 테이블명;

 

table_sales 테이블에 있는 sales 컬럼에 1000배로 하고 별명을 매출로 출력해 보겠습니다.

 

select sales * 1000 as 매출 from table_sales;

 

 

MySQL 함수사용하기.

 

평균 구하기.

avg( ) 는 평균을 구하는 함수 입니다.

table_sales sales 평균을 구해 보겠습니다.

 

select avg(sales) from table_sales;

 

합계 구하기.

sum( ) 은 합계를 구하는 함수 입니다.

table_sales sales 합계를 구해 보겠습니다.

 

select sum(sales) from table_sales;

 

데이터 개수 표시하기.

count() 함수는 데이터 개수를 계산하는 함수 입니다.

table_sales sales 개수를 구해 보겠습니다.

 

select count(sales) from table_sales;

 

각종 정보를 표시하는 함수.

원주율을 계산하는 함수 pi( );

 

select pi( );

 

MySQL 서버 버전 표시하기: version();

 

select version( );

 

MySQL 현재 사용중인 데이터베이스 표시하기: database( );

 

select database( );

 

MySQL 현재 사용자 표시하기: user( );

 

select user( );

 

 

MySQL 문자열 결합하기: concat( );

 

테이블 table_01 number + name + ‘을 결합해서 표시해 보겠습니다.

 

select concat(number, name, ‘’) from table_01;

 

MySQL 오른쪽 문자부터 추출하기 : right( );

 

select right(number, 1) from table_01;

 

MySQL 왼쪽 문자부터 추출하기: left( );

 

select left(name, 1) from table_01;

 

MySQL 위치 지정하여 추출하기: substring( );

 

name 컬럼 2번째 문자부터 2개의 문자만 표시하기.

 

select substring(name, 2, 2) from table_01;

 

MySQL 반복해서 표시하기: repeat( );

‘-‘ 문자를 Age 컬럼에 있는 숫자만큼 반복해서 표시합니다.

 

select repeat(‘-‘, age) from table_01;

 

MySQL 문자열을 거꾸로 표시하기: reverse( );

 

select reverse(name) from table_01;

 

MySQL 날짜와 시간을 표시하는 함수: now( );

 

now( ) 함수는 현재 날짜와 시간을 반환하는 함수입니다. 데이터를 처리한 날짜와 시간을 자동으로 입력하려면, 컬럼 이름 대신 now( ) 함수를 입력합니다.

오늘 날짜와 시간을 출력해 보겠습니다.

 

select now();

 

반응형
Posted by 컴스터
,


반응형