본문 바로가기
데이터베이스

SQL 문자열 함수/Union/View

by 코낄2 2023. 9. 20.

1. 문자열 함수

- concat : 복수의 문자열을 연결해주는 문자열 함수

select concat('안녕하세요!','MySQL') as concat;
# concat 안녕하세요!MySQL
select * from member;
select concat(address1, ' ', address2, ' ', address3) as address
                                      from member where userid = 'orange';
# address 서울시 서초구 양재동 XX아파트 201동

- left, right: 왼쪽 또는 오른쪽에서 길이만큼 문자열을 가져옴

select left('ABCDEFGHIJKLMN',5);
select userid, left(userid,2) as leftfunc from member;

- substring: 문자열의 일부를 가져옴

-- substring(문자열,시작위치): 시작위치부터 끝까지
-- substring(문자열,시작위치,길이): 시작위치부터 길이만큼
select substring('ABCDEFGHIJKLMN',5) as sub;
select substring('ABCDEFGHIJKLMN',5, 3) as sub;

- char_length: 문자열의 길이를 반환

select char_length('ABCDEFGHIJKLMN') as cnt;
select email, char_length(email) as len from member;

- lpad, rpad: 왼쪽 또는 오른쪽의 해당 길이만큼 늘리고, 빈 공간을 채울 문자열을 반환

-- lpad(문자열, 총길이, 채울 문자열)
select lpad('ABCDEFG', 10, 0) as pad;
select lpad(point, 5, 0) as pad from member;

- ltrim, rtrim, trim: 왼쪽, 오른쪽, 모든 공백을 제거

select rtrim('     ABCDEF    ') as rtrim;
select trim('   ABCDEF    ') as trim;

- replace: 문자열에서 특정 문자열을 변경

-- replace(문자열, 대상, 바꿀 문자열)
select replace('ABCDEFG', 'CD', ',') as repl;

2. 유니온(Union)

합집합을 나타내는 연산자로, 중복된 값을 제거해서 출력합니다.

서로 같은 종류의 테이블(컬럼이 같아야 함)에서만 적용이 가능합니다.

select 컬럼명1, 컬럼명2,... from 테이블1 union select 컬럼명1, 컬럼명2,...from 테이블2

product table 생성 및 데이터 삽입
product_new table 생성 및 데이터 삽입

아래서는 regdate (현재시간) 값이 모두 다르기 때문에 플립5 제품이 겹쳐도 모두 출력됩니다

select code, name, price, regdate from product
union
select code, name, price, regdate from product_new;

regdate (현재시간) 값을 삭제하니 플립5의 모든 값이 같으므로 중복값이 제거되어 출력됩니다.

select code, name, price from product
union
select code, name, price from product_new;

중복된 값을 제거하지 않으려면 union all을 사용하면 됩니다.

-- 중복된 값을 제거하지 않음
select code, name, price from product
union all
select code, name, price from product_new;

3. 뷰(view)

뷰는 가상의 테이블을 생성하는 것 입니다. 실제 테이블처럼 행과 열을 가지고 있지만, 데이터를 직접 저장하고 있지는 않습니다. 뷰를 만드는 이유는 SQL 코드를 간결하게 만들기 위해, 내부 데이터 중 일부만 공개하고 이로 인해 삽입, 삭제, 수정에 제한 사항을 두고 싶을 때 사용할 수 있습니다.

create view 뷰이름 as 쿼리 ...

자주 확인하는 userid, name, hp, gender 만으로 view 생성.

select * from member;
select userid, name, hp, gender from member;

create view vw_member as select userid, name, hp, gender from member;
select * from vw_member;

 

-- member의 userid, name, hp와 profile의 mbti를 출력하는 뷰를 만들기

select m.userid, m.name, m.hp, p.mbti from member m left join profile p on m.userid = p.userid;
create view vw_member_profile as 
                          select m.userid, m.name, m.hp, p.mbti 
                            from member m left join profile p 
                              on m.userid = p.userid;