数据库基础 01
来源:互联网 发布:网络十大热词 英文 编辑:程序博客网 时间:2024/06/16 09:10
###select语句
字符串 '' 字符串的拼接||
特殊:
1. 查询s_emp表格中的姓和名 ,要求在姓名中间 添加一个英文单引号
select last_name||'''||first_name from s_emp;
在字符串中表达英文单引号 , 需要使用4个单引号
select last_name||''''||first_name from s_emp;
2. null值的处理 , 在Oracle中 null值经过运算后永远是null , 对于null值的运算, 一定要尽早处理
nvl(par1,par2) : 判断参数1是否为null , 为null则返回参数2,不为null则返回参数1
nvl(提成,0);
查询员工的月薪 和 提成
select salary,commission_pct from s_emp;
计算年薪: 月薪*12 + 月薪*提成/100*12
select salary ,commission_pct,salary*12+salary*12*commission_pct/100 from s_emp;
上面的语句 查询时出现了问题 , 改良后:
select salary ,commission_pct,salary*12+salary*12*nvl(commission_pct,0)/100 from s_emp;
3. distinct 数据排重关键字
查询月薪
select distinct salary from s_emp;
排重多个字段
查询月薪 与 领导编号
#多字段排重: 必须多字段完全重复时, 才进行排重操作
select distinct salary,manager_id from s_emp;
###where子句
对于查询进行条件的添加 , 对于结果进行过滤 , 匹配规则的将被查询到, 而不匹配规则的结果 将被舍弃!
格式: select 查询的列 from 查询的表名 where 查询的条件!
常用的比较运算符 : = ,!= ,> ,< ,>= ,<=
举例:
查询员工的id :
select id from s_emp;
加上条件 查询员工的id , 要求员工的id必须是5
//进行等于判断时 , 跟java不同, java是双等, oracle是一个等号
select id from s_emp where id=5;
1. 特殊的极限条件: 永真条件与永假条件
永真条件:
select id from s_emp where 1=1;
永假条件:
select id from s_emp where 1=100;
select id from s_emp where 1!=1;
2. number类型的条件
1. 查询所有员工的last_name 与 id , 要求查询的条件为id大于5 !
select last_name , id from s_emp where id>5;
2. 查询所有员工的last_name 与 id , 要求查询的条件为 manager_id为1
select last_name , id from s_emp where manager_id=1;
3. 查询所有的员工的salary 与 id , 要求查询的条件为 salary小于等于1450
select salary,id from s_emp where salary<=1450;
3. 字符串类型的条件
- 在oracle中书写字符串时 需要添加单引号 ! '字符串'
- 在oracle中字符串参与比较时 , 大小写敏感
查询员工的id 与salary , 条件是 last_name是Chang
select id,salary from s_emp where last_name='Chang';
4. SQL所提供的一些 关键字 运算符
##
between 表示一个闭区间
使用方式: ... where 字段 between 初始范围 and 最大范围!
查询员工的last_name 与工资, 条件为工资在1000 到 1450之间的员工 !
select last_name ,salary from s_emp where salary between 1100 and 1450;
##
in (取值1,取值2,取值3)
使用方式: ...where 字段 in(取值1,取值2,取值3);
条件匹配取值列表中任意一个, 就会被查询到
查询员工的last_name 与 id 条件为id为 1或2 或3 或4的员工
select last_name , id from s_emp where id in(1,2,3,4);
##
对于null值的判断
查询所有的manager_id等于1的用户
select id from s_emp where manager_id=1;
查询所有的manager_id不等于1的用户
select id from s_emp where manager_id!=1;
查询所有员工的id last_name manager_id
select id,last_name,manager_id from s_emp;
通过上面的案例 发现 , 使用其他数据类型的条件 对null值无效 !
需要使用 is null 来判断null值
... where 字段 is null;
获取所有员工的last_name , 条件为manager_id为null
select last_name , id from s_emp where manager_id is null;
##
模糊查询
1. 龙龙
2. 龙龙漏气版
3. 龙龙钛合金版
4. 龙龙会旋转版
5. 龙龙免充气版
6. 龙龙电动马达
模糊查询
like
使用方式: ... where 字段名 like '模糊查询的文本';
两个通配符 :
1. _ : 表示一个任意字符
2. % : 代表0-n个任意字符
查询以龙开头的文本:
... where 字段 like '龙%';
查询里面包含气的文本
... where 字段 like '%气%';
查询倒数第二个字符为'转'的文本
... where 字段 like '%转_';
查询第二个字符为'龙'的文本
... where 字段 like '_龙%';
练习:
- 查询s_emp表格中 last_name中包含a的员工! 查询他的last_name与id信息 !
select last_name,id from s_emp where last_name like '%a%';
-查询s_emp表格中 last_name中开头为N的员工! 查询他的last_name与id信息 !
select last_name,id from s_emp where last_name like 'N%';
-查询s_emp表格中 last_name中第二个字符为e的员工! 查询他的last_name与id信息 !
select last_name,id from s_emp where last_name like '_e%';
-查询s_emp表格中 last_name中倒数第二个字符为a的员工! 查询他的last_name与id信息 !
select last_name,id from s_emp where last_name like '%a_';
特殊的疑问:
我要模糊查询的文本中包含_文本 ,怎么办 !
user_tables : 描述了当前登录数据库的用户的 所有表格
: table_name : 所有的表的名称
查询user_tables表格中的所有的table_name列的值 , 条件为 ,table_name列的值是s_开头的
select table_name from user_tables where table_name like 'S_%';
escape 描述转义字符
select table_name from user_tables where table_name like 'S\_%' escape '\';
5. 逻辑条件连接符
与 and
- 查询员工id为2 , 领导编号为1的员工的 id , last_name
select id,last_name from s_emp where id=2 and manager_id=1;
或 or
- 查询员工的id为2 或者 员工id为3的员工的id,last_name
select id,last_name from s_emp where id=2 or id=3;
非 not
闭区间的应用:
原来的方式:取闭区间范围内的数据 between 小 and 大
取不属于闭区间范围内的数据 not between 小 and 大 ;
获取员工的id和salary , 条件为 月薪的范围 小于1000或大于1450
select id,salary from s_emp where salary not between 1000 and 1450;
in的应用
where 字段名称 in(取值1,取值2,取值3...);
取出不匹配取值列表的数据
where 字段名称 not in(取值1,取值2,取值3...);
获取员工id 不为 1 , 2, 3, 4的员工的last_name , id
select last_name,id from s_emp where id not in (1,2,3,4);
is null的应用
where 字段名称 is null ; 取出指定列为空的 数据行
where 字段名称 is not null ; 取出指定列不为null的 数据行
获取员工的manager_id 不为null的员工
select id,last_name,manager_id from s_emp where manager_id is not null;
条件的优先级
获取员工的 id , last_name ,salary ,条件是员工工资小于1450,并且部门的id为31或者为42
select id,last_name,salary
from s_emp
where salary<1000 and (dept_id=31 or dept_id=42);
##排序 order by 子句
order by 子句 只能放在 select语句的最后面
对于查询的结果 ,按照指定的排序规则 进行排序 , 升序 (asc默认), 降序(desc)
在查询时 , 我们查询的字段会有很多个 , 所以要指定排序的字段
格式: order by 排序字段 排序方式
查询所有用户的id
select id from s_emp;
select id , dept_id from s_emp;
按照部门编号 进行排序 , 升序 (自然排序 , 字典排序)
select id,dept_id from s_emp order by dept_id asc;
按照id 进行排序 ,降序
select id,last_name from s_emp order by id desc;
null值的排序 , null是最大的
select id, manager_id from s_emp order by manager_id desc;
##
多字段排序
格式:
order by 排序字段1 排序规则1,排序字段2 排序规则2
按照部门id 降序排列 , 如果部门id相同, 则按照id降序排列
select id,dept_id from s_emp order by dept_id desc,id desc;
#单行函数
2017/7/19 15:17:21
----
Oracle中 函数的分类 :
单行函数 : 返回的结果 针对每一行数据 会计算出一个结果
单行函数案例: select upper(last_name) from s_emp;
组函数 : 返回的结果 无论结果为多少数据, 都只返回一个结果
组函数要求: 返回的列的结果 要一一对应
组函数案例: select count(last_name),id from s_emp;(错误案例)
select count(manager_id) from s_emp;
count(manager_id) id
-------------------------------------
25 1
25 2
###常用的单行函数:
dual 表用来测试单行函数
#####字符串的操作
把字符串 变大写
select upper('abcde') from dual;
把字符串 变小写
select lower('AAABBBCCC') from dual;
单词首字母大写
initcap
select initcap('hello longlong') from dual;
获取字符串的长度
length
select length('1234567890') from dual;
截取字符串
substr(par1,par1,par3);
参数1. 要被截取原字符串
参数2. 截取的开始下标 从1开始 , 可以输入负数
参数3. 截取的长度
select substr('1234567890',1,5) from dual; \
得到的结果完全一致
select substr('1234567890',0,5) from dual; /
开始下标 指定负数
select substr('1234567890',-3,3) from dual;
拼接字符串
concat
select concat('baolin','sb') from dual;
nvl函数
判断参数1 是否为null , 如果为null则返回参数2 , 如果不为null则返回参数1
替换字符串
replace(par1,par2,par3);
参数1. 原字符串
参数2. 在参数1中存在的, 要被替换的字符串片段
参数3. 替换的新的字符串片段
select replace('1234561237890123','123','abc') from dual;
#####number类型的操作
round 四舍五入
参数1. 要四舍五入的数字
参数2. 保留的小数点后的位数 , 可以省略不写, 默认为0 (默认取整)
select round(15.55555) from dual;
select round(15.55555,3) from dual;
trunc 截取数字
参数1. 要截取的数字
参数2. 要保留的小数点后的位数,可以省略不写, 默认为0 (默认取整)
select trunc(15.55555) from dual;
select trunc(15.55555,3) from dual;
yyyy-MM-dd HH:mm:ss:sss
格式化显示函数
¥025,000.00
FM$999
to_char();
1. 要被格式化的数字
2. 格式化的模版
FM: format 格式的开头 可以省略
L : 本地货币单位, Oracle语言环境
$ : 美元符号
9 : 两种情况:
1. 出现在小数点的前面: 表示0-9的任意数字
2. 出现在小数点的后面: 表示1-9的任意数字
0 : 两种情况:
1. 出现在小数点的前面: 表示强制显示前导零
2. 出现在小数点的后面: 表示0-9的任意数字
, : , 分隔符
. : . 小数点
FML099,999.99
查询s_emp表格中的 所有员工的月薪, 并将其进行格式化, 格式:FML099,999.99
select to_char(salary,'FML099,999.99'),id from s_emp;
//建议在小数点的后面描述数字时 , 使用0
select to_char(salary,'FML099,999.00'),id from s_emp;
###函数的嵌套
把一个函数返回的结果, 当作另一个函数 所需要的参数
1. 把s_emp表格中的所有的last_name的后三位更改为大写字母 显示出来
select upper(substr(last_name,-3,3)) from s_emp;
select upper(substr(last_name,length(last_name)-3,3)) from s_emp;
<br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<div id="content_table"><br>
###s_emp表格的结构 名称 是否为空? 类型<br>
----------------------------------------- -------- ----------------------------<br>
ID 员工编号 NOT NULL NUMBER(7)<br>
LAST_NAME 姓 NOT NULL VARCHAR2(25)<br>
FIRST_NAME 名 VARCHAR2(25)<br>
USERID 用户编号 VARCHAR2(8)<br>
START_DATE 入职日期 DATE<br>
COMMENTS 备注 VARCHAR2(255)<br>
MANAGER_ID 领导的员工编号 NUMBER(7)<br>
TITLE 职位 VARCHAR2(25)<br>
DEPT_ID 部门编号 NUMBER(7)<br>
SALARY 月薪 NUMBER(11,2)<br>
COMMISSION_PCT 提成 NUMBER(4,2)<br>
</div>
阅读全文
0 0
- 01-Access数据库基础
- 数据库基础 01
- Android 数据库基础 01
- 数据库基础
- 数据库基础
- 数据库基础
- 数据库基础
- 数据库基础
- 数据库基础
- 数据库基础
- 数据库基础
- 数据库基础
- 数据库基础
- 数据库基础
- 数据库基础
- 数据库基础
- 数据库基础
- 数据库基础
- 【iOS】Class对构造简洁代码很有帮助
- 第三章运算符、表达式和语句
- 有人问我:程序员要供祖师爷的话该供谁?
- 区块链?人工智能?2018 年你应该了解的十大技术趋势
- 2017年11月编程语言排行榜:Java持续下滑仍稳居第1,Python逆袭C#上升到第4
- 数据库基础 01
- React安装 环境搭建
- Js闭包
- String-StringBuffer与StringBuilder之间区别
- Go语言学习笔记之变量与常量
- 「知数堂」双11活动总结
- flask 初始化
- 第6章 面向对象程序设计
- sdut 3363 驴友计划