select 구문의 기본문형
select (distinct) 칼럼명 (ALIAS)
FROM 테이블명;
*
을 써서 나타낸다.mysql> select * from department;
-> department 테이블의 모든 데이터를 출력한다.
*
대신에 칼럼명을 나열한다.mysql> select deptno from department;
-> department 테이블에서 deptno칼럼을 나열하겠다.
,
을 이용해 칼럼명을 나열한다.mysql> select deptno,name from department;
-> department 테이블에서 deptno와 name 칼럼을 나열하겠다.
-> 이러한 칼럼명들은 desc table명;
와 같은 쿼리를 통해서 해당 테이블에 어떤 칼럼이 있는지 알 수 있다.
select에서 ,
다음은 다음 칼럼을 찾기 때문에 Alias를 매칭할 때는 ,
를 쓰지 않는다.
칼럼에 대한 Alias(별칭)를 부여해서 나타나는 칼럼의 Heading을 바꿀 수 있다.
mysql> select empno as 사번, name as 이름, job as 직업 from employee;
-> employee 테이블에서 직원의 사번, 이름, 직업을 출력하여라.
그럼 empno라고 나왔던 자리에 사번이라는 이름이 들어간다. 나머지도 마찬가지이다.
또한, as를 생략하고 띄어쓰기로 Alias를 지정할 수 있다.
mysql> select empno 사번, name 이름,job 직업 from employee;
-> 바로 위의 명령어와 같다.
mysql>select concat(empno,'-',deptno) as '사번-부서번호'
from employee;
-> employee 테이블에서 사번과 부서번호를 하나의 칼럼으로 출력
단, 이때 Alias에 공백이 있을 때 반드시 ''
으로 감싸줘야 한다.
as를 사용하지 않는 경우, 공백이 나오면 Alias라고 인식을 하고, 다시 공백이 나오면 from
이 나올것이라고 기대한다. 근데 from
이 아니면 에러를 발생시킨다.
mysql> select deptno from employee;
-> 사원 테이블의 모든 부서번호를 출력한다. (사원수만큼 출력된다.)
mysql> select distinct deptno from employee;
-> 사원테이블의 부서번호를 중복되지 않게 출력한다.
select (distinct) 칼럼명 (Alias)
from 테이블명
order by 칼럼이나 표현식 (asc 또는 desc)
mysql> select empno, name from employee order by name;
-> 나는 이름을 기준으로 정렬하고 싶다.
위처럼 오름차순, 내림차순을 설정하지 않은 경우, 기본적으로 오름차수능로 정렬된다.
내림차순으로 정렬하고 싶은 경우,
mysql> select empno, name from employee order by name desc;
-> 나는 이름을 기준으로 내림차순으로 정렬하고 싶다.
mysql> select empno, name from employee order by 2 desc;
-> 나는 두번째 칼럼을 기준으로 내림차순으로 정렬하고 싶다.
즉, 이름의 내림차순 정렬이 되는 것이다.
where 형식 연산자 값
select (distinct) 칼럼명 (ALias)
from 테이블명
where 조건식
order by 칼럼이나 조건식 (asc 또는 desc)
예) where title = 'staff'
: title이 staff인 애 찾아라
where salary between 1000 and 2000
: 월급이 1000~2000인애만 보여줘라
mysql> select name, hiredate from employee where hiredate <'1981-01-01';
-> employee 테이블에서 hiredate(고용일)이 1981년 이전인 사원의 이름과 고용일을 보여달라.
mysql> select name, deptno from employee where deptno = 30;
-> employee 테이블에서 deptno(부서번호)가 30인 사원의 이름과 부서번호를 보여줘라.
mysql> select name, deptno from employee where deptno = 10 or deptno = 10;
-> employee 테이블에서 부서번호가 10이거나 30인 직원의 이름과 부서번호를 보여줘라.
마찬가지로 and
,or
,not
도 가능하다.
mysql> select name, deptno from employee where deptno in (10,30);
-> employee 테이블에서 deptno(부서번호)가 10이거나 30인 직원의 이름과 부서번호를 보여줘라.
%
: 0에서부터 여러개의 문자열을 나타낸다._
: 단하나의 문자를 나타내는 와일드카드select name, deptno from employee where name like '%A%';
-> employee 테이블에서 이름에 A
가 포함된 사원의 이름과 부서번호를 보여줘라.
A%
: A로 시작하는%A
: A로 끝나는%A%
: A가 들어가는_A%
: 두번째가 A인mysql> select upper('Seoul'), ucase('SEOul');
-> 다 대문자로 바꿔줘라.
mysql> select lower('SEOUL'), lcase('SeOul');
-> 전부 소문자로 바꿔줘라.
select lower(name) from employee;
-> employee 테이블에 있는 모든 직원의 이름을 소문자로 출력해라.
mysql> select substring('Happy Day',3,2);
-> 해당 문장의 3번째부터 2개의 문자를 출력해라. 결과는 pp
가 나온다.
위에서 말했듯이 MySQL은 처음 인덱스가 1부터 시작하기 때문이다.
mysql> select LPAD('hi',5,'?'), RPAD('joe',7,'*');
-> 결과는 ???hi
와 ****joe
가 나온다.
위는 hi
를 5자리로 출력하는데 생기는 빈공간만큼 왼쪽에 ?
을 넣어 출력하라는 것이고, 마찬가지로 joe를 7자리로 출력하는데 생기는 공백만큼 *
를 넣어서 출력하라는 뜻이다.
select TRIM(' Hi ');
select RTRIM(' Hi '), LTRIM(' Hi ');
-> 차례대로 앞뒤의 공백, 왼쪽의 공백, 오른쪽의 공백을 없애주는 함수이다.
결과는 HI
, ''Hi
, Hi''
가 나온다.
mysql> select abs(-2), abs(2);
-> 결과는 2 2
가 나온다.
이외에도..