Loading
[프로그래머스][SQL][Lv03] 물고기 종류 별 대어 찾기
·
🧾 Codetest/프로그래머스
[프로그래머스][SQL][Lv03] 물고기 종류 별 대어 찾기 풀이 ID 컬럼은 group by가 불가능하기 때문에, where 절에서 서브쿼리를 사용해 종류별 가장 큰 물고기와 일치하는 종류와 길이를 검색한다. 정답 SELECT id, fish_name, length FROM fish_info JOIN fish_name_info USING (fish_type) WHERE (fish_type, length) IN ( SELECT fish_type, MAX(length) FROM fish_info GROUP BY fish_type) ORDER BY id;
[SQL] USING
·
💾 Data/SQL
[SQL] USING USING 두 개의 테이블이 내부 조인으로 조인 될 때 조인하고자 하는 두 테이블의 컬럼명이 같을 경우 조인 조건을 길게 적지 않고 간단하게 적을 수 있다. 일반적인 JOIN 조건이 다음과 같을 때, SELECT * FROM dept d JOIN employees e ON d.dept_num = e.dept_num; USING을 사용하면 다음과 같이 표현 할 수 있다. SELECT * FROM dept d JOIN employees e USING(dept_num); 추가로 ON을 사용하면 컬럼명이 다르더라도 JOIN 조건을 사용할 수 있다.
[MySQL] With 문
·
💾 Data/SQL
[MySQL] With 문SQL을 사용하여 대량의 데이터를 다루는 경우, 임의의 결과를 정의하고 사용하는 경우임시 테이블을 만들어 해당 테이블에 값을 저장할 수 있다. WITHwith절은 동일한 SQL이 반복되어서 사용될 때 성능을 높이기 위해 사용된다.실제로는 temp라는 임시테이블에 저장되는 가상의 테이블이다.with as ( )with절은 임시테이블을 사용하여 저장해놓은 데이터를 액세스하기 때문에, 메모리를 차지한다.여러 개의 with절을 동시에 돌리면 임시테이블에 부하가 발생해 다같이 느려진다. with절은 다음과 같은 두가지 방식이 이용된다. 1) materialize기본 with절 사용 시 적용되는 것으로  temp를 사용한다.  2) inlinetemp 테이블을 생성하지 않고 inli..
[프로그래머스][SQL][Lv02] 조건에 맞는 사원 정보 조회하기(서브쿼리)
·
🧾 Codetest/프로그래머스
[프로그래머스][SQL][Lv02] 조건에 맞는 사원 정보 조회하기(서브쿼리) 풀이 FROM 절의 서브 쿼리를 사용하여 score 데이터가 있는 동적인 테이블을 생성한다. 먼저 사원 별로 2022년도의 평가 점수를 검색 한다. SELECT SUM(score) AS score, emp_no FROM hr_grade GROUP BY emp_no 위 쿼리를 FROM 절의 서브쿼리로 사용한 뒤, hr_employees 테이블과 임시 테이블의 emp_no가 같은 데이터만 검색할 수 있도록 조건을 걸어준다. 점수를 기준으로 내림차순으로 정렬 뒤 limit으로 1순위를 뽑아낼 수 있다. 정답 SELECT s.score, e.emp_no, emp_name, position, email FROM hr_employees ..
[MySQL] ROUND(), TRUNCATE()
·
💾 Data/SQL
[MySQL] ROUND(), TRUNCATE() 숫자 데이터를 다룰 때, 소수점 자리를 처리해야하는 경우가 있다. MySQL에서 반올림과 버림 기능을 사용하기 위해 각각 ROUND()와 TRUNCATE() 함수를 사용할 수 있다. 반올림 ROUND ROUND() 함수를 사용하면 반올림을 사용할 수 있다. ROUND(소수, 나타내고 싶은 자리 수) 만약 소수점 3번째 자리에서 반올림을 하고싶다하면 다음과 같이 나타낼 수 있다. SELECT ROUND(123.4567, 2) -- 123.46 음수도 사용이 가능하다. SELECT ROUND(123.456, -1) -- 120 버림 TRUNCATE TRUNCATE() 함수를 이용하면 특정 자리 수 이하를 버릴 수 있다. TRUNCATE(숫자, 나타내고 싶은 ..
[프로그래머스][SQL][Lv02] 조건에 맞는 개발자 찾기(&)
·
🧾 Codetest/프로그래머스
[프로그래머스][SQL] 조건에 맞는 개발자 찾기 풀이프로그래밍 스킬 코드가 2진수로 이루어져있기 때문에비트 연산자를 사용하여 판별을 할 수 있다. & 연산자: A & B 일 때, A 비트의 값이 0이면 B 비트 값에 상관없이 0A 비트의 값이 1이면 B 비트의 값에 따라 0 또는 1A 와 B 의 비트 값이 모두 1일 때만 1 정답SELECT id, email, first_name, last_nameFROM developersWHERE skill_codes & (SELECT code FROM skillcodes WHERE name = 'Python')OR skill_codes & (SELECT code FROM skillcodes WHERE name = 'C#')ORDER BY id;
[MySQL] DATE_FORMAT
·
💾 Data/SQL
[MySQL] DATE_FORMAT MySQL의 DATE_FORMAT 함수는 날짜를 지정한 형식으로 출력한다. DATE_FORMAT DATE_FORMAT(날짜, 형식) 주어진 date를 format에 맞춰 문자열로 변환한다. 구분 기호는 다음과 같다. 기호 역할 기호 역할 %Y 4자리 년도 %m 숫자 월(두자리) %y 2자리 년도 %c 숫자 월(한자리) %M 긴 월(영문) %d 일자(두자리) %b 짧은 월(영문) %e 일자(한자리) %W 긴 요일 이름(영문) %l 시간(12시간) %a 짧은 요일 이름(영문) %H 시간(24시간) %i 분 %r hh:mm:ss AM, PM %T hh:mm:SS %S 초 Example SELECT DATE_FORMAT(now(), '%Y-%m-%d'); -- 2023-11-..
[MySQL] 문자열 함수
·
💾 Data/SQL
[MySQL] 문자열 함수 MySQL 문자열 함수의 종류 함수 설명 CONCAT(문자열, 문자열) 문자열을 합쳐준다. LEFT(문자열, 길이) OR RIGHT(문자열, 길이) 왼쪽 또는 오른쪽에서 길이만큼 문자열을 끊어준다. SUBSTRING(문자열, 시작, 끝) 문자열을 기준에 따라 나눠준다. REPLACE(문자열, target, replace) 문자열 중의 target에 해당하는 부분을 replace로 바꾼다 REVERSE(문자열) 문자열을 거꾸로 뒤집는다. CHAR_LENGTH(문자열) 문자열의 길이를 반환한다. (공백 포함) UPPER(문자열) 문자열을 대문자로 전부 변환하여 반환한다. LOWER(문자열) 문자열을 소문자로 전부 변환하여 반환한다. CONCAT(문자열, 문자열) 문자열을 합쳐준다...
[MySQL] REGEXP
·
💾 Data/SQL
[MySQL] REGEXP LIKE와 IN을 같이 사용한 것과 동일한 결과를 출력하는 방법이 없을까하고 찾아보니, REGEXP라는 정규식을 사용하면 like와 in을 동시에 사용한 것과 같이 사용이 가능하다고 한다. 사용법은 다음과 같다. TEST 테이블의 TEST1 컬럼에 감자, 튀김, 햄버거 중 하나라도 포함이 된 row는 출력을 한다. SELECT * FROM TEST WHERE TEST1 REGEXP '감자|튀김|햄버거' 다음은 예시 사용법이다. SELECT CAR_TYPE, COUNT(*) AS CARS FROM CAR_RENTAL_COMPANY_CAR WHERE OPTIONS REGEXP '통풍시트|열선시트|가죽시트' GROUP BY CAR_TYPE ORDER BY CAR_TYPE 참고 htt..
[MySQL] 재귀 쿼리(Recursive)
·
💾 Data/SQL
[MySQL] 재귀 쿼리(Recursive) 🤔재귀함수? 함수 안에 자신의 함수를 다시 호출하는 함수를 의미한다. 자신의 로직을 내부적으로 반복하다가, 일정한 조건이 만족되면 함수를 이탈하여 결과를 도출한다. MySQL에서도 재귀 쿼리 기법이 존재하는데, 사용법은 다음과 같다. WITH RECURSIVE 쿼리문을 작성하고, UNION을 통해 재귀를 구성한다. WITH RECURSIVE cte AS( SELECT 1 AS a --재귀 초깃값 UNION ALL SELECT a + 1 --재귀 FROM cte WHERE h < 5 --재귀 정지 조건 ) SELECT * FROM cte a 1 2 3 4 5 예를 들어, 0시부터 23시까지의 시간값이 필요할 때, 다음과 같이 재귀쿼리를 사용할 수있다. ANIMA..
[SQL] 테이블 생성 (CREATE)
·
💾 Data/SQL
[SQL] 테이블 생성 (CREATE) CREATE TABLE CREATE TABLE 테이블 명( 컬럼명 데이터타입 조건, 컬럼명 데이터타입 조건, . . ); 데이터 타입 데이터 타입 의미 CHAR 특정 문자열의 개수를 지정 VARCHAR 가변길이의 문자열을 저장할 때 사용 최대 길이를 지정 (ORACLE x) VARCHAR2 가변길이의 문자열을 저장할 때 사용 최대 길이를 지정 (MySQL, MariaDB x) NUMBER 숫자에 사용되는 데이터 타입, 소수점 저장 가능 (MySQL에선 INT) DECIMAL 숫자에 사용되는 데이터 타입 소수점 저장 가능 DATE 날짜에 사용되는 데이터타입 제약 조건 제약 조건 의미 NOT NULL 값이 꼭 입력이 되어야 할 때 사용 NULL 허용 x UNIQUE 해..
[SQL] 테이블 변경 (ALTER)
·
💾 Data/SQL
[SQL] 테이블 변경 (ALTER) ALTER 기존에 생성되어있는 테이블에 컬럼을 추가/변경 하는 등 테이블 변경 사항을 적용할 때 사용하는 구문 컬럼 추가 ALTER TABLE table_name ADD COLUMN column_name varchar(32) NOT NULL; 컬럼 변경 ALTER TABLE table_name MODIFY COLUMN column_name varchar(16) NULL; 컬럼 이름 변경 ALTER TABLE table_name CHANGE COLUMN column_name new_column_name varchar(16) NULL; 컬럼 삭제 ALTER TABLE table_name DROP COLUMN column_name; 테이블 이름 변경 ALTER TABLE ..
top