Oracle的数据基本查询语句

简介

第四代编程语言: sql语言 非常接近自然语言

第一代编程语言 :二进制语言 打孔机

第二代编程语言:汇编语言 代替了二进制指令

第三代编程语言:高级语言 前期:c语言 后期c++ java

sql语言分类

DQL(Data Query Language)

  • 数据查询语言 主要语句有 select 操作频繁

DML(Data MAnipulation Language)

  • 数据操作语言 改变数据库中的数据 insert delect update3条语句

DDL(Data Define Language)

  • 数据定义语言 用来定义 修改 删除数据库对象

TCL(Transaction control Language )

  • 事务控制语言 用于维护事务的一致性 commit rollback savepoint 3条语句

DCL(Data control Language)

  • 用于执行权限授予和权限收回操作 grant,revoke

基本查询

查询某张表所有或者指定的数据内容

  • 语法:

    select * from 表名;
    select 字段名1,字段名2 ... from  表名;
    

    ; 代表sql语句的结束

    * 代表查询所有,不建议使用 * 效率太低

    字段名1表示查询指定的列中数据

  • 查看s_emp表中的id和last_name数据

    select id,last_name from s_emp;
    select ID,last_name from s_emp;
    

    大小写不敏感

  • 查询s_emp表中的所有数据

    select * from s_emp;
    
  • plsql devloper

    我们可以使用plsql devloper 客户端去连接oralce服务器

    数据明显比先前的好看多了。

列值计算

  • 语法

    select 字段名 运算符 数值 from 表名
    

    运算符 : +,-,*,/

  • 查询员工的名字和年薪

    select last_name,salary *  12 from s_emp;
    
  • 查看每个员工的员工id,名字和月薪涨100以后的年薪

    select last_name,salary + 100 * 12 from s_emp;
    

    上面的案例会先算 乘法再算加法,如果想要改变运算的优先级,可以通过()去改变

    select last_name,(salary + 100) * 12 from s_emp;
    
  • 注意事项:

    • 查询永远都不会改变表中数据值
    • 乘除的优先级高于加减
    • 优先级相同时,按照从左到右运算
    • 可以使用括号改变优先级

列别名

  • 查询员工名和年薪

    select last_name,salary * 13 from s_emp;
    

    发现这个列的名字已经改变,同时这个列名有时候也不符合我们的需求,所以我们可以给列起别名

  • 语法:

    select 字段名 [as] 别名 from 表名;
    

    as 可以省略不要

    别名 别名可以用双引号包裹起来,以便包含特殊字符,只有此处会用双引号,其他的地方都是单引号

  • 查看员工的员工id,名字和年薪,年薪列名为annual

    select id,last_name,salary * 13 as annual from s_emp;
    

select id,last_name,salary * 13 as “annual” from s_emp;
/* sql 是不区分大小写,但是如果双引号包裹起来,里面的别名写了什么就是什么,区分大小写 */




## 拼接列

> 把多个列的数据拼接成一个列

- 语法

select 字段1 || 字段2 from 表名;


- 查看员工的员工id,全名

```sql
select id,last_name ||frist_name  from s_emp;
select id,last_name || '.' ||frist_name  from s_emp;
/* 单引号,拼接字符串 */
  • 查看员工的员工id,全名和职位名称,全名和职位名称合并成一列显示,且格式为:姓名:xxx-xx,职位:xxx

    select id,'姓名: ' || last_name || '-'  || first_name || ', 职位: '  || title info
    from s_emp;
    

去重

将重复的数据去除掉

  • 语法:

    select distinct 字段1,字段2 from 表名;
    
  • 查询公司里面的已有职位名称

    select distinct title from s_emp;
    
  • 注意事项:

    • distinct关键词只能放在select关键词后面,下面的语句就是报错了

      select id,distinct title from s_emp;
      
    • 如果是多列去重,如下test表:

      IdId2
      12
      13
      24
      34
      34
      select distinct id,id2 from test;
      

      两列的值共同比较,如果两列的值完全一样则去掉,同理,三列,四列也是一样的。

      查询结果如下:

      IdId2
      12
      13
      24
      34
  • 查看所有员工的职位名称和部门id,同职位同部门的只显示一次

    select distinct dept_id,title  from s_emp;
    

排序

把查询出来的数据,进行排序展示。

注意: 是先查询出来以后才能排序展示。同时排序不改变表里面的数据

  • 语法:

    select col_name,...
    from tb_name
    order by col_name [asc|desc],...
    
    • 排序使用order by字句,asc升序,desc降序 默认升序
    • 该子句只对查询记录显示调整,并不改变查询结果,所以执行权最低,即最后执行
  • 查询员工的工资和last_name,对工资进行升序排列

    select salary,last_name
    from s_emp
    order by salary asc;
    
  • 多列排序

    如果有多个列排序,后面的列排序的前提是前面的列排好序以后有重复(相同)的值

    例如(test)表

    IdId2
    12
    23
    34
    41
    42
    select id,id2  from test order by id,id2 desc;
    

    结果:

    IdId2
    12
    23
    34
    42
    41
  • 查看员工的id,名字和薪资,按照薪资的升序排序显示,如果薪资相同则按照id降序排列。

    select id,last_name,salary 
    from s_emp
    order by salary,id desc;
    
  • order by 后面还可以跟数字,表示使用select后面的第几个列进行排序

    使用last_name列进行排序

    select last_name,salary  from s_emp order by 1;
    

    使用salary列进行排序

    select last_name,salary from s_emp 	order by 2 desc;
    
  • null值排序规则

    升序排列,默认情况下,null值排后面
    降序排序,默认情况下,null值排前面

限制查询

指定条件查询,对数据进行筛选

  • 语法

    select col_name,...
    from tb_name
    where col_name 比较操作表达式
    	  逻辑操作符(and|or)
    	  col_name 比较操作表达式;
    
  • 比较符

= > < >= <=
不等于:三个都表示不等于的意思
!= <> ^=

  • 查看员工工资小于1000的员工id和名字

    select id,last_name from s_emp where salary < 1000;
    
  • 逻辑比较符

    • BETWEEN … AND …
      between x and y:在什么范围之内 [x,y]

    • 查看员工工资在700 到 1500之间的员工id,和名字

      select id,last_name from s_emp where salary between 700 and 1500;
      
    • IN(list)

      在一个列表中筛选

    • 查看员工号1,3,5,7,9员工的工资

      select id,last_name,salary from s_emp where id in(1,3,5,79); 
      /* 括号里面的数据or关系 不一定非要存在,也可以不存在*/
      
    • 查看名字为Ngao或者Smith的员工信息

      select *  from s_emp where last_name in ('Ngao','Smith');
      
    • LIKE

    即值不是精确的值的时候使用

    通配符,即可以代替任何内容的符号
    % :通配0到多个字符
    _ : 当且仅当通配一个字符
    转义字符:
    默认为,可以指定 指定的时候用escape 符号指明即可,转义字符只能转义后面的一个字符

    • 查看员工名字以C字母开头的员工的id,工资

      select id,salary,last_name from s_emp where last_name like 'C%';
      
    • 查看员工名字长度不小于5,且第四个字母为n的员工id和工资

      select id,salary,last_name from s_emp where last_name like '___n_%';
      
    • 查看员工名字中包换一个_的员工id和工资

      select id,salary,last_name from s_emp where last_name like '%\_%' escape '\';
      
    • Is nul

      对null值操作特定义的操作符,不能使用=

    • 查看员工提成(commission_pct)为空的员工的id和名字

      select id,salary,last_name from s_emp where commission_pct is null;
      
  • 逻辑操作符

    and:且逻辑
    or: 或逻辑
    注意:and优先级比or优先级要高

    • 查看员工部门id为41且职位名称为Stock Clerk(存库管理员)的员工id和名字

      select id,last_name from s_emp where dept_id = 1 and title = 'Stock Clerk';
      
    • 查看(员工部门为41) 或者 (44号部门 且工资大于1000的)员工信息

      select * from s_emp where (dept_id = 41)  or (dept_id or salary > 1000);
      
    • 查看(员工部门为41或44) 且(工资大于1000的)员工信息

      select * from s_emp where dept_id in(41,42)  and salary > 1000;
      

    not:非逻辑
    NOT BETWEEN AND
    NOT IN
    NOT LIKE
    IS NOT NULL

    • 查看员工提成不为空的员工信息
    select * from s_emp where commission_pct is not null;
    
    • 查看员工名字不是以C字母开头的员工信息

      select * from s_emp where last_name not like 'C%';
      
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值