SELECT 문
- 특정 칼럼 값을 찾아서 보여주는 명령어
기본적인 SELECT 문
-- grade 목록을 보여주고, 스코어가 A 인 것만
SELECT subject
FROM grade
WHERE score = 'A';
SELECT 다음은 보여줄 컬럼 이름 -> *는 전부
FROM 뒤는 테이블
WHERE 뒤는 조건
DISTINCT
-- 중복된 데이터는 병합해서 보여줌
SELECT DISTINCT subject
FROM grade;
중복된 데이터를 하나로 묶여서 보여주는 키워드
BETWEEN AND
SELECT * FROM product_test WHERE price BETWEEN 2000 AND 4000;
BETWEEN A AND B : A와 B 사이의 값 조건부
IN
SELECT * FROM product_test WHERE price IN (2000, 3000, 4000);
칼럼이 특정 값만
LIKE
-- LIKE : 찾는 것 - 'C', 'c' 대 소문자 구별함 / % 뒤에 있으면 시작하는 것 % 앞에 있으면 끝나는 것
SELECT * FROM product_test WHERE name LIKE('C%');
SELECT * FROM product_test WHERE name LIKE('%Y');
-- LIKE %% : name이 A를 포함
SELECT * FROM product_test WHERE name LIKE '%A%';
LIKE 특정 값이 포함 되어 있는지 확인
C% - C로 시작하는 것
%C - C 로 끝나는 것
%C% - C를 포함 하는 것들
IS NULL
-- is null : null 값 확인
SELECT * FROM product_test WHERE price is null;
NULL 것만..
GROUP BY
-- GROUP BY : 특정 칼럼을 그룹 별로 묶는 것
SELECT position, COUNT(position), SUM(salary)
FROM company_test
GROUP BY position;
특정 칼럼을 그룹으로 묶여서 표현
-- GROUP BY 여러개 묶기
SELECT position, department, SUM(salary) AS "급여 합계"
FROM company_test
GROUP BY position, department;
여러개를 묶여서도 가능
AS 는 보여질 때 칼럼의 이름을 보여줌
COUNT
-- COUNT : 특정 칼럼의 갯수를 세주는 것
SELECT COUNT(*) FROM company_test;
숫자를 카운터 해주는 것
GROUP BY ~ HAVING ~
-- HAVING : 그룹에 대한 조건 지정 / 그룹핑 된 것 중에서 6000 이상만
SELECT position, department, SUM(salary) AS "급여 합계"
FROM company_test
GROUP BY position, department
HAVING SUM(salary) >= 6000;
그룹을 묶은 것에 대한 조건문
ORDER BY
-- ORDER BY : 속성 값 정렬 / ASC 오름 차순, DESC 내림 차순
SELECT * FROM grade ORDER BY name ASC; -- 오름 차순
SELECT * FROM grade ORDER BY name DESC; -- 내림 차순
정렬 해주는 것
ASC - 오름 차순
DESC - 내림 차순
교차 조인
-- 교차 조인 (CROSS JOIN) 3 * 4 = 12 / 단순학게 SELECT 하면 모든 행이 조합되서 나옴
select * from book_test, book_price_test;
INNER JOIN ~ ON ~
-- INNER JOIN
SELECT A.booknumber, A.bookname, B.bookprice
FROM book_test A
INNER JOIN book_price_test B
ON A.booknumber = B.booknumber;
A 와 B 테이블을 합쳐주는 것
ON 이하는 조건 부
LEFT OUTER JOIN ~ ON ~
-- A 기준으로 B를 붙여주는데 A기준이기 때문에 A는 전부 보여주고, B에는 A에 있는 공통 튜플들만 보여준다.
SELECT A.booknumber, A.bookname, B.bookprice, B.booknumber
FROM book_test A
LEFT OUTER JOIN book_price_test B
ON A.booknumber = B.booknumber;
A LEFT OUTER JOIN B : A 에 (LEFT) B 테이블을 붙이는 것
ON 이하는 조건 부
RIGHT OUTER JOIN ~ ON ~
-- B 기준으로 A를 붙여주는데 B기준이기 때문에 AB는 전부 보여주고, A에는 B에 있는 공통 튜플들만 보여준다.
SELECT A.booknumber, A.bookname, B.bookprice, B.booknumber
FROM book_test A
RIGHT OUTER JOIN book_price_test B
ON A.booknumber = B.booknumber;
A RIGHT OUTER JOIN B : B 에 (RIGHT) A 테이블을 붙이는 것
ON 이하는 조건 부
서브쿼리 : SQL 문 안에 SQL 문 추가
-- 서브 쿼리 : SQL 안에 포함된 SQL문
-- FROM 절 안에 들어가는 서브쿼리
SELECT MAX(bookprice) as 가격
FROM book_price_test A,
(SELECT booknumber FROM book_test WHERE bookname = '자료구조') B
WHERE A.booknumber = B.booknumber;
-- WHERE 절 안에 들어가는 서브쿼리
SELECT MAX(bookprice)
FROM book_price_test
WHERE booknumber IN (SELECT booknumber
FROM book_test
WHERE bookname = '자료구조');
UNION
-- UNION 중복 행이 제거 된 후, 모두 합쳐주는 것
SELECT name
FROM emp_test
WHERE sal <= 2000
UNION
SELECT name
FROM emp_test
WHERE sal >= 1500;
-- UNION ALL 중복 행이 제거를 안하고, 모두 합쳐주는 것
SELECT name
FROM emp_test
WHERE sal <= 2000
UNION ALL
SELECT name
FROM emp_test
WHERE sal >= 1500;
INTERSECT : 공통적으로 존재하는 결과 (중복된 것만) 반환 / mySQL 미지원
MINUS : 첫 쿼리는 있고, 두 번째는 없는 것 / mySQL 미지원
https://lannstark.tistory.com/46
MySQL 교집합과 차집합
MySQL에서는 INTERSECT와 MINUS 연산을 지원하지 않는다. 어떻게 하면 다른 쿼리를 같은 효과를 낼 수 있는지 알아보자..! INTERSECT SELECT emp_no FROM dept_emp WHERE dept_no = 'd001' INTERSECT SELECT emp_no FROM dept_emp WHER
lannstark.tistory.com
-> MY SQL 대체문
'BACK_END > SQL' 카테고리의 다른 글
250220 _ SQL (0) | 2025.02.20 |
---|---|
250219_ SQL (0) | 2025.02.19 |
250217 _ MY SQL (0) | 2025.02.17 |