功能:从表中(数据库中数据是存储在二维表格当中的)查询获取自己想要的数据,对应到生活中的软件功能:百度搜索、淘宝搜索、12306 查询......
==》语法
1、查询表中所有的数据信息: 表名
SELECT * FROM 表名;
2、查询表中部分列信息: 表名 列名
SELECT 列名1,列名2,列名3,..... FROM 表名;
3、给列起别名: 列名1 别名,列名2 别名2, 列名3 别名3 (别名不要重复)
SELECT user_name 用户名,phone 手机号,email 邮箱 FROM user_tab;
4、去重,(重复显示的数据,只显示一行,多余的不显示去掉),重复是指完全一模一样
关键字: DISTINCT
SELECT DISTINCT job,deptno FROM emp;
***5、带条件的查询语句:根据查询条件来查询获取数据(实际工作中用的最多的)
关键字: WHERE
查询条件: 列名 运算符 搜索值
备注:搜索值除过数字以外,其它类型必须加单引号括起来,或者是双引号括起来。
SELECT * FROM 表名 WHERE 查询条件
一、单条件查询语句:一个查询条件
SELECT * FROM 表名 WHERE 查询条件
单条件查询的运算符: = , !=,<>,>,<,>=,<=
= 精确查询:将跟搜索值一模一样的数据查询出来,实际应用非常广(银行的身份证号码查询个人信息)
备注:搜索值区分大小写,区分中英文,搜索值数字可以不加引号,其它类型必须加引号括起来。
SELECT * FROM emp WHERE ename='scott'; -- Oracle 中必须和表中一样,都是大写
!= 不等于,将跟查询条件不一样的数据全部查询出来;
SELECT * FROM emp WHERE ename!='scott';
二、多条件查询:多个查询条件
条件连接: AND OR
查询条件 AND 查询条件 :功能,将同时满足两个条件的数据查询出来
查询条件 OR 查询条件 : 功能,只要满足其中一个查询条件就把数据找出来
例如:
SELECT ename FROM emp WHERE sal>2000 AND deptno=10;
SELECT * FROM user_tab WHERE user_name='司马懿' OR user_name='张春华'
多条件运算符: IN BETWEEN ... AND ... NOT
IN 多值运算符
用法: IN(搜索值1,搜索值2,搜索值3,...) 功能:将满足这几个搜索值的数据全部查询出来
等价于:列名=搜索值1 OR 列名=搜索值2 OR 列名=搜索值3 OR ... 列名必须是一样的
SELECT * FROM user_tab WHERE user_name IN('司马懿','张春华','曹丕');
SELECT * FROM user_tab WHERE user_name='司马懿' OR user_name='张春华' OR user_name='曹丕';
例如:查询员工薪水高于2000,并且在部门10或者部门20当中员工信息;
SELECT * FROM emp WHERE sal>2000 AND deptno IN(10,20);
SELECT * FROM emp WHERE sal > 2000 AND (deptno =20 OR deptno=10); -- and 优先级高于 or
BETWEEN ... AND ... 查询一个区间范围 内数据,用于数值了类型居多;
例如:查询薪水在 2000~3000之间的员工信息
SELECT * FROM emp WHERE sal >= 2000 AND sal<=3000;
SELECT * FROM emp WHERE sal BETWEEN 2000 AND 3000; -- 包含了临界值
用法: 列名 BETWEEN 值1 AND 值2 等价于 列名 >= 值1 AND 列名<=值2
注意: 值1<值2,包含了临界值(上下限)
NOT(1个或者多个查询条件)
用法: NOT 取反,功能(是括号中查询条件取反的数据)
例如:
SELECT * FROM emp WHERE NOT(sal BETWEEN 2000 AND 3000);
SELECT * FROM emp WHERE NOT(ename='SCOTT');
6、模糊查询:将跟搜索值类似的数据全部查询出来;
关键字(运算符): LIKE , 不能够单独使用,必须要结合通配符 % 或者 _ 一起使用
% 代表的是0个或者任意多个字符
张% : 张,张三,张三丰,张三丰******,即指以张开头的信息数据全部查询出来
%张 :代表以张结尾的数据
%张% : 包含张的信息
_ 代表的是任意一位字符 :仅代表一个字符,占位符
例如:查询名字中包含"司马"的用户信息
SELECT * FROM user_tab WHERE user_name LIKE '%司%马%';
查询名字中包含"司马",并且手机号倒数第二位是 6 的用户信息
SELECT * FROM user_tab WHERE user_name LIKE '%司%马%' AND phone LIKE '%6_';
SELECT * FROM user_tab WHERE user_name LIKE '%司%马%' AND phone LIKE '_________6_'; -- 容易数错
例如:查询名字 ALLEN BLAKE CLARK MLIER 这几个,用模糊查询实现;
SELECT * FROM emp WHERE ename LIKE '%L%';
7、 查询结果排序
关键字: ORDER BY 列名 排序方式(可以自定义,默认升序):
升序: ASC
降序: DESC
==》语法:
SELECT * FROM 表名 [WHERE 查询条件] ORDER BY 列名1,列名2 DESC,....;
SELECT * FROM emp WHERE ename LIKE '%L%' ORDER BY deptno;
例如: 查询部门编号为10,20的员工信息,然后按照部门编号升序排序,同一个部门再按照薪水降序排序。
SELECT * FROM emp WHERE deptno IN(10,20) ORDER BY deptno ASC,sal DESC;
备注:多个列参与排序,排序的先后顺序会直接影响排序的结果。
8.CONCAT() 函数,作用就是将列或者字符串拼接起来,用来拼接列或者字符串
例题:将姓名和薪水两列连接起来显示“xxx的薪水是多少”这样的信息; -- 一列
SELECT CONCAT('wode','pingjie'); -- select 可以直接使用,当作print()输出来用。
SELECT CONCAT('我的','函数测试') FROM DUAL; -- dual 虚表,用来存储展示和表结构表数据没有关系的数据
SELECT 456*789 FROM DUAL;
SELECT ename,sal FROM emp;
SELECT CONCAT(ename,'的薪水是',sal) FROM emp;
9.查询comm为空值的职工信息;
SELECT * FROM emp WHERE comm IS NULL;
NULL 空值,不确定的值,未知的值,运算符只能是 IS,别的运算符都不可以, 非空: NOT NULL ,运算符也是 IS
特点:空值和任何值做运算,结果还是空值;
例如:查询出职工的总收入信息
SELECT sal+comm FROM emp; -- 有问题了,很多人没有总收入,解决办法:空值转换函数
-- 空值转换函数 ifnull(参数1,参数2),作用,让空值变成一个确定的值,实际的值
参数1: 是需要转换为确定值的列名, 参数2 是一个明确的值,即当参数1是空值的时候,就用参数2来代替
SELECT ename,sal+IFNULL(comm,0) 总收入 FROM emp;
------------------------------------------------------------------
10、指定查看的记录数: LIMIT num ; 返回前 num 条查询的结果
SELECT * FROM emp LIMIT 5; -- 本质是表示从第1行到第5行,实际上跨了0行,即偏移量是0(1-1)
查看从指定位置(第4行开始,到第8行的数据,共返回5行数据),也使用 LIMIT n,m :
n表示: 指定位置向前退一位,偏移一位
m表示的是返回的行数
SELECT * FROM emp;
SELECT * FROM emp LIMIT 3,5;
-----DQL 数据查询语言小结-------
SELECT * FROM 表名 WHERE 查询条件 [ORDER BY 列名];
查询内容:全部、部分、精确到某一个列 查询条件(筛选过滤数据): 列名 运算符 搜索值
运算符:单条件运算符 = ,!=,>,<,>=,<=,<>
多条件运算符: IN BETWEEN ... AND ... NOT(查询条件) 取反
条件连接: AND 并且,都满足; OR 只要满足其中一个即可
模糊查询: LIKE(特殊运算符) %,_