Oracle简单查询

作者:gqk


本章内容:

  • 基本查询语句
  • 算数运算符
  • 空值问题
  • 列的别名
  • 字符串链接
  • 查询消除重复行
  • Oracle常用数据类型
  • Where过滤
  • 模糊查询
  • 排列子句

1,基本查询语句:

  数据库查询语句是我们学习的重点在实际开发中数据库查询无处不在:

  查询某张表的某几列(自定义列查询):

  语法:

SELECT 列名1,列名2,...FROM 表名

  查询表的所有列

  语法:

SELECT * FROM 表名

  查询用户下的所有表:

SELECT tbale_name FROM user_tables;

SELECT table_name FROM tabs;

 2,算数运算符:

--算数运算符
SELECT 5+3,5-3,5*3,5/2 FROM dual;
--虚表
SELECT 'hello,world',100 FROM dual;
--查询员工编号,姓名,工资,新工资(=原始工资上浮25% =》衍生列 计算列)
SELECT employee_id,last_name,salary,salary*1.25
FROM   employees;

查询:--员工编号,姓名,工资,奖金金额,实发工资(工资+奖金)??

3,空值问题:包含空值的数学表达式结果一定为空 

在Oracle中空值null和空字符串是等价的,空值不是空格或者0

SELECT 5+NULL FROM dual;
SELECT 5-NULL+3 FROM dual;
SELECT 5+'' FROM dual;

4,列的别名:

列别名使用方式:

  • AS 别名
  • 空格 别名

--列别名
SELECT employee_id,
       last_name,
       salary,
       salary * 1.25 new_sal
FROM   employees;

SELECT employee_id,
       last_name,
       salary,
       salary * commission_pct AS "Comm",
       salary + salary * commission_pct "my-money"
FROM   employees;

双引号可以强制原始大小写执行:

5,字符串链接:

把列和列,列和字符链接在一起用“||”

--拼接字符串
SELECT 'hello'||'world' FROM dual;
SELECT 'hello'||1234 FROM dual;
SELECT 999||1234 FROM dual;

SELECT '100'+'200' FROM dual;

--员工的姓和名拼接为一列
SELECT first_name||'.'||last_name AS ename
FROM   employees;

6,查询消除重复行  

 

在SELECT 语句中使用DISTINCT 关键字删除重复行:

--重复行
SELECT DISTINCT department_id FROM employees;

SELECT DISTINCT department_id,job_id FROM employees;

7,Oracle常用的数据类型  

  1、字符类型 

  • CHAR:一个定长字符串,当位数不足自动用空格填充来达到其最大长度。如非NULL的CHAR(12)总是包含12字节信息。CHAR字段最多可以存储2,000字节的信息

  • VARCHAR2:目前这也是VARCHAR 的同义词。这是一个变长字符串,与CHAR 类型不同,它不会用空格填充至最大长度。VARCHAR2(12)可能包含0~ 

  • CLOB:(Character Large Object)在Oracle9i及以前的版本中, 这种数据类型允许存储最多4GB的数据, 在Oracle 10g及以后的版本中允许存储最多(4GB)×(数据库块大小)字节的数据。CLOB包含要进行字符集转换的信息。这种数据类型很适合存储纯文本信息。

  2、数字类型:

NUMBER:该数据类型能存储精度最多达38位的数字。每个数存储在一个变长字段中,其长度在0~22字节之间。Oracle的NUMBER类型精度很高, 远远高于许多编程语言中常规的FLOAT和DOUBLE类型。

NUMBER( p,s ) p表示精度(总长度) s表示小数位置且四舍五入

NUMBER(10,3) 10是总长度,3是小数位数的长度

  3、日期类型

• DATE:一个7字节的定宽日期/时间数据类型。其中总包含7个属性,包括:世纪、世纪中哪一年、月份、月中的哪一天、小时、分钟和秒。

• TIMESTAMP:一个7 字节或12.字节的定宽日期/时间数据类型。它与DATE 数据类型不同,因为TIMESTAMP 可以包含小数秒(fractional second);带小数秒的TIMESTAMP 在小数点右边最多可以保留9位。

  4、二进制及大文本数据

• BLOB: (binary large object)在Oracle9i及以前的版本中, 这种数据类型允许存储最多4GB的数据, 在Oracle 10g及以后的版本中允许存储最多(4GB)×(数据库块大小)字节的数据。BLOB包含不需要进行字符集转换的“二进制“数据,如果要存储电子表格、字处理文档、图像文件等就很适合采用

  注意:ORACLE中没有boolean类型:

8,Where过滤

  就是按照条件检索查询数据:

  比如:查询本月的手机话费

     百度我们感兴趣的信息

     预定乘坐的飞机,火车票

比较运算符:

--查询90号部门的员工


--查询工资超过10000的员工

--查询姓King的员工(字符串比较区分大小写)

--查询员工编号,姓名,工资,新工资(只看新工资超过10000的员工)

 

 --查询所有在90年以前入职的员工

--查询所有不是50号部门的员工

判断一下sql的输出结果:

SELECT *
FROM   employees
WHERE  department_id=NULL;
 
SELECT *
FROM   employees
WHERE  department_id<>NULL;

特殊比较运算符:

  

--查询没有部门的员工
SELECT *
FROM   employees
WHERE  department_id IS NULL;

--查询有部门的员工
SELECT *
FROM   employees
WHERE  department_id IS NOT NULL;

--查询工资在5000~10000之间的员工
SELECT *
FROM   employees
WHERE  salary BETWEEN 5000 AND 10000;

--查询工资不在5000~10000之间的员工
SELECT *
FROM   employees
WHERE  salary NOT BETWEEN 5000 AND 10000;

--查询部门为10,20,50号的员工
SELECT *
FROM   employees
WHERE  department_id IN (10,20,50);

--查询部门不是10,20,50号的员工
SELECT *
FROM   employees
WHERE  department_id NOT IN (10,20,50);

 9,模糊查询:

练习:

--查询first_name以S开头的员工
SELECT *
FROM   employees
WHERE  first_name LIKE 'S%';

--查询last_name以s结尾的员工
SELECT *
FROM   employees
WHERE  last_name LIKE '%s';

--查询last_name以M开头且第三个字母是u的员工
SELECT *
FROM   employees
WHERE  last_name LIKE 'M_u%';

--查询email中包含EN的员工
SELECT *
FROM   employees
WHERE  email LIKE '%EN%';

--查询job_id倒数第5个字符是下划线的员工
SELECT *
FROM   employees
WHERE  job_id LIKE '%\_____' ESCAPE '\';

SELECT *
FROM   employees
WHERE  last_name LIKE '%\%%' ESCAPE '\';
 

  练习:

--查询工资超过5000且last_name以s结尾的员工
SELECT *
FROM   employees
WHERE  salary>=5000
AND    last_name LIKE '%s';
--查询部门是10,20,以及没有部门的员工
SELECT *
FROM   employees
WHERE  department_id IN (10,20)
OR     department_id IS NULL;

 排序问题:

  练习:

  

--查询员工编号,姓名,工资,新工资,部门编号
--按工资升序
SELECT employee_id,last_name,salary,salary*1.5 new_sal 
FROM   employees
ORDER BY salary;
--按工资降序
SELECT employee_id,last_name,salary,salary*1.5 new_sal
FROM   employees
ORDER BY salary DESC;
--
SELECT employee_id,last_name,salary,salary*1.5 new_sal
FROM   employees
ORDER BY new_sal DESC;
--
SELECT employee_id,last_name,salary,salary*1.5 new_sal
FROM   employees
ORDER BY salary*1.5 DESC;
--
SELECT employee_id,last_name,salary,salary*1.5 new_sal
FROM   employees
ORDER BY 3 DESC;

--查询员工编号,姓名,工资,入职日期,部门编号
--按部门升序,工资降序,入职日期升序
SELECT employee_id,last_name,salary,hire_date,department_id
FROM   employees
ORDER BY department_id,salary DESC,hire_date;

--排序表达式可以不是列列表中的列
SELECT employee_id,last_name,salary,salary*1.5 new_sal
FROM   employees
ORDER BY job_id;

--查询50号部门的员工,按工资降序
SELECT *
FROM   employees
WHERE department_id=50
ORDER BY salary DESC;

  伪列:

--rownum伪列
SELECT ROWNUM,employee_id,last_name,salary 
FROM   employees
WHERE  department_id=50;

--查询某表中的前5条数据(TOP N查询)
SELECT ROWNUM,employees.*
FROM   employees
WHERE  ROWNUM<=5;

--查询某表中的第6到第10条数据

--查询工资最高的前5名员工

select rownum ,last_name,salary from employees where rownum <6 order by salary desc(错误的)

select * from (select rownum,last_name,salary from employees order by salary desc) where rownum <6;

--rowid伪列
SELECT ROWID,ROWNUM,employees.*
FROM   employees;

  

 

  

猜你喜欢

转载自www.cnblogs.com/520gqk/p/9821724.html