1、Oracle数据库SQL简单查询
查询语法:SELECT [DISTINCT] * | 列名 [别名], 列名 [别名], 列名 [别名],....... FROM 表名称 [别名];
如果在SELECT字句中使用“*”,表示查询一张表中的所有数据列
例1:SELECT * FROM EMP;
在本例子中,FROM子句确定数据的来源,来源只要是表结构(行与列的集合)都可以,SELECT子句控制要查询的数据列(数据投影------即要显示的数据列,“*”表示显示所有数据列)。
例2、查询每个员工的编号、姓名、和基本工资。
SQL语句:SELECT EMPNO, ENAME, SAL FROM EMP;
除了简单的查询之外,在查询之中也支持四则运算,并且可以直接使用列的内容进行四则运算。
例3、查询每个员工的员工编号、员工姓名、工作、年薪(月工资SAL,年薪=月薪 * 12)
SQL语句:SELECT EMPNO, ENAME, JOB, SAL * 12 AS YSAL FROM EMP;
在进行简单查询过程中还支持数据的连接操作,使用“||”进行数据连接。(不推荐使用)
例4、将用户的编号和名称进行连接后显示
SQL语句:SELECT EMPNO || ENAME FROM EMP;
例5、我们希望查询结果为“员工编号:xxxx,员工姓名:xxx”的格式
在这里,员工编号的员工姓名是从数据库中获取,而对于一些固定的输出内容,如次例的“员工编号:”和“员工姓名:”,需要做一些特殊处理。处理时只考虑两种数据类型:
1⃣️普通数字:直接使用连接符号“||”进行编写(SELECT ENAME || 1 FROM EMP)
2⃣️字符串:字符串使用单引号进行声明(SELECT '员工编号:' || EMPNO || '员工姓名:' || ENAME FROM EM)
SQL语句:SELECT '员工编号:' || EMPNO || '员工姓名:' || ENAME FROM EMP;
在简单查询中还有一个DISTINCT关键字,该关键字的功能是去除重复数据。需要注意的是消除重复内容指的是查询出来数据的所有列的内容都重复。
例6、查询所有员工的职位信息
SQL语句:SELECT DISTINCT JOB FROM EMP;
2、ORACLE的限定查询
如果想要对所选择的数据进行控制,可以利用WHERE子句完成。其SQL语法如下:1⃣️、2⃣️、3⃣️代表执行顺序
语法:
【3⃣️选出所需要的数据列】SELECT * | 列 [别名], 列 [别名], 列 [别名], ......
【1⃣️确定数据来源】FROM 表名
【2⃣️筛选数据行】[WHERE 限定条件]
SELECT子句是整个语法最后执行的子句,如果需要需要进行数据筛选,必需要若干个筛选条件:
(一)关系运算:>、< 、=、 >=、 <=、 !=(或<>);
(二)范围运算:BETWEEN.. AND...;
(三)空判断:IS NULL、IS NOT NULL;
(四)IN判断:IN 、NOT IN、 EXISTS(复杂查询);
(五)模糊查询:LIKE、 NOT LIKE;
以上条件只可判断一次,若有若干个限定条件(符),那么就需要将若干个限定符进行连接,可以使用逻辑运算:
AND(与)、OR(或)、NOT(非)
例1:查询工资低于1200(不包括1200)的员工信息:
SQL语句:SELECT * FROM EMP WHERE SAL < 1200 ;
例2:查询员工工资为3000的雇员信息。
SQL语句:SELECT * FROM EMP WHERE SAL = 3000;
注意:在SQL语句中“=”可以用于数字,也可用于字符串。
例3:查询员工姓名为SMITH的雇员信息
注意:在ORACLE数据库中,数据是区分大小写的。
SQL语句:SELECT * FROM EMP WHERE ENAME = 'SMITH' ;
例4、查询员工工资在1200和2000之间的员工信息
SQL语句:SELECT * FROM EMP WHERE SAL BETWEEN 1200 AND 2000;
注意:1⃣️在ORACLE中所有的运算符不受数据类型的约束。
2⃣️null从数据库的定义来讲属于一个未知的数据,如果任何一个数据与null计算,结果还是null;在某些数据列上允许值为null,但null不能使用关系运算符,关系运算符判断的是数据,null不是数据,所有SQL中只能通过IS NULL判断为空,或者 IS NOT NULL[判断一次](或 NOT IS NULL [判断两次,先判断为空,再取反])判断不为空。
例5、查询领取佣金的雇员信息
SQL语句:SELECT * FROM EMP WHERE COMM IS NOT NULL;
例6、查询雇员编号为7369,7566,7788,9999的雇员信息
IN指的是根据指定的范围进行查询,在使用IN查询操作时,也可以使用NIT IN,表示不在某个范围内,而问题也从NOT IN开始,在使用NOT IN的时候,如果查找的数据范围之中有null值,那么无任何查询结果返回,IN操作无此限制。
SQL语句:SELECT * FROM EMP WHERE EMPNO IN (7369, 7566, 7788, 9999) ;
例7:查询员工编号为(7369, 7566, 7788, null)的员工信息:(注意:查询结果不受影响)
SQL语句:SELECT * FROM EMP WHERE EMPNO IN (7369, 7566, 7788, null) ;
例8:查询员工编号不在(7369, 7566, 7788, null)的员工信息:(注意:查询结果为空)
SQL语句:SELECT * FROM EMP WHERE EMPNO NOT IN (7369, 7566, 7788, null) ;
LIKE可是实现数据的模糊查询操作,若想使用LIKE,则必须跟随使用以下的两个符号:
1⃣️:"_":表示匹配任意的一位符号
2⃣️:"%":表示匹配任意的符号(可能包含0位、1位、多位)
例10:查询所有雇员姓名以字母A开头的员工信息:
SQL语句:SELECT * FROM EMP WHERE ENAME LIKE 'A%' ;
例11:查询所有员工姓名第二个字母是A的雇员信息
SQL语句:SELECT * FROM EMP WHERE ENAME LIKE '_A%' ;
注意:关于LIKE的两点说明:
1⃣️:如果在使用LIKE进行限定查询时没有设定任何关键字,表示查询全部。
例:SELECT * FROM EMP WHERE ENAME LIKE '%%' ;
2⃣️LIKE可以在任意数据类型上支持(原生支持,一些框架可能不支持,但是大部分都在字符串类型上使用。但不包括搜索引擎的实现(使用分词)。
3、查询排序(ORDER BY)
在默认情况下进行数据查询时,默认使用自然排序,顺序不可控。
语法如下:
【3⃣️选出所需要的数据列】SELECT * | 列 [别名], 列 [别名], 列 [别名], ......
【1⃣️确定数据来源】FROM 表名
【2⃣️筛选数据行】[WHERE 限定条件]
【4⃣️数据排序】[ORDER BY 排序字段 [ASC | DESC], 排序字段 [ASC | DESC], .......]
既然ORDER BY子句在SELECT子句之后执行,那么ORDER BY的排序字段就可以使用SELECT子句定义的别名。
ASC:生序排序(默认);DESC:降序排序
例1:根据雇员工资由高到低排序
SQL语句:SELECT * FROM EMP ORDER BY SAL DESC ;
注意:排序可以在任意数据类型上进行,包括字符串、日期都可以。