SQL

[ 5일차 ] SQL default값 설정하기, 뷰 테이블 별칭 실습+ lower,upper,initcap,replace,substr 함수

ggosoon 2022. 6. 10. 10:23

 

create table t100(

id varchar(10),

pwd varchar(20)

);

 

--1.컬럼 추가하기 age 형은 number(3)

alter table t100

add age number(3);

 

--2.컬럼 추가 loc 형은 nchar(3) 디폴트 '서울'

alter table t100

add loc nchar(3) default '서울';

 

--3.pwd의 형은 varchar(25)로 변경

alter table t100

modify (pwd varchar(25));

 

--4.id 에 기본키 추가

alter table t100

add primary key (id);

 

--5.임의의 레코드 3개 추가하기

insert into t100(id, pwd, age, loc) values ('aaa','a1234',22,''); --null값으로 보임 /칼럼명을 지정을해서 '' 공백으로 넣어주면 null 값으로 보임

insert into t100(id, pwd, age) values ('aaa','a1234',22); -- 칼럼명을 빼고 넣어야 없는 값이어서 디폴트값이 들어가게 된다

insert into t100(id, pwd, age, loc) values ('aaa','a1234',22,null); null로 넣으면 null 값으로 들어감

insert into t100(id, pwd, age, loc) values ('bbb','b1234',32,'인천');

insert into t100(id, pwd, age, loc) values ('ccc','c1234',42,'경기');

 

※※ null 인 값을 삭제 하려면

delete from t100

where loc is null;

 

--6.t100을 이용하여 v_t100 만들기

create view v_t100

as

select * from t100;

 

--7.v_t100을 이용하여 id와 pwd만 출력할 수 있는 v_t200을 만드시오

create view v_t200

as

select id, pwd from v_t100;

 

 

[뷰 생성시에 컬럼 별칭 짓기]

 

create view vv_t701(아이디,암호)

as

select id, pwd from v_t700;

 

create view vv_t702

as

select id "아이디1", pwd "암호1" from v_t700;

 

 


 

 


 

 

drop table school;

 

 

문제1. idx에 p.k 를 부여하여 school을 만드시오.

 

create table school(

idx number(3) primary key,

s_name nvarchar2(10),

age number(2),

tel nvarchar2(15)

);

 

문제2. 레코드를 추가하시오.

 

insert into school(idx, s_name, age, tel) values(101,'둘리',12,'010-5037-6133');

insert into school(idx, s_name, age, tel) values(102,'하니',15,'011-1234-1212');

insert into school(idx, s_name, age, tel) values(104,'영심이',17,'017-5555-0341');

insert into school(idx, s_name, age, tel) values(105,'young won',20,'010-5555-6363');

insert into school(idx, s_name, age, tel) values(107,'대한민국',22,'019-3245-1234');

insert into school(idx, s_name, age, tel) values(109,'아름이',25,'070-1212-5555');

 

문제3. 이름을 기준으로 내림차순 정렬하시오.

 

select * from school

order by s_name desc;

 

문제4. 번호가 101, 104, 107 인 학생의 레코드를 출력하시오

 

select * from school

where idx in (101, 104, 107);

 

문제5. 105번의 이름을 영원으로 변경하시오.

 

update school set s_name= '영원'

where idx= 105;

 

문제6. 104번의 나이를 15살로 수정하시오.

 

update school set age= 15

where idx= 104;

 

문제7. 이름이 아름이인 학생의 전화번호를 삭제하시오

 

update school set tel = ' '

where s_name='아름이';

 

문제8. 전체 학생의 나이를 19살로 수정하시오.

 

update school set age=19;

 

문제9. 102번 학생을 삭제하시오.

 

delete from school

where idx=102;

 

문제10. 전체 레코드를 삭제하시오.

 

delete from school;

 

 

 

--1)s_name, tel의 값의 길이를 구하시오

 

select s_name, length(s_name) as 길이1 ,tel, length(tel) as 길이2

from school;

 

--2)전체의 값을 하나의 컬럼에 나타내시오

 

select idx|| s_name|| age|| tel as 학생정보

from school;

 

.

select '번호:' ||idx||',이름:' ||s_name|| ',나이:'|| age|| ',전화번호:'|| tel as 학생정보

from school;

 

--뷰 생성 하기

create view v_school

as

select '번호:' ||idx||',이름:' ||s_name|| ',나이:'|| age|| ',전화번호:'|| tel as 학생정보

from school;

 

select * from v_school;

 

--첫번째 쉼표의 위치가 어디있는지 찾아보기

select instr (학생정보, ',',1) from v_school;

 

--두번째 있는 쉼표의 위치가 어디있는지 찾아보기 (찾을 시작위치를 적어주는 것)

select instr (학생정보, ',',8) from v_school;

select instr (학생정보, ',',16) from v_school;

select instr (학생정보, ',',22) from v_school;

 

--기본 테이블 확인

select * from school;

 

insert into school(idx, s_name, age, tel) values(200,'Choi Young',25,'070-1212-5555');

 

--문자열 소문자(lower), 대문자(upper), 첫번째 글자를 대문자(initcap)로 바꾸기

 

select lower(s_name) , upper(s_name) , initcap(s_name) from school;

 

--위의 테이블로 뷰를 만들기

 

create view v_school2

as

select lower(s_name) , upper(s_name) , initcap(s_name)

from school;

 

이렇게하면 오류가 난다 칼럼명에는 괄호를 못쓰기 때문에

 

create view v_school2

as

select lower(s_name) as 소문자, upper(s_name) as 대문자 , initcap(s_name) as 첫글자대문자

from school;

 

별칭을 써서 만들어주면 생성 된다

 

create view v_school2 (소문자, 대문자, 첫글자대문자)

as

select lower(s_name) , upper(s_name) , initcap(s_name)

from school;

 

뷰이름 옆에 괄호로 컬럼명을 설정해 줄 수도 있다

 

 

select * from v_school2;


 

-- 기본 테이블 나타내기

select * from school;

 

--문자열을 문자열로 변환하는 함수 REPLACE

SELECT replace(tel, '-','') from school;

tel 에서 -를 공백('') 으로 바꾸기

 

--소문자로 바꿔준 young를 찾아서 한글 영 으로 바꿔준것

SELECT s_name, replace(lower(s_name), 'young','영') from school;

 

 

select tel,translate(tel,'0123','영일이삼') from school;

이런 경우에 1대1로 바뀌어서 0인게 영 1인게 일 2인게이 3인게삼으로 다 바뀜

묶여서 '0123'만 '영일이삼'으로 바뀌는게 아님

 


select * from school;

 

--선택한 문자열만 보기

select tel, substr(tel,1,3) from school;

-- substr(컬럼명, 시작위치, 길이)

select tel, substr(tel,5,4) from school;

select tel, substr(tel,1,3), substr(tel,5,4), substr(tel,10,4) from school;

 

--합쳐서 하나의 컬럼으로 만들기, null값은 안보이게 하기

select substr(tel,1,3)||substr(tel,5,4)|| substr(tel,10,4) as 전화번호 from school

where tel is not null;

 

--위의 것을 참조하여 테이블을 만들기

create table t11

as

select substr(tel,1,3)||substr(tel,5,4)|| substr(tel,10,4) as 전화번호 from school

where tel is not null;

 

select * from t11;

 

--전화번호 컬럼에 다시 기호'-' 를 추가하기

select substr(전화번호,1,3)||'-'||substr(전화번호,4,4)||'-'||substr(전화번호,8,4) from t11;