Server/MariaDB

[MariaBD] select

클리엘 2021. 5. 31. 12:55
728x90

테이블의 데이터를 조회합니다.

select *
from tb_user tu ;
userSeq userNumber userName userAge userAddress userJoinDate userUse
1 AAA-000001 홍길동 24 서울시 강남구 2021-04-13 09:49:58 1
2 BBB-000002 홍길순 30 부산 광역시 2021-02-23 15:13:21 1

특정 데이터만 조회하려면 where 절을 사용합니다.

select *
from tb_user tu
where tu.userName = '홍길동';

검색 대상이 문자열인 경우 like를 사용하면 문자열 내용 자체를 검색할 수 있습니다.

select *
from tb_user tu
where tu.userName like '홍길%';

% 문자는 모든 문자를 대체하므로 userName이 '홍길'로 시작하는 모든 데이터를 검색하게 됩니다. 반면 _ 문자를 사용할 수 있는데 이런 경우 단 한 글자만 대체합니다.

select *
from tb_user tu
where tu.userName like '_길동';

조건절에는 필요에 따라 조건연산자나 관계 연산자를 활용할 수 있습니다.

select *
from tb_user tu
where tu.userName = '홍길동'
and userAge >= 20;

검색 범위를 제한하려면 between을 사용하며

select *
from tb_user tu
where tu.userAge between 24 and 30;

찾을 값이 여러개라면 in을 사용할 수 있습니다.

select *
from tb_user tu
where tu.userName = '홍길동'
and userAge in (24, 30);

서브 쿼리를 통해 조건을 사용하려면 다음과 같이 쿼리를 작성합니다.

select *
from tb_user tu
where tu.userAge = (select tu2.userAge from tb_user tu2 where tu2.userName = '홍길동');

단 서브쿼리는 단 하나의 결과를 반환해야 하지만 만약 여러 개의 결과를 반환하는 경우라면 any나 all을 사용할 수 있습니다.

 

any는 반환되는 서브쿼리의 결과 중 하나라도 만족하는 결과를 가져오게 되며

select *
from tb_user tu
where tu.userAge >= any (select tu2.userAge from tb_user tu2);

all은 반환되는 서비쿼리의 결과를 모두 만족하는 결과를 가져오게 됩니다.

select *
from tb_user tu
where tu.userAge >= all (select tu2.userAge from tb_user tu2);

데이터의 정렬 순서는 order by를 사용합니다.

select *
from tb_user tu
order by tu.userAge asc ;

order by에서 asc는 오름차순을 의미합니다. asc는 생략할 수 있으며 기본적으로 적용되는 옵션입니다. 반면 내림차순은 desc옵션을 넣어줘야 합니다.

select *
from tb_user tu
order by tu.userAge desc ;

중복되는 데이터를 생략하고 하나만 표시하려면 distinct를 사용합니다.

select distinct userUse
from tb_user tu
order by tu.userAge desc ;

결과를 가져오는 전체 데이터중 몇 개의 row만 필요하다면 limit를 사용할 수 있습니다.

select *
from tb_user tu
limit 1;

이때 ,문자로 숫자 하나를 더 지정해 주면 '시작, 개수'처럼 사용됩니다.

select *
from tb_user tu
limit 0, 2;

select를 테이블을 생성하는 create table과 같이 사용하면 새로운 테이블에 데이터를 복사할 수 있습니다.

create table tb_user2
select *
from tb_user tu;

다만 제약조건등 테이블 고유의 특성까지는 복사되지 않습니다.


칼럼 별로 그룹 지어 표현하려면 group by 절을 사용합니다.

select userName, sum(userAge)
from tb_user tu
group by userName ;

예제에서 사용된 sum()함수는 합계를 표시하는 함수로 집계와 관련해서는 다음과 같은 함수를 사용할 수 있습니다.

agv() 평균
min() 최소값
max() 최대값
count() 갯수
count(distinct) 중복을 제거한 갯수
stdev() 표준편차

count()함수는 *을 사용해 전체 컬럼을 지정할 수 있고 count(userName)처럼 컬럼을 지정해 줄 수도 있습니다. 만약 특정 컬럽이 지정된 경우라면 해당 컬럼에서 null값은 제외됩니다.

 

만약 위 예제에서 sum(userAge)의 값이 25이상인 데이터만 보고 싶다면 having 절을 사용할 수 있습니다.

select userName, sum(userAge)
from tb_user tu
group by userName
having sum(userAge) >= 25;

having은 집계함수의 조건절에 해당합니다. 또한 중간합계가 필요하다면 rollup을 사용합니다.

select userName, userNumber, sum(userAge)
from tb_user tu
group by userName, userNumber
with rollup;

rollup은 group by 절을 기준으로 각 컬럼의 중간합계를 표시합니다.

 

728x90