技术标签: oracle查询表字段横向排序
查询原则:列看成变量,where后面看成表达式
1、常用函数:
max求最大,select max(shop_price) from goods;
min求最小
sum求总和,select sum(goods_number) from goods;
avg求平均
count求行总数,select count(*) from goods;如果*用某一个字段,当字段为null时不计入总数,*数绝对行数
substr 截取字符串,注意从1开始而不是0 select * from goods where SUBSTR(`goods_number`,5) = 9;
SUBSTRING(id,1,6) 截取字符串,返回从第1个字符开始,取六个字符
SUBSTRING_INDEX(id,'-',2) 截取字符串,返回从字符串中第二个‘-’前面的所有字符
//给所有用户加余额的10分之1作为积分
UPDATE `users` SET jifen= jifen + CAST(money/10 AS DEC(14,2)) WHERE 1
2、查询5种字句
where/group by/having/order by/limit顺序不能乱
where 对表中的数据起作用
group by 以某种分类分组显示
having 对查询结果进行筛选,此时where已经发挥完作用得到了结果,对结果筛选只能用having
order by 排序,desc 倒序 asc 正序--既小的在前 一个字段没法排的,按第二个字段排,逗号隔开
limit 两个参数,偏移量,条数 limit 5 10从第6条开始取10条
select a, (b-c) as d from goods where 1 having d > 200;
select cat_id,sum(goods_number) from goods group by cat_id; //分别查询所有栏目下的商品总数, 表根据不同的cat_id分别求和并列出来,cat_id相同的相加
select shop_price from goods where cat_id = 4 order by cat_id asc, goods_time desc limit 5 10;
3、子查询
from型子查询:内层sql的查询结果,当成一张临时表,供外层sql再次查询
select * from (select goods_id from goods order by cat_id asc,goods_id desc)
as tmp
group by cat_id
where型子查询
where 列 = (内层sql),则内层sql返回的必是一个值,既只有一列的一行
where 列 in (内层sql),则内层sql只返回单列,可以多行
select max(goods_id) from goods;
select goods_id,goods_name from goods where goods_id = 33;
合并
select goods_id,goods_name from goods where goods_id = (select max(goods_id) from goods);
select goods_name from goods
where goods_id in (select max(goods_id) from goods group by cat_id)
existe 型子查询,效率较高
是指把外层sql的结果,拿到内层sql去测试
如果内层sql成立,则该行取出,一行一行判断
如取出有商品的栏目
select cat_id,cat_name from category
where exists (select * from goods where goods.cat_id = category.cat_id);
4、多表联合查询
表与集合的关系:
每张表是一个集合,每一行是一个元素
表A —> 集合A 3行
表B —> 集合B2行
A*B 3*2=6行
select * from A,B;
两表相乘,where筛选,占内存很多,效率很低
select * from A,B where A.id = B.id;
左连接,表A取全部值,B中没有满足A.id = B.id条件的行则补空值,有取相应值,有多条满足则也取出多条
select * from
A left join B on A.id = B.id
右连接,左右连接是可以互换的,尽量用左连接
A left join B 等价于 B right join A
内连接,如果从集合的角度,内连接是左右连接的交集
即表A,B的行必须满足A.id=B.id才取出,不会补空值
union:合并2条或多条语句的结果,默认去重复,不去重复使用union all
语法:
sql union sql2
sql1和sql2查出来的内容可以源自两个表,列明不一致以sql1为准,只要结果集的列数一致就可以
union后的结果集也可以排序
sql1 union sql2 order by 字段
5、视图
视图:视图就是表的影子,会随着表的改变而改变,用于查询,改变一般没有意义(语法一般也通不过,不能更改),如果想修改,视图数据和表的数据要一一对应,能够相互推出,最好不用
使用视图作用:
1、可以简化查询
2、更精细的权限控制,比如两个网站合作,A网站不想给B看密码字段,其它字段开放,就可以创建视图,然后开放视图的权限给对方。再比如小说站,article表,1亿条数据,于是拆分成article1、article2、article3表,查询小说时不知道在哪张表,用视图合并查询即可
创建视图
creat view 视图名
as
select 语句
例如:creat view starts as select * from A
创建视图完成后数据库会多出一张starts表,跟正常表一样查询
正常表存储都是三个文件 frm 表结构/MYD 数据/MYI 索引 视图只有frm结构文件,表示了映射关系,没有其它两个文件
删除 drop view A
下面是不建立临时表的视图,拿不准时用不用临时表可使用algorithn = undefind,效果上与建立临时表的普通视图一模一样
algorithn = marge 合并
temptable 临时表
undefind 未定义
creat algorithn = merge view v2
as
select * from goods whew shop_price >300;
6、事务
有的引擎支持(InnoDB),有的不支持(myisam),支持不支持存储数据上没什么区别
转账:张三给李四转500块钱
张三-500
李四+500
在逻辑上,这个操作要么都成功,要么都不成功
开启事务 start transaction
update a2 set money = money + 1000 where name = ‘zhangsan’;
update a2 set money = money - 1000 where name = ‘lisi’;
commit 提交事务
开启事务,体现事务原子特性
start transaction;
update a2 set money = money + 500 where name = ‘zhangsan’;
#故意打错表名,模拟网络故障失败
update a2 set moneyyyy = money - 500 where name = ‘lisi’;
#扣李四500失败
#部分失败,之前成功步骤的回滚,在全部成功之前,之前成功的影响也被隐藏
rollback;
事务一旦完成,无法撤销。
7、触发器
待续
8、小技巧
select * from A where 1=1; //用1=1主要是多条件查询时,拼接SQL查询字符串的时候较为方便
select (b-c) as d from goods where 1; //查询b字段与c字段的差,并把差命名为d字段(又叫广义投影)
insert into result values (‘hello’,’world'); //一般插入语法
insert into a.goods select id from b.goods; //把数据库b的goods表的id复制到a数据库里的goods表中
update main set num=floor(num/10)*10 where unm>=20 and num <=39;
//把main表中在20-29之间的数改成20,30-39之间的数改成30,num/10取整,再乘以10
null最好不用用’’或0代替,比较时只能用 is null或者is not null,不易处理,效率较低
9、例子
1、查询根据天分组,每天的条数
SELECT COUNT(*) count_num,a.*//查询每天的条数
FROM
(
SELECT *
FROM dl_match
WHERE 1=1
ORDER BY begin_time ASC
) a
GROUP BY DATE(begin_time)//DATE(begin_time)按天分组
2、根据人分组,查询出每个人的总花费,不存在花费的用0代替null
SELECT a.*,c.divide,IF(sumcoin IS NULL, '0', sumcoin) AS sumcoin
FROM `dl_users` a
LEFT JOIN
(
SELECT SUM(coin) AS sumcoin,touid FROM dl_coindetail GROUP BY touid
) AS b ON a.id = b.touid
INNER JOIN `dl_emceelevel` c ON a.levelnumber = c.levelid
WHERE is_host = 1 AND user_status<>0
ORDER BY sumcoin DESC;
3、查询一分钟内的记录
SELECT `detail` FROM `a` WHERE `type` = 2 AND `add_time` > DATE_SUB(NOW(),INTERVAL 1 MINUTE) ORDER BY id DESC LIMIT 1
3、查询6秒内的记录
SELECT `detail` FROM `a` WHERE `type` = 2 AND `add_time` > date_sub(now(),interval 6 second) ORDER BY id
10、修改表名,字段名
修改表名
RENAME TABLE `dl_video_tag_relationships` TO `dl_tag_term_relationships`;
RENAME TABLE `dl_video_tags` TO `dl_tag_terms`;
修改字段名
ALTER TABLE `dl_tag_terms` CHANGE `tag_id` `term_id` BIGINT;
ALTER TABLE `dl_tag_term_relationships` CHANGE `tag_id` `term_id` BIGINT;
11、替换表中某个字段的部分字符串
UPDATE `dl_posts` SET post_title = REPLACE(post_title,'酵母','天空');
12、把某一行记录内容与id结合更新到该记录
UPDATE `dl_users` SET user_nicename = CONCAT(user_nicename,id)
13、查询昨天的记录
SELECT * FROM `record` WHERE DATEDIFF(CURDATE(),DATE(a.add_time))=1
文章浏览阅读745次,点赞12次,收藏21次。通过以上更具体的步骤和考虑因素,_rag最佳实践
文章浏览阅读3.1k次。python保存文本文件的方法:使用python内置的open()类可以打开文本文件,向文件里面写入数据可以用write()函数,写完之后,使用close()函数就可以关闭并保存文本文件了示例代码如下:执行结果如下:内容扩展:Python3将数据保存为txt文件的方法,具体内容如下所示:f = open("data/model_Weight.txt",'a') #若文件不存在,系统自动创建。'a'..._怎么保存python文件
文章浏览阅读196次。Windows下编译Oracle驱动打开工程:C:\Qt\4.8.1\src\plugins\sqldrivers\oci修改oci.pro:TARGET = qsqlociSOURCES = main.cppinclude(../../../sql/drivers/oci/qsql_oci.pri)include(../qsqldriverbase.pri)INCLUDEPATH += D:\o..._linux 编译 oci.pro
文章浏览阅读270次,点赞3次,收藏5次。PCF8591在板子上对应的是u16芯片。该芯片有4个ADC输入管脚,分别是AIN0~AIN3。AIN0对应的在排针J3上,AIN1对应的是光敏电阻与固定电阻R31的分压数值,AIN2不怎么考,AIN3对应的是旋转电位计的电压值。器件地址:1001 000(R/W非)表示51单片机从PCF8591读数据;表示51单片机向PCF8591写数据;另外,光敏电阻的阻值变化,光线越强,阻值越低;光线越暗,组织越高。对应的电压值,光线越暗,AIN1的电压越低。光线越强,阻值越高。_pcf8591ain3
文章浏览阅读521次。这个问题大多数是由于使用老版本torch导致的,github上有说这是某个版本的bug,再后续工作中已经进行了修复,要是非要使用该版本torch的话,我使用了一个比较笨拙的方法,写一个where代替torch.where()这个版本是xy不需要同维度的,不过肯定没有torch写的快,不过能运行了。这是复现muzic中的getmusic时遇到并解决的问题。_runtimeerror: expected scalar type int but found float
文章浏览阅读1.6k次,点赞12次,收藏7次。大家好!大四的同学们毕业设计即将开始了,你们做好准备了吗?学长给大家精心整理了最新的计算机毕业设计选题,希望能为你们提供帮助。如果在选题过程中有任何疑问,都可以随时问我,我会尽力帮助大家。在选择毕业设计选题时,有几个要点需要考虑。首先,选题应与计算机专业密切相关,并且符合当前行业的发展趋势。选择与专业紧密结合的选题,可以使你们更好地运用所学知识,并为未来的职业发展奠定基础。要考虑选题的实际可行性和创新性。选题应具备一定的实践意义和应用前景,能够解决实际问题或改善现有技术。
文章浏览阅读2.8k次。触摸屏属于一个标注的input dev.所以我们按照输入子系统的流程来实现驱动开发。 实际板子与CTPM的通讯连接基于IIC总线,所以我们需要把驱动挂载到IIC总线下面去,也就是注册IIC驱动到iic_core.c中去。 实例化一个IIC设备有多种方式,仿照上一次的24cxx IIC设备的创建,我们来实现ft5x06IIC设备的创建。 因实际板子上TS IC使用的是ft5x02,所以先实例化设_触摸屏a类协议和b类协议
文章浏览阅读5.2k次。关于html中下拉菜单select的样式的改变作者:菩提树下的杨过 日期:2006-06-12字体大小: 小 中 大 首先要告诉大家,如果你是用css的方法,除了箭头部分,其他都可以改变,这是很令人别扭的事,因为其他的样式改了,箭头部分改不了等于无用。下面举个css改select的例子 HTML代码 .box{border:1px solid#C0C0_html设置select选择显示和下来显示怎么能不一致
文章浏览阅读3.4k次。软件环境:WIN7_64 + ISE 14.4 (system_edition)硬件:Zedboard、USB-Cable线搭建图: 经过前几天的学习,查看数据手册、官方例程,笔者已经对Zedboard有了基本的了解,但是怎样才能充分发挥ZYNQ的优势呢?这个就不得不说下ZYNQ的基本架构了,它分为PS(Processing System)和PL(Progr_zedboard教程
文章浏览阅读430次。试用一下H2O全自动机器学习下载数据集天池练习赛"工业蒸汽量预测",下个数据集:https://tianchi.aliyun.com/competition/entrance/231693/introduction安装H2OH2O requirements:pip install requestspip install tabulatepip install ..._练习赛-蒸汽数据集
文章浏览阅读603次。vLSW1、vLSW2充当虚拟交换机,给数据添加vlan tag。由于模拟器PC不会主动发送ARP,需要用PC ping 网关地址。查看VPN实例中的路由,学习到32位主机路由。查看OSPF邻居是否建立,路由是否学习到。CE1上学习到32位主机路由(回城路由)查看BGP EVPN学习的5类路由。测试PC访问外部网络Server。查看BGP EVPN邻居关系。同子网,PC1 访问PC2。跨子网,PC1 访问PC3。查看EVPN的3类路由。查看EVPN的2类路由。查看3层VxLan隧道。查看VPN实例内路由。_vxlan分布式网关实验
文章浏览阅读545次。Mac用户在使用NTFS格式移动硬盘时,会遇到无法写入硬盘的情况。要想解决无法写入的问题,很多人选择使用Mac读写软件。面对市面上“众多”的读写硬盘软件,用户应该怎么选择呢?初次接触移动硬盘的伙伴可能不知道移动硬盘怎么和电脑连接,本文就来告诉大家mac读写硬盘的软件有哪些,mac如何使用移动硬盘。因为Mac电脑不能写入NTFS格式磁盘,但是多数用户使用的是NTFS格式的移动硬盘、u盘,因此很多NTFS for Mac软件应运而生。但是市面上很多NTFS for Mac软件很多,例如:Tuxera NTFS