select * from emp;
/*(mysql은 대체로 영작문을 하는대로 해석하면 된다고 생각한다.)
select = 선택하다또는 선발하다라고 생각하면 되고
선택하다 모든것 ~에서 [테이블명];*/
select ename 사원명, hiredate as '입 사 일' from emp;
/*ename 과 hiredate는 emp테이블 안에 있는 컬럼 명이며
위 답과 같이 분리해서 사용이 가능하다. 분리하게 되면 해당 컬럼만 조회할 수 있는걸 알수 있다.
ename뒤에 붙은 것은 alias 라고 말한다.
alias 란?
부사:…라는 가명으로 알려진, 일명 …라 불리는
명사:(특히 범죄자의) 가명
사용법은 위와 같으며, as '' 를 사용할때만 자릿수 사이에 띄어쓰기가 가능하다는 점을 알면 좋다.
결과물*/
select empno '사원 번호', ename 이름 from emp;
select distinct(job) as '직책의 목록' from emp;
/distinct는 중복된 내용을 무시하고 한가지의 데이터만 가져오는 문법이다.
즉, 테이블의 필드가
[결과물] (distinct 사용 전)
JOE
JOE (이런식으로 두개가 있으면)
[결과물] (distinct 사용 후)
JOE (이와같이 결과물이 나온다)/
select count(*) '총 사원수' from emp;
/count()문법은 해당 테이블의 전체 열의 갯수를 구하는 문법이다.
(소 괄호 안에 어떤 값, 컬럼을 넣느냐에 따라서 카운트하는 갯수가 다르다)*/
select * from emp where deptno = 10;
/ where문법 조건을 정해주는 문법이라고 생각하면되는데
위에서는 deptno 컬럼에서 필드가 10인 정보만 가져오라는 뜻이다./
select * from emp where sal >= 2500;
select * from emp where ename like '___k%';
/ like는 =과 비슷하게 사용이 된다. like에서 추가적으로 k으로 시작하는 문자열('k%')이나 k가 포함된 문자열('%k%')을
조회할 수 있다
'_k%' << 이와같은 식으로 사용하게되면 두번째 자리가 k인 문자열을 선택 할수 있게 된다./
select * from emp where ename like 's%';
select * from emp where ename like '%t%';
select from emp where comm in (300,500,1400);
select from emp where comm = 300 or comm = 500 or comm = 1400;
/첫번째 정답은 comm의 컬럼 안에 필드로 300 500 1400이 있는것을 선택한다는 뜻이고,
두번째 정답은 or(또는) 을 사용해서 구현한 방식입니다.
정답은 같게 도출됩니다./
select deptno 사번, ename 이름, sal 월급여 from emp where sal between 1200 and 3500;
select ename 이름, deptno 사번, job 직급 ,deptno 부서번호 from emp
where job = 'manager' and deptno = 30;
select empno 사번, ename 이름, deptno 부서번호 from emp
where deptno != 30;
select * from emp;
select empno 사번, ename 이름, comm 커미션 from emp
where comm not in (300,500,1400) or comm is null;
select deptno 사번, ename 이름 from emp
where ename not like '%s%';
select deptno 사번, ename 이름, sal 월급여 from emp
where sal not between 1200 and 3700;
select ename 이름, job 직급 from emp
where mgr is null;
select deptno 부서,avg(sal) 평균월급여 from emp
group by deptno;
select deptno 부서, count(*) '부서별 전체 사원수', count(comm) '커미션 받는 사원들의 수' from emp
group by deptno;
select deptno 부서,max(sal) '최대 급여', min(sal) '최소 급여' from emp
group by deptno;
select deptno 부서, avg(sal) from emp
where sal >= 2000
group by deptno;
select deptno, avg(sal) from emp
where sal >= 1000
group by deptno having avg(sal) >= '2000';
select empno, ename, sal from emp
order by sal desc, ename;
select e.ename, d.dname from emp e,dept d
where e.deptno = d.deptno; # join구문
/
emp에서 deptno 와,
dept 에서 deptno 가 join되어서 연결 시켜준다.
내가 생각한 로직은 이름을 갖고있는 필드에서 deptno필드를 참조하고, where 에서 e.deptno 가 d.deptno와 같다고 했으니까 dept 에서 deptno와 같은 dname을 찾아서 반환 해준다고 생각했다.
/
select e.ename, e.sal , s.grade
from emp e, salgrade s
where e.sal between s.losal and s.hisal;
select e.ename 이름, d.dname 부서명, s.grade 월급여등급
from emp e, dept d, salgrade s
where e.deptno = d.deptno and e.sal between s.losal and s.hisal;
select * from emp;
select e.ename 이름, m.ename 직속상사이름
from emp e, emp m
where e.mgr = m.empno;
SELECT E.ENAME,M.ENAME
FROM EMP E
LEFT JOIN EMP M ON E.MGR = M.EMPNO;
select e.ename, d.dname
from dept d
left join emp e on e.deptno= d.deptno ;
select e.ename, d.dname
from dept d
left join emp e on d.deptno = e.deptno ;
select e.ename, d.dname
from dept d
left join emp e on d.deptno = e.deptno
union
select e.ename, d.dname
from dept d
right join emp e on d.deptno = e.deptno;
select e.ename, e.deptno , d.dname
from emp e, dept d
where e.deptno = d.deptno;
SELECT ENAME,E.DEPTNO,DNAME
FROM EMP E
INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO;
select ename, e.deptno, dname
from emp e
inner join dept d on e.deptno = d.deptno;
select ename, d.deptno, dname
from emp e
inner join dept d on e.deptno = d.deptno;
select * from dept;
select ename, job, e.deptno, loc
from emp e
inner join dept d on e.deptno = d.deptno;
select ename, comm, dname, loc
from emp e
inner join dept d on e.deptno = d.deptno
where e.comm is not null and e.comm != 0;
SELECT ENAME,COMM,DNAME,LOC
FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND EMP.COMM IS NOT NULL AND EMP.COMM != 0;
SELECT ENAME,COMM,DNAME,LOC
FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND EMP.COMM IS NOT NULL AND EMP.COMM <> 0;
SELECT ENAME,COMM,DNAME,LOC
FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND EMP.COMM IS NOT NULL AND EMP.COMM NOT IN(0);
SELECT ENAME,COMM,DNAME,LOC
FROM EMP INNER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO
WHERE EMP.COMM IS NOT NULL AND EMP.COMM <> 0;
select ename 이름, job 직급, e.deptno 부서번호, dname 부서명
from emp e
inner join dept d on e.deptno = d.deptno;
select ename, dname
from emp e
inner join dept d on e.deptno = d.deptno
where ename like '%a%';
select ename 이름, job 직급, sal 월급여, grade 월급여등급
from emp e
inner join SALGRADE s on e.sal between s.LOSAL and s.HISAL;
select c.ename, e.deptno
from emp e
inner join emp c on e.deptno = c.deptno
where e.ename = 'allen'
order by c.ename;
SELECT C.ENAME,C.DEPTNO
FROM EMP E
INNER JOIN EMP C ON E.DEPTNO = C.DEPTNO
WHERE E.EMPNO <> C.EMPNO
AND E.ENAME = 'ALLEN'
ORDER BY C.ENAME;
SELECT C.ENAME,C.DEPTNO
FROM EMP E,EMP C
WHERE E.EMPNO <> C.EMPNO
AND E.DEPTNO = C.DEPTNO
AND E.ENAME = 'ALLEN'
ORDER BY C.ENAME;
select d.dname
from emp e
inner join dept d on e.deptno = d.deptno
where e.ename = 'jones';
select dname
from dept
where deptno = (select deptno from emp where ename = 'jones');
select ename 이름, dname 부서명
from emp e
inner join dept d on e.deptno = d.deptno
where e.deptno = 10;
select e.ename 이름, d.dname 부서명}
from emp e, (select deptno, dname from dept where deptno = 10) d
where e.deptno = d.deptno; # 조인한다
SELECT E.ENAME,D.DNAME
FROM EMP E,DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND D.DEPTNO = 10;
SELECT E.ENAME,D.DNAME
FROM EMP E,
(SELECT DEPTNO,DNAME
FROM DEPT
WHERE DEPTNO = 10) D
WHERE E.DEPTNO = D.DEPTNO;
select empno 사원번호, ename 이름, sal 월급여
from emp
where sal > (select avg(sal) from emp);
select empno 사원번호, ename 이름
from emp
where deptno = 10 and sal = (select max(sal) from emp);
select empno, ename
from emp
where sal = (select max(sal) from emp where deptno = 10);
create table Students (
번호 int auto_increment primary key,
이름 varchar(20),
나이 int not null,
성별 char(5)
);
insert into students values (1,'훈빠',20,'남자');
update students set 나이 = 21 where 번호 = 1;
select empno 사원번호, ename 이름,sal 급여 from emp;
select ename 이름, hiredate 입사인자, deptno 부서번호
from emp;
select * from emp where ename = 'allen';
select ename 이름, deptno '부서 번호', sal 급여
from emp
where hiredate = 19830112;
select *
from emp
where job != 'manager';
select *
from emp
where hiredate > '19810402';
select ename 이름, sal 급여, deptno '부서 번호'
from emp
where sal >= 800;
select * from emp
where deptno >= 20;
select * from emp
where sal > (select avg(sal) from emp
where ename like 'k%') and ename not like 'k%';
select * from emp where hiredate < '19811209';
select deptno 입사번호, ename 이름 from emp where deptno <= 7698;
select ename 이름, hiredate 월급, deptno '부서 번호'
from emp
where hiredate between '19810403' and '19821210';
select ename 이름, job 직무, sal 급여 from emp
where sal between 1601 and 2999;
select * from emp
where empno between 7654 and 7782;
select from emp
where ename between 'b%' and 'j%';
select from emp;
select * from emp
where hiredate not between 19810101 and 19811231;
select * from emp
where hiredate not like '1981%';
select * from emp
where job not in ('manager','salesman');
select ename 이름, empno 사원번호, deptno '부서 번호' from emp
where deptno not in (20,30);
select empno 사원번호, ename 이름, hiredate 입사일자, deptno 부서번호 from emp
where ename like 's%';
select * from emp
where hiredate like '1981%';
select *
from emp
where ename like '%s%';
select * from emp
where ename like 's___t';
select * from emp
where ename like '_a%';
select * from emp
where comm is null;
select * from emp
where comm is not null;
select ename 이름, dname 부서이름, sal 월급
from emp e
inner join dept d on e.deptno = d.deptno;
select empno 사원번호, ename 이름, deptno '부서 번호' from emp
where ename like 'k%' or deptno = 30
order by deptno;
select * from emp
where sal > 1500 and deptno = 30 and job = 'manager';
select * from emp
where deptno = 30
order by deptno;
select * from emp
order by sal desc;
select * from emp
order by deptno asc , sal desc;
select * from emp
order by deptno desc, ename asc, sal desc;
select e.deptno '부서 번호', dname 부서명, ename 이름, sal 급여 from emp e
inner join dept d on e.deptno = d.deptno;
select e.deptno, d.dname, e.ename, e.sal
from emp e, dept d
where e.deptno = d.deptno;
select deptno, dname, ename, sal
from emp natural join dept;
select dname 부서명 from emp
natural join dept
where ename = 'allen';
select dname
from emp e, dept d
where e.deptno = d.deptno
and e.ename = 'ALLEN';
select d.dname
from emp e join dept d
on e.ename = 'ALLEN' and e.deptno = d.deptno;
select e.*, d.empno 상관번호, d.ename 상관성명
from emp e
left join emp d on e.mgr = d.empno;
select * from dept
where deptno is null;
select ename 이름, dname 부서명, sal 급여, job 직무
from emp e
inner join dept d on e.deptno = d.deptno
where e.job = (select job from emp where ename = 'allen');
select e.ename, d.dname, e.sal, e.job
from emp e, dept d
where e.deptno = d.deptno
and e.job = (select job from emp where ename = 'ALLEN');
select empno 사원번호, ename 이름, hiredate 입사일자, sal 급여
from emp e
join dept d on e.deptno = d.deptno
and d.dname = (select dname from emp e inner join dept d on e.deptno = d.deptno where ename = 'jones');
select e.empno, e.ename, e.hiredate, e.sal
from emp e
where e.deptno = (select deptno from emp where ename = 'JONES');
select empno 사원번호, ename 이름, dname 부서명, hiredate 입사일, loc 지역, sal 급여 from emp e
inner join dept d on e.deptno = d.deptno
where sal >= (select avg(sal) from emp);
select e.empno, e.ename, d.dname, e.hiredate, d.loc, e.sal
from emp e
inner join dept d on e.deptno = d.deptno and e.sal > (select avg(sal) from emp);
select empno, ename, dname, hiredate, loc
from emp e, dept d
where e.deptno = d.deptno
and e.job in (select job from emp where deptno = 20 );
select empno, ename, dname, hiredate, loc
from emp e
inner join dept d on e.deptno = d.deptno and e.job in (select job from emp where deptno = 20 );
#주의할 사항 : in 을 사용해서 서브쿼리에 있는 것들을 하나씩 참조 해야한다.
select empno 사원번호, ename 이름, dname 부서명, hiredate 입사일자, loc 지역
from emp e
inner join dept d on e.deptno = d.deptno and e.job not in (select job from emp where deptno = 30);
select e.empno, e.ename, d.dname, e.hiredate, d.loc
from emp e, dept d
where e.deptno = d.deptno
and e.job not in (select job from emp where deptno = 30);
select empno 사원번호, ename 이름, dname 부서명, loc 지역, sal 급여
from emp e
inner join dept d on e.deptno = d.deptno and d.deptno = 10
order by e.sal desc;
select e.empno, e.ename, d.dname, d.loc, e.sal
from emp e, dept d
where e.deptno = d.deptno
and e.deptno = 10;
select empno 사원번호, ename 이름, sal 급여
from emp e
inner join dept d on e.deptno = d.deptno and e.sal in (select sal from emp where ename = 'scott' or ename = 'martin');
select empno, ename, sal
from emp
where sal in (select sal from emp where ename in ('MARTIN', 'SCOTT'));
select empno 사원번호, ename 이름, sal 급여
from emp
where sal > (select max(sal) from emp where deptno = 30);
select empno 사원번호, ename 이름, sal 급여
from emp
where sal < (select min(sal) from emp where deptno = 10);
select dname, avg(sal) from emp e
inner join dept d on e.deptno = d.deptno and sal >= 1000
group by dname having avg(sal) >= 2000;
SELECT DEPTNO, AVG(SAL)
FROM EMP
WHERE SAL >= 1000
GROUP BY DEPTNO
HAVING AVG(SAL) >= 2000;
SELECT DEPTNO, JOB, COUNT(*)
FROM EMP
GROUP BY DEPTNO, JOB
ORDER BY DEPTNO ASC;
select empno 사원번호, empno 부서번호, dname 부서명
from emp e
right join dept d on e.deptno = d.deptno;
select ename '사원의 이름' , e.deptno 부서번호
from emp e
inner join dept d on e.deptno = d.deptno and d.loc = 'dallas';
select ename '사원의 이름' , e.deptno 부서번호
from emp e, dept d
where e.deptno = d.deptno and d.loc = 'DALLAS';
SELECT ENAME '사원의 이름', DEPTNO 부서번호
FROM EMP
WHERE DEPTNO =(SELECT DEPTNO FROM DEPT WHERE LOC='DALLAS');
select ename 이름, sal 급여, deptno 부서번호
from emp
where deptno in (select deptno from emp where sal >= 3000)
order by deptno, sal desc;
select ename 사원번호, sal 급여, deptno 부서번호
from emp
where sal in (select max(sal)
from emp
where deptno is not null
group by deptno);
select deptno, max(sal)
from emp
where deptno is not null
group by deptno;
select ename '사원의 이름' , sal 급여
from emp
where sal > (select max(sal) from emp where deptno = 30);
SELECT ENAME, SAL
FROM EMP
WHERE SAL > ALL(SELECT SAL FROM EMP WHERE DEPTNO=30);
select ename '사원의 이름', sal 급여
from emp
where sal > (select avg(sal) from emp) and deptno = 30;
select dname 부서, avg(sal) 월급여평균
from emp e
inner join dept d on e.deptno = d.deptno and sal >= 1000
group by dname having avg(sal) >= 2000;
select empno 사번, ename 이름, sal 월급여
from emp
order by sal desc, ename;
select ename '사원의 이름', dname 부서명
from emp e
inner join dept d on e.deptno = d.deptno
where ename like '%w%';
select ename 이름, job 직급, sal 월급여, grade 월급여등급
from emp e
inner join SALGRADE s on e.sal between s.LOSAL and s.HISAL;
select ename 이름, job 직급, sal 월급여, grade 월급여등급
from emp e, salgrade s
where e.sal between s.losal and s.hisal;