티스토리 뷰
>>psql?
데이터베이스 관리시스템(DBMS)
postgreSQL (기기, 장치) → psql쉘(리모콘 프로토콜) → 사용자
<psql 쉘 실행>
1. SQL Shell 에서 실행하기
'psql -U postgres를 입력하고, 미리 설정한 암호를 입력하면 psql쉘을 실행할 수 있다.
2. cmd 에서 실행하기
psql -U postgres
//비번입력 엔터 //나가려면 q
\l
## 오류
https://m.blog.naver.com/ilsan_ilsan/221493158294
C:\windows\system32 추가해주기
<명령어>
\l //데이터베이스 리스트보기? \c 경로이름 //그 데이터 베이스 경로로 이동 \dt 테이블 리스트보기
데이터베이스 생성
CREATE DATABASE DB_name;
CREATE DATABASE testDB
데이터베이스 삭제
DROP DATABASE 이름;
테이블 생성
CREATE TABLE 새 테이블 이름(칼럼명1 데이터타입, 칼럼명2 데이터타입, 칼럼명3 데이터타입...);
CREATE TABLE develop_book(
book_id INTERGER,
date DATE
, name VARCHAR(80)
);
//book_id -> 칼럼명
//INTERGER -> 자료형 int
//data ->칼럼명
//DATE -> 자료형
//name 칼럼명
//VARCHAR(80) 자료형 (크기)
테이블 조회
SELECT칼럼명FROM 테이블명
SELECT*FROM table_name;
* 는 전체를 의미한다
일부 조회
SELECT*FROM table_name LIMIT 2 OFFSET 1;
LIMIT n개까지만 보여준다.
OFFSET은 n번부터 보여준다.
테이블 삭제
DROP TABLE prod_info;
테이블 수정
ALTER TABLE prod_info RENAME TO ord_info;
prod_info에서 ord_info로 수정하겠다.
>>> CRUD
INSERT INTO (테이블에 칼럼 만들기 ——줄row)
INSERT INTO develop_book VALUES(1,'2019-12-17','mongoDB');
//1 id int
//2019-12-17 ''문자열 날짜
//mongoDB 문자열 이름
//테이블에 정보 입력하는 과정이다.
INSERT INTO develop_book VALUES(2,'2019-12-25','"자바"');
//순서모를떄 순서 지정하려면 데이터의 이름 먼저 괄호에 넣고 그다음 벨류 (데이터)
INSERT INTO develop_book (book_id,date,name) VALUES(3,'2020-01-03','HTML/CSS');
//혹은 한번에 insert 하기
INSERT INTO develop_book VALUES
(7,'2020-03-01','jAVA'),
(8,'2020-03-11','KK'),
(9,'2020-04-03','"HBD"');
'문자를 입력하고 싶을 때는 '' 로 두번 '를 입력한다.
SELECT (data 보기)
LMIT 1; 반환하는 로우의 개수를 지정
OFFSET 1; 반환하는 로우의 시작시점지정
ORDER BY date ASC; 반환하는 로우의 작은수 부터 정렬할떄 (default):오름차순
ORDER BY date DESC; 반환하는 로우의 큰수 부터 정렬할떄 :내림차순
WHERE 반환하는 로우의 지정한 로우만 조회되도록 필터기능
**book_store-# //지금 어디 데이터 베이스에 들어와있는지 중요하다.**
SELECT* FROM develop_book
LIMIT5;
book_store=# SELECT* FROM develop_book
book_store-# LIMIT 6
book_store-# OFFSET 1; //시작 지점 지정해주기(index 0부터 시작)
book_store=# SELECT* FROM develop_book
book_store-# ORDER BY book_id ASC;
SELECT date,name FROM develop_book
ORDER BY 2,1;
=
<> 서로다르다
≥ >이거랑=
SELECT * FROM develop_book
WHERE book_id = 1;
SELECT * FROM develop_book
WHERE book_id <> 1;
SELECT * FROM develop_book
WHERE '2020-01-03' IN (
SELECT date FROM develop_book
WHERE book_id =3
);
//서브쿼리
book_store=# SELECT * FROM develop_book
book_store-# WHERE date = '2020-01-03';
//boolean
서브쿼리란?
하나의 쿼리문 안에 포함되어 있는 또 하나의 쿼리문을 말합니다.
서브쿼리는 메인쿼리가 서브쿼리를 포함하는 종속적인 관계입니다.
여러번의 쿼리를 수행해야만 얻을 수 있는 결과를
하나의 중첩된 SQL문장으로 간편하게 결과를 얻을 수 있게 해줍니다.
쉽게 말해서 쿼리문안에 쿼리문을 또 쓰는 것
수정하기 UPDATE
UPDATE develop_book
SET name = 'java'
WHERE book_id =2
RETURNING *;
UPDATE develop_book
SET book_id = 4
WHERE name = 'HTML/CS'
RETURNING *;
UPDATE develop_book
SET name = 'HBD'
WHERE book_id = 9
RETURNING *;
00 AS 01 : 00을 01로 바꾸겠다.
SELECT name AS title FROM develop_book;
CREATE TABLE develop_book_2 AS
SELECT * FROM develop_book
ORDER BY book_id ASC;
//순서 유일한 방법 order by
DROP TABLE develop_book;
//drop = 삭제
ALTER TABLE develop_book_2
RENAME TO develop_book;
//테이블 이름 수정
\\dt
//테이블 조회 . 확인.
테이블 row 삭제하기
DELETE FROM develp_book WHERE book_id =6;
테이블의 상세 정보조회
\\d book_info
>>>>유니크 레퍼런스 pk fk
drop table if exists contact_info;
create tabele contact_info(
cont_id numeric(3) UNIQUE not null
name varchar(15) not null,
tel integer[] not null,
email varchar
)
INSERT INTO contact_info (name, tel, email) VALUES
('name',Array[1,2],'example@naver.com'),
('name',Array[1,2],'example@naver.com'),
('name',Array[1,2],'example@naver.com')
SERIAL primary key
drop table if exists contact_info;
create table contact_info(
cont_id SERIAL primary key,
name varchar(15) not null,
tel integer[] not null,
email varchar
)
DELETE FROM contact_info WHERE cont_id =1;
SELECT * FROM contact_info;
UNIQUE
NOT NULL
과목 : 부모 테이블
CREATE TABLE subj(
sub_id NUMERIC(5) UNIQUE NOT NULL, // not null primary key
sub_name VARCHAR(20) NOT NULL
)
INSERT INTO subj
VALUES
(00001, 'mathematics'),
(00002, 'science'),
(00003,'programming');
자식테이블
CREATE TABLE teacher (
teac_id NUMERIC(5) NOT NULL PRIMARY KEY,
teac_name VARCHAR(20) NOT NULL,
subj_code NUMERIC(5) REFERENCES subj(sub_id),
teac_certifi_date DATE
)
INSERT INTO teacher VALUES
(00011,'정선생',00001,'2017-03-11'),
(00021,'홍선생',00002,'2017-04-12'),
(00031,'박선생',00003,'2017-04-13'),
(00041,'한선생',00004,'2018-05-20');
오류
ERROR: 오류: "teacher" 테이블에서 자료 추가, 갱신 작업이 "teacher_subj_code_fkey" 참조키(foreign key) 제약 조건을 위배했습니다 DETAIL: (subj_code)=(4) 키가 "subj" 테이블에 없습니다.
SQL state: 23503
population_and_accident=# CREATE TABLE coffee(
population_and_accident(# id INTEGER,
population_and_accident(# coffee_name VARCHAR,
population_and_accident(# );
population_and_accident=# CREATE TABLE costomer (
population_and_accident(# id INTEGER,
population_and_accident(# costomer_name VARCHAR,
population_and_accident(# costomer_gender VARCHAR(1)
population_and_accident(# );
CREATE TABLE purchase (
id INTEGER,
costomer_name VARCHAR NOT NULL REFERENCES costomer(costomer_name),
coffee_name VARCHAR NOT NULL REFERENCES coffee(coffee_name),
time TIME
);
-> 오류
오류: 참조되는 "costomer" 테이블을 위한 주워진 키와 일치하는 고유 제약 조건이 없습니다
::
postgresql에서 모든 외래 키는 부모 테이블 의 고유 키 를 참조해야 하므로 bar테이블에 unique (name)인덱스 가 있어야 합니다 .
drop table if exists teacher;
drop table if exists subj;
CREATE TABLE subj(
sub_id NUMERIC(5) UNIQUE NOT NULL,
sub_name VARCHAR(20) NOT NULL,
sub_count NUMERIC(20) NOT NULL,
UNIQUE (sub_id, sub_name)
);
INSERT INTO subj VALUES
(00001,'mathematics',60),
(00002,'science',42),
(00003,'programmin',70);
CREATE TABLE teacher (
teac_id NUMERIC(5) NOT NULL PRIMARY KEY,
teac_name VARCHAR(20) NOT NULL,
subj_code NUMERIC(5) NOT NULL,
subj_name VARCHAR(60) NOT NULL,
teac_certifi_date DATE NOT NULL,
FOREIGN KEY (subj_code,subj_name) REFERENCES subj (sub_id,sub_name)
);
FOREIGN KEY (subj_code,subj_name) REFERENCES subj (sub_id,sub_name)
foreign(외부) key(현재 테이블의 칼럼1, 칼럼2) ::: 제약조건을 걸 컬럼
references 참조 —>subj 테이블의 (칼럼1,칼럼2) 컬럼을 참조해라.
INSERT INTO teacher VALUES
(00011,'정선생',00001,'mathematics','2017-03-11'),
(00021,'홍선생',00002,'science','2017-04-12'),
(00031,'박선생',00003,'programmin','2017-04-13')
;
삭제
테이블이 삭제되는 것을 ON DELETE라고 불른다
부모테이블은 자식테이블보다 먼저 삭제될 수 없다.
ON DELETE
- ON DELETE NO ACTION
- ON DELETE RESTRICT (tranjection?)
부모테이블이 먼저 안 지워진다
- ON DELETE SET NULL
- ON DELETE CASCADe
- ON DELETEDEFAULT
지워야 하는 경우..
ex) ON DELETE CASCADE : 부모의 칼럼 지우면 같이 참조하고 있떤 자식 칼럼이 지워지는 코드 !
DROP TABLE iF EXISTS teacher;
DROP TABLE iF EXISTS subj;
CREATE TABLE subj (
subj_id NUMERIC(5) NOT NULL PRIMARY KEY,
subj_name VARCHAR(60) NOT NULL
);
INSERT INTO subj
VALUES
(00001,'mathematics'),
(00002,'science'),
(00003,'prigraming');
CREATE TABLE teacher (
teac_id NUMERIC(5) NOT NULL PRIMARY KEY,
teac_name VARCHAR(20) NOT NULL,
subj_id NUMERIC(5) REFERENCES subj ON DELETE CASCADE,
teac_certifi_date DATE
);
INSERT INTO teacher
VALUES
(00011,'정선생',00001,'2017-03-11'),
(00021,'홍선생',00002,'2017-04-12'),
(00031,'박선생',00003,'2017-04-13');
subj_id NUMERIC(5) REFERENCES subj ON DELETE CASCADE,
ex)***ON DELETE SET NULL
DROP TABLE iF EXISTS teacher;
DROP TABLE iF EXISTS subj;
CREATE TABLE subj (
subj_id NUMERIC(5) NOT NULL PRIMARY KEY,
subj_name VARCHAR(60) NOT NULL
);
INSERT INTO subj
VALUES
(00001,'mathematics'),
(00002,'science'),
(00003,'prigraming');
CREATE TABLE teacher (
teac_id NUMERIC(5) NOT NULL PRIMARY KEY,
teac_name VARCHAR(20) NOT NULL,
subj_id NUMERIC(5) REFERENCES subj ON DELETE SET NULL,
teac_certifi_date DATE
);
INSERT INTO teacher
VALUES
(00011,'정선생',00001,'2017-03-11'),
(00021,'홍선생',00002,'2017-04-12'),
(00031,'박선생',00003,'2017-04-13');
DELETE FROM subj WHERE subj_id =00002;
SELECT * FROM teacher;
날아간것 null 된다.
ex)ON DELETE SET DEFAULT, *** 지워지면 초기값으로 변경된다.
DROP TABLE iF EXISTS teacher;
DROP TABLE iF EXISTS subj;
CREATE TABLE subj (
subj_id NUMERIC(5) NOT NULL PRIMARY KEY,
subj_name VARCHAR(60) NOT NULL
);
INSERT INTO subj
VALUES
(00001,'mathematics'),
(00002,'science'),
(00003,'prigraming');
CREATE TABLE teacher (
teac_id NUMERIC(5) NOT NULL PRIMARY KEY,
teac_name VARCHAR(20) NOT NULL,
subj_id NUMERIC(5) REFERENCES subj ON DELETE SET DEFAULT,
teac_certifi_date DATE
);
INSERT INTO teacher
VALUES
(00011,'정선생',00001,'2017-03-11'),
(00021,'홍선생',00002,'2017-04-12'),
(00031,'박선생',00003,'2017-04-13');
DELETE FROM subj WHERE subj_id =00002;
SELECT * FROM teacher;
CHECK
check 명렁어 뒤에나오는 식이 boolean 타입의 true 를 만족해햐함.
ex
CREATE TABLE order_info (
order_no INTEGER NOT NULL PRIMARY KEY,
cust_name VARCHAR(20,)
price MONEY,
order_qty INTEGER CHECK (order_qty>0)
);
INSERT INTO order_info VALUES
(1,'sm',1000,-1),
(2,'mary',2000,1),
(3,'sin',3000,0);
ERROR: 오류: 새 자료가 "order_info" 릴레이션의 "order_info_order_qty_check" 체크 제약 조건을 위반했습니다 DETAIL: 실패한 자료: (3, sin, \3,000, 0)
SQL state: 23514
컴럼 추가
ALTER TABLE 테이블이름
ADD COLUMN 컬럼이름 데이터타입 제약조건
ALTER TABLE teacher
ADD COLUMN teac_xx DATE;
컬럼 수정 '
ALTER TABLE teacher
ALTER COLUMN teac_bith SET NOT NULL;
컬럼 수정 + NOT NULL /// 디폴트 값 줄 수 있다.
ALTER TABLE teacher
ADD COLUMN teac_birth DATE DEFAULT '2020-01-01' NOT NULL;
테이블의 컬럼 삭제
ALTER TABLE teacher
DROP COLUMN teac_bith;
ALTER TABLE book_info DROP COLUMN book_name;
참조ALTER TABLE book_info DROP COLUMN book_name;하는 부모 컬럼 지울 수 없다..
CREATE TABLE book_info (
book_id INTEGER NOT NULL PRIMARY KEY,
book_name VARCHAR(20) NOT NULL UNIQUE
);
INSERT INTO book_info VALUES
(1,'POSTGRESQL'),
(2,'MONGODB');
CREATE TABLE library (
id INTEGER NOT NULL PRIMARY KEY,
name VARCHAR(40) NOT NULL,
book_name VARCHAR(20) NOT NULL REFERENCES book_info(book_name)
);
INSERT INTO library VALUES
(1,'국립도서관','POSTGRESQL');
ALTER TABLE book_info DROP COLUMN book_name;
///오류 뜸. 레퍼런스 되어있어서 삭제안됨.
CREATE TABLE book_info (
book_id INTEGER NOT NULL PRIMARY KEY,
book_name VARCHAR(20) NOT NULL UNIQUE
);
INSERT INTO book_info VALUES
(1,'POSTGRESQL'),
(2,'MONGODB');
CREATE TABLE library (
id INTEGER NOT NULL PRIMARY KEY,
name VARCHAR(40) NOT NULL,
book_name VARCHAR(20) NOT NULL REFERENCES book_info(book_name)
);
INSERT INTO library VALUES
(1,'국립도서관','POSTGRESQL');
ALTER TABLE book_info DROP COLUMN book_name CASCADE;
// 제작조건 (해당 개체 library )테이블 개체가 덩달아 삭제됨.
컬럼의 값은 업데이트를 사용하여 수정한다 .!
UPDATE develop_book
SET name = 'java'
WHERE book_id =2
RETURNING *;
컬럼이름 바꾸기
ALTER TABLE book_info
ADD COLUMN name VARCHAR(60) DEFAULT '_' NOT NULL;
ALTER TABLE book_info
RENAME name TO book_name;
DROP TABLE IF EXISTS library;
DROP TABLE IF EXISTS book_info;
CREATE TABLE book_info (
book_id INTEGER NOT NULL PRIMARY KEY,
book_name VARCHAR(20) NOT NULL UNIQUE
);
INSERT INTO book_info VALUES
(1,'POSTGRESQL'),
(2,'MONGODB');
CREATE TABLE library (
id INTEGER NOT NULL PRIMARY KEY,
name VARCHAR(40) NOT NULL,
book_name VARCHAR(20) NOT NULL REFERENCES book_info(book_name)
);
INSERT INTO library VALUES
(1,'국립도서관','POSTGRESQL');
ALTER TABLE book_info RENAME book_name TO name;
SELECT * FROM book_info;
참조되고있었다면 이름 바뀌면 자동으로 참조 대상의 이름이 바뀐다..
ALTER 로 PK 추가하기
CREATE TABLE book (
id INTEGER NOT NULL,
name VARCHAR(20) NOT NULL
);
ALTER TABLE book
ADD PRIMARY KEY (id);
SELECT * FROM book;
FK 추가하기
ADD FOREIGN KEY (book_id) REFERENCES book(id);
DROP TABLE IF EXISTS library;
CREATE TABLE library (
lib_id INTEGER NOT NULL PRIMARY KEY,
lib_name VARCHAR(40) NOT NULL,
book_id INTEGER NOT NULL
);
ALTER TABLE library
ADD FOREIGN KEY (book_id) REFERENCES book(id);
ALTER 로 자료형 바꾸기
CREATE TABLE water (
id SMALLINT NOT NULL PRIMARY KEY,
name TEXT NOT NULL,
location_no VARCHAR NOT NULL,
descroption TEXT
);
INSERT INTO water VALUES(01,'천치','02','백두산 천지');
ALTER TABLE water
ALTER COLUMN id TYPE INTEGER,
ALTER COLUMN descroption TYPE VARCHAR; -> ok
ALTER TABLE water
ALTER COLUMN location_no TYPE INTEGER; --> fail
오류 :
ERROR: 오류: "location_no" 칼럼의 자료형을 integer 형으로 형변환할 수 없음 HINT: "USING location_no::integer" 구문을 추가해야 할 것 같습니다.
SQL state: 42804
캐스팅
:: /// cast('01',01) // 문자 → 숫자
ALTER TABLE water
ALTER COLUMN location_no TYPE INTEGER USING location_no::integer;
→ 된다... USING location_no::integer; 캐스팅
'Coding > DB' 카테고리의 다른 글
도커에서 DB접속하기(postgreSQL) (0) | 2022.04.19 |
---|---|
ERD Cloud : DB 테이블 간단히 그리기 (0) | 2022.04.08 |
DBeaver_PostSQL : 데이터베이스 연결 (0) | 2022.04.08 |
DB_GUI_pgadmin / Dbeaver (0) | 2022.01.31 |
DB_ SQL 정의 및 postgreSQL설치 (0) | 2022.01.31 |
- Total
- Today
- Yesterday
- 유니티플러그인
- DeepLeaning
- CNC
- Arduino
- docker
- AI
- TouchDesigner
- oculuspro
- ardity
- JacobianMatrices
- 라즈베리파이
- Unity
- Express
- sequelize
- 유니티
- VR
- RNN
- MQTT
- unity 360
- StableDiffusion
- opencv
- three.js
- colab
- houdini
- 후디니
- emotive eeg
- Java
- motor controll
- Python
- node.js
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |