2023/07/25 SQL 정의어(DDL), 조작어(DML)
row = 행
Column = Field = 열
서버로 와서 SQL 쿼리분석기로와서 use webhack을 작성해서 시작해준다.
위쪽에 있는 id, user_id부터 email까지가 row로 행이 총 11개 있는 것
이렇게 작성해주고 select *from member에 두고 다시 실행하면 아래에 내가 입력한대로 만들어졌다.
이렇게 작성하기 힘들다라고 할 때 컬럼을 생략하는 것도 있는데 Null값 체크를 잘해줘야함
Not Null이라고 되어있는건 다 작성을 해줘야한다. 그러니 id만 주었을 땐 만들어지지않음
다른 Not Null도 해줘야함
생략해도 되는건 저렇게 생성 해서 추가해주면 아래쪽에 비워둔 곳은 생략되어서 만들어지게된다.
이런 방식으로도 새로 만들어줄 수 있다. 대신의 Not Null이라고 적힌 부분은 다 적어줘야함.
웹페이지에서 새로 가입을 할 때 어디로 가는지 확인해주기 위해 프록시를 잡아주었다.
그 경로를 확인해보면 홈페이지를 통해 저장되는 과정이 적혀있다.
업데이트와 딜리트
이것들을 다룰 때는 조심히 다뤄야함 view라는 다른곳에서 결국 바뀌는거지만
그럼에도 있었던 정보를 다루는것이기 때문에 조심해야 함
만약 내가 정보를 정보를 바꿔주고 싶다.
업데이트 하는 명령어
update
set
where로 쓰인다.
직접 써보면
update member
set user_pw = '1234'
where user_id = 'jinho' ;
(member테이블에서 jinho라는 아이디에 패스워드를 1234로 바꿔라 라는 뜻)
딜리트는 테이블에 저장되어있는 row를 삭제하는 것이다.
딜리트를 쓰는법은
delete from
where
직접 써본다면.
delete from member
where user_id='changkeun';
member라는 테이블에 changkeun이라는 user_id를 삭제한다는 것
우리가 설정한 changkeun이라는 user_id를 삭제한것이다.
각 업데이트와 딜리트가 어떻게 구동하는지 어디에 저장이 되는지 확인해보려면 패킷을 멈추고 확인해본다. 쿼리에 들어가서 패킷에서 확인한 곳을 들어가서 확인해보면 어떤식으로 구동되는지 확인할 수 있다.
select문
select user_id, name
from member;
이렇게 하면 name으로만 확인할 수 있다.
select *
from member;
이렇게도 가능하다.
where을 사용해서 조건도 달아줄 수 있다.
select user_id, name
from member;
where no=1
이런식으로 사용도 가능하다.
select *
from member
where age > 20
이런식으로 해보면 나이가 20이상인 사람만 뜨게 된다.
--where절에서의 operators
-- =, <>, >, <. >=, <=, BETWEEN, LIKE, IN
비트윈은 어디서 어디까지 이다
라이크는 특정패턴을 확인할 때 쓰임
인은 우리가 지정한것이 있다면 그런 조건으로 사용할 수 있다.
select *
from member
where age between 20 and 25
이렇게 하게되면 나이가 20에서 25사이에서만 뜨게된다.
select *
from member
where zipcode like '신%'
이렇게 하면 zipcode에 신으로 시작하는 것이 뜨게된다.
select *
from member
where age>=20 and address1='굴다리'
이런식으로 조건을 두개 줄수도있는데 그 조건을 두개 줄 땐 and를 사용해서 조건 두개를 만족시키는 게 보여준다.
age가 NULL인 값을 출력하고싶다면 어케 해야할까
아까처럼 where age='NULL'하면 안된다. NULL을 뽑으려면 where age is NULL하면 할 수 있음
반대로 where age is not NULL하게되면 NULL이 아닌 모든 것들을 뽑게 된다.
그래서 특수한 상황이 아니라면 NULL값을 안뽑히게끔 한다.
select *
from member
order by age
이렇게 되면 나이를 정렬을 해주게된다. 이 정렬에는 오름차순, 내림차순이 있다.
기본은 오름차순이다. 내림차순을 하고싶다면 desc을 해준다.
select age, name
from member
order by age desc, name desc
이런식으로 select를 두개를 골라서 정리할 수 도있음
이렇게 입력하게 되면 우선 나이순으로 정렬이 된 후 이름으로 정렬이 된다.
이런 명령어뿐만아니라 함수도 가능하다.
sum, min, avg, max, count로 가능하다
이런식으로 avg를 써보게 되면 나이의 평균이 나오게 된다.
sum은 나이의 총합을 출력해준다.
min은 나이의 최소값을 출력하게 된다.
max는 최대값이 출력되는 것
count는 age의 갯수를 출력해준다.
근데 확인을 해보게 되면 실제로 더 많다. NULL값을 제외하고 출력하는 것이라
NULL도 포함해서 출력하고 싶다면 select count(*)을 하게되면 나온다.
여기서 distinct를 사용하게 되면 중복된 것은 제외하고 카운팅해서 출력한다.
select age, count(*)
from member
group by age
를 하게되면 동일한 값끼리 그룹이 지어진다.
이런식으로 NULL인애들은 3명 1인애들은 3명 10인애들은 4명 이런식으로 그룹이 만들어진다.
이런식으로 별칭을 주는것도 가능해지고 그렇게 되면 좀 더 깔끔하게 볼 수 있다.
having이라는 절이 있음
having age<30이 있음 그룹의 조건절이라고 하면 됨
where은 select의 조건이라고 생각하면 되고 having은 그룹의 조건이라고 생각해야함
그래서 havig을 써야한다면 반드시 group by 가 있어야함
위에서 했던거를 건들지않는 선에서 추가를 해줘야하는 상황
-이름이 '이'로 시작하는 회원
-age를 기준으로 내림차순 정렬
우리는 이렇게 했지만
select age as 나이, count(*) as 인원수
from member
where name like '이'
group by age
having age<30
order by age desc
강사님은 이렇게 사용했음
select substring('mjh',2, 2)
mjh안에서 두번째에서 시작하는 j부터 길이가 2인걸 출력하는 것 그렇기 때문에 jh가 출력된다.
select substring('대상 text', 시작지점,길이정보)
select substring('mjh', 2, 2)
select substring(db_name(), 1, 1)
이렇게 되면 webhack에 맨 앞글자인 w를 출력해줌
union은 합치는 것이다.
이걸 확인하는 법
select name from member
union
select strName from board
union은 합쳐서 보여주는 것이다. 대신 중복되는게 있다면 합쳐서 1개로 보여주게 됨
만약 중복되는것도 다 보고싶다면 사진처럼 all을 붙여주면 중복되는 것도 다 확인할 수 있음
union문은 사용하기 위해서 조건이 필요하다.
1. 두개의 select문은 컬럼의 갯수가 같아야한다. 다르면 union을 사용할 수 없다.
2. 조회하고자 하는 컬럼의 자료형이 일치해야 한다.
3. 두 셀렉터의 컬럼이 여러가지가 들어갈 땐 순서가 일치해야한다.
[ 실습 ]
[ 문제 1 ] 나이가 가장 많은 회원의 이름을 조회하라
select name
from member
where age = (select max(age) from member)
[ 문제 2 ] 모든 회원들의 나이를 7살 높여라
update member
set age = age + 7
[ 문제 3 ] id 중에 's'가 들어가는 회원의 tuple을 삭제하라
delete from member
where user_id like '%s%'
[ 문제 4 ] 이름 중에, '지'가 들어가는 회원의 모든 정보를 조회하라
단, 나이와 이름을 내림차순을 ㅗ정렬하라.
select *
from member
where name like '%지%'
order by name desc, age desc
[ 문제 5 ] 나이가 30이하인 회원들을 그룹별로 인원수를 조회하라
select age, count(*) as 인원수
from member
group by age
having age <= 30
[ 문제 6 ] 성이 '김'씨인 회원의 성을 '이'씨로 변경하라
update from member
set name = '이' + substring(name, 2, 2)
where substring(name, 1, 1) = '김'
그대로 해석을 해보자면 앞에 이를 붙여준다. 뒤에 name에 두번째 글자 부터 길이가 2에
조건으로 name에 첫번째글자부터 1까지 '김'이 들어가는 사람만