목차
SQL : Structed Query Language
Data Base
데이터를 저장하기 위한 여러 방법 중 거대한 규모에 데이터를 여러 사람이 공유하여 사용하기 위해 체계화한 것입니다.
본질적으로는 방대한 Data를 관리하는 용도이며 기본적인 데이터 처리 기능 CRUD(Create ,Read, Update, Delete) 에 발전된 작업을 합니다.
파일 : OS별로 기본 제공하며 성능, 보안, 편의성이 떨어집니다.
스프레드 시트 : 엑셀과 같이 편의성은 향상되었지만 자동화, 명령어 기능 등이 떨어집니다.
데이터베이스 : 자동화, 구체적인 명령어 사용이 가능하며 MySQL, Oracle, MongoDB 등 제품이 있습니다.
MySQL과 Oracle은 관계형 DB, MongoDB는 문서 지향 DB (Document store)입니다.
관계형 DB (RDBMS, Relation Data Base Management System)
스프레드 시트 형태 + 컴퓨터 언어로 조작을 하는 구조입니다.
* KEY : DB에서 각각의 데이터를 구별할 수 있는 유일한 기준이 되는 속성입니다.
유일성 : 각 행이 유일한 값이라 식별가능
최소성 : 꼭 필요한 최소한만 넣는 성질
슈퍼키(Super key) : 각 행을 유일하게 식별할 수 있는 속성들의 집합 (ex : 학번 O, 주민번호 O, 이름 X)
후보키(Candidate Key) : 유일하게 식별 가능한 '최소한'의 속성집합으로, 기본키가 될 수 있는 후보들 (ex: 학번O, 주민번호 O, 학번 + 이름 X,)
기본키(Primary Key) : 후보키 중 선택한 메인 키
대체키(Alternate Key) : 후보키 - 기본키
외래키(Foreign Key) : 한 테이블이 다른 테이블의 기본키를 참조해서 테이블간 관계를 생성
복합키(Composite Key) : 여러 칼럼을 묶어 기본키로 만드는 방법. 잘쓰면 더 세밀한 데이터 관리, 성능 향상 가능
SQL 기본
*트랜잭션(Transaction, 거래) : 실제 DB에 바로 적용하지 않고 commit과 rollback으로 나눠 commit 후 결과를 반영하고 싶지 않거나 거래가 실패했다면 rollback을 실행합니다.
- Data Manipulation Language (데이터 조작어)
Table의 한 행을 조작하며 트랜잭션이 가능합니다.
SELECT, INSERT, UPDATE, DELETE - Data Definition Language (데이터 정의어)
DB 개체(DB, Table, Index 등) 변경하며, 즉시 반영되어 트랜잭션이 불가합니다.
CREATE, DROP, ALTER - Data Control Language (데이터 제어어)
사용자에게 권한 부여/제거 작업을 합니다.
GRANT, REVOKE ...
SQL 명령어 예시
○ SELECT
SELECT * FROM city : city에 * data
SELECT name, population FROM city : city에 name, population column만 보여줘
SELECT * FROM city WHERE population < 80 AND(OR) population > 70
SELECT * FROM city WHERE population BETWEEN 70 AND 80
SELECT * FROM city WHERE name IN('Seoul', 'NewYork', 'Tokyo') : IN과 OR 대체 가능
SELECT * FROM city WHERE CountryCode LIKE 'ko_' : 문자열 검색 LIKE, _ 한단어, % 몇개의 문자. %kor%는 ~~~kor~~~
SELECT * FROM city WHERE CountryCode = (SELECT CountryCode FROM city WHERE name = 'Seoul') : SubQuery, 해당 Country에 Seoul이 있는것만 아는 경우
SELECT * FROM city WHERE population > ANY(SELECT population FROM city WHERE district = 'NewYork' :
SubQuery에서 값이 여러개일때OR처럼 1가지라도 만족 시 출력, district(지역)의 이름이 뉴욕인 도시들의 인구수 중 하나라도 큰 값이 있다면 출력. ANY는 SOME과 동일하게 사용, ALL은 가장 큰 값
○ 정렬
SELECT * FROM city ORDER BY population ASC : 정렬, ASC : 오름차순 default, DESC : 내림차순
SELECT * FROM city ORDER BY population DESC, name ASC : 앞에서 부터 1순위, 2순위
SELECT DISTINCT country code FROM city : 중복제거
SELECT * FROM city ORDER BY population DESC LIMIT2 : 상위 2개 제한
○ 계산
SELECT country code, MAX(population) FROM city GROUP BY country code HAVING MAX(population) > 800
GROUP BY : country code 키로 묶는 그룹 column, 조건절 Having(조건절), 집계함수 MAX, MIN, SUM, AVG 평균인구수
SELECT COUNT(*) FROM city : city 개수
○ JOIN
SELECT * FROM city JOIN country ON city.country code == country.code
ON대신 USING도 가능 USING(code), 다중 JOIN도 가능
○ 수학/문자열 관련 함수
SELECT LENGHT('abcde') : 문자열 길이 반환
SELECT CONCAT ('my', 'sql', 'op', 'en') :문자열을 합쳐서 저장, 1개라도 NULL이면 NULL 반환
SELECT LOCATE ('abc', 'abababca') : abc 위치, MySQL은 시작 위치가 1
% : 1개 이상 문자열 모든 패, _단일문자, [ ] : 지정범위. [a-d] 는 a, b, c,d , [^]지점범위에 없는 문자 : [^a-d]는 a~d 제외
ex : %db[m-n]uri
SELECT LEFT('~~~', 5) : 문자열 좌에서 5개만 보여줘, RIGHT도 동일
SELECT LOWER('~~~') : 모두 소문자로 변경, 대문자는 UPPER
SELECT REPLACE('mssql', 'ms', my') : ms를 my로 바꾸기
SELECT TRIM(' mysql ') : 문자열 자르기로 공백 제거
SELECT TRIM(LEADING '#' FROM '###SQL###') : LEADING은 앞에, TRAILING은 뒤에, 안쓰면 앞 뒤 전부 자르기
SELECT FLOOR() : 내림, CEIL() : 올림, ROUND() : 반올림, FORMAT(24567.123, 3) : 소수점 몇자
ABS(-1) 절대값, RAND() :랜덤 실수형, A DIV B : 나누기
SIN, COS, TAN, PI,
○ 날짜
NOW() = CURDATE() + CURTIME()
DATE(NOW()) : 현재 날짜만
숫자 : YEAR(NOW()), MONTH(NOW()), DAY(NOW()), HOUR(NOW()), MINUTE(NOW()), SECOND(NOW())
문자로 나올려면 뒤에 NAME추가하면 됩니다.
SQL 예제
1. 서울에 위치한 식당 목록 출력하기 : https://school.programmers.co.kr/learn/courses/30/lessons/131118
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
SELECT REST_INFO.REST_ID, REST_INFO.REST_NAME, REST_INFO.FOOD_TYPE, REST_INFO.FAVORITES, REST_INFO.ADDRESS,
ROUND(AVG(REVIEW_SCORE), 2) AS SCORE
FROM REST_INFO
JOIN REST_REVIEW ON REST_INFO.REST_ID = REST_REVIEW.REST_ID
GROUP BY REST_INFO.REST_ID
HAVING REST_INFO.ADDRESS LIKE '서울%'
ORDER BY SCORE DESC, REST_INFO.FAVORITES DESC
* %는 1개 이상에 어떤 문자열이든 포함하는 패턴
2. 5월 식품들의 총매출 조회하기 : https://school.programmers.co.kr/learn/courses/30/lessons/131117
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
SELECT product.PRODUCT_ID, product.PRODUCT_NAME, (product.PRICE * SUM(ord.AMOUNT)) AS TOTAL_SALES
FROM FOOD_PRODUCT product
JOIN FOOD_ORDER ord ON product.PRODUCT_ID = ord.PRODUCT_ID
WHERE YEAR(ord.PRODUCE_DATE) = 2022 and MONTH(ord.PRODUCE_DATE) = 5
GROUP BY product.PRODUCT_ID
ORDER BY TOTAL_SALES DESC, product.PRODUCT_ID
'기타기록 > 잡다지식' 카테고리의 다른 글
ISTQB-CTFL(22.12.1) 후기 (0) | 2022.12.03 |
---|