学习中使用到的表全部都是scott用户下的表,所以了解一下此用户下有哪几张表。
雇员表(emp)、部门表(dept)、工资等级表(salgrade)、奖金表(bonus)。
可以使用 desc 表名 ,来查询表的结构
select查询语句,格式如下:
select * |具体的列明(如 empno ,ename) from emp ;
想要查询表中所有的列 ,执行下面的操作:
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 1980/12/17 800.00 20
7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 30
7566 JONES MANAGER 7839 1981/4/2 2975.00 20
7654 MARTIN SALESMAN 7698 1981/9/28 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30
7782 CLARK MANAGER 7839 1981/6/9 2450.00 10
7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20
7839 KING PRESIDENT 1981/11/17 5000.00 10
7844 TURNER SALESMAN 7698 1981/9/8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987/5/23 1100.00 20
7900 JAMES CLERK 7698 1981/12/3 950.00 30
7902 FORD ANALYST 7566 1981/12/3 3000.00 20
7934 MILLER CLERK 7782 1982/1/23 1300.00 10
14 rows selected
如果想要查询出雇员的编号,姓名,工作的话,就需要指定相应的列名,不同列之间用 逗号隔开。
SQL> select empno ,ename , job from emp ;
EMPNO ENAME JOB
----- ---------- ---------
7369 SMITH CLERK
7499 ALLEN SALESMAN
7521 WARD SALESMAN
7566 JONES MANAGER
7654 MARTIN SALESMAN
7698 BLAKE MANAGER
7782 CLARK MANAGER
7788 SCOTT ANALYST
7839 KING PRESIDENT
7844 TURNER SALESMAN
7876 ADAMS CLERK
7900 JAMES CLERK
7902 FORD ANALYST
7934 MILLER CLERK
14 rows selected
* 代表的是查询的表中的所有的列。 如果将 * 换成列明,则表示查询相应的列 。
注意:
SQL语言的大小写不敏感;
SQL可以写在一行上,也可以写成多行,做好写成多行,这样可读性比较的强;
关键字不能被缩写,也不能别分行;
算数运算符 :
查询中可以使用算数运算,数字和日期可以使用算数运算符,算数运算间有优先顺序,先乘除,后加减。
例:查询员工的姓名,月薪及年薪
SQL> select ename , sal , sal*12 from emp ;
ENAME SAL SAL*12
---------- --------- ----------
SMITH 800.00 9600
ALLEN 1600.00 19200
WARD 1250.00 15000
JONES 2975.00 35700
MARTIN 1250.00 15000
BLAKE 2850.00 34200
CLARK 2450.00 29400
SCOTT 3000.00 36000
KING 5000.00 60000
TURNER 1500.00 18000
ADAMS 1100.00 13200
JAMES 950.00 11400
FORD 3000.00 36000
MILLER 1300.00 15600
14 rows selected
对日期进行加减运算:
SQL> select sysdate , sysdate+1 ,sysdate -3 from dual ;
SYSDATE SYSDATE+1 SYSDATE-3
----------- ----------- -----------
2014/4/8 14 2014/4/9 14 2014/4/5 14
注意:
对日期进行加减运算是没有问题的,但是日期不能进行乘除运算,数字加减乘除运算都可以。
上面中列名直接以SYSDATE+1 ,SYSDATE-3 显示了查询的结果,这种列名的意义不是很明确,所以我可以给列起一个别名。列名最好规避中文。
如:
SQL> select sysdate date1 , sysdate-1 yesterday from dual;
DATE1 YESTERDAY
----------- -----------
2014/4/8 14 2014/4/7 14
别名的方式有三种:
1)我们直接在列名的后面,敲一个空格,后面直接加上别名的名字
2)我们可以再列名的后面添加as关键字,后面再加上别名的名字
3)上面两种方式,得到的别名都是大写的,我们可以通过给别名加上双引号,来得到我们想要的列名
SQL> select sal as s , ename "name" ,sal*12 money from emp ;
S name MONEY
--------- ---------- ----------
800.00 SMITH 9600
1600.00 ALLEN 19200
1250.00 WARD 15000
2975.00 JONES 35700
1250.00 MARTIN 15000
2850.00 BLAKE 34200
2450.00 CLARK 29400
3000.00 SCOTT 36000
5000.00 KING 60000
1500.00 TURNER 18000
1100.00 ADAMS 13200
950.00 JAMES 11400
3000.00 FORD 36000
1300.00 MILLER 15600
14 rows selected
连接符:
把列与列,列与字符链接在一起, 用'||' 表示 ,可以用来合成列。
SQL> select empno||'编号'||'姓名'||ename||'工资'||sal info from emp ;
INFO
--------------------------------------------------------------------------------
7369编号姓名SMITH工资800
7499编号姓名ALLEN工资1600
7521编号姓名WARD工资1250
7566编号姓名JONES工资2975
7654编号姓名MARTIN工资1250
7698编号姓名BLAKE工资2850
7782编号姓名CLARK工资2450
7788编号姓名SCOTT工资3000
7839编号姓名KING工资5000
7844编号姓名TURNER工资1500
7876编号姓名ADAMS工资1100
7900编号姓名JAMES工资950
7902编号姓名FORD工资3000
7934编号姓名MILLER工资1300
14 rows selected
默认情况下查询会返回全部的行,包括重复行。
例:查询表中的工作行
SQL> select job from emp ;
JOB
---------
CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK
14 rows selected
我们发现有重复的行,那么如何去除呢,就要使用我们的distinct 关键字。
SQL> select distinct job from emp ;
JOB
---------
CLERK
SALESMAN
PRESIDENT
MANAGER
ANALYST