[SQL 스터디_1팀] 2주차_강의노트
[이미지 포함 정리 참고]
https://www.notion.so/1-5e535de3f93a470c92f9970223bbed7a?pvs=4
박지우(1)
Relational Databases
www.notion.so
Relational Databases
Database
: 데이터를 저장하는 공간
ex) patron, books and checkouts table → 포함하는 공간이 데이터베이스
- Relational database
: 데이터베이스 안에서 테이블의 데이터 사이의 관계를 정의하는 것
ex) Which books did James check out during 2022?
→ James(patron) / card_num(90123) / card_num(checkouts) / id(checkouts) / id(books) / id(title)
- Adavantages
- 테이블이 엑셀과 구글시트와 같이 스프레드시트로 정리되어 있지만 데이터베으스는 이 스프레드시트보다 강력하다고 한다.
- 많은 사용자들이 쿼리를 사용해서 동시에 데이터로부터 인사이트를 모을 수 있다
- 데이터베이스가 queried 되었을 때 데이터베이스 안에 저장된 데이터는 변하지 않는다
- 데이터베이스 정보는 쿼리 방법에 따라 접근가능하고 제공된다
Tables
- rows and columns 으로 구성되어 있다
- row : records (row의 수가 unlimited)
- row in a table
- an individual observation
- columns : fields (field는 데이터베이스 만들어졌을 때의 set에 limited)
- one piece of information about all observation
- ex) name field - lists all of the name
- row : records (row의 수가 unlimited)
- Table manners
- Table naming
- lowercase
- space를 사용하면 안된다 + 대신에 underscore 사용
- collective group(집단)을 나타낼 수 있는 것이 제일 좋지만 plural name(복수형 이름) 가능
- field naming
- lowercase
- should not involve spaces
- singular than plural
- cannot have the same name
- table 이름과 같으면 안된다
- Key : unique identifier
- 같은 테이블안에서 다른 record들을 구별하게 해주는 역할을 한다 → index느낌
- table topic remain separate
- a clearly marked subject > multiple subjects is combined→ duplicate information → less clearMaham has none checkout_id → 더이상 card_num unique하지 않다.
- ex) lzzy two checkouts
- Table naming
Data
: 데이터 타입은 각 필드마다 명시가 되어있어야 한다. 데이터 타입은 수/ 텍스트 / 날짜에 따라 달라진다
cf) 데이터 타입 쓰는 이유
- 데이터 타입이 다른 데이터들은 다르게 저장되고 다른 저장공간을 차지하기 때문
- 특정한 데이터 타입에 따라 몇몇 계산이 그것에만 적용되기 때문에
ex) multiply a number by another number / text multiply (X)
- String : 문자의 sequence (letter, punctuation)
- string 데이터 타입에도 종류가 나누어진다
- 250까지 문자를 가질 수 있는 타입 → 저장공간을 아낄 수 있다
- more flexible and can store large strings / tens of thousands of characters
- → VARCHAR
- string 데이터 타입에도 종류가 나누어진다
- ex) Manham, James
- Integers : whole number
- 몇가지 종류로 나뉜다 (수의 크기에 따라)
- INT (less than negative two billion to more than positive two billion
- 몇가지 종류로 나뉜다 (수의 크기에 따라)
- Floats : number (fractional part를 포함)
- NUMERIC : 38 소수자리까지 저장할 수 있다
- Schemas : blueprints of databases , 데이터베이스의 구조를 보여주고 데이터베이스에 어떤 테이블이 저장되어 있고 테이블 사이에 관계도 보여준다
- 각 필드마다 가지고 있는 데이터의 타입을 알려준다
- Storage
- 데이터베이스 테이블은 서버의 하드 디스크에 저장되어 있는 것
- 서버는 데이터 접근가능하게 하고 서버에 저장된 웹사이트나 파일에 접근하게 만든다
Querying
: 많은 조직에서는 SQL을 spreadsheet의 대체제로 사용한다
만약 데이터가 spreadsheet에 있고 다른 데이터와 연관이 없다면 단순히 가져다 쓰면 된다
BUT Diverse한 데이터는 데이터베이스 안에서 정리하는 것이 가장 best
Keywords
: 코드에서 수행할 작업을 하는데 사용되는 약속된 단어! (코드 함수 같은 것)
SELECT / FROM
- SELECT : fields should be selected
- FROM : 필드가 저장된 Table
cf) 퀴리가 완성되었을 때는 세미클론을 찍어줘야한다 (;)
예제1)
SELECT card_num, name # 여러 필드 가져오고 싶으면 (,) 사용
FROM patrons;
SELECT name, card_num # 필드 순서 바꾸기
FROM patrons;
SELECT * #모든 필드 다 가져오기
FROM patrons ;
- Aliasing : rename columns
SELECT name AS first_name, year_hired # 필드(name) 이름 새로 변경(first_name)
FROM employees;
- Distinct records : return a list of unique values
SELECT DISTINCT year_hired # 중복되는 record 제거
FROM employees;
SELECT DISTINCT dept_id, year_hired # 두 필드 모두 고려한 중복 값 제거
FROM employees;
- Views : 저장된 SQL SELECT 문의 결과 테이블을 나타낸다
- 뷰에 포함된 데이터는 데이터베이스에 저장되지 않는다 → 가상 테이블이기 때문에
- 쿼리 코드가 저장되는 것
- 뷰 생성법
- CREATE VIEW employee_hire_years AS SELECT id, name, year_hired FROM employees;
- View 사용법
- SELECT id,name FROM employee_hire_years;
Selecting Data
- Count : 필드안에 있는 레코드의 수
SELECT COUNT(birthdate) AS count_birthdates # COUNT(field)
FROM people ;
SELECT COUNT(name) AS count_names, COUNT(birthdate) AS count_birthdates #multiple field
FROM people ;
SELECT COUNT(*) AS total_records
FROM people; # all fileds의 수
SELECT COUNT(DISTINCT birthdate) AS count_distinct_birthdates
FROM people;
- order of execution : not processed in its written order
- table 정하기 → select 문
- LIMIT : result개수 정할 수 있다
- Debugging SQL
- Mispelling
- Comma errors
- Keyword errors
- SQL formatting
- Formatiing is not required
- 한줄로 써도 실행된다
- capitalization 안해도 된다
- semicolon (PostgreSQL 필요없다)
- Best practice
- Easier to translate
- Indicate the end of query
- non-standard field names
- release year - release_year
- “release year” 사용하면 된다
SELECT title, "release year", country FROM films LIMIT 3 ;
- release year - release_year
- Formatiing is not required
Filtering Records
- Where : 조건문
- Comparison operators
- Strings : single-quotes
- Order of execution
- written code : select - from - where - limit
- order of execution : from - where - select - limit
- SELECT title FROM films WHERE release_year > 1960; # WHERE release_year = 1960 # WHERE release_year <> 1960 (not equal)
- Multiple criteria
- OR, AND, BETWEEN
- OR : at least one condition
- AND : satisfy all criteria
- AND, OR
- SELECT title FROM films WHERE (release_year = 1994 OR release_year = 1995) AND (certification = 'PG' OR certification ='R') ;
- BETWEEN, AND
- SELECT * FROM coats WHERE color = 'yellow' OR length = 'short'; SELECT * FROM coats WHERE color = 'yellow' AND length = 'short'; SELECT * FROM coats WHERE buttons BETWEEN 1 AND 5;
- OR, AND, BETWEEN
Filtering text
- Filter a pattern rather than text
- LIKE : 필드에 pattern 찾기
- % : zero, one or many characters
- _ : a single character
- NOT LIKE : 이 pattern 아닌 field
- Wildcard position
- ex) ‘%r’ : 끝에 r로 끝나는 것 / ‘_ _t%’ : 앞에 두개 글자 있고 다음이 t
- LIKE : 필드에 pattern 찾기
- WHERE , IN
- SELECT title FROM films WHERE release_year IN (1920,1930,1940) ; # 1920,1930,1940 중에 하나
NULL values
- missing values
- Count(field_name) : 결측치 포함하지 않는다
- count(*) : 결측치 포함
- IS NULL
- SELECT COUNT(*) AS FROM people where birthdate IS NULL ;
- IS NOT NULL
Relational Databases
Database
: 데이터를 저장하는 공간
ex) patron, books and checkouts table → 포함하는 공간이 데이터베이스
- Relational database
: 데이터베이스 안에서 테이블의 데이터 사이의 관계를 정의하는 것
ex) Which books did James check out during 2022?
→ James(patron) / card_num(90123) / card_num(checkouts) / id(checkouts) / id(books) / id(title)
- Adavantages
- 테이블이 엑셀과 구글시트와 같이 스프레드시트로 정리되어 있지만 데이터베으스는 이 스프레드시트보다 강력하다고 한다.
- 많은 사용자들이 쿼리를 사용해서 동시에 데이터로부터 인사이트를 모을 수 있다
- 데이터베이스가 queried 되었을 때 데이터베이스 안에 저장된 데이터는 변하지 않는다
- 데이터베이스 정보는 쿼리 방법에 따라 접근가능하고 제공된다
Tables
- rows and columns 으로 구성되어 있다
- row : records (row의 수가 unlimited)
- row in a table
- an individual observation
- columns : fields (field는 데이터베이스 만들어졌을 때의 set에 limited)
- one piece of information about all observation
- ex) name field - lists all of the name
- row : records (row의 수가 unlimited)
- Table manners
- Table naming
- lowercase
- space를 사용하면 안된다 + 대신에 underscore 사용
- collective group(집단)을 나타낼 수 있는 것이 제일 좋지만 plural name(복수형 이름) 가능
- field naming
- lowercase
- should not involve spaces
- singular than plural
- cannot have the same name
- table 이름과 같으면 안된다
- Key : unique identifier
- 같은 테이블안에서 다른 record들을 구별하게 해주는 역할을 한다 → index느낌
- table topic remain separate
- a clearly marked subject > multiple subjects is combined→ duplicate information → less clearMaham has none checkout_id → 더이상 card_num unique하지 않다.
- ex) lzzy two checkouts
- Table naming
Data
: 데이터 타입은 각 필드마다 명시가 되어있어야 한다. 데이터 타입은 수/ 텍스트 / 날짜에 따라 달라진다
cf) 데이터 타입 쓰는 이유
- 데이터 타입이 다른 데이터들은 다르게 저장되고 다른 저장공간을 차지하기 때문
- 특정한 데이터 타입에 따라 몇몇 계산이 그것에만 적용되기 때문에
ex) multiply a number by another number / text multiply (X)
- String : 문자의 sequence (letter, punctuation)
- string 데이터 타입에도 종류가 나누어진다
- 250까지 문자를 가질 수 있는 타입 → 저장공간을 아낄 수 있다
- more flexible and can store large strings / tens of thousands of characters
- → VARCHAR
- string 데이터 타입에도 종류가 나누어진다
- ex) Manham, James
- Integers : whole number
- 몇가지 종류로 나뉜다 (수의 크기에 따라)
- INT (less than negative two billion to more than positive two billion
- 몇가지 종류로 나뉜다 (수의 크기에 따라)
- Floats : number (fractional part를 포함)
- NUMERIC : 38 소수자리까지 저장할 수 있다
- Schemas : blueprints of databases , 데이터베이스의 구조를 보여주고 데이터베이스에 어떤 테이블이 저장되어 있고 테이블 사이에 관계도 보여준다
- 각 필드마다 가지고 있는 데이터의 타입을 알려준다
- Storage
- 데이터베이스 테이블은 서버의 하드 디스크에 저장되어 있는 것
- 서버는 데이터 접근가능하게 하고 서버에 저장된 웹사이트나 파일에 접근하게 만든다
Querying
: 많은 조직에서는 SQL을 spreadsheet의 대체제로 사용한다
만약 데이터가 spreadsheet에 있고 다른 데이터와 연관이 없다면 단순히 가져다 쓰면 된다
BUT Diverse한 데이터는 데이터베이스 안에서 정리하는 것이 가장 best
Keywords
: 코드에서 수행할 작업을 하는데 사용되는 약속된 단어! (코드 함수 같은 것)
SELECT / FROM
- SELECT : fields should be selected
- FROM : 필드가 저장된 Table
cf) 퀴리가 완성되었을 때는 세미클론을 찍어줘야한다 (;)
예제1)
SELECT card_num, name # 여러 필드 가져오고 싶으면 (,) 사용
FROM patrons;
SELECT name, card_num # 필드 순서 바꾸기
FROM patrons;
SELECT * #모든 필드 다 가져오기
FROM patrons ;
- Aliasing : rename columns
SELECT name AS first_name, year_hired # 필드(name) 이름 새로 변경(first_name)
FROM employees;
- Distinct records : return a list of unique values
SELECT DISTINCT year_hired # 중복되는 record 제거
FROM employees;
SELECT DISTINCT dept_id, year_hired # 두 필드 모두 고려한 중복 값 제거
FROM employees;
- Views : 저장된 SQL SELECT 문의 결과 테이블을 나타낸다
- 뷰에 포함된 데이터는 데이터베이스에 저장되지 않는다 → 가상 테이블이기 때문에
- 쿼리 코드가 저장되는 것
- 뷰 생성법
- CREATE VIEW employee_hire_years AS SELECT id, name, year_hired FROM employees;
- View 사용법
- SELECT id,name FROM employee_hire_years;
Selecting Data
- Count : 필드안에 있는 레코드의 수
SELECT COUNT(birthdate) AS count_birthdates # COUNT(field)
FROM people ;
SELECT COUNT(name) AS count_names, COUNT(birthdate) AS count_birthdates #multiple field
FROM people ;
SELECT COUNT(*) AS total_records
FROM people; # all fileds의 수
SELECT COUNT(DISTINCT birthdate) AS count_distinct_birthdates
FROM people;
- order of execution : not processed in its written order
- table 정하기 → select 문
- LIMIT : result개수 정할 수 있다
- Debugging SQL
- Mispelling
- Comma errors
- Keyword errors
- SQL formatting
- Formatiing is not required
- 한줄로 써도 실행된다
- capitalization 안해도 된다
- semicolon (PostgreSQL 필요없다)
- Best practice
- Easier to translate
- Indicate the end of query
- non-standard field names
- release year - release_year
- “release year” 사용하면 된다
SELECT title, "release year", country FROM films LIMIT 3 ;
- release year - release_year
- Formatiing is not required
Filtering Records
- Where : 조건문
- Comparison operators
- Strings : single-quotes
- Order of execution
- written code : select - from - where - limit
- order of execution : from - where - select - limit
- SELECT title FROM films WHERE release_year > 1960; # WHERE release_year = 1960 # WHERE release_year <> 1960 (not equal)
- Multiple criteria
- OR, AND, BETWEEN
- OR : at least one condition
- AND : satisfy all criteria
- AND, OR
- SELECT title FROM films WHERE (release_year = 1994 OR release_year = 1995) AND (certification = 'PG' OR certification ='R') ;
- BETWEEN, AND
- SELECT * FROM coats WHERE color = 'yellow' OR length = 'short'; SELECT * FROM coats WHERE color = 'yellow' AND length = 'short'; SELECT * FROM coats WHERE buttons BETWEEN 1 AND 5;
- OR, AND, BETWEEN
Filtering text
- Filter a pattern rather than text
- LIKE : 필드에 pattern 찾기
- % : zero, one or many characters
- _ : a single character
- NOT LIKE : 이 pattern 아닌 field
- Wildcard position
- ex) ‘%r’ : 끝에 r로 끝나는 것 / ‘_ _t%’ : 앞에 두개 글자 있고 다음이 t
- LIKE : 필드에 pattern 찾기
- WHERE , IN
- SELECT title FROM films WHERE release_year IN (1920,1930,1940) ; # 1920,1930,1940 중에 하나
NULL values
- missing values
- Count(field_name) : 결측치 포함하지 않는다
- count(*) : 결측치 포함
- IS NULL
- SELECT COUNT(*) AS FROM people where birthdate IS NULL ;
- IS NOT NULL
Relational Databases
Database
: 데이터를 저장하는 공간
ex) patron, books and checkouts table → 포함하는 공간이 데이터베이스
- Relational database
: 데이터베이스 안에서 테이블의 데이터 사이의 관계를 정의하는 것
ex) Which books did James check out during 2022?
→ James(patron) / card_num(90123) / card_num(checkouts) / id(checkouts) / id(books) / id(title)
- Adavantages
- 테이블이 엑셀과 구글시트와 같이 스프레드시트로 정리되어 있지만 데이터베으스는 이 스프레드시트보다 강력하다고 한다.
- 많은 사용자들이 쿼리를 사용해서 동시에 데이터로부터 인사이트를 모을 수 있다
- 데이터베이스가 queried 되었을 때 데이터베이스 안에 저장된 데이터는 변하지 않는다
- 데이터베이스 정보는 쿼리 방법에 따라 접근가능하고 제공된다
Tables
- rows and columns 으로 구성되어 있다
- row : records (row의 수가 unlimited)
- row in a table
- an individual observation
- columns : fields (field는 데이터베이스 만들어졌을 때의 set에 limited)
- one piece of information about all observation
- ex) name field - lists all of the name
- row : records (row의 수가 unlimited)
- Table manners
- Table naming
- lowercase
- space를 사용하면 안된다 + 대신에 underscore 사용
- collective group(집단)을 나타낼 수 있는 것이 제일 좋지만 plural name(복수형 이름) 가능
- field naming
- lowercase
- should not involve spaces
- singular than plural
- cannot have the same name
- table 이름과 같으면 안된다
- Key : unique identifier
- 같은 테이블안에서 다른 record들을 구별하게 해주는 역할을 한다 → index느낌
- table topic remain separate
- a clearly marked subject > multiple subjects is combined→ duplicate information → less clearMaham has none checkout_id → 더이상 card_num unique하지 않다.
- ex) lzzy two checkouts
- Table naming
Data
: 데이터 타입은 각 필드마다 명시가 되어있어야 한다. 데이터 타입은 수/ 텍스트 / 날짜에 따라 달라진다
cf) 데이터 타입 쓰는 이유
- 데이터 타입이 다른 데이터들은 다르게 저장되고 다른 저장공간을 차지하기 때문
- 특정한 데이터 타입에 따라 몇몇 계산이 그것에만 적용되기 때문에
ex) multiply a number by another number / text multiply (X)
- String : 문자의 sequence (letter, punctuation)
- string 데이터 타입에도 종류가 나누어진다
- 250까지 문자를 가질 수 있는 타입 → 저장공간을 아낄 수 있다
- more flexible and can store large strings / tens of thousands of characters
- → VARCHAR
- string 데이터 타입에도 종류가 나누어진다
- ex) Manham, James
- Integers : whole number
- 몇가지 종류로 나뉜다 (수의 크기에 따라)
- INT (less than negative two billion to more than positive two billion
- 몇가지 종류로 나뉜다 (수의 크기에 따라)
- Floats : number (fractional part를 포함)
- NUMERIC : 38 소수자리까지 저장할 수 있다
- Schemas : blueprints of databases , 데이터베이스의 구조를 보여주고 데이터베이스에 어떤 테이블이 저장되어 있고 테이블 사이에 관계도 보여준다
- 각 필드마다 가지고 있는 데이터의 타입을 알려준다
- Storage
- 데이터베이스 테이블은 서버의 하드 디스크에 저장되어 있는 것
- 서버는 데이터 접근가능하게 하고 서버에 저장된 웹사이트나 파일에 접근하게 만든다
Querying
: 많은 조직에서는 SQL을 spreadsheet의 대체제로 사용한다
만약 데이터가 spreadsheet에 있고 다른 데이터와 연관이 없다면 단순히 가져다 쓰면 된다
BUT Diverse한 데이터는 데이터베이스 안에서 정리하는 것이 가장 best
Keywords
: 코드에서 수행할 작업을 하는데 사용되는 약속된 단어! (코드 함수 같은 것)
SELECT / FROM
- SELECT : fields should be selected
- FROM : 필드가 저장된 Table
cf) 퀴리가 완성되었을 때는 세미클론을 찍어줘야한다 (;)
예제1)
SELECT card_num, name # 여러 필드 가져오고 싶으면 (,) 사용
FROM patrons;
SELECT name, card_num # 필드 순서 바꾸기
FROM patrons;
SELECT * #모든 필드 다 가져오기
FROM patrons ;
- Aliasing : rename columns
SELECT name AS first_name, year_hired # 필드(name) 이름 새로 변경(first_name)
FROM employees;
- Distinct records : return a list of unique values
SELECT DISTINCT year_hired # 중복되는 record 제거
FROM employees;
SELECT DISTINCT dept_id, year_hired # 두 필드 모두 고려한 중복 값 제거
FROM employees;
- Views : 저장된 SQL SELECT 문의 결과 테이블을 나타낸다
- 뷰에 포함된 데이터는 데이터베이스에 저장되지 않는다 → 가상 테이블이기 때문에
- 쿼리 코드가 저장되는 것
- 뷰 생성법
- CREATE VIEW employee_hire_years AS SELECT id, name, year_hired FROM employees;
- View 사용법
- SELECT id,name FROM employee_hire_years;
Selecting Data
- Count : 필드안에 있는 레코드의 수
SELECT COUNT(birthdate) AS count_birthdates # COUNT(field)
FROM people ;
SELECT COUNT(name) AS count_names, COUNT(birthdate) AS count_birthdates #multiple field
FROM people ;
SELECT COUNT(*) AS total_records
FROM people; # all fileds의 수
SELECT COUNT(DISTINCT birthdate) AS count_distinct_birthdates
FROM people;
- order of execution : not processed in its written order
- table 정하기 → select 문
- LIMIT : result개수 정할 수 있다
- Debugging SQL
- Mispelling
- Comma errors
- Keyword errors
- SQL formatting
- Formatiing is not required
- 한줄로 써도 실행된다
- capitalization 안해도 된다
- semicolon (PostgreSQL 필요없다)
- Best practice
- Easier to translate
- Indicate the end of query
- non-standard field names
- release year - release_year
- “release year” 사용하면 된다
SELECT title, "release year", country FROM films LIMIT 3 ;
- release year - release_year
- Formatiing is not required
Filtering Records
- Where : 조건문
- Comparison operators
- Strings : single-quotes
- Order of execution
- written code : select - from - where - limit
- order of execution : from - where - select - limit
- SELECT title FROM films WHERE release_year > 1960; # WHERE release_year = 1960 # WHERE release_year <> 1960 (not equal)
- Multiple criteria
- OR, AND, BETWEEN
- OR : at least one condition
- AND : satisfy all criteria
- AND, OR
- SELECT title FROM films WHERE (release_year = 1994 OR release_year = 1995) AND (certification = 'PG' OR certification ='R') ;
- BETWEEN, AND
- SELECT * FROM coats WHERE color = 'yellow' OR length = 'short'; SELECT * FROM coats WHERE color = 'yellow' AND length = 'short'; SELECT * FROM coats WHERE buttons BETWEEN 1 AND 5;
- OR, AND, BETWEEN
Filtering text
- Filter a pattern rather than text
- LIKE : 필드에 pattern 찾기
- % : zero, one or many characters
- _ : a single character
- NOT LIKE : 이 pattern 아닌 field
- Wildcard position
- ex) ‘%r’ : 끝에 r로 끝나는 것 / ‘_ _t%’ : 앞에 두개 글자 있고 다음이 t
- LIKE : 필드에 pattern 찾기
- WHERE , IN
- SELECT title FROM films WHERE release_year IN (1920,1930,1940) ; # 1920,1930,1940 중에 하나
NULL values
- missing values
- Count(field_name) : 결측치 포함하지 않는다
- count(*) : 결측치 포함
- IS NULL
- SELECT COUNT(*) AS FROM people where birthdate IS NULL ;
- IS NOT NULL
Relational Databases
Database
: 데이터를 저장하는 공간
ex) patron, books and checkouts table → 포함하는 공간이 데이터베이스
- Relational database
: 데이터베이스 안에서 테이블의 데이터 사이의 관계를 정의하는 것
ex) Which books did James check out during 2022?
→ James(patron) / card_num(90123) / card_num(checkouts) / id(checkouts) / id(books) / id(title)
- Adavantages
- 테이블이 엑셀과 구글시트와 같이 스프레드시트로 정리되어 있지만 데이터베으스는 이 스프레드시트보다 강력하다고 한다.
- 많은 사용자들이 쿼리를 사용해서 동시에 데이터로부터 인사이트를 모을 수 있다
- 데이터베이스가 queried 되었을 때 데이터베이스 안에 저장된 데이터는 변하지 않는다
- 데이터베이스 정보는 쿼리 방법에 따라 접근가능하고 제공된다
Tables
- rows and columns 으로 구성되어 있다
- row : records (row의 수가 unlimited)
- row in a table
- an individual observation
- columns : fields (field는 데이터베이스 만들어졌을 때의 set에 limited)
- one piece of information about all observation
- ex) name field - lists all of the name
- row : records (row의 수가 unlimited)
- Table manners
- Table naming
- lowercase
- space를 사용하면 안된다 + 대신에 underscore 사용
- collective group(집단)을 나타낼 수 있는 것이 제일 좋지만 plural name(복수형 이름) 가능
- field naming
- lowercase
- should not involve spaces
- singular than plural
- cannot have the same name
- table 이름과 같으면 안된다
- Key : unique identifier
- 같은 테이블안에서 다른 record들을 구별하게 해주는 역할을 한다 → index느낌
- table topic remain separate
- a clearly marked subject > multiple subjects is combined→ duplicate information → less clearMaham has none checkout_id → 더이상 card_num unique하지 않다.
- ex) lzzy two checkouts
- Table naming
Data
: 데이터 타입은 각 필드마다 명시가 되어있어야 한다. 데이터 타입은 수/ 텍스트 / 날짜에 따라 달라진다
cf) 데이터 타입 쓰는 이유
- 데이터 타입이 다른 데이터들은 다르게 저장되고 다른 저장공간을 차지하기 때문
- 특정한 데이터 타입에 따라 몇몇 계산이 그것에만 적용되기 때문에
ex) multiply a number by another number / text multiply (X)
- String : 문자의 sequence (letter, punctuation)
- string 데이터 타입에도 종류가 나누어진다
- 250까지 문자를 가질 수 있는 타입 → 저장공간을 아낄 수 있다
- more flexible and can store large strings / tens of thousands of characters
- → VARCHAR
- string 데이터 타입에도 종류가 나누어진다
- ex) Manham, James
- Integers : whole number
- 몇가지 종류로 나뉜다 (수의 크기에 따라)
- INT (less than negative two billion to more than positive two billion
- 몇가지 종류로 나뉜다 (수의 크기에 따라)
- Floats : number (fractional part를 포함)
- NUMERIC : 38 소수자리까지 저장할 수 있다
- Schemas : blueprints of databases , 데이터베이스의 구조를 보여주고 데이터베이스에 어떤 테이블이 저장되어 있고 테이블 사이에 관계도 보여준다
- 각 필드마다 가지고 있는 데이터의 타입을 알려준다
- Storage
- 데이터베이스 테이블은 서버의 하드 디스크에 저장되어 있는 것
- 서버는 데이터 접근가능하게 하고 서버에 저장된 웹사이트나 파일에 접근하게 만든다
Querying
: 많은 조직에서는 SQL을 spreadsheet의 대체제로 사용한다
만약 데이터가 spreadsheet에 있고 다른 데이터와 연관이 없다면 단순히 가져다 쓰면 된다
BUT Diverse한 데이터는 데이터베이스 안에서 정리하는 것이 가장 best
Keywords
: 코드에서 수행할 작업을 하는데 사용되는 약속된 단어! (코드 함수 같은 것)
SELECT / FROM
- SELECT : fields should be selected
- FROM : 필드가 저장된 Table
cf) 퀴리가 완성되었을 때는 세미클론을 찍어줘야한다 (;)
예제1)
SELECT card_num, name # 여러 필드 가져오고 싶으면 (,) 사용
FROM patrons;
SELECT name, card_num # 필드 순서 바꾸기
FROM patrons;
SELECT * #모든 필드 다 가져오기
FROM patrons ;
- Aliasing : rename columns
SELECT name AS first_name, year_hired # 필드(name) 이름 새로 변경(first_name)
FROM employees;
- Distinct records : return a list of unique values
SELECT DISTINCT year_hired # 중복되는 record 제거
FROM employees;
SELECT DISTINCT dept_id, year_hired # 두 필드 모두 고려한 중복 값 제거
FROM employees;
- Views : 저장된 SQL SELECT 문의 결과 테이블을 나타낸다
- 뷰에 포함된 데이터는 데이터베이스에 저장되지 않는다 → 가상 테이블이기 때문에
- 쿼리 코드가 저장되는 것
- 뷰 생성법
- CREATE VIEW employee_hire_years AS SELECT id, name, year_hired FROM employees;
- View 사용법
- SELECT id,name FROM employee_hire_years;
Selecting Data
- Count : 필드안에 있는 레코드의 수
SELECT COUNT(birthdate) AS count_birthdates # COUNT(field)
FROM people ;
SELECT COUNT(name) AS count_names, COUNT(birthdate) AS count_birthdates #multiple field
FROM people ;
SELECT COUNT(*) AS total_records
FROM people; # all fileds의 수
SELECT COUNT(DISTINCT birthdate) AS count_distinct_birthdates
FROM people;
- order of execution : not processed in its written order
- table 정하기 → select 문
- LIMIT : result개수 정할 수 있다
- Debugging SQL
- Mispelling
- Comma errors
- Keyword errors
- SQL formatting
- Formatiing is not required
- 한줄로 써도 실행된다
- capitalization 안해도 된다
- semicolon (PostgreSQL 필요없다)
- Best practice
- Easier to translate
- Indicate the end of query
- non-standard field names
- release year - release_year
- “release year” 사용하면 된다
SELECT title, "release year", country FROM films LIMIT 3 ;
- release year - release_year
- Formatiing is not required
Filtering Records
- Where : 조건문
- Comparison operators
- Strings : single-quotes
- Order of execution
- written code : select - from - where - limit
- order of execution : from - where - select - limit
- SELECT title FROM films WHERE release_year > 1960; # WHERE release_year = 1960 # WHERE release_year <> 1960 (not equal)
- Multiple criteria
- OR, AND, BETWEEN
- OR : at least one condition
- AND : satisfy all criteria
- AND, OR
- SELECT title FROM films WHERE (release_year = 1994 OR release_year = 1995) AND (certification = 'PG' OR certification ='R') ;
- BETWEEN, AND
- SELECT * FROM coats WHERE color = 'yellow' OR length = 'short'; SELECT * FROM coats WHERE color = 'yellow' AND length = 'short'; SELECT * FROM coats WHERE buttons BETWEEN 1 AND 5;
- OR, AND, BETWEEN
Filtering text
- Filter a pattern rather than text
- LIKE : 필드에 pattern 찾기
- % : zero, one or many characters
- _ : a single character
- NOT LIKE : 이 pattern 아닌 field
- Wildcard position
- ex) ‘%r’ : 끝에 r로 끝나는 것 / ‘_ _t%’ : 앞에 두개 글자 있고 다음이 t
- LIKE : 필드에 pattern 찾기
- WHERE , IN
- SELECT title FROM films WHERE release_year IN (1920,1930,1940) ; # 1920,1930,1940 중에 하나
NULL values
- missing values
- Count(field_name) : 결측치 포함하지 않는다
- count(*) : 결측치 포함
- IS NULL
- SELECT COUNT(*) AS FROM people where birthdate IS NULL ;
- IS NOT NULL
Relational Databases
Database
: 데이터를 저장하는 공간
ex) patron, books and checkouts table → 포함하는 공간이 데이터베이스
- Relational database
: 데이터베이스 안에서 테이블의 데이터 사이의 관계를 정의하는 것
ex) Which books did James check out during 2022?
→ James(patron) / card_num(90123) / card_num(checkouts) / id(checkouts) / id(books) / id(title)
- Adavantages
- 테이블이 엑셀과 구글시트와 같이 스프레드시트로 정리되어 있지만 데이터베으스는 이 스프레드시트보다 강력하다고 한다.
- 많은 사용자들이 쿼리를 사용해서 동시에 데이터로부터 인사이트를 모을 수 있다
- 데이터베이스가 queried 되었을 때 데이터베이스 안에 저장된 데이터는 변하지 않는다
- 데이터베이스 정보는 쿼리 방법에 따라 접근가능하고 제공된다
Tables
- rows and columns 으로 구성되어 있다
- row : records (row의 수가 unlimited)
- row in a table
- an individual observation
- columns : fields (field는 데이터베이스 만들어졌을 때의 set에 limited)
- one piece of information about all observation
- ex) name field - lists all of the name
- row : records (row의 수가 unlimited)
- Table manners
- Table naming
- lowercase
- space를 사용하면 안된다 + 대신에 underscore 사용
- collective group(집단)을 나타낼 수 있는 것이 제일 좋지만 plural name(복수형 이름) 가능
- field naming
- lowercase
- should not involve spaces
- singular than plural
- cannot have the same name
- table 이름과 같으면 안된다
- Key : unique identifier
- 같은 테이블안에서 다른 record들을 구별하게 해주는 역할을 한다 → index느낌
- table topic remain separate
- a clearly marked subject > multiple subjects is combined→ duplicate information → less clearMaham has none checkout_id → 더이상 card_num unique하지 않다.
- ex) lzzy two checkouts
- Table naming
Data
: 데이터 타입은 각 필드마다 명시가 되어있어야 한다. 데이터 타입은 수/ 텍스트 / 날짜에 따라 달라진다
cf) 데이터 타입 쓰는 이유
- 데이터 타입이 다른 데이터들은 다르게 저장되고 다른 저장공간을 차지하기 때문
- 특정한 데이터 타입에 따라 몇몇 계산이 그것에만 적용되기 때문에
ex) multiply a number by another number / text multiply (X)
- String : 문자의 sequence (letter, punctuation)
- string 데이터 타입에도 종류가 나누어진다
- 250까지 문자를 가질 수 있는 타입 → 저장공간을 아낄 수 있다
- more flexible and can store large strings / tens of thousands of characters
- → VARCHAR
- string 데이터 타입에도 종류가 나누어진다
- ex) Manham, James
- Integers : whole number
- 몇가지 종류로 나뉜다 (수의 크기에 따라)
- INT (less than negative two billion to more than positive two billion
- 몇가지 종류로 나뉜다 (수의 크기에 따라)
- Floats : number (fractional part를 포함)
- NUMERIC : 38 소수자리까지 저장할 수 있다
- Schemas : blueprints of databases , 데이터베이스의 구조를 보여주고 데이터베이스에 어떤 테이블이 저장되어 있고 테이블 사이에 관계도 보여준다
- 각 필드마다 가지고 있는 데이터의 타입을 알려준다
- Storage
- 데이터베이스 테이블은 서버의 하드 디스크에 저장되어 있는 것
- 서버는 데이터 접근가능하게 하고 서버에 저장된 웹사이트나 파일에 접근하게 만든다
Querying
: 많은 조직에서는 SQL을 spreadsheet의 대체제로 사용한다
만약 데이터가 spreadsheet에 있고 다른 데이터와 연관이 없다면 단순히 가져다 쓰면 된다
BUT Diverse한 데이터는 데이터베이스 안에서 정리하는 것이 가장 best
Keywords
: 코드에서 수행할 작업을 하는데 사용되는 약속된 단어! (코드 함수 같은 것)
SELECT / FROM
- SELECT : fields should be selected
- FROM : 필드가 저장된 Table
cf) 퀴리가 완성되었을 때는 세미클론을 찍어줘야한다 (;)
예제1)
SELECT card_num, name # 여러 필드 가져오고 싶으면 (,) 사용
FROM patrons;
SELECT name, card_num # 필드 순서 바꾸기
FROM patrons;
SELECT * #모든 필드 다 가져오기
FROM patrons ;
- Aliasing : rename columns
SELECT name AS first_name, year_hired # 필드(name) 이름 새로 변경(first_name)
FROM employees;
- Distinct records : return a list of unique values
SELECT DISTINCT year_hired # 중복되는 record 제거
FROM employees;
SELECT DISTINCT dept_id, year_hired # 두 필드 모두 고려한 중복 값 제거
FROM employees;
- Views : 저장된 SQL SELECT 문의 결과 테이블을 나타낸다
- 뷰에 포함된 데이터는 데이터베이스에 저장되지 않는다 → 가상 테이블이기 때문에
- 쿼리 코드가 저장되는 것
- 뷰 생성법
- CREATE VIEW employee_hire_years AS SELECT id, name, year_hired FROM employees;
- View 사용법
- SELECT id,name FROM employee_hire_years;
Selecting Data
- Count : 필드안에 있는 레코드의 수
SELECT COUNT(birthdate) AS count_birthdates # COUNT(field)
FROM people ;
SELECT COUNT(name) AS count_names, COUNT(birthdate) AS count_birthdates #multiple field
FROM people ;
SELECT COUNT(*) AS total_records
FROM people; # all fileds의 수
SELECT COUNT(DISTINCT birthdate) AS count_distinct_birthdates
FROM people;
- order of execution : not processed in its written order
- table 정하기 → select 문
- LIMIT : result개수 정할 수 있다
- Debugging SQL
- Mispelling
- Comma errors
- Keyword errors
- SQL formatting
- Formatiing is not required
- 한줄로 써도 실행된다
- capitalization 안해도 된다
- semicolon (PostgreSQL 필요없다)
- Best practice
- Easier to translate
- Indicate the end of query
- non-standard field names
- release year - release_year
- “release year” 사용하면 된다
SELECT title, "release year", country FROM films LIMIT 3 ;
- release year - release_year
- Formatiing is not required
Filtering Records
- Where : 조건문
- Comparison operators
- Strings : single-quotes
- Order of execution
- written code : select - from - where - limit
- order of execution : from - where - select - limit
- SELECT title FROM films WHERE release_year > 1960; # WHERE release_year = 1960 # WHERE release_year <> 1960 (not equal)
- Multiple criteria
- OR, AND, BETWEEN
- OR : at least one condition
- AND : satisfy all criteria
- AND, OR
- SELECT title FROM films WHERE (release_year = 1994 OR release_year = 1995) AND (certification = 'PG' OR certification ='R') ;
- BETWEEN, AND
- SELECT * FROM coats WHERE color = 'yellow' OR length = 'short'; SELECT * FROM coats WHERE color = 'yellow' AND length = 'short'; SELECT * FROM coats WHERE buttons BETWEEN 1 AND 5;
- OR, AND, BETWEEN
Filtering text
- Filter a pattern rather than text
- LIKE : 필드에 pattern 찾기
- % : zero, one or many characters
- _ : a single character
- NOT LIKE : 이 pattern 아닌 field
- Wildcard position
- ex) ‘%r’ : 끝에 r로 끝나는 것 / ‘_ _t%’ : 앞에 두개 글자 있고 다음이 t
- LIKE : 필드에 pattern 찾기
- WHERE , IN
- SELECT title FROM films WHERE release_year IN (1920,1930,1940) ; # 1920,1930,1940 중에 하나
NULL values
- missing values
- Count(field_name) : 결측치 포함하지 않는다
- count(*) : 결측치 포함
- IS NULL
- SELECT COUNT(*) AS FROM people where birthdate IS NULL ;
- IS NOT NULL
Relational Databases
Database
: 데이터를 저장하는 공간
ex) patron, books and checkouts table → 포함하는 공간이 데이터베이스
- Relational database
: 데이터베이스 안에서 테이블의 데이터 사이의 관계를 정의하는 것
ex) Which books did James check out during 2022?
→ James(patron) / card_num(90123) / card_num(checkouts) / id(checkouts) / id(books) / id(title)
- Adavantages
- 테이블이 엑셀과 구글시트와 같이 스프레드시트로 정리되어 있지만 데이터베으스는 이 스프레드시트보다 강력하다고 한다.
- 많은 사용자들이 쿼리를 사용해서 동시에 데이터로부터 인사이트를 모을 수 있다
- 데이터베이스가 queried 되었을 때 데이터베이스 안에 저장된 데이터는 변하지 않는다
- 데이터베이스 정보는 쿼리 방법에 따라 접근가능하고 제공된다
Tables
- rows and columns 으로 구성되어 있다
- row : records (row의 수가 unlimited)
- row in a table
- an individual observation
- columns : fields (field는 데이터베이스 만들어졌을 때의 set에 limited)
- one piece of information about all observation
- ex) name field - lists all of the name
- row : records (row의 수가 unlimited)
- Table manners
- Table naming
- lowercase
- space를 사용하면 안된다 + 대신에 underscore 사용
- collective group(집단)을 나타낼 수 있는 것이 제일 좋지만 plural name(복수형 이름) 가능
- field naming
- lowercase
- should not involve spaces
- singular than plural
- cannot have the same name
- table 이름과 같으면 안된다
- Key : unique identifier
- 같은 테이블안에서 다른 record들을 구별하게 해주는 역할을 한다 → index느낌
- table topic remain separate
- a clearly marked subject > multiple subjects is combined→ duplicate information → less clearMaham has none checkout_id → 더이상 card_num unique하지 않다.
- ex) lzzy two checkouts
- Table naming
Data
: 데이터 타입은 각 필드마다 명시가 되어있어야 한다. 데이터 타입은 수/ 텍스트 / 날짜에 따라 달라진다
cf) 데이터 타입 쓰는 이유
- 데이터 타입이 다른 데이터들은 다르게 저장되고 다른 저장공간을 차지하기 때문
- 특정한 데이터 타입에 따라 몇몇 계산이 그것에만 적용되기 때문에
ex) multiply a number by another number / text multiply (X)
- String : 문자의 sequence (letter, punctuation)
- string 데이터 타입에도 종류가 나누어진다
- 250까지 문자를 가질 수 있는 타입 → 저장공간을 아낄 수 있다
- more flexible and can store large strings / tens of thousands of characters
- → VARCHAR
- string 데이터 타입에도 종류가 나누어진다
- ex) Manham, James
- Integers : whole number
- 몇가지 종류로 나뉜다 (수의 크기에 따라)
- INT (less than negative two billion to more than positive two billion
- 몇가지 종류로 나뉜다 (수의 크기에 따라)
- Floats : number (fractional part를 포함)
- NUMERIC : 38 소수자리까지 저장할 수 있다
- Schemas : blueprints of databases , 데이터베이스의 구조를 보여주고 데이터베이스에 어떤 테이블이 저장되어 있고 테이블 사이에 관계도 보여준다
- 각 필드마다 가지고 있는 데이터의 타입을 알려준다
- Storage
- 데이터베이스 테이블은 서버의 하드 디스크에 저장되어 있는 것
- 서버는 데이터 접근가능하게 하고 서버에 저장된 웹사이트나 파일에 접근하게 만든다
Querying
: 많은 조직에서는 SQL을 spreadsheet의 대체제로 사용한다
만약 데이터가 spreadsheet에 있고 다른 데이터와 연관이 없다면 단순히 가져다 쓰면 된다
BUT Diverse한 데이터는 데이터베이스 안에서 정리하는 것이 가장 best
Keywords
: 코드에서 수행할 작업을 하는데 사용되는 약속된 단어! (코드 함수 같은 것)
SELECT / FROM
- SELECT : fields should be selected
- FROM : 필드가 저장된 Table
cf) 퀴리가 완성되었을 때는 세미클론을 찍어줘야한다 (;)
예제1)
SELECT card_num, name # 여러 필드 가져오고 싶으면 (,) 사용
FROM patrons;
SELECT name, card_num # 필드 순서 바꾸기
FROM patrons;
SELECT * #모든 필드 다 가져오기
FROM patrons ;
- Aliasing : rename columns
SELECT name AS first_name, year_hired # 필드(name) 이름 새로 변경(first_name)
FROM employees;
- Distinct records : return a list of unique values
SELECT DISTINCT year_hired # 중복되는 record 제거
FROM employees;
SELECT DISTINCT dept_id, year_hired # 두 필드 모두 고려한 중복 값 제거
FROM employees;
- Views : 저장된 SQL SELECT 문의 결과 테이블을 나타낸다
- 뷰에 포함된 데이터는 데이터베이스에 저장되지 않는다 → 가상 테이블이기 때문에
- 쿼리 코드가 저장되는 것
- 뷰 생성법
- CREATE VIEW employee_hire_years AS SELECT id, name, year_hired FROM employees;
- View 사용법
- SELECT id,name FROM employee_hire_years;
Selecting Data
- Count : 필드안에 있는 레코드의 수
SELECT COUNT(birthdate) AS count_birthdates # COUNT(field)
FROM people ;
SELECT COUNT(name) AS count_names, COUNT(birthdate) AS count_birthdates #multiple field
FROM people ;
SELECT COUNT(*) AS total_records
FROM people; # all fileds의 수
SELECT COUNT(DISTINCT birthdate) AS count_distinct_birthdates
FROM people;
- order of execution : not processed in its written order
- table 정하기 → select 문
- LIMIT : result개수 정할 수 있다
- Debugging SQL
- Mispelling
- Comma errors
- Keyword errors
- SQL formatting
- Formatiing is not required
- 한줄로 써도 실행된다
- capitalization 안해도 된다
- semicolon (PostgreSQL 필요없다)
- Best practice
- Easier to translate
- Indicate the end of query
- non-standard field names
- release year - release_year
- “release year” 사용하면 된다
SELECT title, "release year", country FROM films LIMIT 3 ;
- release year - release_year
- Formatiing is not required
Filtering Records
- Where : 조건문
- Comparison operators
- Strings : single-quotes
- Order of execution
- written code : select - from - where - limit
- order of execution : from - where - select - limit
- SELECT title FROM films WHERE release_year > 1960; # WHERE release_year = 1960 # WHERE release_year <> 1960 (not equal)
- Multiple criteria
- OR, AND, BETWEEN
- OR : at least one condition
- AND : satisfy all criteria
- AND, OR
- SELECT title FROM films WHERE (release_year = 1994 OR release_year = 1995) AND (certification = 'PG' OR certification ='R') ;
- BETWEEN, AND
- SELECT * FROM coats WHERE color = 'yellow' OR length = 'short'; SELECT * FROM coats WHERE color = 'yellow' AND length = 'short'; SELECT * FROM coats WHERE buttons BETWEEN 1 AND 5;
- OR, AND, BETWEEN
Filtering text
- Filter a pattern rather than text
- LIKE : 필드에 pattern 찾기
- % : zero, one or many characters
- _ : a single character
- NOT LIKE : 이 pattern 아닌 field
- Wildcard position
- ex) ‘%r’ : 끝에 r로 끝나는 것 / ‘_ _t%’ : 앞에 두개 글자 있고 다음이 t
- LIKE : 필드에 pattern 찾기
- WHERE , IN
- SELECT title FROM films WHERE release_year IN (1920,1930,1940) ; # 1920,1930,1940 중에 하나
NULL values
- missing values
- Count(field_name) : 결측치 포함하지 않는다
- count(*) : 결측치 포함
- IS NULL
- SELECT COUNT(*) AS FROM people where birthdate IS NULL ;
- IS NOT NULL
Relational Databases
Database
: 데이터를 저장하는 공간
ex) patron, books and checkouts table → 포함하는 공간이 데이터베이스
- Relational database
: 데이터베이스 안에서 테이블의 데이터 사이의 관계를 정의하는 것
ex) Which books did James check out during 2022?
→ James(patron) / card_num(90123) / card_num(checkouts) / id(checkouts) / id(books) / id(title)
- Adavantages
- 테이블이 엑셀과 구글시트와 같이 스프레드시트로 정리되어 있지만 데이터베으스는 이 스프레드시트보다 강력하다고 한다.
- 많은 사용자들이 쿼리를 사용해서 동시에 데이터로부터 인사이트를 모을 수 있다
- 데이터베이스가 queried 되었을 때 데이터베이스 안에 저장된 데이터는 변하지 않는다
- 데이터베이스 정보는 쿼리 방법에 따라 접근가능하고 제공된다
Tables
- rows and columns 으로 구성되어 있다
- row : records (row의 수가 unlimited)
- row in a table
- an individual observation
- columns : fields (field는 데이터베이스 만들어졌을 때의 set에 limited)
- one piece of information about all observation
- ex) name field - lists all of the name
- row : records (row의 수가 unlimited)
- Table manners
- Table naming
- lowercase
- space를 사용하면 안된다 + 대신에 underscore 사용
- collective group(집단)을 나타낼 수 있는 것이 제일 좋지만 plural name(복수형 이름) 가능
- field naming
- lowercase
- should not involve spaces
- singular than plural
- cannot have the same name
- table 이름과 같으면 안된다
- Key : unique identifier
- 같은 테이블안에서 다른 record들을 구별하게 해주는 역할을 한다 → index느낌
- table topic remain separate
- a clearly marked subject > multiple subjects is combined→ duplicate information → less clearMaham has none checkout_id → 더이상 card_num unique하지 않다.
- ex) lzzy two checkouts
- Table naming
Data
: 데이터 타입은 각 필드마다 명시가 되어있어야 한다. 데이터 타입은 수/ 텍스트 / 날짜에 따라 달라진다
cf) 데이터 타입 쓰는 이유
- 데이터 타입이 다른 데이터들은 다르게 저장되고 다른 저장공간을 차지하기 때문
- 특정한 데이터 타입에 따라 몇몇 계산이 그것에만 적용되기 때문에
ex) multiply a number by another number / text multiply (X)
- String : 문자의 sequence (letter, punctuation)
- string 데이터 타입에도 종류가 나누어진다
- 250까지 문자를 가질 수 있는 타입 → 저장공간을 아낄 수 있다
- more flexible and can store large strings / tens of thousands of characters
- → VARCHAR
- string 데이터 타입에도 종류가 나누어진다
- ex) Manham, James
- Integers : whole number
- 몇가지 종류로 나뉜다 (수의 크기에 따라)
- INT (less than negative two billion to more than positive two billion
- 몇가지 종류로 나뉜다 (수의 크기에 따라)
- Floats : number (fractional part를 포함)
- NUMERIC : 38 소수자리까지 저장할 수 있다
- Schemas : blueprints of databases , 데이터베이스의 구조를 보여주고 데이터베이스에 어떤 테이블이 저장되어 있고 테이블 사이에 관계도 보여준다
- 각 필드마다 가지고 있는 데이터의 타입을 알려준다
- Storage
- 데이터베이스 테이블은 서버의 하드 디스크에 저장되어 있는 것
- 서버는 데이터 접근가능하게 하고 서버에 저장된 웹사이트나 파일에 접근하게 만든다
Querying
: 많은 조직에서는 SQL을 spreadsheet의 대체제로 사용한다
만약 데이터가 spreadsheet에 있고 다른 데이터와 연관이 없다면 단순히 가져다 쓰면 된다
BUT Diverse한 데이터는 데이터베이스 안에서 정리하는 것이 가장 best
Keywords
: 코드에서 수행할 작업을 하는데 사용되는 약속된 단어! (코드 함수 같은 것)
SELECT / FROM
- SELECT : fields should be selected
- FROM : 필드가 저장된 Table
cf) 퀴리가 완성되었을 때는 세미클론을 찍어줘야한다 (;)
예제1)
SELECT card_num, name # 여러 필드 가져오고 싶으면 (,) 사용
FROM patrons;
SELECT name, card_num # 필드 순서 바꾸기
FROM patrons;
SELECT * #모든 필드 다 가져오기
FROM patrons ;
- Aliasing : rename columns
SELECT name AS first_name, year_hired # 필드(name) 이름 새로 변경(first_name)
FROM employees;
- Distinct records : return a list of unique values
SELECT DISTINCT year_hired # 중복되는 record 제거
FROM employees;
SELECT DISTINCT dept_id, year_hired # 두 필드 모두 고려한 중복 값 제거
FROM employees;
- Views : 저장된 SQL SELECT 문의 결과 테이블을 나타낸다
- 뷰에 포함된 데이터는 데이터베이스에 저장되지 않는다 → 가상 테이블이기 때문에
- 쿼리 코드가 저장되는 것
- 뷰 생성법
- CREATE VIEW employee_hire_years AS SELECT id, name, year_hired FROM employees;
- View 사용법
- SELECT id,name FROM employee_hire_years;
Selecting Data
- Count : 필드안에 있는 레코드의 수
SELECT COUNT(birthdate) AS count_birthdates # COUNT(field)
FROM people ;
SELECT COUNT(name) AS count_names, COUNT(birthdate) AS count_birthdates #multiple field
FROM people ;
SELECT COUNT(*) AS total_records
FROM people; # all fileds의 수
SELECT COUNT(DISTINCT birthdate) AS count_distinct_birthdates
FROM people;
- order of execution : not processed in its written order
- table 정하기 → select 문
- LIMIT : result개수 정할 수 있다
- Debugging SQL
- Mispelling
- Comma errors
- Keyword errors
- SQL formatting
- Formatiing is not required
- 한줄로 써도 실행된다
- capitalization 안해도 된다
- semicolon (PostgreSQL 필요없다)
- Best practice
- Easier to translate
- Indicate the end of query
- non-standard field names
- release year - release_year
- “release year” 사용하면 된다
SELECT title, "release year", country FROM films LIMIT 3 ;
- release year - release_year
- Formatiing is not required
Filtering Records
- Where : 조건문
- Comparison operators
- Strings : single-quotes
- Order of execution
- written code : select - from - where - limit
- order of execution : from - where - select - limit
- SELECT title FROM films WHERE release_year > 1960; # WHERE release_year = 1960 # WHERE release_year <> 1960 (not equal)
- Multiple criteria
- OR, AND, BETWEEN
- OR : at least one condition
- AND : satisfy all criteria
- AND, OR
- SELECT title FROM films WHERE (release_year = 1994 OR release_year = 1995) AND (certification = 'PG' OR certification ='R') ;
- BETWEEN, AND
- SELECT * FROM coats WHERE color = 'yellow' OR length = 'short'; SELECT * FROM coats WHERE color = 'yellow' AND length = 'short'; SELECT * FROM coats WHERE buttons BETWEEN 1 AND 5;
- OR, AND, BETWEEN
Filtering text
- Filter a pattern rather than text
- LIKE : 필드에 pattern 찾기
- % : zero, one or many characters
- _ : a single character
- NOT LIKE : 이 pattern 아닌 field
- Wildcard position
- ex) ‘%r’ : 끝에 r로 끝나는 것 / ‘_ _t%’ : 앞에 두개 글자 있고 다음이 t
- LIKE : 필드에 pattern 찾기
- WHERE , IN
- SELECT title FROM films WHERE release_year IN (1920,1930,1940) ; # 1920,1930,1940 중에 하나
NULL values
- missing values
- Count(field_name) : 결측치 포함하지 않는다
- count(*) : 결측치 포함
- IS NULL
- SELECT COUNT(*) AS FROM people where birthdate IS NULL ;
- IS NOT NULL
Relational Databases
Database
: 데이터를 저장하는 공간
ex) patron, books and checkouts table → 포함하는 공간이 데이터베이스
- Relational database
: 데이터베이스 안에서 테이블의 데이터 사이의 관계를 정의하는 것
ex) Which books did James check out during 2022?
→ James(patron) / card_num(90123) / card_num(checkouts) / id(checkouts) / id(books) / id(title)
- Adavantages
- 테이블이 엑셀과 구글시트와 같이 스프레드시트로 정리되어 있지만 데이터베으스는 이 스프레드시트보다 강력하다고 한다.
- 많은 사용자들이 쿼리를 사용해서 동시에 데이터로부터 인사이트를 모을 수 있다
- 데이터베이스가 queried 되었을 때 데이터베이스 안에 저장된 데이터는 변하지 않는다
- 데이터베이스 정보는 쿼리 방법에 따라 접근가능하고 제공된다
Tables
- rows and columns 으로 구성되어 있다
- row : records (row의 수가 unlimited)
- row in a table
- an individual observation
- columns : fields (field는 데이터베이스 만들어졌을 때의 set에 limited)
- one piece of information about all observation
- ex) name field - lists all of the name
- row : records (row의 수가 unlimited)
- Table manners
- Table naming
- lowercase
- space를 사용하면 안된다 + 대신에 underscore 사용
- collective group(집단)을 나타낼 수 있는 것이 제일 좋지만 plural name(복수형 이름) 가능
- field naming
- lowercase
- should not involve spaces
- singular than plural
- cannot have the same name
- table 이름과 같으면 안된다
- Key : unique identifier
- 같은 테이블안에서 다른 record들을 구별하게 해주는 역할을 한다 → index느낌
- table topic remain separate
- a clearly marked subject > multiple subjects is combined→ duplicate information → less clearMaham has none checkout_id → 더이상 card_num unique하지 않다.
- ex) lzzy two checkouts
- Table naming
Data
: 데이터 타입은 각 필드마다 명시가 되어있어야 한다. 데이터 타입은 수/ 텍스트 / 날짜에 따라 달라진다
cf) 데이터 타입 쓰는 이유
- 데이터 타입이 다른 데이터들은 다르게 저장되고 다른 저장공간을 차지하기 때문
- 특정한 데이터 타입에 따라 몇몇 계산이 그것에만 적용되기 때문에
ex) multiply a number by another number / text multiply (X)
- String : 문자의 sequence (letter, punctuation)
- string 데이터 타입에도 종류가 나누어진다
- 250까지 문자를 가질 수 있는 타입 → 저장공간을 아낄 수 있다
- more flexible and can store large strings / tens of thousands of characters
- → VARCHAR
- string 데이터 타입에도 종류가 나누어진다
- ex) Manham, James
- Integers : whole number
- 몇가지 종류로 나뉜다 (수의 크기에 따라)
- INT (less than negative two billion to more than positive two billion
- 몇가지 종류로 나뉜다 (수의 크기에 따라)
- Floats : number (fractional part를 포함)
- NUMERIC : 38 소수자리까지 저장할 수 있다
- Schemas : blueprints of databases , 데이터베이스의 구조를 보여주고 데이터베이스에 어떤 테이블이 저장되어 있고 테이블 사이에 관계도 보여준다
- 각 필드마다 가지고 있는 데이터의 타입을 알려준다
- Storage
- 데이터베이스 테이블은 서버의 하드 디스크에 저장되어 있는 것
- 서버는 데이터 접근가능하게 하고 서버에 저장된 웹사이트나 파일에 접근하게 만든다
Querying
: 많은 조직에서는 SQL을 spreadsheet의 대체제로 사용한다
만약 데이터가 spreadsheet에 있고 다른 데이터와 연관이 없다면 단순히 가져다 쓰면 된다
BUT Diverse한 데이터는 데이터베이스 안에서 정리하는 것이 가장 best
Keywords
: 코드에서 수행할 작업을 하는데 사용되는 약속된 단어! (코드 함수 같은 것)
SELECT / FROM
- SELECT : fields should be selected
- FROM : 필드가 저장된 Table
cf) 퀴리가 완성되었을 때는 세미클론을 찍어줘야한다 (;)
예제1)
SELECT card_num, name # 여러 필드 가져오고 싶으면 (,) 사용
FROM patrons;
SELECT name, card_num # 필드 순서 바꾸기
FROM patrons;
SELECT * #모든 필드 다 가져오기
FROM patrons ;
- Aliasing : rename columns
SELECT name AS first_name, year_hired # 필드(name) 이름 새로 변경(first_name)
FROM employees;
- Distinct records : return a list of unique values
SELECT DISTINCT year_hired # 중복되는 record 제거
FROM employees;
SELECT DISTINCT dept_id, year_hired # 두 필드 모두 고려한 중복 값 제거
FROM employees;
- Views : 저장된 SQL SELECT 문의 결과 테이블을 나타낸다
- 뷰에 포함된 데이터는 데이터베이스에 저장되지 않는다 → 가상 테이블이기 때문에
- 쿼리 코드가 저장되는 것
- 뷰 생성법
- CREATE VIEW employee_hire_years AS SELECT id, name, year_hired FROM employees;
- View 사용법
- SELECT id,name FROM employee_hire_years;
Selecting Data
- Count : 필드안에 있는 레코드의 수
SELECT COUNT(birthdate) AS count_birthdates # COUNT(field)
FROM people ;
SELECT COUNT(name) AS count_names, COUNT(birthdate) AS count_birthdates #multiple field
FROM people ;
SELECT COUNT(*) AS total_records
FROM people; # all fileds의 수
SELECT COUNT(DISTINCT birthdate) AS count_distinct_birthdates
FROM people;
- order of execution : not processed in its written order
- table 정하기 → select 문
- LIMIT : result개수 정할 수 있다
- Debugging SQL
- Mispelling
- Comma errors
- Keyword errors
- SQL formatting
- Formatiing is not required
- 한줄로 써도 실행된다
- capitalization 안해도 된다
- semicolon (PostgreSQL 필요없다)
- Best practice
- Easier to translate
- Indicate the end of query
- non-standard field names
- release year - release_year
- “release year” 사용하면 된다
SELECT title, "release year", country FROM films LIMIT 3 ;
- release year - release_year
- Formatiing is not required
Filtering Records
- Where : 조건문
- Comparison operators
- Strings : single-quotes
- Order of execution
- written code : select - from - where - limit
- order of execution : from - where - select - limit
- SELECT title FROM films WHERE release_year > 1960; # WHERE release_year = 1960 # WHERE release_year <> 1960 (not equal)
- Multiple criteria
- OR, AND, BETWEEN
- OR : at least one condition
- AND : satisfy all criteria
- AND, OR
- SELECT title FROM films WHERE (release_year = 1994 OR release_year = 1995) AND (certification = 'PG' OR certification ='R') ;
- BETWEEN, AND
- SELECT * FROM coats WHERE color = 'yellow' OR length = 'short'; SELECT * FROM coats WHERE color = 'yellow' AND length = 'short'; SELECT * FROM coats WHERE buttons BETWEEN 1 AND 5;
- OR, AND, BETWEEN
Filtering text
- Filter a pattern rather than text
- LIKE : 필드에 pattern 찾기
- % : zero, one or many characters
- _ : a single character
- NOT LIKE : 이 pattern 아닌 field
- Wildcard position
- ex) ‘%r’ : 끝에 r로 끝나는 것 / ‘_ _t%’ : 앞에 두개 글자 있고 다음이 t
- LIKE : 필드에 pattern 찾기
- WHERE , IN
- SELECT title FROM films WHERE release_year IN (1920,1930,1940) ; # 1920,1930,1940 중에 하나
NULL values
- missing values
- Count(field_name) : 결측치 포함하지 않는다
- count(*) : 결측치 포함
- IS NULL
- SELECT COUNT(*) AS FROM people where birthdate IS NULL ;
- IS NOT NULL
Relational Databases
Database
: 데이터를 저장하는 공간
ex) patron, books and checkouts table → 포함하는 공간이 데이터베이스
- Relational database
: 데이터베이스 안에서 테이블의 데이터 사이의 관계를 정의하는 것
ex) Which books did James check out during 2022?
→ James(patron) / card_num(90123) / card_num(checkouts) / id(checkouts) / id(books) / id(title)
- Adavantages
- 테이블이 엑셀과 구글시트와 같이 스프레드시트로 정리되어 있지만 데이터베으스는 이 스프레드시트보다 강력하다고 한다.
- 많은 사용자들이 쿼리를 사용해서 동시에 데이터로부터 인사이트를 모을 수 있다
- 데이터베이스가 queried 되었을 때 데이터베이스 안에 저장된 데이터는 변하지 않는다
- 데이터베이스 정보는 쿼리 방법에 따라 접근가능하고 제공된다
Tables
- rows and columns 으로 구성되어 있다
- row : records (row의 수가 unlimited)
- row in a table
- an individual observation
- columns : fields (field는 데이터베이스 만들어졌을 때의 set에 limited)
- one piece of information about all observation
- ex) name field - lists all of the name
- row : records (row의 수가 unlimited)
- Table manners
- Table naming
- lowercase
- space를 사용하면 안된다 + 대신에 underscore 사용
- collective group(집단)을 나타낼 수 있는 것이 제일 좋지만 plural name(복수형 이름) 가능
- field naming
- lowercase
- should not involve spaces
- singular than plural
- cannot have the same name
- table 이름과 같으면 안된다
- Key : unique identifier
- 같은 테이블안에서 다른 record들을 구별하게 해주는 역할을 한다 → index느낌
- table topic remain separate
- a clearly marked subject > multiple subjects is combined→ duplicate information → less clearMaham has none checkout_id → 더이상 card_num unique하지 않다.
- ex) lzzy two checkouts
- Table naming
Data
: 데이터 타입은 각 필드마다 명시가 되어있어야 한다. 데이터 타입은 수/ 텍스트 / 날짜에 따라 달라진다
cf) 데이터 타입 쓰는 이유
- 데이터 타입이 다른 데이터들은 다르게 저장되고 다른 저장공간을 차지하기 때문
- 특정한 데이터 타입에 따라 몇몇 계산이 그것에만 적용되기 때문에
ex) multiply a number by another number / text multiply (X)
- String : 문자의 sequence (letter, punctuation)
- string 데이터 타입에도 종류가 나누어진다
- 250까지 문자를 가질 수 있는 타입 → 저장공간을 아낄 수 있다
- more flexible and can store large strings / tens of thousands of characters
- → VARCHAR
- string 데이터 타입에도 종류가 나누어진다
- ex) Manham, James
- Integers : whole number
- 몇가지 종류로 나뉜다 (수의 크기에 따라)
- INT (less than negative two billion to more than positive two billion
- 몇가지 종류로 나뉜다 (수의 크기에 따라)
- Floats : number (fractional part를 포함)
- NUMERIC : 38 소수자리까지 저장할 수 있다
- Schemas : blueprints of databases , 데이터베이스의 구조를 보여주고 데이터베이스에 어떤 테이블이 저장되어 있고 테이블 사이에 관계도 보여준다
- 각 필드마다 가지고 있는 데이터의 타입을 알려준다
- Storage
- 데이터베이스 테이블은 서버의 하드 디스크에 저장되어 있는 것
- 서버는 데이터 접근가능하게 하고 서버에 저장된 웹사이트나 파일에 접근하게 만든다
Querying
: 많은 조직에서는 SQL을 spreadsheet의 대체제로 사용한다
만약 데이터가 spreadsheet에 있고 다른 데이터와 연관이 없다면 단순히 가져다 쓰면 된다
BUT Diverse한 데이터는 데이터베이스 안에서 정리하는 것이 가장 best
Keywords
: 코드에서 수행할 작업을 하는데 사용되는 약속된 단어! (코드 함수 같은 것)
SELECT / FROM
- SELECT : fields should be selected
- FROM : 필드가 저장된 Table
cf) 퀴리가 완성되었을 때는 세미클론을 찍어줘야한다 (;)
예제1)
SELECT card_num, name # 여러 필드 가져오고 싶으면 (,) 사용
FROM patrons;
SELECT name, card_num # 필드 순서 바꾸기
FROM patrons;
SELECT * #모든 필드 다 가져오기
FROM patrons ;
- Aliasing : rename columns
SELECT name AS first_name, year_hired # 필드(name) 이름 새로 변경(first_name)
FROM employees;
- Distinct records : return a list of unique values
SELECT DISTINCT year_hired # 중복되는 record 제거
FROM employees;
SELECT DISTINCT dept_id, year_hired # 두 필드 모두 고려한 중복 값 제거
FROM employees;
- Views : 저장된 SQL SELECT 문의 결과 테이블을 나타낸다
- 뷰에 포함된 데이터는 데이터베이스에 저장되지 않는다 → 가상 테이블이기 때문에
- 쿼리 코드가 저장되는 것
- 뷰 생성법
- CREATE VIEW employee_hire_years AS SELECT id, name, year_hired FROM employees;
- View 사용법
- SELECT id,name FROM employee_hire_years;
Selecting Data
- Count : 필드안에 있는 레코드의 수
SELECT COUNT(birthdate) AS count_birthdates # COUNT(field)
FROM people ;
SELECT COUNT(name) AS count_names, COUNT(birthdate) AS count_birthdates #multiple field
FROM people ;
SELECT COUNT(*) AS total_records
FROM people; # all fileds의 수
SELECT COUNT(DISTINCT birthdate) AS count_distinct_birthdates
FROM people;
- order of execution : not processed in its written order
- table 정하기 → select 문
- LIMIT : result개수 정할 수 있다
- Debugging SQL
- Mispelling
- Comma errors
- Keyword errors
- SQL formatting
- Formatiing is not required
- 한줄로 써도 실행된다
- capitalization 안해도 된다
- semicolon (PostgreSQL 필요없다)
- Best practice
- Easier to translate
- Indicate the end of query
- non-standard field names
- release year - release_year
- “release year” 사용하면 된다
SELECT title, "release year", country FROM films LIMIT 3 ;
- release year - release_year
- Formatiing is not required
Filtering Records
- Where : 조건문
- Comparison operators
- Strings : single-quotes
- Order of execution
- written code : select - from - where - limit
- order of execution : from - where - select - limit
- SELECT title FROM films WHERE release_year > 1960; # WHERE release_year = 1960 # WHERE release_year <> 1960 (not equal)
- Multiple criteria
- OR, AND, BETWEEN
- OR : at least one condition
- AND : satisfy all criteria
- AND, OR
- SELECT title FROM films WHERE (release_year = 1994 OR release_year = 1995) AND (certification = 'PG' OR certification ='R') ;
- BETWEEN, AND
- SELECT * FROM coats WHERE color = 'yellow' OR length = 'short'; SELECT * FROM coats WHERE color = 'yellow' AND length = 'short'; SELECT * FROM coats WHERE buttons BETWEEN 1 AND 5;
- OR, AND, BETWEEN
Filtering text
- Filter a pattern rather than text
- LIKE : 필드에 pattern 찾기
- % : zero, one or many characters
- _ : a single character
- NOT LIKE : 이 pattern 아닌 field
- Wildcard position
- ex) ‘%r’ : 끝에 r로 끝나는 것 / ‘_ _t%’ : 앞에 두개 글자 있고 다음이 t
- LIKE : 필드에 pattern 찾기
- WHERE , IN
- SELECT title FROM films WHERE release_year IN (1920,1930,1940) ; # 1920,1930,1940 중에 하나
NULL values
- missing values
- Count(field_name) : 결측치 포함하지 않는다
- count(*) : 결측치 포함
- IS NULL
- SELECT COUNT(*) AS FROM people where birthdate IS NULL ;
- IS NOT NULL