실용 SQL

부서진·2023년 2월 8일

Review

목록 보기
2/7

33p

Stack Builder로 PostGIS를 설치할 수 없는 경우 PostGIS 사이트에서 별도의 설치 프로그램을 다운로드하고 가이드를 참조해 설치하세요.

39p (출처)

pgAdmin4.exe 실행 후, PostgreSQL 서버 접속 시 비밀번호를 입력하면 아래와 같은 오류 발생

connection to server at localhost (::1) port 5432 failed
  1. Windows + R
  2. services.msc 입력
  3. postgresql 찾아 서비스 "시작" 클릭

53, 55p

코드가 잘못되었을 때 도움 구하는 방법과 각 장에서 공부한 것을 토대로 연습 문제까지 제공되어 복습하기에 좋은 것 같습니다 :)

64p

연산자기능코드
<> 또는 !=같지 않음WHERE school <> 'Baker Middel'
LIKE패턴 일치(대소문자 구분)WHERE first_name LIKE 'Sam%'
ILIKE패턴 일치(대소문자 구분하지 않음WHERE first_name ILIKE 'sam%'

66p

  • 퍼센트 기호(%): 문자 한 개 또는 여러 개와 매칭하는 와일드카드
  • 언더바(_): 문자 한 개와 매칭하는 와일드카드
  • LIKE와 ILIKE는 패턴을 검색하므로 데이터베이스가 클수록 검색 성능이 떨어질 수 있습니다.

73p

YourDirectory에 한글이 있는 경우 에러 발생

74p

char와 varchar 타입 열을 10자로 제한하였지만 그중 char 타입 열만이 쓰이지 않은 글자 수만큼 공백을 채워 매번 10자를 출력합니다. varchar와 text 타입 열은 사용자가 입력한 문자만 담고 있습니다.

76, 77p 자동 증가 정수

  • SERIAL: 새 행이 추가될 때마다 1씩 증가
  • GENERATED ALWAYS AS IDENTITY: 설정을 수동으로 재정의하지 않는 이상 해당 열에 값을 삽입할 수 없음
  • GENERATED BY DEFAULT AS IDENTITY: 해당 열에 사용자가 값을 제공하지 않는 경우 기본적으로 자동 증가 정수를 삽입
CREATE TABLE people (
	id integer GENERATED ALWAYS AS IDENTITY,
    person_name varchar(100)
);

78p

  • 고정 소수점
    • numeric(precision, scale)
    • decimal(precision, scale)
    • precision: 입력될 숫자의 전체 자릿수
    • scale: 소수점 아래 자릿수
  • 부동 소수점
    • real: 소수점 뒤 6자리 숫자
    • double precision: 소수점 뒤 15자리 숫자
    • 패딩을 추가하지 않음
    • 부정확

85p

  • json: JSON 텍스트를 그대로 저장
  • jsonb: JSON 텍스트를 바이너리 형식으로 변환해 저장

86, 87p CAST를 통해 데이터 타입 변환하기

CAST() 함수는 대상 데이터 타입이 원래 값을 수용할 수 있을 때만 성립합니다. 문자 타입에는 숫자가 포함될 수 있기 때문에 정수를 텍스트로 변환하는 것이 가능합니다. 하지만 반대로 문자나 텍스트를 숫자로 변환할 수는 없습니다.
CAST()를 사용하면 의도한 바를 분명히 할 수 있는데, PostgreSQL은 그보다 공간을 덜 차지하고 더욱 명확한 단축 표기법으로 이중 콜론(::)을 제공합니다.

SELECT timestamp_column, CAST(timestamp_column AS varchar(10))
FROM date_time_types;

SELECT timestamp_column::varchar(10)
FROM date_time_types;

94p

제공된 각 데이터에 대한 설명이 충분하여 분석에 용이합니다 :)

99, 100p (CSV) COPY를 사용하여 열 하위 집합 가져오기

테이블의 첫 번째 열은 자동 증가 정수인 id열인데 CSV 파일의 시작에는 텍스트 열 town이 있어 에러가 뜨는 경우

CREATE TABLE supervisor_salaries (
    id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    town text,
    county text,
    supervisor text,
    start_date text,
    salary numeric(10,2),
    benefits numeric(10,2)
);

COPY supervisor_salaries (town, supervisor, salary)
FROM 'C:\YourDirectory\supervisor_salaries.csv'
WITH (FORMAT CSV, HEADER);

SELECT * FROM supervisor_salaries ORDER BY id LIMIT 2;
idtowncountrysupervisorstart_datesalarybenefits
1AnytownJones67000.00
2BumblyburgLarry74999.00

102p 가져오는 과정에서 열에 값 추가하기

CREATE LIKE 구문으로 기존 테이블과 동일한 형태의 임시 테이블 생성, 작은 따옴표 안에 문자열 Mills를 열 이름이 아니라 두 번째 열에 대한 값으로 지정

CREATE TEMPORARY TABLE supervisor_salaries_temp 
    (LIKE supervisor_salaries INCLUDING ALL);

COPY supervisor_salaries_temp (town, supervisor, salary)
FROM 'C:\YourDirectory\supervisor_salaries.csv'
WITH (FORMAT CSV, HEADER);

INSERT INTO supervisor_salaries (town, county, supervisor, salary)
SELECT town, 'Mills', supervisor, salary
FROM supervisor_salaries_temp;

DROP TABLE supervisor_salaries_temp;

104p 쿼리 결과 내보내기

COPY (
    SELECT county_name, state_name
    FROM us_counties_pop_est_2019
    WHERE county_name ILIKE '%mill%'
     )
TO 'C:\YourDirectory\us_counties_mill_export.csv'
WITH (FORMAT CSV, HEADER);

.
.
.

출판사로부터 도서를 제공받아 솔직하게 작성한 리뷰입니다.

1개의 댓글

comment-user-thumbnail
2024년 4월 23일

$ brew update
$ brew install mysql@8.0
$ mysql --version
$ mysql_secure_installation
$ mysql -u root -p
$ brew services start mysql@8.0
$ brew services stop mysql@8.0

답글 달기