
고급 SQL
# 내가 속한 타임존 표시
SHOW TIMEZONE
# 현재 시간대 표시
SELECT NOW()
# 타임스탬프 형식이 아닌 Thu Mar 19 ... 이런 식
SELECT TIMEOFDAY()
AGE(date_col)
TO_CHAR(date_col, 'mm-dd-yyyy')
SELECT TO_CHAR(payment_date,'MONTH - YYYY')
FROM payment
SELECT DISTINCT(TO_CHAR(payment_date,'MONTH'))
FROM payment
SELECT EXTRACT(YEAR FROM payment_date)
FROM payment
날짜에서 요일을 가져올 수 있습니다
보통 0은 일요일
SELECT COUNT(*) FROM payment
WHERE EXTRACT(dow FROM payment_date)= 1
문자열
SELECT first_name || last_name FROM customer
SELECT first_name || ' ' || last_name AS full_name FROM customer
서브쿼리
SELECT title,rental_rate FROM film
WHERE rental_rate >(SELECT AVG(rental_rate) FROM film)
SELECT first_name, last_name
FROM customer AS c
WHERE EXISTS
(SELECT * FROM payment as p
WHERE p.customer_id = c.customer_id
AND amount >11)
데이터베이스 및 테이블
-각 기본 키는 테이블 내에서 고유해야 합니다.
-모든 레코드를 고유하게 식별할 수 있도록 합니다.
테이블 제약
CREATE TABLE Employee (
ID int NOT NULL,
Name varchar(255) NOT NULL,
Age int,
CHECK (Age >= 18)
);
CREATE TABLE employees(
emp_id SERIAL PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
birthday DATE CHECK (birthday > '1900-01-01'),
hire_date DATE CHECK (hire_date > birthday),
salary INTEGER CHECK (salary >0)
)
지정된 열이나 표현식에서 두 행을 비교하는 경우 이러한 비교 중 적어도 하나가 false 또는 null을 반환하는지 확인하는 데 사용
지정된 값 범위에 대해 중복이 발생하지 않도록 하는 데 주로 사용됩니다.
CREATE TABLE RoomReservations (
RoomID int NOT NULL,
TimeSlot tsrange,
EXCLUDE USING gist (RoomID WITH =, TimeSlot WITH &&)
);
추가 기능
INSERT INTO Employees (Name, Department)
VALUES ('John Doe', 'Finance')
RETURNING EmployeeID;
-- 새 행을 삽입하고 새 직원의 'EmployeeID'를 즉시 반환
UPDATE Employees
SET Department = 'HR'
WHERE Name = 'John Doe'
RETURNING Name, Department;
--'John Doe' 부서가 'HR'로 업데이트되고 직원의 이름과 새 부서가 반환
PostgreSQL과 같은 특정 SQL 데이터베이스 시스템에만 적용
테이블에 자동 증가 정수 열 생성
smallserial, serial,bigserial
CREATE TABLE Employees (
EmployeeID SERIAL PRIMARY KEY,
Name VARCHAR(100),
Department VARCHAR(50)
);
CRUD
CREATE TABLE account_job(
user_id INTEGER REFERENCES account(user_id),
job_id INTEGER REFERENCES job(job_id),
hire_date TIMESTAMPS
)
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
DELETE FROM Orders
WHERE OrderID = 12345;
ALTER TABLE Employees
ADD Email VARCHAR(255);
ALTER TABLE Employees
DROP COLUMN Department;
ALTER TABLE Employees
MODIFY COLUMN Department VARCHAR(100);
ALTER TABLE Employees
ADD CONSTRAINT unique_email UNIQUE (Email);
테이블, 데이터베이스, 인덱스 또는 뷰와 같은 데이터베이스 객체를 제거하는 데 사용
객체가 존재하는 것이 확실할 때, 종속성이 없을때 단독 사용
DROP TABLE Employees;
DROP TABLE Employees CASCADE;
DROP TABLE IF EXISTS Employees;