목록Database (18)
어리바리 신입 개발자의 얼렁뚱땅 개발 기록 ✨
SELECT CASE WHEN COUNT(*) = 0 THEN 'g001' -- 만약 WHEN CAST(SUBSTRING_INDEX(g.g_code,'g',-1) AS UNSIGNED) < 999 THEN CONCAT('g',LPAD(MAX(CAST(SUBSTRING_INDEX(g.g_code,'g',-1) AS UNSIGNED))+1,3,'0')) ELSE CONCAT('g',MAX(CAST(SUBSTRING_INDEX(g.g_code,'g',-1) AS UNSIGNED))+1) END AS newGoodsCode -- 첫번째 인수 : '문자열' 또는 컬럼 -- 두번째 인스 : '구분자' -- 세번째 인수 : 양수 : 구분자의 왼쪽 / 음수 : 구분자의 오른쪽(출력 순서는 그대로) --글자 하나하나의 ..
COUNT(*) : WHERE 조건에 맞는 행 모두 카운트 COUNT(컬럼) : WHERE 조건에 맞는 행 중 컬럼의 값이 NULL이 아는 행 모두 카운트 -- 총 2개의 행이 존재(pk : id001 / id002) -- u_id는 pk이기 때문에 null 값이 존재 하지 않는 상태 -- u_add는 모두 null 값인 상태 SELECT COUNT(u.u_add) FROM tb_user AS u WHERE u.u_id = 'id001'; -- u_id가 id001인 행의 u_add가 null이 아닌것 => 0 SELECT COUNT(u.u_id) FROM tb_user AS u WHERE u.u_id = 'id001'; -- u_id가 id001인 행의 u_id가 null이 아닌것 => 1 SELECT..
[ MySQL workbench ] [ navigator ] MySQL의 관리 및 운영을 위한 도구 대부분의 작업이 가능하고 MySQL의 명령문이나 SQL문을 몰라도 대부분 작업 수행 가능 [[ Administration ]] [ Management ] MySQL 서버의 가동 상태, 설치된 폴더 등 확인 MySQL 서버에 연결되어 있는 클라이언트 정보 확인 사용자 생성, 삭제, 권한 관리 데이터 내보내기 / 가져오기 등 [ Instance ] MySQL 연결 정보를 관리 인스턴스 중지 도는 시작 Server에 기록된 로그 조회 옵션 파일 설정 정보 확인 및 변경 등 [ Performance ] 성능 상태 및 구성 관련 메뉴 [[ Schmas ]] 데이터베이스 생성 및 삭제 데이터베이스 개체(테이블, 뷰,..
[ Stored Program ] 내장식 프로그램, 프로그램 내장 방식, 저장 프로그램 MySQL 전용 언어 * SQL 전용 언어 : SQL문에 변수, 제어문, 입출력 등 프로그래밍 기능을 추가해서 SQL문으로 처리하기 어려운 문제를 해결할 수 있다. [[ 특징 ]] - MySQL 성능 향상 : 긴 쿼리의 내용을 전송하지 않고 프로시저의 이름과 매개 변수 등을 전송하여 네트워크 과부하를 줄일 수 있다. - 유지 관리 간편 : 직접 SQL문을 작성하지 않고, 생성한 이름만 호출하여 일관된 작업을 진행할 수 있다. - 모듈식 프로그래밍 : 저장 프로그램을 한 번 생성해서 쿼리 수정, 삭제 등 관리가 수월하고, 모듈처럼 자주 사용하는 구문을 재사용할 수 있다. - 보안 강화 : 사용자 별 테이블에 접근 권한을..
[ GROUP_CONCAT ] 서로 다른 결과를 한 줄로 보여줄 때 사용 기본 구분자 : ,(쉼표) 구분자 변경 : GROUP_CONCAT(컬럼명 SEPARATOR '&') -> 구분자가 쉼표에서 &로 바뀌는 쿼리 중복 문자열 제거 : GROUP_CONCAT(DISTINCT 컬럼명) SELECT * FROM 테이블_이름; SELECT 컬럼1 , GROUP_CONCAT(컬럼2) FROM 테이블_이름 GROUP BY 컬럼1; WITH cte_order AS (SELECT M.m_id ,M.m_name ,G.g_name ,SUM(O.o_amount) FROM tb_order AS O INNER JOIN tb_member AS M ON M.m_id = O.o_id INNER JOIN tb_goods AS G O..
[ 메인 쿼리 ] 서브 쿼리의 밖에 있는 쿼리 (주 질의 / 외부 질의) 메인 쿼리 안에 서브 쿼리를 작성한다. 작성 순서 : SELECT > FROM > WHERE > GROUP BY > HAVING > ORDER BY 실행 순서 : FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY [ 서브 쿼리 ] 하나의 쿼리 안에 들어가는 다른 쿼리 (부속 질의 / 내부 질의) 대표적으로 SELECT, FROM, WHERE 절에서 사용 가능하다. 서브 쿼리 : 필요한 데이터만 찾아서 조회 / JOIN : 데이터를 모두 합쳐서 연산 -> 데이터가 대량일 경우 JOIN보다 서브 쿼리의 성능이 좋다. [[ 종류 ]] [ 스칼라 서브 쿼리 (SELECT절) ] - 단일 행과 단..
[ 데이터베이스 설계 ] 사용자의 다양한 요구 사항을 고려하여 데이터베이스를 생성하는 과정 실무 능력, 경험에 따라 설계가 다를 수 있음. 단, 좋은 설계와 나쁜 설계는 분명히 존재 [[ 설계 단계 ]] - 요구 사항 수집 및 분석 - 개념적 > 논리적 > 물리적 - 구현 [ 개념적 ] - ERD, DBMS에 독립적이다. - 개체와 속성을 추출한다. - 업무와 관련이 깊은 명사를 추출한다. ex) 마트에서 상품을 구입한다. -> 상품, 마트, 고객, 직원, 관리자 대학교 학사 관리 -> 사물 : 강의실, 교자재, 행정실 / 사람 : 행정 담당자, 학생, 교수 쇼핑몰 구현 -> 쇼핑몰, 회원, 아이디, 비밀번호 - 쇼핑몰 : 광범위하고 일반적인 의미는 제외한다. - 개체의 핵심 속성을 추출한다. ex) 고..
[ JOIN ] 두 개 이상의 테이블을 묶어서 하나의 결과 집합으로 만드는 것 관련 있는 두 개 이상의 테이블을 결합하여 여러 테이블에 나눠져 있는 테이터들을 한 번에 가져오기 위한 방법 두 테이블을 JOIN하려면 테이블이 1 : n 관계로 연결되어야 한다. (기본 키 : 외래 키) [ INNER JOIN ] - 교집합 - 두 테이블이 공통적으로 가지고 있는 값 (테이블1에 A,B,C가 있고 테이블2에 A,C가 있다면 INNER JOIN했을 때 A,C만 JOIN되어 출력된다.) SELECT * FROM 테이블1 AS a INNER JOIN 테이블2 AS b ON a.m_key = b.u_key WHERE 조건; * ON : 작성하지 않으면, 데이터가 규칙 없이 섞여버린다. a.m_key 와 b.u_key..
모델링? - 현실에서 사용하는 복잡한 데이터를 어떻게 컴퓨터의 DBMS에 옮겨 놓을지 결정하는 과정 과거 : 프로젝트의 규모 작았고, 사용자의 요구 사항도 단순했음 현재 : 프로젝트의 규모 크고, 사용자의 요구 사항도 복잡해짐 데이터 모델링 - 건축 현실 세계 -> 개념 세계 -> 컴퓨터 세계로 표현 EX ) 네이버 로그인 -> 회원 아이디, 비밀번호, 로그인 날짜, IP 등... -> 테이블 형태 특징 1. 추상화 : 현실 시계를 간략히 표현 2. 단순화 : 누구나 쉽게 이해할 수 있도록 표시한다. 3. 명확성 : 명확하게 의미가 해석되고, 한 가지 의미만 가져야 한다. 현실에서 쓰이는 것을 테이블로 변경하기 위한 작업이다. 변환 대상 : 실체가 있는 대상 + 행동까지 변환 가능 나 > 올리브영 - 직..
SQL의 함수는 크게 두 종류 : 내장 함수 / 사용자 정의 함수 [ 내장 함수 ] DBMS가 제공하는 함수 최초 선언 시, 유효한 값을 입력 받아야한다. 선언에 위배되는 값을 입력하면, 실행이 중지되고 에러 메시지가 출력된다. SELECT, UPDATE, DELETE에서 모두 사용가능하다. [[ 주요 내장 함수 ]] [ 제어 흐름 함수 ] 프로그램의 흐름을 제어 - IF(수식, 참, 거짓) SELECT IF(100 > 300, 'T', 'F'); -- F 반환 - IFNULL(수식1, 수식2) : 수식1이 NULL이 아니면 수식1 반환 / NULL이면 수식2 반환 SELECT IFNULL(NULL,'NULL입니까'), IFNULL(300,'NULL입니까'); -- NULL입니까 / 300 반환 - ..
하나의 툴로 여러 데이터베이스를 관리할 수 있다. heiSQL은 무거운 작업을 진행하다보면 멈추는 형상이 발생할 수 있음 팀플, 현업 유지보수 - DBeaver 사용 데이터 수정 또는 삭제할 때 관계-제약조건 존재 *** 삭제하려는 테이블을 찾아서 어떤 테이블이랑 관계가 있는지 확인하고, 순차적으로 데이터를 삭제한다. A,B,C,D 테이블 전부 연관되어있을 때 - SELECT 후 DELETE 오른쪽 마우스 - add new property 윈도우 - 설정
[ 데이터 타입 ] 데이터 타입의 종류가 많은 이유 : 실제 저장되는 데이터 타입이 다양 -> 데이터에 맞는 타입 지정하면 데이터를 효율적으로 저장할 수 있기 때문 RDBMS는 테이블 구조 : 데이터들이 DB서버의 공간을 계속 차지 -> 저장 공간을 효율적으로 사용하는 것이 중요 0~999 6자리 데이터베이스도 낭비를 줄이기 위해 용량을 생각하여 데이터 타입을 지정해야 한다. 크게 문자형, 숫자형, 날짜형으로 나뉘고 실제 저장되는 데이터 타입은 더 다양하다. 각 데이터에 맞는 타입을 지정해서 효율적으로 저장할 수 있다. [ 숫자형 ] - 자주 사용 : SMALLINT, INT, BIGINT, FLOAT *UNSIGNED 예약어 예) 키 데이터를 삽입하는 컬럼 SMALLINT : 대략 범위 -3만 ~ 3만..
[데이터베이스 선택 가이드] 1. KEY -VALUE Database - 데이터를 키 -밸류로 저장하는 데이터 베이스 - 실용성이 떨어지고, 서브DB로 사용 Redis : 특이하고 많이 사용 데이터를 하드디스크에 저장. redis는 RAM에 저장. RAM에 저장 > 속도 빠름 메인 DB를 RAM에 복사하고, 필요한 데이터를 RAM에서 꺼내서 사용 2. RDBMS - 데이터를 표 형태로 저장하고 싶을 때, 관계형 데이터베이스를 사용한다. - 어떻게 데이터를 저장할지 이름(속성)을 작성하고, 데이터를 저장. - 다양한 분야에서 사용할 수 있어서 RANK에 상위권은 모두 RDBMS - RDBMS는 데이터를 저장하고 싶으면, SQL을 사용한다. - 하지만, RDBMS는 데이터의 중복을 싫어함 때문에 반드시 지켜..
[ DBMS ] 1. 데이터베이스의 구축 절차 - 데이터 베이스 만들기 - 테이블 만들기 - 데이터 입력, 수정 ,삭제 - 데이터 조회, 활용 데이터베이스는 데이터를 저장하는 공간이고, 가장 먼저 데이터 베이스를 준비하고, 그 안에 테이블을 생성해야한다. 대용량의 데이터를 관리하며 여러 사용자가 동시 접속 및 공유하는 개념 데이터를 어떤 방법으로 저장하면 좋을까? 여러가지 이론이 제시, 데이터모델 종류 : 계층형, 망형, 관계형, 객체관계형 등 가장 많이 > 관계형 데이터 베이스 RDBMS - 데이터가 테이블에 저장 (최소단위) - 테이블은 하나 이상의 열과 행으로 이루어짐 **root 계정 모든 권한을 가지고 있는 관리자의 이름 root root계정의 비밀번호가 유출 -> 모든 데이터가 유출 설치 후 ..
SELECT 쿼리 실행 - DB로부터 데이터를 SELECT해서 실행 결과 적용(리스트 출력) [ 사전 작업 ] 1. 클래스/인터페이스 IMPORT (user_list.jsp) // (insert/update/delete) 쿼리 실행에서는 데이터를 입력 받아 바로 pstmt를 통해 DB에 입력/수정/삭제 하기 때문에 굳이 ResultSet으로 데이터를 할당해줄 필요가 없었다. // 하지만 select 쿼리 실행에서는 실행으로 끝나지 않고 결과를 사용해야하기 때문에 DB로부터 데이터를 가져와 ResultSet을 이용해 변수에 담아줄 필요가 있다. 인터페이스 - 구현을 명령 받은 클래스 Connection - ConnectionImpl PreparedStatement - ClinetPreparedStateme..