개발일기/DB, SQL

SQL - SELECT

길동이이이잉 2024. 4. 8. 23:04
728x90
반응형
SELECT [PREDICATE] [테이블명.]속성명[ AS 별칭][, [테이블명.]]속성명, ...]
FROM 테이블명[, 테이블명, ...]
[WHERE 조건]
[GROUP BY 속성명[, 속성명, ...]]
[HAVING 조건]
[ORDER BY [ASC|DESC][, [ASC|DESC], ...]];

 

  • PREDICATE : 검색할 튜플을 제한할 목적
    • ALL 
    • DISTINCT : 중복 제거
    • DISTINCTROW : 중복 제거 하지만 선택된 속성의 값이 아닌 튜플의 전체 값을 대상으로 할 때
  • GROUP BY : 특정 속성을 기준으로 그룹화하여 검색할 때 사용, 일반적으로 그룹 함수와 함께 사용됨
    • 그룹 함수 - COUNT, MAX, MIN, SUM, AVG
  • 비교 연산자 ( = : 같다, <> : 같지 않다)
  • 논리 연산자 (NOT, AND, OR)
  • LIKE 연산자
    •   * 또는 %     : 모든 문자를 대표
    •   ? 또는 _     :  문자 하나를 대표
    •         #          :  문자 하나를 대표
  • 연산자 우선순위 
    • 높음     *   /  +  -  (  =  <>  <   >   >=  <=  )  NOT   AND  OR     낮음

 

 

 

SELECT Trim(이름)+"월급은" AS 이름, 기본급+10 AS 기본급
FROM 사원;
--Trim  좌우 공백 제거
SELECT CONCAT(MAX(LENGTH), "cm") AS MAX_LENGTH


SELECT *
FROM 사원
WHERE 부서 = '기획' OR 부서 = '인터넷';
WHERE 부서 IN ('기획', '인터넷');
--둘이 같은 표현 - 부서가 '기획'이거나 '인터넷'인 튜플


WHERE 이름 LIKE '김%';


SELECT 부서, AVG(기본급) AS 평균
FROM 사원
GROUP BY 부서
ORDER BY 부서 ASC;


SELECT 이름,주소
FROM 사원
WHERE 이름 IN (SELECT 이름 FROM 여가활동 WHERE 취미='나이트댄스');



--통합 질의 UNION : 두 테이블 합치기
SELECT *
FROM 임원
UNION SELECT * FROM 직원;

 

 

 

 

-- 평균
SELECT round(avg(컬럼명),0) as AVERAGE_FEE
-- 평균 + 그룹
SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
GROUP BY CAR_ID
HAVING AVERAGE_DURATION >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC


-- DETE 포맷
SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
또는
SELECT MEMBER_ID, MEMBER_NAME, GENDER, to_char(DATE_OF_BIRTH,'yyyy-mm-dd') "DATE_OF_BIRTH"
-- 3월 찾기
where TO_CHAR(date_of_birth, 'MM') = 03


--NULL 값을 가지고 있을 경우
SELECT PT_NAME, PT_NO, GEND_CD, AGE, IFNULL(TLNO, 'NONE') AS TLNO


-- 중복 제거
SELECT COUNT(DISTINCT (NAME))


SELECT name
from ANIMAL_INS 
where DATETIME = (select min(DATETIME) from ANIMAL_INS);

SELECT COUNT(*) AS FISHCOUNT
FROM FISHINFO AS FI 
JOIN FISHNAMEINFO AS FNI ON FI.FISHTYPE=FNI.FISHTYPE
WHERE FNI.FISH_NAME IN ('BASS', 'SNAPPER')


---재구매가 일어난 상품과 회원 리스트 구하기
SELECT user_id, product_id 
from online_sale 
group by USER_ID, PRODUCT_ID
having count(user_id) >= 2
order by user_id asc, product_id desc;



--UNION
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, USER_ID,	SALES_AMOUNT
from ONLINE_SALE
where SALES_DATE like '2022-03%'
union
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, null as USER_ID,	SALES_AMOUNT
from offline_sale
where SALES_DATE like '2022-03%'
order by SALES_DATE, PRODUCT_ID, USER_ID;
728x90
반응형