카테고리 없음

멋쟁이 사자처럼 al스쿨7기 2주차 SQL TIL

monawa 2022. 9. 23.
728x90
  • 멋쟁이 사자처럼 al스쿨7기

SQL

사용할 프로그램 MYSQL 

 

SQL 기본문법 

SELECT *

FROM 테이블

WHERE

 

SELECT - 커럼선택( 특정 열 선택하기) -- *은 모두(기본으로 쓰는 습관을 들이자) 

 

FROM - 테이블데이터 가져오기 (테이블 이름넣기)

 

???? 왜 더 상위 개념인 테이블을 뒤에서 가져올까?

-> 영어 어순이니까 I select A from B where C is D

크기순서 (데이터베이스 > 테이블 > 컬럼)

 

테이블은 쉽게생각하면 표(엑셀생각하자)

column- 열  / row - 행

 


  • SELECT 

SELECT DISTINCT  = 해당 컬럼에 중복 제거 조회

다양한 명령어 및 AS별칭을 만들수있다  - 아래에 자세한내용있음

 

 

  • FORM - 일부 행만 가져올수있음 

 

 

  • WHERE  (특정 행 선택하기)

 -  조건문넣기  - 일부 행만 가져올수있음

BETWEEN

SQL에서 특정범위 내에 있는 행만 선택하는 논리연산자

AND 연산자와 쌍을 이루며 시작값, 끝값을 포함

= 해당 내용 찾기

>,<등 비교연산자도 사용가능 

WHER 컬럼 LIKE 내용  :  컬럼에 내용이 들어있는지 조회

EX) A%-A로 시작하는단어  , %A - A로 끝나는 단어 

 

EX)

SELECT * 

FORM 테이블명

WHERE 칼럼명  BETWEEN 조건1 AND 조건2;

= WHERE 칼럼명 >= 조건1 AND 칼럼명 <= 조건2;

 

마포구 정류소 가져오기 

EX) SELECT *

FORM station

WHERE local - "마포구"

 

 

  • ORDER BY(정렬하기)

DESC - 내림차순  ASC  - 오름차순(기본지정 생략가능)

정렬조건이 2개 이상일시 상위부터 순서대로 적으면됨

  • 문자열 자르기

LEFT(컬럼명 또는 문자열,문자열의길이 - 3) : 왼쪽부터 3글자 ,

RIGHT(컬럼명 또는 문자열, 문자열의길이 - 3) 오른쪽부터 3글자 ,

SUBSTRING(컬럼명 또는 문자열,시작위치 ,길이) = SUBSTR() /길이 미지정시 끝까지 

EX) SUBSTR("20140323",1,4) =2014

 

소수점처리

CEIL()올림 , FLOOR()내림 , ROUND(A,B)반올림 - A를 B번쨰 자리수까지 표현 하고 반올림

 

 

EX) ORDER BY updated_at DESC, station_id

최근에 업데이트된 순서로 출력 (내림차순정리 ) , 업데이트 날자가 같을시  ID값이 작은순 정리 (오름차순정리- 생략)

 

 

EX)

SELECT * -- 모든 컬럼
FROM station - -- 스테이션 테이블에서
WHERE local = '광진구' --광진구 컬럼찾고
ORDER BY updated_at DESC,station_id 

-- 최근 업데이트 순으로 정렬후 업데이트 된날자가 같다면 스테이션 ID가작은것 부터 

-- ORDER BY updated_at DESC -- 업데이트 최근순으로 정렬


실습해보기 

1)

SELECT color, pH,alcohol,quality - -결과데이터에 색상, 산도, 알콜,와임 품질을 나타내기
FROM
  wines --  와인테이블에서
where
  quality >= 8 -- 퀄리티는 8이상 
  AND alcohol <= 12  -- 앙콜도수 12도 이하인 
  AND color = "white" -- 화이트와인을 
  

 

2)

SELECT *
FROM wines -- 와인테일블에서

where quality >= 8  -- 퀄리티가 8이상이고 
AND alcohol<= 12  -- 알콜도수가 12이상인 
AND color = "red" -- 레드와인의 정보를 모두 출력하고 

ORDER BY quality DESC,alcohol  --  품질은 높은순서로 , 품질이 같다면 도수가 낮은순서로 정렬 

 

 

 


  • 데이터베이스의 기본기능 

1 -1 테이터의 검색  (SELECT)

 

1-2 데이터의 갱신 

UPDATE 주소록 SET 주소 = ' 서울시시 OOO' WHERE 이름 =  "monawa"

 

  • 특정데이터 지우기 코드

DELETE FROM 주소록 WHERE 이름 = 'monawa'

 

  • 새로운 데이터 추가하는 코드 

INSERT INTO 주소록 VALUES('정연', '010-XXXX-XXXX', '서울시 광진구 OOO', '트와이스 멤버다')

 

※ 정리

검색

  • 질의 (SELECT)

갱신

  • 새로운 데이터 등록 (INSERT)
  • 기존 데이터 수정 (UPDATE)
  • 기존 데이터 삭제 (DELETE)

데이터 베이스의 기본기능 2. 동시성제어

  1. 최초로 파일을 연 사람이 파일을 열고 있을 때 그 다음 사람은 파일을 열 수 없다.
  2. 최초로 파일을 연 사람이 파일을 열고 있을 때 그 다음 사람은 읽기 전용으로만 열 수 있다.
  3. 모든 사람이 파일을 열 수 있고 나중에 수행된 쪽의 갱신이 반영된다. ( Dirty Write  -선호되는방식 X)

실제 데이터들은 1,2번으로 주로 동시성 제어 수행

 

3. 장애대응

데이터 베이스는 데이터를 한곳이 아니라 복수에 장소에 분산하여 데이터 보호및 장애 대응 

 

4. 보안 

데이터베이스는 내계좌에 돈이 얼마가 들어있는지는 볼수있지만 남들 계좌에 얼마가 있는지는 보여주지 않는것저처럼 

해킹및 외부자극에도 뚫리지않아야 한다

 

 


데이터베이스의 종류 

주로 관계형 데이터베이스를 쓴다! MYSQL도 이경우

 


  • SQL이란?

(Structured Query Language)은 관계형 데이터베이스를 조작하기 위한 언어입니다.

 

  • 알아두면 좋은 단축키
  • 실행: command/control + Enter
  • 주석 처리: command/control + / (-- )
  • 합계 구하기 SUM() , 평균구하기 AVG() , 숫자세기COUNT() 최소값 MIN() , 최대값 MAX() , 별칭 만들기 AS()

-> 해당 명령어는 SELECT 에 적으면됨!!!

 

EX) 팽귄의 성별구하기

SELECT
  COUNT(*) as total,  -- 전체 팽귄의수  
  COUNT(sex) as sex_notnull, -- 성별정보가 있는 펭귄의수  
  COUNT(*) - COUNT(sex) as sex_null  -- 성별정보가 없는 펭귄의수  
FROM
  penguins -- 펭귄테이블에서

EX)역대 올림픽 출전다들의 나이

select 
  min(age) as min_age, -- 가장 나이가 적었던 선수나이
  max(age) as max_age, -- 가장 나이가 많앗던 선수 나이 
  max(age) - min(age) as age_diff -- 두선수의 차이 
from
  records -- records 테이블에서 

※AS는 우리눈엔 순서대로 진행되는거처럼보이지만 컴터입장에선 동시라 AS로 지정한 이름으로 계산은 불가능!

 

 

 


  • 그룹별로 요약하기  (GROUP BY)

데이터를 그룹별로 요약하기 

 

  • 요약 정보 필터링하기 (HAVING)

WHERE과 다른점 :  GROUP BY하기전 필터링은 WHERE / GROUP BY하고 난후의 필터링은 HAVING

 

  • 요약정보 정보 정렬하기 (ORDER BY)

EX)

select day,sum(total_bill) as revenue -- 별칭지정은 select에서만 가능! 정해진 별칭을 가져다 쓰는건 가능 
from tips
-- where sex = "Female" -- 그룹전 성별이 여자인경우 
group by day --  날자로 그룹
-- having revenue >=1000 -- 그룹후 조건 ,revenue는 위에 as를 통해 지정한 sum(total_bill) 이름
order by revenue desc  -- revenue 내림차순
limit 1 --  1개만  -- 가장높은 매출 1개추출하기!
-- having sum(total_bill) >= 200  -- 매출액이 200불미만 제외하기



-- select day, sum(total_bill) , sum(tip) -- 그룹에 있는 컬럼은 셀렉에도 있어야함!! 강조
-- from tips
-- group by day 
-- having sum(total_bill) >= 1000 -- group by한 후에는 where대신 having, group by 하기전엔 where로 조건

728x90

댓글