文章中都是在scott用户下的表,下面列出scott中的emp表以供参考:
雇员表(emp)
No. |
字段 |
类型 |
描述 |
1 |
EMPNO |
NUMBER(4) |
雇员编号 |
2 |
ENAME |
VARCHAR2(10) |
雇员姓名 |
3 |
JOB |
VARCHAR2(9) |
职位 |
4 |
MGR |
NUMBER(4) |
雇员上司编号 |
5 |
HIREDATE |
DATE |
雇佣日期 |
6 |
SAL |
NUMBER(7,2) |
月薪 |
7 |
COMM |
NUMBER(7,2) |
奖金 |
8 |
DEPTNO |
NUMBER(2) |
部门编号 |
一、简单查询语句
简单查询语句语法格式:
SELECT *列名别名
FROM 表名称;
1、查询指定列
如果只需要查询员工的编号,姓名,职位,查询的SQL语句如下:
SELECT empno,ename,job FROM emp;
这样就可以查询指定列的信息了。
2、列的别名
如果想给列取一个别名,SQL应该这么写:
SELECT empno 编号 ,ename 姓名,job职位FROM emp;
3、使用DISTINCT消除所有的重复列
语法格式:SELECT DISTINCT *列名别名 FROM表名称;
举例:查询消除了重复信息的职位
SELECT DISTINCT job职位 FROM emp;
4、Oracle的字符串连接操作
使用“||”表示字符串连接,字符串则用“ ‘”括起来,例如:
SELECT '姓名为:'|| ename || '的编号是:' || empno || ',职位是:' || job FROM emp;
5、使用四则运算
查询中支持 +、-、*、/的语句,所有的语句有先后顺序,就是我们小时候学过的啦,先乘除后加减。
假设查询每个员工的姓名和年薪,SQL如下:
SELECT ename 姓名, sal * 12 年薪 FROM emp;
别名建议使用英文名称
二、限定查询语句(WHERE子句)
限定查询语句的语法格式:
SELECT *列名别名
FROM 表名称
WHERE 条件;
假设查询sal>2000的员工信息,SQL如下:
SELECT * FROM empWHERE sal>2000;
1、使用ISNOT NULL
假设查询奖金不为空的员工信息,SQL如下:
SELECT * FROM empWHERE comm IS NOT NULL;
2、使用IS NULL
假设查询奖金为空的员工信息,SQL如下:
SELECT * FROM empWHERE comm IS NULL;
3、使用AND操作符连接条件
假设查询工资大于1500,并且可以领取奖金的员工信息,SQL如下:
SELECT * FROM empWHERE sal>1500 AND comm IS NOT NULL;
4、使用OR操作符
假设查询工资大于1500,或者可以领取奖金的员工信息,SQL如下:
SELECT * FROM empWHERE sal>1500 OR comm IS NOT NULL;
5、NOT取反
把真的条件变成假的,把假的条件变成真的。
假设查询工资不大于1500,并且不可以领取奖金的员工信息,SQL如下:
SELECT * FROM empWHERE NOT(sal>1500 AND comm IS NOT NULL);
通过括号表示一组条件。
6、BETWEEN…AND
查询工资大于1500,但是小于3000的员工信息
SELECT * FROM emp WHEREsal BETWEEN 1500 AND 3000;
注:BETWEEN … AND中包含了等于的功能,即查询大于1500,但是小于3000的信息,则是sal>=1500 and sal<=3000
BETWEEN … AND除了支持数字查询,也支持日期查询,查询用“’”括起来,例如:
SELECT * FROM emp WHEREhiredate BETWEEN '22-2月 -81' AND '09-6月 -81';
7、IN操作符
值 IN(值1,值2,值3……)
例如:SELECT * FROM emp WHERE empno IN(7521,7566,7698);
如果是字符串,则添加“’”括起来即可。
SELECT * FROM empWHERE ename IN('WARD','JONES');
8、NOTIN操作符
SELECT* FROM emp WHERE ename NOT IN('WARD','JONES');
9、LIKE模糊查询
LIKE有两种主要的通配符
“%”:可以匹配任意长度的内容
“_”:可以匹配一个长度的内容
SQL举例:
SELECT * FROM empWHERE ename LIKE '_M%';
SELECT * FROM empWHERE ename LIKE '%M%';
10、不等于操作符(!=和 <>)
SELECT * FROM empWHERE empno != 7369;
SELECT * FROM empWHERE empno <> 7369;
三、排序(ORDERBY子句)
语法:
SELECT *列名别名
FROM 表名称
WHERE 条件
ORDER BY排序字段1,排序字段2 ASC或 DESC
举例说明:
SELECT * FROM empWHERE ename LIKE '%M%' ORDER BY empnoASC;
注:ASC表示升序,DESC表示降序。