sql
SQL 실행 순서
SQL 실행 순서 SQL 실행 순서 FROM FROM을 통해 조회하고자 하는 테이블의 데이터를 전부 가져 옴 Alias 사용 가능 ON, JOIN ON의 조인 조건을 이용해 JOIN 하고자 하는 테이블과 현재 테이블을 병합 WHERE 테이블 중에서 조건을 만족하는 행만 추출 GROUP BY 특정 열의 값을 기준으로 테이블을 그룹화 HAVING 그룹화된 테이블에서 특정 조건만 만족하는 그룹만 가져옴 SELECT 테이블에서 어떤 열을 출력할 지 선택 Alias 사용 가능 DISTINCT 테이블에서 중복이 있는 경우 제거 ORDER BY 특정 열들을 기준으로 테이블을 정렬 숫자를 주는 경우 해당 숫자번째 열을 기준으로 정렬 기본적으로 오름차순으로 정렬됨 MYSQL등의 SQL에서는 SELECT절에서 사용한 Alias 사용해서 정렬 가능 References https://soo-vely-dev.
read moresql
ANSI SQL
ANSI SQL ANSI SQL ANSI(미국 표준 협회)에서 정립한 표준 SQL 작성 방법 DBMS 간에 SQL문법이 다르기 때문에 등장 표준 SQL이기 때문에 특정 DBMS에서만 사용 가능한 것이 아닌, 대부분의 DBMS에서 사용 가능 JOIN 관계가 FROM 절에서 명시되기 때문에 직관적임 다만 특정 DBMS에서 제공하는 함수를 사용해야 할 때도 있어서 ANSI SQL만으로는 모든 SQL을 작성 불가 References https://velog.io/@gillog/ANSI-SQL%EC%9D%B4%EB%9E%80 https://easybrother0103.tistory.com/137
read moresql
ANSI SQL Group By
ANSI SQL Group By ANSI SQL Group By ANSI SQL에서는 동일한 값을 가진 컬럼을 기준으로 그룹별 연산을 적용하기 위해 group by 구문을 사용 Having 구문을 통해 특정 조건을 만족하는 그룹만 볼 수 있음 ANSI SQL에서는 group by, having 절에서 select 절의 alias를 사용 불가 이는 group by, having 등이 select 보다 먼저 실행되기 때문 MySQL에서는 having 절에서 사용을 허락하지만, 이는 SQL 표준이 아님 다음과 같이 사용 SELECT userType, count(*) FROM users GROUP BY userType HAVING COUNT(userType) > 5; References https://leejinseop.
read moresql
ANSI SQL Join
ANSI SQL Join ANSI SQL Join Inner Join SELECT * FROM A INNER JOIN B ON A.id = B.id Left / Right Outer Join SELECT * FROM A LEFT OUTER JOIN B ON A.id = B.id Full Outer Join SELECT * FROM A FULL OUTER JOIN B ON A.id = B.id Cross Join SELECT * FROM A CROSS JOIN B Self Join SELECT * FROM T A JOIN T B ON A.
read moresql
RDBMS NoSQL 비교
RDBMS NoSQL 비교 RDBMS 장단점 장점 트랜잭션의 특성을 준수하므로, 무결성이 보장되며, 데이터 구조가 명확 데이터를 업데이트할 때 빠름 데이터 구조를 변경할 일이 적을 때 유리 무결성과 일관성이 중요한 경우 사용 단점 NoSQL 보다 유연성이 떨어짐 무결성을 유지해야 하므로, 성능 향상을 위해서는 scale-up을 해야 함 Join이 복잡한 경우 성능이 저하됨 NoSQL 장단점 장점 데이터간의 관계가 정의되지 않아 자유롭게 데이터 및 필드를 추가 가능 RDBMS보다 대용량의 데이터를 저장하기 좋음 데이터 분산이 용이하고, 성능 향상을 위해 scale-out을 선택 가능 가용성이 높으며, 동시성 처리가 중요한 경우 사용 단점 데이터를 업데이트하기는 비교적 어려움 무결성이 떨어지며, join 불가능 References https://meetup.
read moresql
MSSQL
MSSQL MSSQL 이란 Microsoft에서 sybase를 바탕으로 개발한 RDBMS 데이터베이스 서버로서, 다른 애플리케이션에서 요청을 받아 데이터를 저장 및 검색. .Net 프레임워크, C# 등 윈도우 개발환경에 적합. 장점 MSSQL management studio라는 사용자 툴 존재. 많은 기능을 편리하게 사용할 수 있도록 마법사 지원. 저렴한 비용 및 우수한 보안. 단점 비용 정책이 일관적이지 못해 특정 시점부터 비용이 많이 듦. 사용하는 곳이 적고, 커뮤니티가 작음. 윈도우 개발환경이 아니라면 Oracle, MariaDB 등 더 좋은 대안이 많음. References https://m.
read moresql
MariaDB
MariaDB MariaDB란 MySQL과 동일한 코드를 바탕으로 하는 오픈 소스 RDBMS. GPL v2 라이선스를 따르며, MySQL의 라이선스 문제를 해결하기 위해 등장. MySQL로부터 fork 해 온 만큼, 실행 프로그램, 유틸리티 등이 MySQL과 호환됨. MySQL보다 활발한 커뮤니티, 다양한 기능 제공. MySQL과의 차이점 구분 MySQL MariaDB Storage Engine MyISAM, InnoDB MySQL 엔진 + Aria 등 NoSQL Engine Memcached Plugin Cassandra Connection Pool Enterprise에서만 지원 지원 License GPL / 사유 라이선스 GPL References https://sabarada.tistory.com/164 https://en.wikipedia.org/wiki/MariaDB
read moresql
SQL Injection
SQL Injection SQL Injection이란 애플리케이션의 보안 허점을 이용해 악의적인 SQL문을 실행시켜 DB를 비정상적으로 조작하는 코드 인젝션 공격 방법. SQL문이 데이터와 SQL을 제어하는 명령어로 구성된다는 점에 의거. 공격 방법 다음과 같이 USER_INPUT 위치에 입력한 이름의 사용자를 찾는 SQL을 공격한다고 가정. SELECT * FROM users WHERE name='USER_INPUT' AND age=2; USER_INPUT에 ' OR '1'='1'; --를 입력한 다면, 다음과 같이 모든 사용자를을 찾는 SQL이 됨. SELECT * FROM users WHERE name='' OR '1'='1'; --'AND age=2; USER_INPUT에 a'; DROP TABLE users; --를 입력한 경우, 다음과 같이 users 테이블을 지워 버림.
read moresql
NoSQL
NoSQL NoSQL이란 Not only SQL의 약자로, SQL(관계형 데이터베이스)만을 사용하지 않는 데이터베이스 및 DBMS.
관계형 DB vs NoSQL DB 두 DB는 다음과 같은 차이점이 있고, 상황에 맞는 DB 선택 필요.
구분 Relational NoSQL 최적 작업 OLTP / OLAP 비정형 데이터 저장 및 분석 데이터 모델 스키마로 구성된 테이블 키-값, 문서 등 여러 모델 스키마 고정된 형식 유동적, 변경 용이 ACID 트랜잭션 지원 높은 처리량을 위해 일부 완화 성능 향상 쿼리, 인덱스등의 최적화 하드웨어 클러스터 증가, 네트워크 지연 단축 쿼리 SQL을 이용해 정보 요청 구조화되지 않은 쿼리 언어로 정보 요청 가능 확장 수직적 확장, 비용 높음 수평적 확장, 비용 저렴 분산 저장 샤딩 필요 일관성을 포기한 대신 별도의 제어 필요 X 유형 다음과 같은 데이터 모델 유형 존재.
read more