认识限定查询:筛选数据(where语句);
Where子句:可以设置一系列的过滤条件,可以使用逻辑运算进行连接。
限定运算符:
1.关系运算符(>, <, >=, <=, =, !=, <>):进行大小或相等的比较,其中不等于有两种,!=和<>;
2.判断null(IS NULL, IS NOT NULL):判断某一列的内容(值)是否是null;
3.逻辑预算符(AND, OR, NOT):和C语言一样的使用方法;
4.范围查询(BETWEEN最小值AND最大值):在一个指定范围中进行查找,查找结果为:“最小值<=内容<=最大值”;注:查询范围可以是数字,字符串或者是日期型数据;
5.范围查询(IN):通过IN可以指定一个查询的范围;
6.模糊查询(LIKE):可以对指定字段进行模糊查询;
限定查询的范例:
A.统计基本工资高于1500的全部雇员信息:
SELECT *
FROM emp
WHERE sal>1500;
注:第一步:执行FROM子句,来控制数据的来源;
第二步:执行WHERE子句,使用限定字符进行数据行的过滤(也就是说可以使用数据列的别名,不可以使用SELECT后定义的数据列的别名,因为SELECT是在WHERE后执行);
第三步:执行SELECT子句,确定要显示的数据列;
B.查询基本工小于等于2000:
SELECT *
FROM emp
WHERE sal<=2000;
C.查询SMITH的详细资料:
SELECT *
FROM emp
WHERE ename=’SMITH’;
D.查询所有办事员的雇员信息:
SELECT *
FROM emp
WHERE job=’CLERK’;(列名不区分大小写)
F.查询所有不是办事员的雇员信息:
SELECT *
FROM emp
WHERE job<>(!=)’CLERK’;
G.查询工资在1500~300的全部雇员信息:
SELECT *
FROM emp
WHERE sal>=1500 AND sal <=3000;
H.查询职位是销售人员,并且基本工资高于1200的所有雇员的信息:
SELECT *
FROM emp
WHERE job=’SALESMAN’ AND sal>1200;
关系运算符查询范例:
1.要求查询出10部门中的经理或者20部门业务员的信息:SELECT * FROM emp WHERE (deptno=10 AND job=’MANAGER’) OR (deptno = 20 AND job = ‘CLERK’);
2.查询不是办事员的且基本工资大于2000的全部雇员的信息:
第一种方式:
SELECT *
FROM emp
WHERE (job != 'CLERK') AND (sal>2000);
第二种方式:
SELECT *
FROM emp
WHERE NOT (job='CLERK' AND sal<=2000);
3.使用BETWEEN AND 操作查询出工资范围在1500~300(包含1500和3000)的全部雇员信息:
SELECT *
FROM emp
WHERE sal BETWEEN 1500 AND 3000;
4.查询在1981年雇佣的全部雇员信息:
SELECT *
FROM emp
WHERE hiredate BETWEEN '01-1月-81' and '31-12月-81';
NULL判断查询
5.查询出所有领取佣金的雇员的完整信息:
实现一
SELECT *
FROM emp
WHERE comm IS NOT NULL;
实现二
SELECT *
FROM emp
WHERE NOT comm IS NULL;
6.查询出所有不领取佣金的雇员且这些雇员的基本工资大于2000:
SELECT *
FROM emp
WHERE (comm IS NULL) AND (sal>2000);
7.查询不收取佣金或收取佣金低于100的员工:
SELECT *
FROM emp
WHERE (comm IS NULL) OR (comm<100);
8.查询收取佣金的员工中的不同工作:
SELECT DISTINCT job
FROM emp
WHERE comm IS NOT NULL;
列表的范围查询:
1.查询出雇员编号是7369,7788,7566的雇员信息:
第一种表示方式:
SELECT *
FROM emp
WHERE empno=7369 OR empno=7788 OR empno=7566;
第二种表示方式:
SELECT *
FROM emp
WHERE empno IN (7369,7788,7566);
2.查询雇员编号不是7369,7788,7566的雇员信息:
SELECT *
FROM emp
WHERE NOT empno IN (7369,7788,7566 );
注:使用NOT IN操作是有一点需要注意,关于NULL的问题:如果现在使用的是IN操作判断的范围数据之中包含了null不会影响最终的查询结果;如果使用NOT IN,里面NULL,直接后果就是没有任何的数据显示(原因:使用NOT IN 或者 IN 其目只是显示部分内容,如果说下现在 有一列数据不可能为null, 并且NOT IN 里面判断null的条件满足了,那么就表示查询全部数据);
SELECT *
FROM emp
WHERE empno!=7369 AND empno!=7788 AND empno!=NULLl;
上述查询的另一种查询方式,注意由于NULL值不能参与比较运算符,导致条件不成立,查询不出来数据。
LIKE模糊查询:
语法:
满足模糊查询:字段|值LIKE 匹配标记;
不满足模糊查询:字段|值 NOT LIKE 匹配标记;
如果现在想对某一列进行模糊查询,可以使用LIKE子句完成, 通过LIKE 可以进行关键字的模糊查询, 在LIKE子句中有两个通配符:
百分号(%)可以匹配任意类型和长度的字符(可以代表0位,1位,2位等等), 如果是中文则使用两个百分号(%%);
下划线(-):匹配单个任意字符,它常用来限制包大师的字符长度;
注:如果模糊查询中不设置关键字,那么就是查询全部信息;
1.查询姓名是以S开头的全部雇员信息:
SELECT *
FROM emp
WHERE ename LIKE 'S%';
2.查询雇员姓名第二是M的全部雇员信息:
SELECT *
FROM emp
WHERE ename LIKE '_M%';
3.查询出姓名中任意位置包含“F”的雇员信息:
SELECT *
FROM emp
WHERE ename LIKE '%F%';
4.查询出雇员的姓名的长度为6的或者超过6位的:
SELECT *
FROM emp
WHERE ename LIKE '______%';
5.查询出雇员基本工资中包含1或者在81年雇佣的全部雇员:
SELECT *
FROM emp
WHERE sal LIKE '%1%' OR hiredate LIKE '%81%';
6.查询部门10中的全部经理,部门20中的所有办事员,既不是经理又不是办事员但其薪金大于或者等于2000的所有员工的详细资料,并且要求这些雇员的姓名之中包含有字母S或者字母K:
SELECT *
FROM emp
WHERE ((deptno=10 AND job='MANAGER') OR (deptno=20 AND job='CLERK') OR ((job NOT IN ('MANAGER','CLERK') AND
sal >= 2000))) AND (ename LIKE '%S%' OR ename LIKE '%K%');