DML - sql

yoon__0_0·2024년 5월 18일
0

이어드림 수업

목록 보기
33/103

CRUD

Create - insert into

  • insert into {table_name} (col명) value (내용)
  • 내용의 수와 col의 수는 동일해야함
INSERT  into user (name, email) value ('peter','peter@gmail.com');
  • 여러개의 value들을 한꺼번에 넣기
INSERT into user (name, email, age) 
values ('alice','alice@gmail.com', 25),  
('jin','jin@gmail.com', 33),  
('andy','andy@gmail.com', 55);

Read - select from

기본

-- 데이터베이스 선택
USE world;

-- 선택된 데이터베이스 확인
SELECT database();

-- 테이블속 데이터 출력
SELECT * FROM country;

--  SELECT <columns> FROM <table>
--  원하는 컬럼만 출력 
SELECT Code, Name, Population FROM country;

--  AS : alias
-- 이름 (컬럼, 테이블 등) 을 변경해서 쓰고싶을때 사용
SELECT Code, Name as country_name, Population FROM country;

-- mysql comment 
-- 이건 한줄주석
/* 이건 한줄 넘게 주석 */

연산자

  • 연산자 : Operator : 산술, 비교 , 논리
  • 산술 : 데이터 + 데이터 = 데이터
  • 비교 : 데이터 + 데이터 = 논리값 : 조건 1개
  • 논리 : 논리값(비교연산) + 논리값 (비교연산 = 논리값 : 조건 2개 이상
-- 산술 연산자  : +, - , * , / , % (나머지)
-- 인구밀도 컬럼 계산해보기(pps)
SELECT code, name, population, surfacearea, population/surfacearea AS pps
FROM country;

-- 코드, 국가 이름, 인구수, gnp , 1인당 gnp 
SELECT code, name, population, gnp, gnp/population AS per_gnp FROM country;

-- 비교 연산자 : =, !=, >, <, >=, <= 
-- ASIA 국가인지 확인하기 
SELECT code, name, continent = 'Asia' as isASIA
FROM country;

-- 국가코드, 국가이름, 독립년도, 독립년도가 1900년 이후면 1, 아니면 0 출력
SELECT code, name, indepyear, indepyear >= 1900 AS upper_1900
FROM country; 


-- 논리연산자 : not, and(T and T = T), or (F or F = F)
-- 아시아 대륙 이면서 1900년도 이후에 독립한 국가 를 1로 출력하는 컬럼 추가
SELECT code, name, continent, indepyear, (continent = 'Asia' and indepyear >= 1900 ) AS is_asia_upper_1900
FROM country;

Where

  • 쿼리 실행 전에 특정 조건으로 데이터 필터링
-- WHERE : 연산자를 사용하여 조건을 만들어 True 데이터만 출력 
SELECT code, name, continent, indepyear, 
FROM country
WHERE  continent = 'Asia' and indepyear >= 1900 ;

group by

  • 데이터 그룹핑
  • 중복된 데이터를 결합해서 데이터를 출력하는 방법
  • 특정 컬럼(어떤 컬럼을 기준으로 중복되는 데이터를 결합할 것인가), 다른 컬럼 (결합함수를 이용해서 합쳐줌, 어떻게 합쳐질건가를 알려줘야함)
  • 결합함수 : count, Min, max, AVG, median, sum 등등 사용
    • sum : 문자열 데이터인 것들은 안나옴
    • 여러개도 사용할 수 있음.
SELECT CountryCode, COUNT(name), sum(Population) 
from city c 
group by CountryCode ;

WITH ROLLUP

  • group by를 한 이후 묶어서 계산해주는 것
  • total data를 출력시에 사용
SELECT staff_id ,DATE_FORMAT(payment_date, '%Y-%m') as monthly,  sum(amount), count(amount), avg(amount)
from payment p 
group by staff_id, monthly
with ROLLUP ;

having

  • 쿼리 실행 후 특정 조건으로 데이터 필터링
SELECT continent, SUM(population) as population
FROM country
GROUP BY continent
HAVING population >= 50000 * 10000;

join

  • 테이블을 결합하여 데이터를 출력시 사용
  • inner join , left join, right join, outer join 사용 가능
-- inner
SELECT *
from user
join addr 
on user.ui = addr.ui;
-- where user.ui = addr.ui 로 사용해도 됨 (여러개 할때는 이게 더 편함)

-- left , right 할 때는 그냥 join앞에 붙여주면됨
SELECT addr.ui, user.un, addr.an
from user
right join addr 
on user.ui = addr.ui;

-- union == outer join 
/* union : 두개의 쿼리 결과를 결합하여 출력
row로 합쳐줌 
중복제거해서 출력함. (싫으면 UNION ALL 사용) 
*/

SELECT user.ui, user.un, addr.an
FROM user
LEFT JOIN addr
ON user.ui = addr.ui
UNION
SELECT addr.ui, user.un, addr.an
FROM user
RIGHT JOIN addr
ON user.ui = addr.ui;

Update - Update set

  • where을 쓰지 않으면 모든 데이터 값들이 변경됨
  • 안전장치로 limit를 주는 것 (test용으로)
UPDATE {table_name}
SET col1 = {변경내용}, col2 ={ 변경내용}
WHERE 조건
LIMIT 숫자 ;


UPDATE user
set age=27
WHERE name= 'peter';
  • 만약 쿼리를 잘못눌렀다!!=> 진행되고 있는거 빠르게 지우자!
    • show processlist
    • kill pid

Delete - DELETE FROM

DELETE FROM user
WHERE  age < 30
LIMIT 1;
profile
신윤재입니다

0개의 댓글