SQL(select)

손원진·2023년 2월 1일
0

[데이터베이스]

목록 보기
2/5

select의 활용

select substr(name,1,4) from student;	
-- substr을 이용해서 해당 컬럼 값의 출력 수를 지정할 수 있습니다.
     
select concat(name,address) from student; 
-- concat을 이용해 두개에 컬럼을 더해 문자형형식으로 다른 컬럼에 나타낼 수 있습니다.

select TO_DATE('2022/10/22','yyyy-mm-dd') 
-- 오라클에 경우 to_date로 문자형식 데이터를 날짜형식 데이터로 변경할 수 있습니다

select current_date + INTERVAL 1 DAY; 
--날짜를 연산할 때는 INTERVAL을 사용하고 CURRENT_DATE는 SQL언어로 현재 날짜입니다. 

select current_timestamp;
--시스템의 날짜확인 방법 


select trim('abc    ')
--trim함수는 문자열 압뒤에 스페이스가 있을경우 이를 제거해주는 함수입니다. 고정형 데이터 char에 주로 사용합니다. 

select char_length('dadsca')
--문자열에 길이를 알려주는 함수 

select octet_length
--문자열을 바이트 단위로 변경해서 알려주는 함수 

--EUC-KR에서 ASCII문자는 1바이트 한글은 2바이트의 용량을 가집니다. 
--UTF-8 에서 ASCII문자는 1바이트 한글은 3바이트의 용량을 가집니다. 

SELECT DATEDIFF('2014-02-28','2014-01-01')
--MYSQL날짜형식 계산방법 

SELECT A,CASE WHEN A='1' THEN '남자' WHEN A='2' THEN '여자' ELSE 'EE' END AS 'GENDER' FROM GENDERDIF;
--CASE를 이용해 조건에 맞게 원하는 값을 정해 출력하는 방법 

SELECT a, coalesce(a,0) from aray; 
-- a가 null이 아니면 그대로 a를 출력하고 null이면 0을 출력하는 방식으로 간단하게 사용가능 coalesce 

INSERT 행추가


insert into '(테이블명)' values(1,2,3,4); 
--주어진 컬럼수에 맞게 values();괄호안에 데이터를 ,로 구분해서 넣어줄 수 있습니다. 
--열에 하나에 데이터만 넣으면 해당열에는 default(기본값만 들어갑니다)
--default값은  values에 명시적으로 default를 넣거나 null을 넣어줄 수 있습니다. 제약조건에 not null이 있으면 null 못넣음 

Delete 삭제

delete from 테이블명 where 조건식 

--테이블 delete시 조건식을 넣지않으면 테이블에 있는 모든 데이터가 삭제됩니다. 

update 업데이트


update 테이블명 set 열명= '1' where 조건식
--update도 delete와 마찬가지로 조건식에 맞는 모든 행이 그 대상이 됩니다. where구를 생략하면 모든 행이 그 대상이 됩니다. 

--복수열 갱신 

update 테이블병 set 열명1=1, 열명2=2, 열명3=3, where 조건식 
--변경할 열명에따라 갱신할 수 있습니다. 

update sameple set a = no, no=no+1; 

--a열 행값이 2고 no도 2라면 no에 값은 3이되고 a의 값은 바꾸기 이전 값인 2가 될 것입니다. 즉 set (열) 업데이트가 순서에 따라 진행됨을 알 수 있습니다. (sql)
--oracle은 순차적으로 업데이트가 되지않고, 갱신이전에 값을 반환합니다. 

집계와 서브쿼리

count(집합)
--집계함수로 행의 수를 구할 수 있다. 인수를 *로 활용할 수 있는 유일한 함수 
--count(컬럼)으로 보통 조회하며 null이 있을경우 조회하지 않는다. 

distinct--중복제거 distinct로 중복제거가 가능 중복여부는 select구에서 지정한 열을 비교해 판단 
select distinct name from student --,는 붙이지 않는다. 
--중복제거한 데이터를 count로 출력하기 

select count(distinct name) from student; --count가 먼저 계산되기에 같이 사용하려면 count 내부에 사용해야함 

sum(집합) 
--열에 합계를 구할 때 보통 사용합니다. 사용방법은 
select sum(quantity) from sample41; 
--모든 열에 수량 합계를 출력할 때 사용 

avg(집합)
--평균값을 구할 때 사용합니다. 수치형만 진행가능하며 
select avg(sum) from sample41; 형식으로 나타낸다. 

min(집합)
--최솟값
select min(price) from product; 
--물건 테이블에 최솟값을 구하는 것이 가능 
select min(alphabet) from englishl 
--문자형식에 최솟값 z 를 구하는 것도 가능 

max(집합)
--최댓값
select max(price) from product; 
위와 반대로 최대값- 문자 or 숫자 출력 가능한 것 

Group by 
--같은 값을 가진 행을 하나로 묶어서 그룸화한 집합을 집계함수로 넘겨줄 수 있다. 

select name from sample41 group by name; 

*group bydistinct가 다른점이 뭘까요? 
-- group by는 집계함수와 같이 사용하지 않는 경우는 큰 의미가 없습니다. group by구로 그룹화된 각각의 그룹이 하나의 집합으로 집계함수의 인수로 넘겨지기 때문입니다. 
--예를 들어 
select name, count(name), sum(quantity) from sample41 group by name;
--name에 따라 그룹화하여 데이터를 출력합니다. 

  HAVING 
  --그룹함수에 조건식을 지정할 때 HAVING을 사용. WHERE구로 행을 검색하는 처리가 GROUP BY로 그룹화하는 처리보다 순서상 앞서기 때문에 WHERE 사용 불가 
  
  --사용
  SELECT NAME, COUNT(NAME),SUM(QUANTITY) FROM SAMPLE4 GROUP BY NAME HAVING COUNT(NAME)=1;

**내부처리순서 
-- WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY 
--SELECT 구보다 먼저 처리되므로 다음과 같은 식은 성립이 안됨 
SELECT NAME AS n, count(price) as pr from sample group by n having pr =20; 


--group by로 묶는 열말고 다른 열명은 집계함수로 지정해야합니다. else 에러나는 이유

select no,quantity,name from sample group by name; 
--여러개의 name을 중복 처리해야하는데 중복 처리과정에서 어떤 select 값을 불러와야 하는지 몰라서 

만약 no와 quantity로 그룹화 한다면 
select no, quantity from sample group by no, quantity 로 지정해서 group by 가능 

-- 결괏값 정렬 예시 

select name, sum(quantity), count(name) from sample group by name  order by count(name) desc;






profile
매일 한 걸음

0개의 댓글