一、SQL的简单查询数据库
一、掌握SQL查询的基本语法oracle
二、SQL进行查询的各类操做ide
SELECT [DISTINCT]*| 列[列名],列[列别名],...搜索引擎
FROM 表名称[别名];spa
执行顺序:一、FROM 二、SELECT索引
范例:查询emp表中的所有记录:SELECT * FROM emp ;开发
FROM子句肯定数据来源,SELECT子句控制所须要的数据列范例:进行数据的投影--控制所须要显示的数字符串
据列:查询每一个雇员的编号姓名工资it
SELECT empno,ename,sal*12 FROM emp ;class
再简单查询之中也支持四则运算
范例:如今要求查询每一个雇员的编号姓名基本年薪(月工资是sal,年薪*12)
SELECT empno ,ename ,sal*12 FROM emp ;
部分的列名称很差看,能够进行别名设置
SELECT empno,ename,sal*12 income FROM emp ;
SELECT empno 雇员编号,ename 姓名,sal*12 年薪 FROM emp ;
若是想开发正常,尽可能别用汉语
还支持数据链接操做,使用 ”||”连接
SELECT empno || ename FROM emp ;(普通数字直接编写)
SELECT empno || 1 FROM emp ;(字符串使用单引号声明)
SELECT empno || 'hello' FROM emp;
实现格式化的输出操做:SELECT '编号:' || empno || ',姓名:' || ename FROM emp ;
DISTINCT关键字,去除重复内容
查询全部雇员的职位信息:
SELECT job FROM emp ;
SELECT DISTINCT job FROM emp ;
SELECT DISTINCT ename,job FROM emp ;
总结:简单查询中的最大特征在于:控制数据列,可是他没法进行数据行的控制。
二、SQL的限定查询
一、SQL语句的执行顺序
二、限定符号的使用
若是想对所选的数据行进行控制,那么能够利用WHERE子句完成
SELECT [DISTINCT] * | 列[别名],列[别名]...
FROM 表名称[别名]
[WHERE 限定条件(s)];
执行顺序
一、FROM 肯定数据来源
二、WHERE 筛选数据行
三、SELECT 选出所须要的数据列,最后被执行
关系运算:>、<...
范围运算:BETWHERE...END;
空判断:IS NULL、IS NOT NULL;
IN判断:IN 、NOTIN 、 exists()(复杂查询);
模糊查询:LIKE、NOTLIKE.
以上限定符只能判断一次,若是出现若干个限定符、须要进行限定符连接,使用逻辑运算:AND(与)、 OR(或)、 NOT(非);
一、关系运算符
范例:查询工资低于1200的雇员
SELECT *
FROM emp
WHERE sal<1200 ;
范例:查询工资3000的雇员
SELECT *
FROM emp
WHERE sal=3000 ;
范例:查询Smith的雇员信息(在oracle数据库中,数据区分大小写)
SELECT *
FROM emp
WHERE ename='SMITH' ;
对于不等于有2个符号:!=、<>;
范例:查询职位不是办事员的雇员(职位是job的字段、办事员的职位名称CLERK)
SELECT *
FROM emp
WHERE job<>'CLERK' ;
SELECT *
FROM emp
WHERE job!='CLERK' ;
二、逻辑运算
逻辑运算能够保证链接多个条件,主要使用AND/OR完成。
范例:要求查询出不是办事员但工资低于3000的雇员信息
SELECT *
FROM emp
WHERE job<>'CLERK' AND sal<3000 ;
范例:查询不是办事员也不是销售的雇员信息
SELECT *
FROM emp
WHERE job<>'CLERK' AND job<>'SALESMAN' ;
范例:查询出职位是办事员,或者工资低于1200的雇员
SELECT *
FROM emp
WHERE job='CLERK' OR sal<1200 ;
除了AND与OR以外,还可使用NOT进行求反。即:true变为false、false变为true
范例:观察NOT操做
SELECT *
FROM emp
WHERE NOT sal>2000 ;
三、范围运算:BETWEEN...AND
BETWEEN...AND主要功能是进行范围插叙
SELECT *
FROM emp
WHERE 字段|树枝 BETWEEN 最小值 AND 最大值 ;
范例:输出工资在1500~3000的全部雇员
SELECT *
FROM emp
WHERE sal BETWEEN 1500 AND 3000 ;
使用BETWEEN...END是一个运算符,而是用关系与逻辑的组合属于两个运算符,天然效率会更高
在oracle中的全部运算符都不收数据类型的控制,在以前使用的是数字进行判断,那么除了数字以外也可使用字符串或者日期进行判断。
范例:查询出全部在1981年的雇员信息
SELECT *
FROM emp
WHERE hiredate BETWEEN '01-1月-81' AND '31-12月-1981' ;
范例:无聊的字符串范围
SELECT * FROM emp WHERE ename BETWEEN 'ALLEN' AND 'CLARK' ;
四、空判断
null是从数据库定义上来说属于一个未知的数据,任何一个数字和null进行计算结果仍是为null
SELECT null + 1 FROM emp ;
null不能使用关系运算判断。关系能够判断的是数据,因此在SQL智能用IS NULL/IS NOT NULL来判断不为空
范例:查询因此领取佣金的雇员信息(comm字段表示佣金,若是领取,comm的内容不是null)
SELECT *
FROM emp
WHERE comm IS NOT NULL ;
五、IN操做符(谓词IN 核心)
IN指的是根据一个指定的范围进行数据查询
范例:查询出雇员编号是7369.7566.7788.9999的雇员信息
SELECT *
FROM emp
WHERE empno=7369 OR empno=7566 OR empno=7788 OR empno=9999 ;
SELECT *
FROM emp
WHERE empno IN (7369,7566,7788,9999) ;
NOT IN 在使用NOT IN时若是查找的数据范围内包含NULL值,那么不会有任何的查询结果返回,IN操做无此如今
SELECT *
FROM emp
WHERE empno NOT IN (7369,7566,7788,9999) ;
SELECT *
FROM emp
WHERE empno IN (7369,7566,7788,null) ;
SELECT *
FROM emp
WHERE empno NOT IN (7369,7566,7788,null) ;
五、模糊查询:LIKE(核心)
LIKE能够实现数据模糊插叙,若是使用LIKE则必须使用以下两个匹配符号:
“_”匹配任意的一位符号;
“ % ”匹配任意的符号(0位、1位、多位)
范例:查询全部雇员姓名中一字母A开头的雇员信息
SELECT *
FROM emp
WHERE ename LIKE 'A%' ;
范例:查询全部雇员姓名第二个字母是M的因此雇员信息
SELECT *
FROM emp
WHERE ename LIKE '_A%' ;
范例:查询雇员姓名任意位置上存在A的雇员信息
SELECT *
FROM emp
WHERE ename LIKE '%A%' ;
关于LIKE的两点说明
一、若是在使用LIKE进行限定查询的时候,若是没有设置任何关键字,那么表示查询所有;
SELECT * FROM emp WHERE ename LIKE '%%' ;
二、LIKE 能够在任意的数据类型上使用(原生支持)
SELECT * FROM emp
WHERE ename LIKE '%A%' OR sal LIKE '%1%' OR hiredate LIKE '%81%' ;
虽然全部的数据类型都支持LIKE ,可是每每会在字符串上使用,所见到的大部分系统搜索功能都是此语句实现的。可是不包含搜索引擎的实现。