简单查询
语法如下: SELECT[DISTINCT] * | 字段 [别名] [字段 别名]
FROM 表名称[别名
范例:查询dept表的全部记录。 SELECT * FROM DEPT;
范例:查询每个雇员的编号,姓名,基本工资。SELECT EMPNO,ENAME,SAL FROM EMP;
范例:查询每个雇员的职位。SELECT JOB FROM EMP;
这时会出现重复的职位,可以使用DISTINCT 关键字消去重复的行。(只有每个字段的值都相同才是重复的记录)SELECTDISTINCT JOB FROM EMP;
范例:查询每个雇员的姓名及职位 SELECT DISTINCT ENAME,JOB FROM EMP;
在查询的过程中也可以使用四则运算。
范例:查询每个雇员的姓名,职位,基本年薪。SELECT ENAME,JOB,12*SAL FROM EMP;
但是这时显示出项“sal* 12”,这个可定显示的是查询列,可以起一个别名。
SELECTENAME,JOB,SAL*12 INCOME FROM EMP;
范例:由于公司每个月有200元的饭补,100的车补,所以这个时候的年薪为:
SELECTENAME,JOB,(SAL + 300)*12 INCOME FROM EMP;
范例:公司每年的年底会多发一个月的基本工资,现在的年薪为:
SELECTENAME,JOB,(SAL+300)*12 + SAL INCOME FROM EMP;
在简单查询之中可以使用“||”连接查询的字段。
范例:观察“||”的使用。SELECT DEPTNO ||’,‘|| DEPTNAME FROM DEPT;
由于“,”属于原样输出的字符串,所以必须使用‘‘括起来,即在SQL语句中,’‘表示的是字符串。
范例:要求数据按照下面的格式显示:
雇员编号是:7369的雇员的姓名是:smith,职位是:clerk,基本工资是:800;
SELECT’雇员编号是:’|| EMPNO||’的雇员的姓名是:’|| ENAME||’,职位是:‘||JOB||’, 基本工资是:’|| SAL ||‘|’雇员信息
FROM EMP;
注意:别名上的内容不要使用‘ ’括起来,只有在SELECT子句中出现的内容使用‘ ’
限定查询
语法:SELECT[DISTINCT] * | 字段 [别名] [字段 别名]
FROM 表名称[别名
[WHERE 条件(S)];
在WHERE子句之后可以增加多个条件,最常见的基本关系运算: < ,>, <=, >=,!=(<>),between and ,like,in,isnull,and,or,not;
1. 关系运算。
例1:查询出基本工资大于1500的员工的所有员工的信息。
SELECT * FROM emp WHERE sal > 1600;(有问题,不出结果)
例2:查询出所有职位是办事员的雇员的信息。
SELECT * FROM EMP WHERE JOB=’clerk’;
这个时候没有返回相应的查询结果,主要原因是在oracle数据库中,所有的数据都是区分大小写的。应修改为: SELECT * FROM EMP WHERE JOB=’CLERK’;
例3:查询工资在1500-3000之间的全部雇员信息。
SELECT * FROM EMP
WHERE SAL >= 1500 AND SAL <= 3000;
例4:查询职位是办事员或者是销售员的全部信息。
SELECT * FROM EMP
WHERE JOB = ‘CLERK’OR JOB =‘SALESMAN’;
例5:查询出职位是办事员或销售员的的全部信息,并且要求雇员的工资大于1200.
SELECT * FROM EMP
WHERE (JOB= ‘CLERK’ OR JOB = ‘SALESMAN’) AND SAL > 1200;
例6:查询所有不是办事员的雇员的信息。
SELECT * FROM EMP
WHERE JOB != ‘CLERK’;
2. 范围判断:BETWEEN AND
例1:基本工资在1500-3000的员工的雇员的信息。
SELECT * FROM EMP WHERE SALBETWEEN 1500 AND 3000;
BETWEEN AND 不仅对于数字有用,对于日期同样有用。
例2:查询出在1981年雇佣的全部雇员信息。(1981-01-01 – 1981-12-31)
SELECT * FROM EMP
WHERE HIREDATEBETWEEN ‘01-1月-1981’ AND ‘31-12月-81’;
3. 判断是否为空:IS (not)NULL;
判断某一字段上的内容是否为“null“,但”null“和数字0和空字符串是不同的概念。
例1:查询出所有领取奖金的雇员的信息
SELECT * FROM EMP WHERE COMM IS NOT NULL;
例2:查询出所有不领取奖金的雇员的信息。
SELECT * FROM EMP WHERE COMM ISNULL;
4. 指定范围的操作:IN操作符
IN操作符表示指定一个查询的范围。
例1:查处编号是7369,7566,7799的雇员信息。
如果使用最早的方法,可以是OR关键字来完成。
SELECT * FROM EMP WHERE EMPNO =7369 OR EMPNO = 7566 OR EMPNO = 7799;
现在可以使用IN操作符完成:
SELECT* FROM EMP WHERE EMPNO IN (7369,7566,7799);
如果使用NOT NULL则表示不再指定的范围之中。
SELECT * FROM EMP WHERE EMPNO NOTIN (7369,7566,7799);
注意:关于NOT IN的问题。
如果现在使用了IN操作符,查询的范围中有null,不影响查询。如下
SELECT * FROM EMP WHERE EMPNO IN (7369,7566,7799,null);
但是如果使用的是NOT IN操作符,则查询的范围中有了null,则不会有任何查询查询结果返回。
SELECT * FROM EMP WHERE EMPNO NOTIN (7369,7566,7799,null);
5. 模糊查询:LIKE子句
LIKE子句的功能提供了模糊查询的操作,例如某程序上出现的搜索操作,都属于LIKE子句的实现,但是搜索引擎上的查询不是可不是LIKE。
要想使用LIKE子句,必须认识两个匹配符号。
匹配单个字符:_
匹配任意多个字符:%
例1: 查询雇员姓名中以字母A开头的所有雇员的信息。
SELECT* FROM EMP WHERE ENAME LIKE ‘A%’;
例2: 查询雇员姓名中第二个字母是A的全部雇员信息。
SELECT * FROM EMP WHERE ENAME LIKE ‘_A%’;例3:查询雇员姓名中所有含有字母A的全部雇员的信息。
SELECT * FROMEMP WHERE ENAME LIKE ‘%A%’;
可以使用NOT操作,对操作进行求反的功能。
例4.雇员姓名中不存在字母A的全部雇员的信息。
SELECT * FROM EMP WHERE ENAME NOTLIKE ‘%A%’;
但是对于LIKE子句,不一定只能在字符串数据上表示,可以在任意的数据上表示。
例5.
SELECT* FROM EMP WHERE ENAME LIKE ‘%1%’ OR HIREDATE LIKE ‘%1%’ OR SAL LIKE ‘%1%’;
说明:关于LIKE子句的使用
在开发中数据库的模糊查询肯定使用LIKE子句,但是在使用LIKE子句的时候有一个最大的注意点:如果在模糊查询上不设置任何的查询关键字的话,则表示查询全部记录。
例:SELECT * FROM EMP WHEREENAME LIKE ‘%%’ OR HIREDATE LIKE ‘%1%’ OR SAL LIKE ‘%1%’;
这个特点可以帮助用户节约很多代码。
6. 数据的排序:ORDER BY 子句
语法为:
SELECT [DISTINCT] * | 字段 [别名] [字段 别名]
FROM 表名称[别名]
[WHERE 条件(S)];
ORDER BY 字段 [ASC | DESC] [ 字段ASC | DESC]
OEDER BY子句是写在所有SQL语句最后的内容。而且对于排序有下面几点说明:
1) 排序可以指定多个字段。
2) 排序的方式有两种。ASC(升序,默认)和DESC(降序,需要用户指出)
例1:查询所有雇员的信息,要求按工资排序。
SELECT * FROM EMP ORDER BY SAL;
例2:查询所有雇员的信息,要求按工资降序。
SELECT * FROM EMP ORDER BY SALDESC;
例3:查询所有雇员信息,按工资由低到高排序,如果工资相同,则按雇佣日期由早到晚排序。
SELECT * FROM EMP ORDER BY SAL DESC,HIREDATE;