MySQL
-
서브쿼리와 VIEWMySQL 2023. 1. 16. 14:55
이번 게시글에서는 서브쿼리에 대해 추가로 학습하고, VIEW에 대해 알아보고자 한다. 1. 스칼라 서브쿼리(Scalar subquery) select 절에 사용하는 서브쿼리로, 이름과 같이 서브쿼리의 값을 scalar(불연속)데이터로 반환하는 것을 말한다. 예를 들자면, Orders 테이블에서 고객별 합산값을 도출하는데, custid 뒤에 이름을 표시하고 싶을 때에 다음과 같이 작성할 수 있다. select custid, (select name from Customer cs where cs.custid = od.custid) name , sum(saleprice) total from Orders od group by custid; 다음과 같이, 불연속형 데이터인 name을 서브쿼리 로 넣을 수..
-
데이터 순번 매기기 · UPDATE 함수MySQL 2023. 1. 16. 14:48
이번 게시글에선 데이터의 순번을 매기는 방법과, UPDATE 함수를 알아보려 한다. 1. 데이터 순번 매기기 데이터에 순번을 매겨 관리하고 싶을 때, oracle 등 타 언어와는 다르게 변수를 선언, 이에 1을 더해 나타내는 방식으로 진행해야 한다. 변수 선언은 ' set ' 으로 한다. set @seq:= 0; python에서 할당을 ' = '로 하듯, MySQL의 할당 방법은 ' := ' 이다. ( = 은 비교연산자로 취급된다.) 따라서 다음과 같은 문장은 @seq 에 0을 할당한다고 해석하면 된다. 이후에, @seq에 1씩 더하는 것을 select문 이후에 적어 노출시킨다. select ( @seq := @seq + 1 ) 그 이후에, 다음과 같이 넣고 싶은 데이터를 작성하면 이와..
-
MySQL 내장 함수MySQL 2023. 1. 16. 14:22
이번 게시글에서는 MySQL의 내장 함수 중 자주, 혹은 종종 쓰이는 함수들에 대해 알아보고자 한다. 이번 게시글에서의 함수 사용 시에는, 임의의 테이블인 dual을 from문에 위치시키는 것을 기본으로 한다. 1. 숫자 함수 ABS(n): 절댓값 select abs(-4.5) from dual; CEIL(n): 크거나 같은 최소의 정수 (올림) select ceil(4.1) from dual; FLOOR(n): 작거나 같은 최소의 정수(내림) select floor(4.1) from dual; ROUND(n, m): m번째 자리까지의 반올림 select round(4.17, 1) from dual; 2. 문자 함수 CONCAT('문자열', '문자열'): 여러 개의 문자열을 합침..
-
ALTER문으로 테이블 컨트롤하기MySQL 2023. 1. 11. 15:53
이번 게시글에선 ALTER문을 이용한 테이블의 속성과, 속성에 대한 제약 변경 등에 대해 알아보고자 한다. 이에 앞서 새로운 테이블 newBook을 만들어 조작해보도록 하자. create table newBook( bookid integer, bookname varchar(40), publisher varchar(40), price integer); 이후에 테이블의 속성을 열람하는 desc를 활용해 테이블이 정상적으로 생성됐는지 확인할 수 있다. desc newBook; ALTER를 이용한 테이블의 조작은 다음과 같이 조작할 테이블을 지정하는 것으로 시작한다. ALTER TABLE __'테이블명'__ 그 이후의 조작은 다음과 같은 식으로 분류할 수 있다 1. 컬럼(속성) 추가 형식:..
-
CASE로 조건 설정하기MySQL 2023. 1. 11. 13:13
이번 게시글에서는 CASE를 활용한 조건 설정을 알아볼 것이다. CASE는 조건과 그 반환값을 정의하는 것으로, 그 형태가 switch문 혹은 if문과 유사하다. CASE의 기본 구조는 CASE - WHEN - THEN - ELSE - END 이며, select 문에 작성한다. 예시를 들어 보자. Book테이블의 데이터 중 1. bookid와 bookname을 가져오고, 2. 가격이 30,000원 이상인 것은 A 30,000원 이하 20,000원 이상인 것은 B 20,000원 이하인 것은 C를 주며, 이상 데이터(텍스트 등) 은 null로 처리하도록 쿼리문을 작성해보겠다. CASE문의 사용은 다음과 같이 한다. CASE WHEN (조건1) then (결과1) WHEN (조건2) then (..
-
서브쿼리와 EXISTSMySQL 2023. 1. 10. 15:56
이번 게시글에서는 데이터를 더 효율적 탐색하는 다른 방법들에 대해 알아보겠다. 지금까지 배운 것들을 기준으로, 주문이 있는 고객의 모든 정보를 가져오고 싶다면 어떻게 해야 할까? 두 단계를 거쳐서 알아보자. Orders에 있는 custid를 찾아본다(=주문이 존재하는 custid를 도출한다) select custid from Orders; 그러면 이와 같이 1, 2, 3, 4의 custid를 가진 고객에게 주문정보가 있다는 것을 알 수 있다. 2. 해당 custid를 기반으로 Customer에서 찾는다. select * from Customer where custid in (1,2,3,4); 그러면 다음과 같이 주문 정보가 없는 Park Seri고객을 제외한 나머지 고객의 전체 데이터가 결과로 나온다..
-
Join을 활용한 데이터의 분류 활용MySQL 2023. 1. 10. 14:10
이번 게시글에선 데이터를 join하여 두 개 이상의 데이터를 링크해 다루는 법을 알아보겠다. 이에 앞서, 한 가지 표현방법을 명시하고자 한다. 테이블을 여러 가지 핸들링하는 경우에, 테이블의 행이 어느 테이블에 속하는지 명시하는 방법이다. 예를 들어, select name, bookname, price from Customer, Book; 이와 같이 표시하는 경우, 아래와 같이 name, bookname, price의 소속을 밝혀주는 게 관례이다. select Customer.name, Book.bookname, Book.price from Customer, Book; 이때 테이블의 이름을 일일히 쓰기에 너무 길다면, 짧은 문자로 저장해 쓸 수도 있다. select cs.name, bo...
-
테이블 생성 시의 제약조건MySQL 2023. 1. 10. 13:44
이번 게시글에선 테이블 생성 시의 제약조건에 대해 조금 알아보고자 한다. 1. null값 배제(필수적인 정보의 확보) 학교에서 학생을 입학시킬 때를 예시로 들어보자. 이때 데이터로 입력해야 하는 필수적인 정보는 무엇이 있을까? 학번, 이름, 사관학교의 경우 연령 등 특히나 '없어서는 안 되는'정보들은 분명히 있다. 다르게 말해, 데이터가 'null' 값으로 존재해서는 안 되는 상황이다. 이런 경우, 테이블에서 컬럼 설정 시 값을 넣어줄 수 있다. 다음과 같은 형식이다. create table Book( custid integer not null ); 다음과 같이 설정하면 custid가 입력되지 않을 시 오류가 발생하며, 해당 행의 데이터 입력이 불가해진다 2. 기본값 설정 아이스..