select (distinct) 列名【别名】,列名【别名】,,。。。
from 表名;
distinct:限制重复数据;
例:select ename 姓名 from emp; (可用但是一般不用中文);
sql的限定查询:
select (distinct) 列名【别名】,列名【别名】,,。。。
from 表名【别名】
【Where 条件限定】;
--from先执行,再到where,最后是select
select字句是整个语法最后执行的字句,如果要进行数据筛选,必须使用若干个条件运算符:
1.关系运算:>,<.=,<=,>=,=,主要是大小判断
--查询工资低于1200的雇员;
select *
from emp
where sal<1200;
注意:一定要注意,在oracle 中,数据是区分大小写的。
不等于符号:!=,<>
2.范围运算:between...and
3.空运算:is null;is not null
4.in判断:IN,NOT IN,EXISTS(复杂查询),IN操作是核心
select *
from emp
where empno IN(7698,7769,7568,9999);
--用IN短并且性能比较好;
NOT IN 中的括号中必须保证 没有null,如有有null值则无返回值;例如
select *
from emp
where empno NOT IN(7698,7769,7568,NULL);
5.模糊查询:LIKE. NOT LIKE
匹配符号:
_,下划线,匹配任意的一位符号;
%,匹配任意的符号(0位,1位,多位)
例:查询所有雇员姓名中第1位是A的
select *
from emp
where ename LIKE 'A%';
例:查询所有雇员姓名中第二位是A的
select *
from emp
where ename LIKE '—A%';
例:查询所有雇员姓名中任意位置是A的
select *
from emp
where ename LIKE '%A%';
NOT LIKE
select *
from emp
where ename NOT LIKE '%A%';(不包含A)
where ename LIKE '%%';表示查询全部,跟直接查询*是一样的。LIKE可以在任意的数据类型上使用(原生支持);但是往往会在字符串上使用;所有搜索引擎都不用LIKE。
如果现在有若干个限定符,可以使用逻辑运算:
and(与); or(或);NOT(非)
以上所给出的判定符号是sql的标准支持;
例:查询出不是办事员,工资低于3000的雇员;
select *
from emp
where job<> 'CLERK' AND sal<3000;
查询排序:
要按列以升序或降序查询行记录,必须明确指示Oracle数据库要如何去排序。
语句:
SELECT
column_1,
column_2,
column_3,
...
FROM
table_name
ORDER BY
column_1 [ASC | DESC] [NULLS FIRST | NULLS LAST],
column_1 [ASC | DESC] [NULLS FIRST | NULLS LAST],
按照列名是一个排序顺序,可以是:
ASC
表示按升序排序DESC
表示按降序排序
select (distinct) 列名【别名】,列名【别名】,,。。。
from 表名【别名】
【Where 条件限定】;
ORDER BY 列名 ASC/DESC
--from先执行,再到where,最后是select,最后是order by
例:查询出办事员的编号、职位、年薪,按照年薪从高到低排序;
select empno,job,sal*12 income
from emp
where job='CLERK'
ORDER BY income ASC;
注:select控制列,where控制行,order by永远最后执行;
练习:
找出部门为10的所有经理和部门为20的所有办事员的详细资料;并且既不是办事员也不是经理的薪资大于等于3000的雇员;
select *
from emp
where (deptno=10 AND job='manager')
OR (deptno=20 AND job='CLERK')
OR (job NOT IN('MANAGER','CLERK') AND sal>=3000);