1>테이블 작성
insert into student(userid, username, age, gender, grade) values('st101','Tom','15','M','2');
insert into student(userid, username, age, gender, grade) values('st102','Jane','16','F','3');
insert into student(userid, username, age, gender, grade) values('st103','Yakima','14','M','1');
insert into student(userid, username, age, grade) values('st104','Yong','14','1');
insert into student(userid, username, gender) values('st105','Minyo','F');
insert into student(userid, username, age, grade) values('st106','Kang','15','2');
insert into student(userid, username, gender) values('st107','Kim','M');
//숫자는 0이 DEFUALT.
insert into student values('st108','Miranda','15','F','2');
//(userid, username, age, gender, grade) 가급적으로 column은 써주는게 좋음.
//데이터베이스삭제, 테이블 삭제, 테이블내 데이터만 삭제
drop database apple;
drop table student; (테이블 자체가 삭제)
delete from student;
2>기본검색 연습.
select username, age from student;
select from student where gender = 'M';
select username from student where gender is null;
select username from student where gender is not null;
st107의 성별출력
select gender from student where userid = 'st107';
나이가 15세 이상의 남학생만
select from student where age >=15 and gender = 'M';
나이와 학년이 없는 학생들의 이름출력
select username from student where age = 0 and grade is null;
이름이 Yong인 학생의 학년을 출력
select grade from student where username = 'Yong';
3>통계함수
1.count() - 열의 갯수.
select count() from student;
-----> 을 쓰게되면 모든 column의 행 중 최대치를 보여줌.
select count(grade) from student; //6 --> null이 2개가 있고, 이거는 count안함.
select count(age) from student; //8 --> 수치는 0이 있어도 데이터 개수로 count해줌.
select count(age,userid) from student; =====> 이런식은 불가!!!!!!!!!!!!
select count(*), userid from student; //8, st101 -->문법상오류는 안나오지만 원하는 값은 아님.
sum()
select sum(age) from student;
avg()
select avg(age) from student;
min()
select min(age) from student;
max()
select max(age) from student;
4> 출력 타이틀 변경 Alias ; select (old) as (new)(,old as new) from (table)
===> 프로그램이랑 연동시 필요.
select username as '이름', userid as '아이디' from student;
5> 순차/역순 정렬 *많이쓰는 표현. Order by
1. 역순정렬
select from student(table) order by (기준)age desc(descending);
2. 순차정렬
select * from student(table) order by (기준)age( asc(ascending)); // asc는 default라 생략가능.
6> 중복데이터 제거. Distinct.
select distinct(age) from student;
select distinct(age),userid from student; // ==> 오류는 아니지만, 원하는 distinct값이 나오진 않음.
예제
Q1>
1. 1학년들의 이름
select username from student where grade = '1';
2. 15세 이상 이름과 나이 출력
select username, age from student where age >=15;
3. 성별이 기록되어있지 않은 데이터의 아이디 값 (null 및 공백)
select * from student where gender is null and gender != '';
Q2>
1. 아이디 st101, st102의 이름, 연령, 학년
select username, age, grade from student where user id ='st101' or user id = 'st102';
2. 15세 이상의 여학생들만 전체출력
select from student where age >= 15 and gender = 'F';
3. 2학년 남학생들의 아이디와 이름만
select userid, username from student where grade = '2' and gender = 'M';
4. 남학생들의 평균연령(0은 계산제외)
select avg(age) from student where gender = 'M' and age > 0;
5. 남학생들을 연령순으로 순차적 정렬
select from student where gender = 'M' order by asc;
Q3>
1.st105의 연령을 14세로 대입
update student set age = 14 where userid = 'st105';
2. st107의 연령을 15세로 대입
update student set age = 15 where userid = 'st107';
3. 학년이비워있는 곳에 아래와 같은 기준으로 데이터를 채운다.
(연령 14 -1/ 15세 -2 / 16세 -3)
update student set grade = '1' where grade is null and age = 14;
update student set grade = '2' where grade is null and age = 15;
update student set grade = '3' where grade is null and age = 16;
4. 성별이 비워져있는 모든데이터값 남성으로 출력
update student set gender = 'M' where gender is null;