数据类型:
数值型 number 直接写 1234
字符型 char/varchar2 '字符内容'
日期型 date'年-月-日'
--限定查询
语法:
SELECT 要查的内容
FROM 数据来源
WHERE 限定条件
--限定条件可以有哪些???
1、比较大小的运算符
< = >= <= != <> --查询工资大于2000的员工的姓名和工资 SELECT ENAME,SAL FROM EMP WHERE SAL>2000;
--查询1981年之前入职的员工信息
SELECT *
FROM EMP
WHERE HIREDATE<DATE'1981-1-1';
--查询不是30部门的员工信息
SELECT *
FROM EMP
WHERE DEPTNO!=30;
--查询名字是SMITH的员工信息
SELECT *
FROM EMP
WHERE ENAME='SMITH';
--oracle语法关键字不区分大小写 但是匹配
--内容区分大小写
--查询1986年国庆节之后入职的员工信息
SELECT *
FROM EMP
WHERE HIREDATE>DATE'1986-10-1';
2、逻辑运算符
AND 并且 两边的条件必须同时满足
OR 或者 两边的条件满足任意一个即可
not 非/取反
<= < >= = != AND OR OR AND --查询工资大于2000并且是30部门的人 SELECT * FROM EMP WHERE SAL>2000 AND DEPTNO=30; -- 大于2000或者是30部门
SELECT *
FROM EMP
WHERE SAL>2000 OR DEPTNO=30;
--查询工资不大于2000的员工信息
SELECT *
FROM EMP
WHERE NOT(SAL>2000);
--查询20部门职位是MANAGER的员工信息
SELECT *
FROM EMP
WHERE DEPTNO=20 AND JOB='MANAGER';
--查询1981年入职的员工信息
SELECT *
FROM EMP
WHERE HIREDATE>=DATE'1981-1-1' AND HIREDATE<=DATE'1981-12-31';
--查询既不是10部门也不是20部门的员工信息
SELECT *
FROM EMP
WHERE DEPTNO!=10 AND DEPTNO!=20;
SELECT *
FROM EMP
WHERE NOT(DEPTNO=10 OR DEPTNO=20);
3、between 小值 and 大值
等价于 >=小值 AND <= 大值
--查询工资在2450-3000的员工信息
SELECT *
FROM EMP
WHERE SAL BETWEEN 2450 AND 3000;
--查询1987年上半年入职的员工信息
SELECT *
FROM EMP
WHERE HIREDATE BETWEEN DATE'1987-1-1' AND DATE'1987-6-30';
--查询职位是SALESMAN并且提成在1000-2000的员工信息
SELECT *
FROM EMP
WHERE JOB='SALESMAN' AND COMM BETWEEN 1000 AND 2000;
4、in(值1,值2,。。。)
等价于=值1 or =值2 or =值。。。
--查询员工编号是7788或者7369或者7654的员工信息
SELECT *
FROM EMP
WHERE EMPNO=7788 OR EMPNO=7369 OR EMPNO=7654;
SELECT *
FROM EMP
WHERE EMPNO IN(7788,7654,7369);
--查询职位不是MANAGER ANALYST SALESMAN 的员工信息
SELECT *
FROM EMP
WHERE NOT (JOB IN('MANAGER','ANALYST','SALESMAN'));
5、算数运算符 +- */ ()
--查询工资+500后大于2000的员工
SELECT *
FROM EMP
WHERE SAL+500>2000; SAL>2000-500; --推荐
6、空 is null /is not null
--查询没有经理的员工信息
SELECT *
FROM EMP
WHERE MGR IS NULL;
--查询没有提成的员工信息
SELECT *
FROM EMP
WHERE COMM IS NULL;
7、连接符 ||
把多个字段连接成一个字段 新生成的字段是字符类型
SELECT EMPNO,ENAME,SAL,EMPNO||'~'||ENAME||'~'||SAL
FROM EMP;
--查询20部门 工作是职员的员工信息
SELECT EMP.*,DEPTNO||JOB
FROM EMP
WHERE DEPTNO||JOB='20CLERK';
--查询10部门提成为空的员工信息
SELECT *
FROM EMP
WHERE DEPTNO||COMM=10;
SELECT *
FROM EMP
WHERE DEPTNO=10 AND COMM IS NULL;
--隐式转换
纯数字字符可以看成数字来使用 数字也可以看成字符串使用
SELECT *
FROM EMP
WHERE DEPTNO||COMM=10; =====> deptno||comm='10'
SELECT 123+456,123+'456','123'+'456','123+456'
FROM DUAL;
--模糊查询
语法:
SELECT 要查询的内容
FROM 数据来源
WHERE 列 LIKE'匹配内容'
通配符:
% 0个或多个字符
_ 任意单个字符
--查询emp中名字以A开头的
SELECT *
FROM EMP
WHERE ENAME LIKE'A%';
--查询emp中名字以A结尾的
SELECT *
FROM EMP
WHERE ENAME LIKE'%A';
--查询名字包含A的
SELECT *
FROM EMP
WHERE ENAME LIKE'%A%';
--查询名字的第二个字母是L的员工信息
SELECT *
FROM EMP
WHERE ENAME LIKE'L%';--查询名字的长度是4的员工信息SELECT *FROM EMPWHERE ENAME LIKE'';--查询名字以J开头长度为5的员工信息SELECT *FROM EMPWHERE ENAME LIKE'J_';
--查询名字以J开头S结尾的员工信息
SELECT *
FROM EMP
WHERE ENAME LIKE'J%S';
--查询名字既不包含S也不包含A的员工信息
SELECT *
FROM EMP
WHERE ENAME NOT LIKE'%S%' AND ENAME NOT LIKE'%A%';
优先级:
*/的优先级高于+-
连接符的优先级和+-一样
当优先级一样的时候 从左往右依次计算
SELECT 2+3||4,2||3+6
FROM DUAL;
优先级:
1、()
2、乘除
3、+-||
4、比较符
5、is null 、in、like
6、between and 7、not 8、and 9、or
注:可以使用括号改变优先级
不清楚优先级情况下+括号
--转义
对单引号的转移
1、双写
SELECT ' '' ',' '' '' " '
FROM DUAL;
2、q'{转义的内容}'
SELECT Q'{'}',Q'{' '}'
FROM DUAL;
--显示 A said :"B said 'let's go!' "
SELECT ' A said :"B said ''let''s go!'' "'
FROM DUAL;
SELECT Q'{ A said :"B said 'let's go!' "}'
FROM DUAL;
3、模糊查询中的转义(对%和_的转义)
语法: 列 like'匹配内容' escape '转义符'
注:一个转义符只能转义一个符号
SELECT * FROM A;
--查询name中包含_的行
SELECT *
FROM A
WHERE NAME LIKE '%_%' ESCAPE ''; --转义符号习惯用/或者\
--查询名字中包含%
SELECT *
FROM A
WHERE NAME LIKE'%A%%' ESCAPE'A';
--查询名字中倒数第二个是%结尾的
SELECT *
FROM A
WHERE NAME LIKE'%%' ESCAPE'';--查询name以_开头 且长度为5的SELECT *FROM AWHERE NAME LIKE'____' ESCAPE'';
--查询名字中以_%开头的行
SELECT *
FROM A
WHERE NAME LIKE'_%%' ESCAPE'';