본문 바로가기
728x90
반응형

Database18

[MariaDB] GROUP BY GROUP BY선택된 레코드의 집합을 특정 값으로 그룹화한 결과 집합SELECT 컬럼명 FROM 테이블명 GROUP BY 컬럼명;사용목적데이터의 값을 집계하기 위해주로 집계 함수와 같이 사용(total sum, average 등)아래 excel의 경우 Region을 group화 시켜 통계값 산출→ Region으로 묶을 경우 Items는 여러개지만 출력할 수 없음. 하나의 row로 출력하기 때문집계함수COUNT() : 행의 개수를 세어줌 - null 제외COUNT(*) - 전체 행의 갯수AVG() : 행 안에 있는 값의 평균을 내어줌SELECT round(avg(price), 0) from post; -- 소숫점 자릿수 0개 표시MIN() : 행 안에 있는 값의 최솟값을 반환해줌MAX() : 행 안에 있는.. 2023. 11. 24.
[MariaDB] JOIN JOIN(테이블을 가로로 합침)여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현크게는 INNER JOIN, OUTER JOIN으로 구분INNER JOIN(교집합)두 테이블 사이에 지정된 조건에 맞는 레코드만을 반환. 양쪽 테이블에 모두 해당 조건에 맞는 값이 있어야 결과에 포함tableA의 ID와 tableB의 a_id가 일치하는 ON 조건을 만족하는 데이터만 JOINSELECT * FROM tableA INNER JOIN tableB ON tableA.ID = tableB.A_IDSELECT * FROM tableA AS a INNER JOIN tableB AS b on a.ID = b.a_id; →AS 생략 가능출력결과TableA의 모든컬럼 + TableB의 모든컬럼그 중.. 2023. 11. 22.
[MariaDB] 동시성 이슈 트랜잭션정의트랜잭션이란 하나의 논리적인 작업 단위로 처리되어야 하는 하나 이상의 SQL 문의 집합예시1) 은행 계좌 간에 이체를 할 때, 금액을 한 계좌에서 빼고 다른 계좌에 더하는 두 가지 연산은 한 작업의 단위로 처리되어야 하는 트랜잭션→ A 고객의 계좌에서 10만원을 빼서 B고객의 계좌에 옮기는 경우, UPDATE 두가지가 필요→ 이때 A 고객 계좌에서 빼는건 성공, B고객의 계좌에 더하는건 실패한다면 문제가생김→ 따라서 이 두 UPDATE 쿼리 중 하나라도 에러가 발생하면 모두 취소시키기 위해 트랜잭션으로 묶어야 한다.예시2) 주문을 하고 order테이블에 주문을 생성하고, item테이블에서 재고까지 빼주는 작업이 한 단위로 처리되어야 하는 트랜잭션→ order INSERT, item UPDATE.. 2023. 11. 22.
[MariaDB] 흐름제어 흐름제어CASE valueWHEN [compare_value1] THEN result1WHEN [compare_value2] THEN result2…ELSE result3ENDCASE와 END로 이루어져있고, 원하는 조건내에 존재하지 않으면 ELSE문을 타고, ELSE문이 없을 경우 null을 return실습post 테이블에서 id, title, contents, 그리고 author_id의 경우 author_type이라는 이름으로 조회author_id가 만약 1이면 first_author, 2이면 second_author로 조회가 되도록 하고 3 이상 그외의 경우 etc_authors로 조회하도록 하여라.case when 사용하여 출력if문 사용하여 동일하게 출력post 테이블SELECT id, titl.. 2023. 11. 22.
[MariaDB] 제약조건 제약조건(constraint)데이터를 입력받을 때 실행되는 검사 규칙CREATE 문으로 테이블을 생성 또는 ALTER 문으로 필드를 추가할 때 설정NOT NULUNIQUEPRIMARY KEY → NOT NULL, UNIQUE, 한 테이블당 1개FOREIGN KEY 제약조건-NOT NULLdefalut값은 nullablenot null 제약조건이 설정된 필드는 무조건 데이터를 가지고 있어야 한다.CREATE TABLE author (id INT NOT NULL,name VARCHAR(30),…);ALTER문을 써서 post의 title을 not null 조건으로 바꿔보자이미 NULL인 데이터는 삭제기존 테이블 정보변경 후AUTO_INCREMENT새로운 레코드가 추가될 때마다 1씩 증가된 값을 저장 적용 후.. 2023. 11. 22.
[MariaDB] 연산자 비교 연산자=→ select *from post where id = 1;! =, (같지않음)→ select *from post where id != 1;→ select *from post where id 1;, > =→ select * from author where age > 3;IS NULL, IS NOT NULL (is 대신 =는 불가능)BETWEEN min AND max피연산자의 값이 min 값보다 크거나 max보다 작으면 참을 반환 (이상, 이하-min,max값 포함)IN(), NOT IN()→ select * from post where id not in(1,2,3); 논리 연산자AND&&도 가능SELECT * from author where name = ‘홍길동’ AND age=20;→ 이름.. 2023. 11. 22.
[MariaDB] 데이터타입 타입(data type) - 숫자테이블의 타입확인 DESCRIBE 테이블명; - 숫자 타입정수TINYINT-128~ 127범위(2의8승=256), 1바이트 //1바이트=8비트 바이트가 커질수록 내가 표현할 수 있는 숫자가 커짐JAVA의 byte와 매핑INT4바이트(2의8승*4)JAVA의 int타입과 매핑BIGINT8바이트JAVA와 long타입과 매핑UNSIGNED 타입을 사용하여 양수만 표현가능표현값 2배로 증가TINYINT UNSIGNED 이렇게 사용한다면 255까지 사용 가능 ex)나이실수부동 소수점 타입(소숫점을 이진법으로 표현)FLOAT(M,D), DOUBLE(M,D)오차가 발생할 여지가 있음고정 소수점 타입 - 권유(속도는 느리지만 오차없음)DECIMAL(M,D)JAVA의 BigdecimalM은.. 2023. 11. 22.
[MariaDB] DML DML - INSERT테이블에 새로운 레코드를 추가INSERT INTO 테이블이름(필드이름1, 필드이름2, 필드이름3, ...) VALUES (데이터값1, 데이터값2, 데이터값3, ...)예제insert author(id, name, email) values(1. 'kim', 'abc@naver.com');MariaDB에서 문자열은 쌍따옴표가 아닌, 따옴표(')로 감싼다.MariaDB에서 명령문은 대소문자를 구분X 그러나 대문자가 관례테이블명, 컬럼명은 소문자가 관례테이블명은 대소문자를 구분 DML -UPDATE테이블 레코드의 내용을 수정UPDATE 테이블이름 SET 필드이름1=데이터값1, 필드이름2=데이터값2, ... WHERE 필드이름=데이터값만약 WHERE 절을 생략하면, 해당 테이블의 모든 레코드.. 2023. 11. 22.
728x90
반응형