Oracle的数据基本查询语句简介
第四代编程语⾔: sql语⾔ ⾮常接近⾃然语⾔
第⼀代编程语⾔ :⼆进制语⾔ 打孔机
第⼆代编程语⾔:汇编语⾔ 代替了⼆进制指令
第三代编程语⾔:⾼级语⾔ 前期:c语⾔ 后期c++ java
sql语⾔分类
DQL(Data Query Language)
数据查询语⾔ 主要语句有 lect 操作频繁
DML(Data MAnipulation Language)
数据操作语⾔ 改变数据库中的数据 inrt delect update3条语句
DDL(Data Define Language)
数据定义语⾔ ⽤来定义 修改 删除数据库对象
必须和必需的区别
TCL(Transaction control Language )
事务控制语⾔ ⽤于维护事务的⼀致性 commit rollback savepoint 3条语句
DCL(Data control Language)
⽤于执⾏权限授予和权限收回操作 grant,revoke
基本查询
查询某张表所有或者指定的数据内容
语法:
lect*from表名;
lect字段名1,字段名2...from表名;
; 代表sql语句的结束
* 代表查询所有,不建议使⽤ * 效率太低
字段名1表⽰查询指定的列中数据
查看s_emp表中的id和last_name数据
《马关条约》lect id,last_name from s_emp;
lect ID,last_name from s_emp;
⼤⼩写不敏感
查询s_emp表中的所有数据
lect * from s_emp;
plsql devloper
我们可以使⽤plsql devloper 客户端去连接oralce服务器
数据明显⽐先前的好看多了。
列值计算
语法
lect字段名运算符数值from表名
运算符 : +,-,*,/
查询员⼯的名字和年薪
lect last_name,salary *12from s_emp;
查看每个员⼯的员⼯id,名字和⽉薪涨100以后的年薪
lect last_name,salary +100*12from s_emp;
上⾯的案例会先算 乘法再算加法,如果想要改变运算的优先级,可以通过()去改变lect last_name,(salary +100)*12from s_emp;
注意事项:
查询永远都不会改变表中数据值
乘除的优先级⾼于加减
优先级相同时,按照从左到右运算
可以使⽤括号改变优先级
列别名
查询员⼯名和年薪
lect last_name,salary *13from s_emp;
发现这个列的名字已经改变,同时这个列名有时候也不符合我们的需求,所以我们可以给列起别名
语法:
lect字段名[as]别名from表名;
as 可以省略不要
别名 别名可以⽤双引号包裹起来,以便包含特殊字符,只有此处会⽤双引号,其他的地⽅都是单引号查看员⼯的员⼯id,名字和年薪,年薪列名为annual
lect id,last_name,salary *13as annual from s_emp;
lect id,last_name,salary * 13 as “annual” from s_emp;
/* sql 是不区分⼤⼩写,但是如果双引号包裹起来,⾥⾯的别名写了什么就是什么,区分⼤⼩写 */
## 拼接列
> 把多个列的数据拼接成⼀个列
- 语法
lect 字段1 || 字段2 from 表名;
- 查看员⼯的员⼯id,全名
```sql
lect id,last_name ||frist_name from s_emp;
节气谚语
lect id,last_name || '.' ||frist_name from s_emp;
/
* 单引号,拼接字符串 */
查看员⼯的员⼯id,全名和职位名称,全名和职位名称合并成⼀列显⽰,且格式为:姓名:xxx-xx,职位:xxx
基本轨
lect id,'姓名: '|| last_name ||'-'|| first_name ||', 职位: '|| title info
from s_emp;
去重
将重复的数据去除掉
语法:
lect distinct字段1,字段2from表名;
查询公司⾥⾯的已有职位名称
lect distinct title from s_emp;
注意事项:
distinct关键词只能放在lect关键词后⾯,下⾯的语句就是报错了
lect id,distinct title from s_emp;
如果是多列去重,如下test表:
Id Id2
12
13
24
34
34 lect distinct id,id2 from test;
两列的值共同⽐较,如果两列的值完全⼀样则去掉,同理,三列,四列也是⼀样的。
查询结果如下:
Id Id2
12
13
24
34
查看所有员⼯的职位名称和部门id,同职位同部门的只显⽰⼀次
lect distinct dept_id,title from s_emp;
排序
把查询出来的数据,进⾏排序展⽰。
注意: 是先查询出来以后才能排序展⽰。同时排序不改变表⾥⾯的数据
语法:
lect col_name,...
from tb_name
order by col_name [asc|desc],...
排序使⽤order by字句,asc升序,desc降序 默认升序
该⼦句只对查询记录显⽰调整,并不改变查询结果,所以执⾏权最低,即最后执⾏
该⼦句只对查询记录显⽰调整,并不改变查询结果,所以执⾏权最低,即最后执⾏查询员⼯的⼯资和last_name,对⼯资进⾏升序排列
lect salary,last_name
歌手郭美美
from s_emp
order by salary asc;
多列排序
interviews
如果有多个列排序,后⾯的列排序的前提是前⾯的列排好序以后有重复(相同)的值
例如(test)表
十大品牌拉杆箱
Id Id2
12
23
34
41
42 lect id,id2 from test order by id,id2 desc;
结果:
Id Id2
12
23
34
42
41查看员⼯的id,名字和薪资,按照薪资的升序排序显⽰,如果薪资相同则按照id降序排列。
lect id,last_name,salary炒股四季歌
from s_emp
order by salary,id desc;
order by 后⾯还可以跟数字,表⽰使⽤lect后⾯的第⼏个列进⾏排序
使⽤last_name列进⾏排序
lect last_name,salary from s_emp order by1;
使⽤salary列进⾏排序
lect last_name,salary from s_emp order by2desc;
null值排序规则
升序排列,默认情况下,null值排后⾯
降序排序,默认情况下,null值排前⾯
限制查询