'Data Base/SQL' 카테고리의 글 목록
본문 바로가기
728x90

Data Base/SQL15

MySQL) 프로시저(PROCEDURE) 프로시저 (PROCEDURE) 어떠한 동작을 일괄 처리하기 위한 쿼리문의 집합 설명 DLIMITER $$ CREATE PROCEDURE ( ) BEGIN END $$ 프로시저(Procedure)란 MySQL 에서 제공이 되는 프로그래밍 기능이라고 생각을 하면 된다. 현재 프로시저의 입출력 파라미터(매개변수) 를 관리하는 부분이다. 입력 파라미터는 `IN ` 으로, 출력 파라미터는 `OUT `으로 선언이 된다. 그리고 입출력을 동시에 행하는 파라미터도 있으며 이는 `INOUT ` 으로 선언이 된다. 아래에 예시를 들어보았다. IN number INT OUT sum INT INOUT value INT 주황색 부분은 입력, 출력, 입출력 여부를 선언하는 부분이다. 초록색 부분은 그 파라미터의 이름이고 보라색 .. 2022. 1. 17.
MySQL) IF, IFNULL, NULLIF, CASE ~ WHEN ~ END IF, IFNULL, NULLIF, CASE ~ WHEN ~ END [제어 흐름 함수] 설명 * IF ( , , ) 이 참이면 이 반환이 되고, 이 거짓이면 이 반환이 된다. SELECT IF (100 > 200, 'True', 'False'); # False가 출력이 될 것 이다. SELECT IF (200 > 100, 'True', 'False'); # True가 출력이 될 것 이다. 이 100 > 200 인 선언문은 거짓 이므로 이 출력되어 'False'가 출력이 되었고, 수식이 200 > 100 인 선언문은 참 이므로 이 출력되어 'True'가 출력이 되었다. * IFNULL ( , ) 이 NULL이 아니면 이 반환이 되고, NULL이면 가 반환이 된다. SELECT IFNULL (NULL, 'T.. 2022. 1. 11.
MySQL) WITH절을 이용한 비재귀적 CTE WITH절 (비재귀적 CTE) Non Recursive CTE(Common Table Expression) 설명 아래와 같이 테이블들이 생성되고 데이터들이 삽입되었다고 하자. CREATE TABLE department ( dept_num INT NOT NULL PRIMARY KEY, name VARCHAR(20) NOT NULL ); INSERT INTO department VALUES (1, 'A'), (2, 'B'), (3, 'C'); CREATE TABLE employee ( emp_id INT NOT NULL PRIMARY KEY, dept_num INT NOT NULL, name VARCHAR(20), salary INT NULL, FOREIGN KEY (dept_num) REFERENCES d.. 2022. 1. 4.
MySQL) ON DUPLICATE KEY UPDATE ON DUPLICATE KEY UPDTAE 중복된 Key 입력 시 이렇게 처리 해 주세요 설명 CREATE TABLE users ( id INT NOT NULL PRIMARY KEY, name VARCHAR(20), addr VARCHAR(30) ); INSERT INTO users VALUES (1111, 'David', 'Songtan'), (2222, 'Jihoon', 'Seoul'), (3333, 'Yujin', 'Anyang'); 위와 같이 테이블 생성 및 data INSERT 를 하였다. 당연히 알고있는 것 이지만 중복되는 id값을 가지는 data의 삽입은 아래와 같이 불가능하다. 하지만 아래와 같은 방법들을 통해 중복되는 Primary key 값을 가지는 data에 대해서 처리 방식을 지정할.. 2022. 1. 4.
MySQL) 샘플 데이터 테이블 생성 샘플 데이터 테이블 생성 CREATE TABLE SELECT 설명 CREATE TABLE emp ( id INT NOT NULL PRIMARY KEY, name VARCHAR(30) NOT NULL, age INT NULL ); INSERT INTO emp VALUES (11111, 'David', 34), (22222, 'Jiyeon', 29), (33333, 'Roy', 31), (44444, 'John', 23); 위와 같은 테이블을 생성한 뒤 4개의 데이터를 집어 넣었다. emp 테이블에는 아래와 같이 data들이 들어있게 된다. 만약, 이 테이블에서 name COLUMN 만 따로 가져와서 emp_names 테이블을 따로 만들고 싶다면 어떻게 해야할까? 아래와 같이 하면 된다. [첫 번째 방법] .. 2022. 1. 4.
MySQL) AUTO_INCREMENT AUTO_INCREMENT 자동으로 증가하는 COLUMN 설명 CREATE TABLE auto_test( num INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name VARCHAR(10) ); num COLUMN 은 AUTO_INCREMENT로 선언이 되었다. AUTO_INCREMENT COLUMN 은 꼭 UNIQUE 조건을 가지고 있어야 한다. 그리고 이 TABLE에 data를 집어넣을 때 이 num COLUMN 에는 값을 넣을 필요가 없다. 자동으로 값이 입력되기 때문이다. 따라서, num COLUMN 에는 NULL 값을 입력해도 된다. 이 TABLE에 3개의 data를 입력 해 보았다. INSERT INTO auto_test VALUES (NULL, 'A'), (NULL.. 2022. 1. 4.
MySQL) 층간 합계 (ROLLUP) MySQL) WITH ROLLUP GROUP BY 절과 함께 사용되는 총합 또는 층간 합계 함수 [CREATE TABLE] CREATE TABLE price ( Category1 VARCHAR(10), Category2 VARCHAR(10), Cnt INT ); 위와 같은 TABLE 을 만들었다. [INSERT INTO price] INSERT INTO price VALUES ('Book', 'A', 12), ('Book', 'B', 8), ('Book', 'C', 23), ('Clothes', 'A', 9), ('Clothes', 'B', 11), ('Clothes', 'C', 7), ('Elec', 'A', 52), ('Elec', 'B', 19); price TABLE에 위와 같은 data들을 삽입.. 2021. 12. 28.
SQL) 문자열 다루기_2 (LOCATE/LEFT/RIGHT/LOWER/UPPER) SQL) 문자열 다루기 2 LOCATE(...), LEFT(...), RIGHT(...), LOWER(...), UPPER(...) LOCATE(sub_str, str) : 문자열에서 어떠한 문자열이 처음 나오는 곳의 index 값을 출력한다. LOCATE('aba', 'bcbababac') = 'bcbababac' 문자열에서 'aba' 문자열이 처음 나오는 곳의 index = 4 위 문자열 'bcbababac' 에서 'aba' 문자열이 처음 나오는 곳의 index 는 4 이다. 이 때 주의해야 할 점은, 대부분의 프로그래밍 언어에서 배열의 첫 시작 index는 0 이다. 하지만 MySQL 에서는 0이 아닌 1부터 시작한다. SELECT LOCATE('aba', 'bcbababac') AS Locate .. 2021. 9. 10.
SQL) 문자열 다루기_1 (LENGTH/CONCAT/SUBSTRING) SQL) 문자열 다루기 2 LENGTH(...), CONCAT(...), SUBSTRING(...), LENGTH(A) : 주어진 문자열의 길이를 출력하는 함수이다. LENGTH('Hello') = 'Hello' 문자열의 길이 = 5 SELECT LENGTH('Hello') AS Length FROM DUAL; CONCAT(A, B, ...) : 주어진 문자열들을 더하는 함수이다. CONCAT('Hello', ' ', 'World!') = 'Hello' + ' ' + 'World!' = 'Hello World!' CREATE TABLE S0910_2 ( First_name VARCHAR(10), Last_name VARCHAR(10) ); INSERT INTO S0910_2 VALUES ('Jihoon'.. 2021. 9. 10.
SQL) 순위함수(RANK, DENSE_RANK, ROW_NUMBER) 순위 함수 RANK(), DENSE_RANK(), ROW_NUMBER() RANK() : 순위에 대해서 중복되는 값들에 대해선 동일한 순위로 표시를 한다. 그리고 다음에 나오는 수의 순위는 이전에 중복되었던 값들의 수만큼 올라간다. CREATE TABLE Study ( Value INT ); INSERT INTO Study VALUES (100), (300), (300), (200), (300), (100), (200), (400); SELECT Value, RANK() OVER (ORDER BY Value ASC) AS 'Rank' FROM Study; 위 예시처럼 중복되는 값들에 대해선 동일한 순위가 부여가 되었고, 그 다음 값에 대한 순위는 이전에 중복된 값들의 개수만큼 올라간 순위가 부여되었다. .. 2021. 9. 3.
SQL) You can't specify target table '<Table>' for update in FROM clause ※ ERROR : You can't specify target table '' for update in FROM clause ※ #문제의 코드 DELETE FROM Person WHERE Id NOT IN ( SELECT MIN(Id) FROM Person GROUP BY Email ); #해결된 코드 DELETE FROM Person WHERE Id NOT IN ( SELECT Sub.Minval FROM ( SELECT MIN(Id) AS Minval FROM Person GROUP BY Email ) AS Sub ); 문제 Link : Delete Duplicate Emails - LeetCode 위와 같은 코드를 작성하였을 때 이런 에러가 발생하였다. 계속해서 확인을 해 본 결과 DELETE 로 .. 2021. 9. 2.
SQL) JOIN (INNER/LEFT/RIGHT/OUTER) JOIN (INNER / LEFT / RIGHT / OUTER) 설명 둘 이상의 테이블을 연결하여 데이터를 확인할 수 있는 방법이다. 연결하고자 하는 테이블 간 공통적인 컬럼이 있어야 하며, 그 컬럼은 그 테이블의 PK 혹인 FK 로 사용되고 있어야 한다. [JOIN 설명을 위한 두 테이블 정의] CREATE TABLE S1 ( ID INT PRIMARY KEY, NAME VARCHAR(30) NOT NULL ); INSERT INTO S1 VALUES (111, 'AAA'), (222, 'BBB'), (333, 'CCC'), (444, 'DDD'); CREATE TABLE S2 ( ID INT PRIMARY KEY, NAME VARCHAR(30) NOT NULL ); INSERT INTO S2 VALU.. 2021. 8. 29.
SQL) 연산자 우선순위 연산자 우선순위 (Operator precedence) 2021. 8. 23.
엔터티 (Entity) 엔터티 (Entity) 정의 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 집합적인 것 이다. 업무 활동상 지속적인 관심을 가지고 있어야 할 대상들 간에 동질성을 지닌 인스턴스들이나 그들이 행하는 행위의 집합으로 정의할 수 있다. 설명 엔터티는 그 집합에 속하는 개체들의 특성을 설명할 수 있는 속성(Attribute)를 갖는다. 어떠한 엔터티에 대해서 그에 해당되는 인스턴스들을 표현한 것을 속성이라고 한다. 엔터티는 Generic 한 특성을 가지고 Instance는 Specific한 특성을 가진다. 마치 OOP에서 class / object 의 관계를 나타내는 것 과 비슷하다. 엔터티의 특징 1. 반드시 해당 업무에서 필요하고 관리하고자 하는 정보여야 한다. 2. 유일한 식별자에 의해 식별이 가능.. 2021. 8. 12.
MySQL 정수 타입 (Integer types) MySQL 정수 타입 (Integer types) 2021. 8. 6.
728x90