首页 数据库基本知识笔记02

数据库基本知识笔记02

举报
开通vip

数据库基本知识笔记02数据库基本知识笔记02 select first_name,salary,manager_id from s_emp where first_name='Carmen'; 1.sql语句不区分大小写 但字符串的值区分大小写 2.字符串都是用单引号引起来 用等号判断相等 比较运算符 1.逻辑比较运算符 = > = <= 2.oracle 提供的比较运算符 between and 表达是个闭区间 [1000,2000] 找出工资大于等于1000 小于等于2500的first_name selec...

数据库基本知识笔记02
数据库基本知识笔记02 select first_name,salary,manager_id from s_emp where first_name='Carmen'; 1.sql语句不区分大小写 但字符串的值区分大小写 2.字符串都是用单引号引起来 用等号判断相等 比较运算符 1.逻辑比较运算符 = > < >= <= 2.oracle 提供的比较运算符 between and 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达是个闭区间 [1000,2000] 找出工资大于等于1000 小于等于2500的first_name select first_name ,salary from s_emp where salary between 1000 and 2500; select first_name ,salary from s_emp where 1000<=salary<=2500 ;//error in (list) dept_id in (10,31,42,51) select dept_id,first_name from s_emp where dept_id in(10,31,42,51); //list中的顺序 对查询结果没有影响 但可能会影响效率 把出现概率高的放前面 like -----模糊查询first_name like '%a_%' % 0-n个任意字符 _ 1个任意字符 上面的两个字符叫统配符 王三 王五 找出名中带a的first_name select first_name from s_emp where first_name like '%a%'; 找出名中第二个字母是a的first_name select first_name from s_emp where first_name like '_a%'; 找出名中第二个字母是A的first_name select first_name from s_emp where first_name like '_A%'; //如果名字中带了_怎么办 user_tables ------包含了所有表的信息 ------数据字典表 table_name 172.18.9.6 select table_name from user_tables; select table_name from user_tables where table_name like '%\_%' escape '\'; //escape '\' 代表把'\'后面的字符转义 注意:在数据字典表中所有数据的值都大写 select table_name from user_tables where table_name like 's\_EMP' escape '\'; select table_name from user_tables where table_name like '%\%%' escape '\'; is NULL 找出提成是空first_name select first_name ,COMMISSION_PCT from s_emp where COMMISSION_PCT is NULL; 逻辑条件连接符 and or not select first_name ,salary from s_emp where salary >=1000 and salary<=2500; select dept_id,first_name from s_emp where dept_id=10 or dept_id=31; 表达非 = != <> ^= > <= < >= between and not between and is NULL is not NULL in not in//不准确(NULL) like not like 找出不在42部门的员工in not in select first_name from s_emp where dept_id not in (42,NULL); in:只要里面有一个相等 not in:和里面的任何一个都不相等的话才被选择 所以必须注意空值的问题 C order by 排序 从小到大 升序 正序 自然顺序 字典顺序 把first_name ,salary 按工资的升序排 select first_name,salary from s_emp order by salary asc; 注意:如果是升序(默认) 从大到小 降序 反序 反自然顺序 select first_name,salary from s_emp order by salary desc; 无论升序还是降序 NULL都作为最大值处理 如果排序字段的值相等 排列是随机的 把first_name ,salary 按first_name的升序排列 select first_name,salary from s_emp order by first_name; 把first_name ,salary 按first_name的降序排列 select first_name,salary from s_emp order by first_name desc; 注意: 'aa' 'aaa' 前面相同 后面有字符比没有字符大 先按first_name 升序排序 如果名字相同 再按工资降序 select first_name,salary from s_emp order by first_name,salary desc; //很少用的情况 select first_name,salary from s_emp order by 1; D.single fun 单行函数 处理每一条 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 得到一个结果 select lower(first_name) from s_emp; 组函数 处理一组记录 得到一个结果 select count(first_name) from s_emp; 函数的作用: 1.对显示的列进行计算 2.修改非法数据 3.对一组数据进行统一操作 4.按格式显示数据 5.修改一些列的类型 函数分类: 1.字符串处理 lower 小写 upper 大写 initcap 每个单词的首字母大写 为了测试单行函数 dual ----单行单列的表 测试表 select initcap('one world one dream') from dual; select upper('one world one dream') from dual; select first_name||last_name from s_emp; select concat(first_name ,last_name) from s_emp; substr(data,p1,p2) data:要处理的字符串也可以是字段名 p1:代表截取的起始位置 从1开始编号 p2:代表截取的长度 select substr('hello',1,2) from dual; //如果想从后向前处理字符串 则可以 用负数从后向前编号 从-1开始 select substr('hello',-2,2) from dual; select length('hello') from dual; //carmen select first_name from s_emp where lower(first_name)='carmen'; 注意:where后所有的函数 慎用 可能会降低效率 2.数字处理 round(par1,par2) 四舍五入 par1:要处理的数据 par2:默认是0 代表小数点后的位数 如果是负数就代表小数点前 trunc(par1,par2) 截取 par1:要处理的数据 par2:默认是0 代表小数点后的位数 如果是负数就代表小数点前 3.日期处理 4.格式转换的 to_char(要处理的数据,'fmt') 003,112,346.899,123 L ------本地货币符号(, RMB) $ ------美元符号 , ------国际货币计数分隔符 . ------小数点 9 ------代表任意数字 0 ------强制显 fm ------格式开始 select to_char(13456.68989, 'fmL099,999.999999') from dual; 注意:0占用了9的位置 如果想显示中文的货币符号 需要改变一个环境变量NLS_LANG 转成bash NLS_LANG='SIMPLIFIED CHINESE_CHINA.ZHS16GBK' CHINESE 中文 CHINA 中国地区 ZHS16GBK 编码 如果后面没有格式 则证明 把前面的数据类型转成字符串 to_number select first_name from s_emp where id='11'; select first_name from s_emp where id=to_number('11'); 注意: 如果查询中有数字类型 则会自动向数字类型转换 不用to_number 函数嵌套: select lower(substr(first_name,1,3)) from s_emp; 找出谁是老板 把老板的manager_id 显示成 'boss' select first_name,manager_id from s_emp where manager_id is null; select first_name, nvl(to_char(manager_id),'boss') from s_emp where manager_id is null; 显示每个人的后2个字母 并大写显示 E.muti table select 数据分布在不同表中 s_emp -----员工表 dept_id----部门号 老板需要一张 每个员工在那个部门 select first_name,dept_id from s_emp; 部门相关的信息 -------s_dept----部门表 Name ---------- ID -------部门编号 NAME -------部门名称 REGION_ID -------地区编号 s_region Name ----------- ID -------地区编号 NAME -------地区名 笛卡尔积 拿着一张中所有记录和另一张表中所有的记录 依次匹配得到的一个大集合 select first_name,name from s_emp,s_dept where dept_id=s_dept.id; 注:如果表中的字段重名 则可以用加表名的方式解决 1.把脚本拷贝到一个位置 2.上传到服务器 3.运行脚本 @文件路径/文件名 4.提交 commit; //查询每个部门id,名称对应的地区名称 select s_dept.id,s_dept.name,s_region.name from s_dept,s_region where region_id=s_region.id; //把叫name 的列显示成20个字符 col name for a20 //显示每个员工 的名字以及 所在的部门名和部门所在的地区名 select first_name,s_dept.name,s_region.name from s_emp ,s_dept ,s_region where s_emp.dept_id=s_dept.id and s_dept.region_id=s_region.id; //选择下面 s_emp s_dept s_region select e.first_name,d.name,r.name from s_emp e,s_dept d,s_region r where e.dept_id=d.id and d.region_id=r.id; 1.平时写sql 可以先写from 并且需要的话可以起别名 2.再写where 的连接条件 3.再写select 别名可以区分不同表中重复的列 //先做笛卡尔积还是先做where条件? 答案:先做where条件 把不符合的数据过滤掉 连接: 内连接:被选择的记录 等值连接:连接条件使用等号的 上面连接的例子都是等值连接 非等值连接:连接条件不是用等号的 把每个员工的first_name 和salary select first_name,salary from s_emp; 把每个员工的first_name 和salary 以及对应的工资级别列出 salgrade Name ------- GRADE ------工资级别 LOSAL ------低工资开始 HISAL ------高工资结束 select first_name,salary,grade from s_emp,salgrade where salary>=losal and salary<=hisal; select first_name,salary,grade from s_emp,salgrade where salary between losal and hisal; 自连接: 数据就在一张表 查询那些人是领导, 如果一个人的id 等于另一个人的manager_id id manager_id 1 2 1 3 2 4 2 5 1 select id,manager_id from s_emp order by id; select id,manager_id,first_name from s_emp where id=manager_id; //error select distinct m.first_name, m.id,m.manager_id from s_emp e,s_emp m where e.manager_id=m.id; //把表用别名拆成两张完全相同的表 但表的地位不同 e 员工表 m 领导表 外连接:结果集=内连接的结果集+匹配不上的 一个也不能少 找出那些人是普通员工, select distinct m.first_name, m.id,m.manager_id from s_emp e,s_emp m where e.manager_id!=m.id;//25 select distinct m.first_name, m.id,m.manager_id from s_emp e,s_emp m where e.manager_id(+)=m.id; select distinct m.first_name, m.id,m.manager_id from s_emp e,s_emp m where e.manager_id(+)=m.id and e.manager_id is NULL; (+)含义是:+号对面的那张表的数据全部被匹配出来 s_emp salary 2500 1 Caremn 4 2 3 5 显示所有的工资级别 和级别对应的 员工的salary和first_name salgrade s_emp select grade,first_name,salary from s_emp,salgrade where salary(+) between losal and hisal; //老板给自己加薪10000 update s_emp set salary=salary+10000 where id=1; //显示所有人的工资和工资级别 如果没有对应的工资级别则空着 1.先写内连接 2.考虑加号位置 select first_name,salary,grade from s_emp,salgrade where salary between losal(+) and hisal(+); //上面外连接只针对oracle //sql99中 规定 关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定 了外连接 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 的写法 左外连接 left outer join select first_name,salary,grade from s_emp,salgrade where salary between losal(+) and hisal(+); select first_name,salary,grade from s_emp left outer join salgrade on salary between losal and hisal; //如果谁发起连 右外连接 right outer join select first_name,salary,grade from salgrade right outer join s_emp on salary between losal and hisal; 全外连接 full outer join =左外连接+右外连接 重复排掉 //把谁是普通员工的问题 用sql99的标准实现 F.group function G.sub select
本文档为【数据库基本知识笔记02】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_358746
暂无简介~
格式:doc
大小:35KB
软件:Word
页数:15
分类:互联网
上传时间:2017-09-30
浏览量:24