table
/*
Table : colun(항목, 열), row(행)로 이루어져 있다
데이터를 담을 수 있는 틀
< data 자료형 >
string : varchar (byte) -> 한글자당 1바이트씩 들어간다 / character varing
integer :int, integer, numeric (자리수) -> ex)만 단위의 경우 5라고 적으면 된다 //numeric의 경우 오라클 가면 numberic이 된다
double, float : numeric(정수의 자리수, 소수점) ->ex) 5.2 = 10000.12
calender : date,tinestamp // 둘의 차이 : 날짜, 시간 +날짜
<object 설정시 ->
object : creat drop alter(tnwjd) // (table, view) //(table, view) -> (실제테이블, 가상테이블)
table
view
sequence
--------------
< date 설정>
insert delete select update
*/
table 추가 방법
1. tool 사용하는 방법
2. 쿼리문 사용하는 방법 : 사용률 높음
tool을 사용해서 테이블 생성

name :테이블명
owner :
scherma :

+ 눌러서 컬럼 추가
주의) 버챠 안 나옴 ch varing 으로 잡고 30 바이트로 자기

SQL 눌러서 확인하기

ALTER TABLE IF EXISTS public.tb_test
OWNER to postgres; -> alrer 를 수정해라 신경안써도 된다




테이블 수정 원할 경우


삭제 방법
1. 구문 추가 , 테이블스 마우스 우클릭 -> 리프레쉬


쿼리문 사용하기
쿼리문으로 테이블 생성하는 법
CREATE table tb_test(
num int, --qjsgh
name varchar(30),
address varchar(45),
birth timestamp DEFAULT now()
);> 구문 적은 후 tables 마우스 우클릭 -> refresh 누르면 테이블 목록에서 생성 확인 완료

데이터 넣기 : INSERT
insert 형식 : insert into 테이블명 (칼럼명, ...)
values(값1, ...)
insert into tb_test(num,name,address,birth)
values (1,'홍길동', '부평구','2002-10-12');
insert into tb_test(num,name,address,birth)
values (2,'성춘향', '부평구',now());
insert into tb_test(num,name,address)
values (3,'일지매', '원주시');
insert into tb_test
values (4,'홍두께', '인천시');> 이렇게 적어도 테이블에 입력이 가능하다
> 왜? 칼럼명은 생략이 가능하기 때문이다

--에러에러
insert into tb_test
values ('홍두께',4, '인천시');>왜? 칼럼명의 순서와 다르게 적었기 때문

-- >에러에러 해결방법 : 테이블 이름 옆에 칼럼의자료형의 순서대로 값을 순서대로 적어줄 것
insert into tb_test
values (4,'홍두께2 ', '인천시');
insert into tb_test(address,birth,num,name)
values ('춘천시', '2000-08-23', 5,'이몽룡');>--컬럼명을 바꾸어도 값만 제대로 적어준다면 에러 안 난다

데이터 삭제 delete
delete 형식
delete from 테이블명
where 조건식
DELETE from tb_test
where num = 2;>성춘향 지워보기

DELETE from tb_test
where num = 4 and address = '인천시';>num이 4 ,그리고 주소가 '인천시'인 사람 삭제하기

수정하기:update
형식
UPDATE 테이블명
SET 수정하고 싶은 값의 식
where 조건식
UPDATE tb_test
set address = '남원시'
WHere name = '이몽룡';>이몽룡 주소 남원시로 수정

| 데이터 한 번에 수정하기 : 여러 조건 넣을 수 있다 |

UPDATE tb_test
set address = '인천시',birth = '2000-10-10'
WHere num = 1;| 강사님 work |
| -- 문제1) EMPLOYEES 테이블에서 부서별로 인원수,평균 급여,급여의 합,최소 급여,최대 급여를 포함하는 -- EMP_DEPTNO 테이블을 생성하라. -- 문제2) EMP_DEPTNO 테이블에 ETC COLUMN을 추가하라. -- 단 자료형은 VARCHAR(50) 사용하라. -- 문제3) EMP_DEPTNO 테이블에 ETC COLUMN을 수정하라. -- 자료 형은 VARCHAR(15)로 하라. -- 문제4) EMP_DEPTNO 테이블에 있는 ETC 을 삭제하고 확인하라. -- 문제5) 위에 생성한 EMP_DEPTNO 테이블의 이름을 EMP_DEPT로 변경하라. -- 문제6) EMP_DEPT 테이블을 삭제하라. -- 문제7) EMPLOYEES 테이블을 EMP 테이블을 생성하고 복제하도록 하라. -- (데이터 포함) -- "사원번호", "이름", "월급", "부서번호", "부서명", "부서월급순위" -- 문제8) EMP 테이블에 row를 추가해 봅니다. -- 다만, 반드시 데이터를 기입을 안해도 되면, NULL로 설정하도록 한다. -- 문제9) EMPLOYEES 테이블에서 EMPNO, ENAME, SAL, HIREDATE, DEPARTMENT_ID의 COLUMN만 선택하여 -- EMP_10 테이블을 생성(데이터 미포함)합시다. -- 문제10) 50번 부서만 선택하여 이에 대응하는 값을 EMP_10 테이블에 추가하라. |
⭕❌
-- 문제1) EMPLOYEES 테이블에서 부서별로 인원수,평균 급여,급여의 합,최소 급여,최대 급여를 포함하는
-- EMP_DEPTNO 테이블을 생성하라. ⭕
CREATE TABLE EMP_DEPTNO
as
select count(employee_id), avg(salary) as 평균급여, sum(salary) as "급여의 합" , min(salary) as "최소 급여", max(salary) as "최대 급여"
from employees
group by department_id;
select * from EMP_DEPTNO;
)
-- 문제2) EMP_DEPTNO 테이블에 ETC COLUMN을 추가하라. ⭕
-- 단 자료형은 VARCHAR(50) 사용하라.
alter table EMP_DEPTNO
add COLUMN ETC_COLUMN VARCHAR(50);
select * from EMP_DEPTNO;
-- 문제3) EMP_DEPTNO 테이블에 ETC COLUMN을 수정하라. ⭕
-- 자료 형은 VARCHAR(15)로 하라.
alter table EMP_DEPTNO
ALTER ETC_COLUMN
type VARCHAR(15);
select * from EMP_DEPTNO;
-- 문제4) EMP_DEPTNO 테이블에 있는 ETC 을 삭제하고 확인하라. ⭕
ALTER TABLE emp_deptno
DROP COLUMN etc_column;
select * from EMP_DEPTNO;
-- 문제5) 위에 생성한 EMP_DEPTNO 테이블의 이름을 EMP_DEPT2로 변경하라. ⭕
ALTER TABLE EMP_DEPTNO
RENAME to EMP_DEPT2;
-- 문제6) EMP_DEPT2 테이블을 삭제하라. ⭕
drop table EMP_DEPT2;
-- 문제7) EMPLOYEES 테이블을 EMP 테이블을 생성하고 복제하도록 하라. ❌
-- (데이터 포함)
-- "사원번호", "이름", "월급", "부서번호", "부서명", "부서월급순위"
CREATE table EMP
as
select *
from employees;
select * from EMP;
-- 문제8) EMP 테이블에 row를 추가해 봅니다. ❌
-- 다만, 반드시 데이터를 기입을 안해도 되면, NULL로 설정하도록 한다.
ALTER table emp
add row varchar null;
select * from EMP;
-- 문제9) EMPLOYEES 테이블에서 EMPNO, ENAME, SAL, HIREDATE, DEPARTMENT_ID의 COLUMN만 선택하여
-- EMP_10 테이블을 생성(데이터 미포함)합시다. ⭕
CREATE table EMP_10
as
select employee_id as EMPNO, first_name as ENAME , salary as SAL , hire_date as HIREDATE ,department_ID as DEPARTMENT_ID
from employees
where 1=2;
select * from EMP_10;
-- 문제10) 50번 부서만 선택하여 이에 대응하는 값을 EMP_10 테이블에 추가하라. ❌
insert into EMP_10
VALUES (EMPNO, ENAME, SAL, HIREDATE, DEPARTMENT_ID)
as(select employee_id as EMPNO, first_name as ENAME , salary as SAL , hire_date as HIREDATE ,department_ID as DEPARTMENT_ID
from employees
where department_id =50 ));
무결성 constraint
/*
무결성 : constraint
-> 데이터가 원본 그대로 유지되는 것
table -> colume의 특성(성질) : 값을 저장하는 규칙
check; 지정된 값, 범위의 값만을 사용할 수 있는 컬럼
not null :빈칸을 허용하지 않는다 <- 무조건 값을 넣어라!
primary key(pk)
: 기본키 -> null, 중복을 허용하지 않는다
: id, 주민번호 등에 사용된다
unique key(uk)
: 고유키 -> 하나밖에 없는 값 , 중복을 허용하지 않는다, null 을 허용한다
:email에 사용된다
foreign key(fk)
: 외래키 -> 다른 테이블에서 기본, 고유키로 설정되어 있어야 사용이 가능하다
join 을 하기 위한 성질
null허용한다 ->허용하지 않도록 설정도 가능하다
-- not null
drop table tb_test;
create table tb_test(
name varchar(30) not null,
height numeric(5, 1)
);
insert into tb_test(name, height)
values('홍길동', 172.1);
insert into tb_test(name)
values('성춘향');
insert into tb_test(height) -- 무결성 에러
values(153.2);
insert into tb_test(name, height) -- 빈문자도 된다
values('', 172.1);
insert into tb_test(name, height)
values('일지매', null);
insert into tb_test(name, height)
values('홍두께', '167.9'); -- 에러가 아니다
select * from tb_test;
-- check
create table tb_check(
fruit varchar(30),
num_cnt int,
constraint check1 check(fruit in('apple', 'pear', 'banana')),
constraint check2 check(num_cnt > 0 and num_cnt <= 10)
);
insert into tb_check(fruit, num_cnt)
values('apple', 3);
insert into tb_check(num_cnt)
values(6);
insert into tb_check(fruit)
values('banana');
insert into tb_check(fruit, num_cnt)
values('apple', null);
insert into tb_check(fruit, num_cnt)
values('grape', null); -- error
insert into tb_check(fruit, num_cnt)
values('pear', 12); -- error
select * from tb_check;
-- Primary Key = Unique Key + NOT NULL
drop table tb_test;
create table tb_test(
id varchar(30) primary key,
name varchar(30)
);
insert into tb_test(id, name)
values('abc', '홍길동');
insert into tb_test(name) -- not null에 대한 에러
values('홍길동');
insert into tb_test(id)
values('abc'); -- 컬럼에 존재하는 값을 추가 error
insert into tb_test(id, name)
values('bcd', '홍길동');
select * from tb_test;
-- 제약조건과 같이 테이블을 삭제
drop table if exists tb_test;
create table tb_test(
id varchar(30),
name varchar(30)
);
-- Primary Key를 추가
alter table tb_test
add
primary key(name);
-- Primary Key를 삭제
alter table tb_test
drop
constraint tb_test_pkey;
drop table if exists tb_test;
-- unique : 고유키 null은 OK, 중복X
create table tb_test(
email varchar(30) unique,
name varchar(30)
);
insert into tb_test(email, name)
values('abc@naver.com', '홍길동');
insert into tb_test(email)
values('bcd@naver.com');
insert into tb_test(name)
values('성춘향'); -- null은 허용
insert into tb_test(email)
values('bcd@naver.com'); -- 중복된 값 -> error
select * from tb_test;
-- 외래키
/*
foreign key : 목적 -> join
외래키로 설정되어 있는 컬럼은
외부테이블에서 Primary Key나 Unique로 설정되어 있어야 한다
null을 허용
emp -> employees
dept -> departments
*/
drop table emp;
-- 부모테이블
create table dept(
department_id int primary key, -- 기본키
department_name varchar(30)
);
insert into dept(department_id, department_name)
values(10, '인사부');
insert into dept(department_id, department_name)
values(20, '개발부');
insert into dept(department_id, department_name)
values(30, '경리부');
select * from dept;
-- 자식테이블
create table emp(
employee_id int primary key,
first_name varchar(30),
department_id int,
foreign key(department_id) references dept(department_id)
);
insert into emp(employee_id, first_name, department_id)
values(1, '홍길동', 20);
insert into emp(employee_id, first_name, department_id)
values(2, '성춘향', 30);
insert into emp(employee_id, first_name, department_id)
values(3, '일지매', 40); -- 40은 없음 error
insert into emp(employee_id, first_name)
values(4, '킴벌리'); -- 외래키는 null을 허용함!
select * from emp;
select e.employee_id, e.first_name,
e.department_id, d.department_name
from emp e, dept d
where e.department_id = d.department_id;