SQL技巧】的更多相关文章

基础操作     一:MySQL基础操作         1:MySQL表复制             复制表结构 + 复制表数据             create table t3 like t1;  --创建一个和t1一样的表,用like(表结构也一样)             insert into t3 select * from t1;  --t1的数据全部拿过来,注意是表结构一致才select* ,否则选择相应的的字段列插入                           c…
mysql数据库优化课程---14.常用的sql技巧 一.总结 一句话总结:其实就是sql中那些函数的使用 1.mysql中函数如何使用? 选择字段 其实就是作用域select的选择字段 3.转大写:ucase();例子: select id,ucase(username),age from user; 2.sql中的时间戳函数有必要学么? 没必要 其实没必要,因为我们时间都是存的时间戳 所以要是要时间戳对应的日期的话,可以去php中操作 3.重排auto_increment方法? delete…
PS:完整介绍数据处理,表结构操作,视图,事务处理,存储过程,约束,索引,游标,触发,数据库安全等sql技巧 目录 数据处理 增:插入数据+复制表 删:删除行数据+删除指定列数据 改:更新数据 查:基本结构+相关函数+多表查询+多条查询语句 表结构操作+视图 存储过程+事物处理 游标+约束+索引+触发+数据库权限管理 数据处理: 增 插入数据sql:INSERT INTO table_name(list_name1,list_name2,list_name4) VALUES(list_v1,li…
1. SELECT子句中避免使用 “*”当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法.不幸的是,这是一个非常低效的方法. 实际上,ORACLE在解析的过程中, 会将“*” 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间. 2.使用DECODE函数来减少处理时间使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表. 例如: Sql代码 SELECT COUNT(*),SUM(SAL) FROM E…
1.left join 需要注意的事项 以左表为基准,匹配右表,如果右表匹配了两条,那么,就生成两条记录,而这两条记录的坐表信息都是一样的. 之前误以为,右表不会影响记录的条数.select 部分,不再是两张表的概念,而是一个大临时表.比如select t2.count(id)  ,会只生成一条记录. 2.order by子句--执行顺序为从左到右排序,很耗资源 3.group by--执行顺序从左往右分组,group by之后在筛选的话用having,例如筛选出分组数大于1的:select c…
数据查询    且不说你是否正在从事编程方面的工作或者不打算学习SQL,可事实上几乎每一位开发者最终都会遭遇它.你多半还用不着负责创建和维持某个数据库,但你怎么着也该知道以下的一些有关的SQL知识.我为那些感兴趣的开发者或者能从数据库操作中得益的读者撰写了这篇关于基本SQL语法的概述性文章.本文主要讨论基本的数据操作查询,后续的文章还会继续讨论如何修改数据库自身以及更高级的查询概念.SQL数据库是怎么回事?SQL(结构化查询语言)就是负责与ANSI维护的数据库交互的标准.最新的版本是SQL-99…
行列转换常见场景 由于很多业务表因为历史原因或者性能原因,都使用了违反第一范式的设计模式.即同一个列中存储了多个属性值(具体结构见下表). 这种模式下,应用常常需要将这个列依据分隔符进行分割,并得到列转行的结果. 表数据: ID Value 1 tiny,small,big 2 small,medium 3 tiny,big 期望得到结果: ID Value 1 tiny 1 small 1 big 2 small 2 medium 3 tiny 3 big 具体方法 先从一个具体实例开始我们的…
1.正则表达式使用 MySQl利用REGEXP命令,提供正则表达式功能. 例子:select 'abcdef' REGEXP '^a'; select 'efg' REGEXP '[^XYZ]'; 2. 用RAND()函数提取随机行 使用RAND()函数从表中随机抽取记录行,这对一些抽样分析统计非常有用. 例如:select * from category order by rand() limit 5; 3. 利用group by的with rollup子句做统计报表 在SQL语句中,使用gr…
s = SELECT t.* FROM t w = WHERE b = BETWEEN AND l = LIKE '%%' o = ORDER BY insw = IN (SELECT a FROM a WHERE a ) sw = SELECT t.* FROM t WHERE t sc* = SELECT COUNT(*) FROM t st = SELECT t.* ,t.ROWID FROM t f = FOR UPDATE u = UPDATE t SET t. WHERE t 1.将…
我的一个同事Martin Masarik,SQLde的CEO,跟我谈起了他的一个DBA朋友,他管理着一个国际银行的Oracle数据库,数据规模约2TB.Martin Masarik曾问他:“什么样的SQL问题能让你气愤到竖起头发?”,他总结了以下几点,都是经验之谈: 一.不要在索引列上调用Function 这样做将会阻止数据库使用这个索引,这个问题甚至可以影响这个分区表,因为这样做的话将不会从指定的分区中读取数据,而是扫描整一个表空间.对于大数据量的数据表,这将是性能上的一场大灾难. 不要这样做…
比如:id     姓名      状态  1      刘德华    12      刘德华    23      周华健    04      吴彦祖    1 在access中,用一条sql查询语句,生成结果为: 姓名    总数    状态0    状态1   状态2刘德华   2       0          1       1周华健   1       1          0       0吴彦祖   1       0          1       0 答案一: if n…
这是CSDN问答里面有人提出的一道问题,题目如下. 表格如下: 得出结果如下: 求精简的SQL语句. SQL查询语句: with a as( select rank() over (partition by 商店 order by 商店,sum(价钱) desc) as rowid, 商店,sum(价钱) as 价钱和,备注 from 产品 group by 备注,商店), b as( ), c as( select 商店,sum(价钱和) as 卖出价钱和 from a group by 商店…
有一道SQL笔试题是这样子的: 已知表信息如下: Department(depID, depName),depID 系编号,DepName系名 Student(stuID, name, depID) 学生编号,姓名,系编号 Score(stuID, category, score) 学生编码,科目,成绩 找出每一个系的最高分,并且按系编号,学生编号升序排列,要求顺序输出以下信息: 系编号,系名,学生编号,姓名,总分 USE [test] GO /****** Object: Table [dbo…
做了一段时间的性能测试,把自己在性能测试过程中,使用到的Oracle中用到的sql语句整理一番,做个备忘: (1)多个字段以某种格式拼接 "||"字符串拼接符; 示例:将"id"及"code"用逗号拼接: select t.id||','||t.code from OTable t; 备注:MySQL中使用 concat()函数,select concat(t.id,',',t.code) from MTable t; (2)以某一个字段为维度统…
这几天在写索引,想到一些有意思的TIPS,希望大家有收获. 一.一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order where status!=0 and stauts!=1 not in/not exists都不是好习惯 可以优化为in查询: select * from order where status in(2,3) (2)前导模糊查询不能使用索引 select * from order where desc like '%XX' 而非前导模糊查…
一.一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order where status!=0 and stauts!=1 not in/not exists都不是好习惯 可以优化为in查询: select * from order where status in(2,3) (2)前导模糊查询不能使用索引 select * from order where desc like '%XX' 而非前导模糊查询则可以: select * from order wher…
一.一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order where status!=0 and stauts!=1 not in/not exists都不是好习惯 可以优化为in查询: select * from order where status in(2,3) (2)前导模糊查询不能使用索引 select * from order where desc like '%XX' 而非前导模糊查询则可以: select * from order wher…
转自:http://mp.weixin.qq.com/s?__biz=MjM5NzM0MjcyMQ==&mid=2650076293&idx=1&sn=38f6acc759dfabc77a61bdfdc0c03ef8&chksm=bedb2feb89aca6fdb976b2108430d883d1edb7617cb31fb91ea3d0931969d3c7a7f584a1517b&mpshare=1&scene=23&srcid=12060KtNa7…
如果你点进了这篇帖子,那么你一定遇到了跟我一样的问题.别看题目的set case when...,我一开始也是第一反应是用case when但是发现并不好使. 问题呢,说得高大上一点:动态指定要修改的字段. 其实小白在这里并没找到我以为的解决方法[笑哭],但是好歹问题是解决了. 这里是原帖的地址: http://stackoverflow.com/questions/4830191/t-sql-using-a-case-in-an-update-statement-to-update-certa…
对于数据过滤而言CHECK约束已经算是相当不错了.然而它仍存在一些缺陷,比方说它们是应用到表上面的,但有的时候你可能希望指定一条约束,而它仅仅在特定条件下才生效. 使用SQL标准的WITH CHECK OPTION子句就能完毕这点,至少Oracle和SQL Server都实现了这个功能.以下是实现方式: CREATE TABLE books ( id NUMBER(10) NOT NULL, title VARCHAR2(100 CHAR) NOT NULL, price NUMBER(10,…
方式一: ); ); 方式二: ), (); 第二种比较好.第二种的SQL执行效率高的主要原因是合并后日志量(MySQL的binlog和innodb的事务让日志)减少了,降低日志刷盘的数据量和频率,从而提高效率. 通过合并SQL语句,同时也能减少SQL语句解析的次数,减少网络传输的IO.当SQL指令送达MySQL服务器后,在执行之前,还必须经过编译.解释.词法分析.语义分析等过程,才可以被执行! SQL语句是有长度限制,在进行数据合并在同一SQL中务必不能超过SQL长度限制,通过max_allo…
当表很大的时候可以设计冗余字段,避免与大表连表查询造成性能低下 比如日志表和用户表,日志表通常到后期会相当的大可以做一个username的冗余字段,避免查看username的时候去和user表关联 当分页过大时的优化策略 下图的例子是直接使用where去检索一个非索引列,结果是采用全文检索的方式 通过加上order by 索引列把上图查询的type优化成index 使用BTree索引优化查询 发现type变成了ref BTree索引 下图的查询classType有normal索引,索引方式为bt…
1. 负向条件查询不能使用索引 select * from order where status!=0 and stauts!=1 not in/not exists都不是好习惯 可以优化为in查询: select * from order where status in(2,3) 2. 前导模糊查询不能使用索引 select * from order where desc like '%XX' 而非前导模糊查询则可以: select * from order where desc like '…
一.巧用正则表达式 二.巧用RAND() 提取随机行 利用rand() 的随机数功能,结合 order by 子句完成随机抽取某些行的功能. 三.利用 group by 的 with rollup 子句做统计 注意:rollup子句与order by子句互相排斥. 四.数据库名.表名大小写问题 操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性.Windows对大小写不敏感. 列.索引.存储字程序和触发器在任何平台对大小写不敏感. MySQL中如何在硬盘上保存和使用表名和数据库名由 low…
数据表结构username type numaaaa   玉米 1212aaaa   玉米  212bbb     小麦  2323bbb .... 只有两种产品 玉米和小麦,玉米价格1.5,小麦价格1.2 求总价值? with a as( select type,sum(num) as num from foods group by type), b as( select type,(case when type='小麦' then 1.2 when type='玉米' then 1.5 en…
--update '表名' set 要修改字段名 = replace (要修改字段名,'被替换的特定字符','替换成的字符')--update tRecord set columnName = replace (columnName,'abc','def')…
最近,在作django数据表迁移时用到的. 因为在django中,我把本来一个字符型字段,更改成了外键, 于是,哦喝~~~字符型字段相当于被删除了, 为了能导入这些字段的外键信息,于是出此下策. 其实按平滑迁移策略, 这个字符型字段应该保留,而增加外键字段. 待功能稳定之后,再删除老字符字段. 但人在公司,身不由已: 一切为了工程进度. 一,选择一个表的字段插入另一个表 insert into xxx_temp(id, deploy_status, deploy_progress) select…
1.想把一张表的 某个字段或多个字段 的 所有数据 复制到另外一张表里  insert into 表名(字段) select (字段) from 表名 2.from Users u , IN(u.role) r where r.id<>33 and lower(u.name) like :name    ------------对关联对象的属性进行过滤,写法 …
1.mybatis中没有<=号,必须用<![CDATA[<=]]>表示.<update id="reduceNumber"> UPDATE seckill SET number = number - 1 WHERE seckill_id =#{seckillId} AND start_time <![CDATA[<=]]>#{killTime} AND end_time >=#{killTime} AND number >…
1 select * from wyl.t; 2 --将数据从t1导入t2 3 insert into t2(c1,c2) select c1,c2 from t1 where c1= xx and c2 = xx order by c1; 4 --使用to表的name来更新t1表的name 5 update t1 as a,t2 as b set a.name = b.name where a.tid = b.id; 6 --两表关联更新 7 update t_role_user as a,…