Day11 연산자와 데이터 검색, 정렬
2023. 3. 17. 17:00ㆍSQL
SQL연산자
1. 산술 연산자
+,-,*,/,mod(나머지),div(몫)
2. 비교 연산자
=(같다/ where절에만 가능),<,>,>=,<=,<>(다르다)
3. 대입 연산자
= (컬럼명에만 사용)
4. 논리 연산자
and, or, not, xor
5. 기타 연산자
is: 양쪽이 모두 같으면 : true | 아니면 : false
between A and B (A,B는 피연산자) : 값이 A보다 크거나 같고, B보다는 작거나 같으면 True
in: 매개변수로 전달된 리스트에 값이 존재하면 True, 아니면 Fasle
like: 패턴으로 해당 문자열을 검색하여 값이 존재하면 True | Fasle
SQL은 str이라고 굳이 싱글쿼트를 쓸 필요가 없다.
#✔실습
use kdt;
select userid,username,gender from member;
#DB는 순서는 상관없다. 따라서 필드를 불러올때도 순서는 상관 X
select userid as 아이디, username as 이름, hp as 번호 from member;
# 원본에는 영향 x
select * from member;
모든 컬럼을 가져오는 것은 지양한다.
현장에서는 필드수, row수가 상당해서, 전체 리스트를 뽑아오면 상당한 시간이 소요된다.
따라서 연습용, 시험용으로 사용하자.
# null,''
select null; # 데이터가 없다, insert가 되지 않은 것
select ''; # 데이터가 있다. ''라는 데이터 insert
select 100 + null; # 결과 null | 연산 x
select 100 + ''; # 결과: 100 | 연산 O
SQL에서 null은 데이터가 없다는 뜻
하지만 ' ' 빈공간은 데이터가 있는 것이다 !
SQL은 = 1개로 대입 연산자와 비교 연산자 사용
# ✔로그인
select userid,username,hp,email from member where userid ='apple'and userpw = '1111';
select userid,username,hp,email from member where userid ='apple'and userpw = '2222';
# ✔is (address1이 비어있는 사람 찾기)
select userid,username,hp from member where address1 = 'null'; # 잘못됌
select userid,username,hp from member where address1 = null; # 잘못됌
select userid,username,hp from member where address1 is null;
select userid,username,hp from member where address1 is not null;
#✔between A and B
update member set point = 300 where userid='grapes';
select userid,username point from member where point between 300 and 600;
select userid,username point from member where point >= 300 and point <= 600;
#✔like 연산자
select userid,username from member where userid like 'a%' ; -- a로 시작하는 문자열
select userid,username from member where userid like '%a' ; -- a로 끝나는 문자열
select userid,username from member where userid like '%a%' ; -- a가 들어가는 문자열
select userid,username from member where userid like '%app%' ; -- app이 들어가는 문자열
select userid,username from member where userid like '%app__%' ; -- app으로 시작하는 5글자
# ✔✔정렬
# select 필드명1,필드명2.. from 테이블명 order by 정렬할 필드명 [asc,desc]
# 알파벳 오름차순 정렬
select userid,username,point from member order by userid asc; #오름차순
select userid,username,point from member order by userid desc; #내림차순
select userid,username,point from member order by userid; #오름차순(기본값)
# 포인트를 기준으로 내림차순, 만약 같은 포인트인 경우 아이디로 내림차순 정렬
select userid,username,point from member order by point desc, userid desc; # 1차정렬, 2차정렬
select * from member;
#✔where + 정렬
#select 필드명1,필드명2.. from 테이블명 where 조건절 order by 정렬할 필드명, [asc,desc];
#문제 _ 성별이 여성인 회원을 포인트가 많은 순으로 정렬하기 (단 포인트가 같을경우 먼저 가입한 순으로 정렬)
select userid,username,gender,regdate,point from member where gender = 'f'
order by point desc, regdate asc;
#✔limit
#select 필드명1,필드명2.. from 테이블명 limit 가져올 행의 개수
#select 필드명1,필드명2.. from 테이블명 limit 시작행 ,가져올 행의 개수
#주로 정렬 후 사용함
select userid, username,gender from member limit 3; #처음부터 3개 가져옴
select userid, username,gender from member limit 3,2; #인덱스 3부터 2개를 가져옴
#✔정렬 + limit
#select 필드명1,필드명2.. from 테이블명 order by 정렬할 필드명 [asc,desc] limit 가져올 행의 개수
select userid, username, gender, point from member order by point desc limit 3;
#✔✔집계함수
#✔count : 행의 개수를 세는 함수
# cf)전체 인원을 알고 싶으면 : primary key가 적용된 필드를 선택
select count(userid) as 전체인원 from member;
# 주소를 입력한 인원 : null이 있기 때문에 그것을 제외하고 갯수를 셈
select count(zipcode) as 우편번호 from member;
#✔sum : 행의 값을 더함
select sum(point) as 포인트합계 from member;
select userid,sum(point) as 포인트합계 from member;
# 만약 userid에 무엇을 넣고 싶다면 그룹을 넣어야함.
#✔avg: 행값의 평균을 구함
select avg(point) as 평균 from member;
#✔min: 행의 최소값
select min(point) as 최소값 from member;
#✔max: 행의 최대값
select max(point) as 최대값 from member;
# ✔✔그룹
# select 그룹을 맺은 컬럼 or 집계함수 from 테이블명 group by 그룹을 맺을 필드명
select gender from member group by gender;
select gender,sum(point) from member group by gender;
select gender,avg(point) from member group by gender;
select gender,count(userid) from member group by gender;
# ✔✔그룹 + 그룹조건(where절이 아님)
# select 그룹을 맺은 컬럼 or 집계함수 from 테이블명 group by 그룹을 맺을 필드명 having 조건절;
select gender from member group by gender having gender = 'f'; #그룹에 대한 조건
insert into member (userid,userpw,username,hp,email,gender,ssn1,ssn2)
values ('berry','6666','베리','010-6666-6666','berry@berry.com','m','666666','6666666');
# 조건절 + 그룹 + 그룹조건 + 정렬
#select 그룹을 맺은 컬럼 or 집계함수 from 테이블명 where 조건절 group by 그룹을 맺을 필드명 having 그룹조건절 order by 정렬할 필드명,[asc,desc];
# 문제_ point가 0이 아닌 회원들 중에서, 남,여로 그룹을 나눠서 포인트의 평균을 구하고,
# 평균 포인트가 100이상인 성별을 검색하여 포인트로 내림차순 정렬
select gender, avg(point) as avg from member where point > 0 group by gender having avg > 100 order by avg desc;
728x90
'SQL' 카테고리의 다른 글
Day12 MySQL_ foreign key + join + union (0) | 2023.03.20 |
---|---|
SQL( AUTO_INCREMET) (0) | 2023.03.19 |
1. 테이블 만들어서 데이터 삽입해보기 (0) | 2023.03.17 |
Day 10 SQL 테이블, 데이터타입, 제약조건 (0) | 2023.03.16 |
Day 10 데이터베이스 관리(DBMS)_MySQL (0) | 2023.03.15 |