티스토리 뷰

카테고리 없음

SQL4

eyoadgkn 2024. 2. 14. 16:55
-- GUI환경에서 테이블 만들기
create database naver_db;

CREATE TABLE buy
(  num         INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
   mem_id      CHAR(8) NOT NULL, 
   prod_name     CHAR(6) NOT NULL, 
   group_name     CHAR(4) NULL ,
   price         INT UNSIGNED NOT NULL,
   amount        SMALLINT UNSIGNED  NOT NULL ,
   FOREIGN KEY(mem_id) REFERENCES member(mem_id)
);

INSERT INTO member VALUES('TWC', '트와이스', 9, '서울', '02', '11111111', 167, '2015-10-19');
INSERT INTO member VALUES('BLK', '블랙핑크', 4, '경남', '055', '22222222', 163, '2016-8-8');
INSERT INTO member VALUES('WMN', '여자친구', 6, '경기', '031', '33333333', 166, '2015-1-15');

INSERT INTO buy VALUES( NULL, 'BLK', '지갑', NULL, 30, 2);
INSERT INTO buy VALUES( NULL, 'BLK', '맥북프로', '디지털', 1000, 1);
INSERT INTO buy VALUES( NULL, 'APN', '아이폰', '디지털', 200, 1);


select * from member;
select * from buy;


DROP TABLE IF EXISTS buy, member;
CREATE TABLE member 
( mem_id  CHAR(8) NOT NULL PRIMARY KEY, 
  mem_name    VARCHAR(10) NOT NULL, 
  height      TINYINT UNSIGNED NULL
);
CREATE TABLE buy 
(  num         INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
   user_id      CHAR(8) NOT NULL, 
   prod_name     CHAR(6) NOT NULL, 
   FOREIGN KEY(user_id) REFERENCES member(mem_id)
);

DROP TABLE IF EXISTS buy;
CREATE TABLE buy 
(  num         INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
   mem_id      CHAR(8) NOT NULL, 
   prod_name     CHAR(6) NOT NULL
);
ALTER TABLE buy
    ADD CONSTRAINT 
    FOREIGN KEY(mem_id) REFERENCES member(mem_id);

INSERT INTO member VALUES('BLK', '블랙핑크', 163);
INSERT INTO buy VALUES(NULL, 'BLK', '지갑');
INSERT INTO buy VALUES(NULL, 'BLK', '맥북');

select M.mem_id, M.mem_name, B.prod_name
	from buy B
		inner join member M
        on B.mem_id = M.mem_id;
-- 안지워진다.
delete from member where mem_id='BLK';

-- on update cascade / on delete cascade
-- drop table if exists buy;
-- create table buy
-- (
-- 	num int auto_increment not null primary key,
--     mem_id char(8) not null,
--     prod_name char(6) not null
-- );
-- alter table buy
-- 	add constraint
--     foreign key(mem_id) references member(mem_id)
--     on update cascade
--     on delete cascade;

-- set foreign_key_checks=0;

-- insert into buy values(null, 'BLK', '지갑');
-- insert into buy values(null, 'BLK', '맥북');

-- update member set mem_id = 'PINK' where mem_id='BLK';

-- select M.mem_id, M.mem_name, B.prod_name
-- 	from buy B
-- 		inner join member M
--         on B.mem_id = M.mem_id;
--         
-- delete from member where mem_id='PINK';

create database test1;
use test1;
create table m(
   m1 varchar(10) primary key,
    m2 int
);

create table b(
   num int auto_increment primary key,
    mfk varchar(10) not null,
    foreign key(mfk) references m(m1) on delete cascade on update cascade
);

insert into m values("a",4);

insert into b values(null,'a');

select * from m;
select * from b;

update m set m1="b" where m1='a';

-- 기타 제약조건
-- 고유 키 제약 조건
drop table if exists buy, member;
create table member
(
	mem_id char(8) not null primary key,
    mem_name varchar(10) not null,
    height tinyint unsigned null,
    email char(30) null unique
);

insert into member values('BLK','블랙핑크',163,'pink@gmail.com');
insert into member values('TWC','트와이스',167,null);
-- 고유 키가 중복되기 떄문에 insert 되지 않는다.
insert into member values('APN','에이핑크',164,'pink@gmail.com');

-- 체크 제약조건

drop table member;

CREATE TABLE member 
( mem_id  CHAR(8) NOT NULL PRIMARY KEY, 
  mem_name    VARCHAR(10) NOT NULL, 
  height      TINYINT UNSIGNED NULL check(height >=100),
  phone1 char(3) null
);

insert into member values('BLK','블랙핑크',163,null);
-- 100이 넘지 않기 떄문에 인서트가 안된다.
insert into member values('TWC','트와이스',99,null);

-- alter table문으로 제약조건을 추가
alter table member
	add constraint
	check (phone1 in ('02', '031', '032', '054', '055', '061')) ;
    
insert into member values('TWC','트와이스',167,'02');
-- 제약조건에 해당하지 않는 '010' 이라서 추가가 되지 않는다.
insert into member values('OMY','오마이걸',167,'010');

-- 기본값 정의alter
drop table if exists member;
CREATE TABLE member 
( mem_id  CHAR(8) NOT NULL PRIMARY KEY, 
  mem_name    VARCHAR(10) NOT NULL, 
  height      TINYINT UNSIGNED NULL default 160,
  phone1 char(3) null
);

alter table member
	alter column phone1 set default '02';
    
insert into member values('RED','레드벨벳',161,'054');
insert into member values('SPC','우주소녀',default,default);
select * from member;



-- 5-3
use market_db;
create view v_member
	as
    select mem_id, mem_name, addr from member;
    
select * from v_member;

-- 필요한 열만 보거나 조건식을 넣을 수도 있다.
select mem_name, addr from v_member 
	where addr in ('서울', '경기');
    
create view v_memberbuy
as
	select B.mem_id, M.mem_name, B.prod_name, M.addr,
					concat(M.phone1, M.phone2) '연락처'
		from buy B
			inner join member M
            on B.mem_id = M.mem_id;
            
select * from v_memberbuy;

-- 뷰의 실제 작동
-- 뷰의 실제 생성, 수정, 삭제
use market_db;
create view v_viewtest1
as
	select B.mem_id 'member id', M.mem_name as 'member name', B.prod_name "product name",
					concat(M.phone1, M.phone2) as "office phone"
		from buy B
			inner join member M
            on B.mem_id = M.mem_id;
            
select distinct `member id`,`member name` from v_viewtest1;



-- view의 수정 ( alter view )
alter view v_viewtest1
as
	select B.mem_id '회원 아이디', M.mem_name as '회원 이름', B.prod_name "제품 이름",
					concat(M.phone1, M.phone2) as "연락처"
		from buy B
			inner join member M
            on B.mem_id = M.mem_id;
            
select distinct `회원 아이디`,`회원 이름` from v_viewtest1;

drop view v_viewtest1;

-- view를 통한 데이터 수정/삭제
update v_member set addr = '부산' where mem_id = 'BLK';
-- v_member가 참조하는 member에서 mem_number 열을 참조하고 있지 않아서 입력할 방법이 없다.
insert into v_member(mem_id, mem_name, addr) values('BTS','방탄소년단','경기');

-- 평균 키가 167 이상인 뷰를 생성
create view v_height167
	as
    select * from member where height >= 167;
    
select * from v_height167;

-- 삭제
delete from v_height167 where height < 167;

-- 뷰를 통한 데이터의 입력
insert into v_height167 values('TRA', '티아라', 6, '서울', null, null, 159, '2005-01-01');
select * from v_height167;

-- with check option 설정된 값의 범위가 벗어나는 값은 입력이 안된다.
alter view v_height167
	as
    select * from member where height >= 167
		with check option;
        
insert into v_height167 values('TOB', '텔레토비', 4, '영국', null, null, 140, '1995-01-01');

-- create view v_complex
-- 	as
--     select B.mem_id, M.mem_name, B.prod_name, M.addr
-- 		from buy B
-- 			inner join
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함