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가 나온다.
이외에도..