mysql中select distinct的使用方法】的更多相关文章

在使用mysql时,有时须要查询出某个字段不反复的记录,尽管mysql提供有distinct这个keyword来过滤掉多余的反复记录仅仅保留一条,但往往仅仅用它来返回不反复记录的条数,而不是用它来返回不重记录的全部值.其原因是distinct仅仅能返回它的目标字段,而无法返回其他字段.经过实验,有例如以下方法能够实现. 举比例如以下: 这是test表的结构 id test1 test2 1 a 1 2 a 2 3 a 3 4 a 1 5 b 1 6 b 2 7 b 3 8 b 2 比方我想用一条…
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但 往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值.其原因是distinct只能返回它的目标字段,而无法返回其它字段,经过实验, 有如下方法可以实现. 举例如下:这是test表的结构id test1 test21 a 12 a 23 a 34 a 15 b 16 b 27 b 38 b 2比如我想用一条语句查询得到test1不重复的所有数据,…
在处理一个大数据量数据库的时候 突然发现mysql对于count(*)的不同处理会造成不同的结果 比如执行 SELECT count(*) FROM tablename 即使对于千万级别的数据mysql也能非常迅速的返回结果 而对于 SELECT count(*) FROM tablename WHERE..... mysql的查询时间开始攀升 仔细查阅累下手册,发现当没有WHERE语句对于整个mysql的表进行count运算的时候 MyISAM类型的表中保存有总的行数,而当添加有WHERE限定…
mysql中select * for update 注:  FOR UPDATE 仅适用于InnoDB,且必须在事务区块(BEGIN/COMMIT)中才能生效. 作用 锁定该语句所选择到的对象.防止在选择之后别的地方修改这些对象造成数据不一致.要保证在统计(查询)执行过程中,记录不被其他用户更新, 则可以使用For update子句进行加锁.这样在这个锁释放前其他用户不能对这些记录作update.delete和加锁. Select   daptno   from    dept Where   …
七种数据库中Select Top的使用方法 1. Oracle数据库 SELECT * FROM TABLENAME WHERE ROWNUM <= N 2. Infomix数据库 SELECT FIRST N * FROM TABLENAME 3. DB2数据库 SELECT * FROM (SELECT * ROW_NUMBER() OVER({ORDER BY COL1 DESC}) AS ROWNUM FROM TABLENAME) WHERE ROWNUM <= N 或者 SELEC…
七种数据库中Select Top的使用方法 1. Oracle数据库  SELECT * FROM TABLENAME WHERE ROWNUM <= N 2. Infomix数据库  SELECT FIRST N * FROM TABLENAME 3. DB2数据库  SELECT *  FROM (SELECT * ROW_NUMBER() OVER({ORDER BY COL1 DESC}) AS ROWNUM FROM TABLENAME)  WHERE ROWNUM <= N 或者 …
MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock (将整个资料表单给锁住). 举个例子: 假设有个表单products ,里面有id跟name二个栏位,id是主键. 例1: (明确指定主键,并且有此笔资料,row lock) SELECT * FROM products WHERE id='3' F…
MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock (将整个资料表单给锁住).举个例子:假设有个表单products ,里面有id跟name二个栏位,id是主键.例1: (明确指定主键,并且有此笔资料,row lock)SELECT * FROM products WHERE id='3' FOR U…
一:DISTINCT 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值.其原因是distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,我只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的.所以我花了很多时间来研究这个问题,网上也查不到解决方案,但最…
MySQL中查询一定时间间隔内的数据的方法比较常用,可以使用TO_DAYS.DATE_SUB等函数来实现. TO_DAYS函数的作用是返回指定日期从0年开始计算的天数. DATE_SUB函数的作用是通过指定日期减去指定间隔时间. 从而可以实现今天.昨天.最近7天(一周).最近30天(1个月).上个月等等查询方法.例子如下: 1.今天 SELECT * FROM t1 WHERE TO_DAYS(adddate) = TO_DAYS(CURDATE()); 2.昨天 SELECT * FROM t…
select语句可 以用回车分隔 $sql="select * from article where id=1"和 $sql="select * from article where id=1" 都可以得到正确的结果,但有时分开写或许能 更明了一点,特别是当sql语句比较长时. 批量查询数据 可以用in 来实现 $sql="select * from article where id ;in(1,3,5)" 使用concat连接查询的结果 $sq…
在使用MySQL时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段,例如有如下表user: 用distinct来返回不重复的用户名:select distinct name from user;,结果为: 这样只把不重复的用户名查询出来了,但是用户的id,并没有被查询出来:…
在使用MySQL时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段,例如有如下表user: 用distinct来返回不重复的用户名:select distinct name from user;,结果为: 这样只把不重复的用户名查询出来了,但是用户的id,并没有被查询出来:…
mysql中分页查询有两种方式, 一种是使用COUNT(*)的方式,具体代码如下 1 2 3 SELECT COUNT(*) FROM foo WHERE b = 1;   SELECT a FROM foo WHERE b = 1 LIMIT 100,10; 1    另外一种是使用SQL_CALC_FOUND_ROWS 1 2 SELECT SQL_CALC_FOUND_ROWS a FROM foo WHERE b = 1 LIMIT 100, 10; SELECT FOUND_ROWS(…
一.背景 将界面操作日志存储在MySQL数据库中的operationlog表中,如果该表不能自动备份,表中的数据会越来越多,影响速度.可以定期将表中数据备份到另外一个表中来解决. 二.解决方案 1.使用MySQL中的存储过程+事件解决. 存储过程逻辑为: 1)创建一个新表operationlog_temp,各字段同operationlog相同; 2)将表operationlog更名为operationlog_yyyy-mm-dd; 3)将表operationlog_temp更名为operatio…
使用mysql 中的load 命令,可以将txt 文件中的内容加载到数据库表中 使用mysql 中的load 命令,讲txt 文件中的内容加载到数据库表中,例如,创建table,名称是user,一个字段username:当前有db.txt文件,内容是以空格分开的用户名,例如:xiaowang xiaoliu zhangsan 将该文件加载到数据表user中,使用命令即可: 复制代码代码如下: load data local infile "/home/beaver/db" into t…
MySQL中update替换部分字符串replace的简单用法 近日,遇到了需要将部分字符串替换为另外的字符,平时用的最多的是直接update整个字段值,在这种情况下效率比较低,而且容易出错.其实mysql提供了正则表达式中replace这个函数,用起来很简单,特此记录如下: 1.创建测试数据 DROP TABLE IF EXISTS `activity`; CREATE TABLE `activity` ( `id` ) NOT NULL, `code` ) NOT NULL COMMENT…
虽然SQL server和My sql的语句基本都一致,但是仍然存在一些小区别.就如字符串的连接来说,SQL server中的字符串连接是使用“+”来连接,不带引号sql server是做加法运算.而my sql中无论是带引号和不带引号,它都将其先转成数字型,然后在做运算. SQL Server中字符串的连接: ps:Age=21 SELECT '12'+'34',Age+1 FROM table 其结果输出结果是第一列是1234,第二列是22. MySQl中字符串连接: SELECT '12'…
一: INSERT ON DUPLICATE KEY UPDATE 如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行UPDATE 注意: 1:如果行作为新记录被插入,则受影响行的值为1:如果原有的记录被更新,则受影响行的值为2. 2:如果该表中,由多个唯一索引,需要特别注意,出现重复时则该语句只能更新其中一行记录 如:原有数据表中有数据: UNIQUE KEY `uk_admin_name` (`…
转自:http://blog.sina.com.cn/s/blog_a74f39a201013c3b.html 1.选择所有的记录 select * from table_name; 其中*表示表中的所有字段. 2.查询不重复的记录 用关键字distinct select distinct  字段名  from  表名: 3.条件查询 用关键字where select * from 表名 where 条件: where后面的条件是一个字段的比较,可以使用=.>.<.>=.<=.!=…
用法 SELECT DISTINCT ON ( expression [, ...] ) 把记录根据[, -]的值进行分组,分组之后仅返回每一组的第一行. 需要注意的是,如果不指定ORDER BY子句,返回的第一条记录是不确定的.如果你使用了ORDER BY 子句,那么[, -]里面的值必须靠近ORDER BY子句的最左边. 例子 构造数据 create table student(id serial,name character varying,course character varying…
本文将着重介绍两个MySQL命令的组合,它将以原有数据表为基础,创建相同结构和数据的新数据表. 这可以帮助你在开发过程中快速的复制表格作为测试数据,而不必冒险直接操作正在运行 的数据表. 示例如下: 将 production 数据库中的 mytbl 表快速复制为 mytbl_new,2个命令如下: CREATE TABLE mytbl_new LIKE production.mytbl; INSERT mytbl_new SELECT * FROM production.mytbl; 第一个命令…
现在有张表为student,我想将这个表里面的数据复制到一个为dust的新表中去.answer 01: create table dust select * from student;//用于复制前未创建新表dust的情况下 answer 02: insert into dust select * from student;//已经创建了新表dust的情况下 现在使用select..into..语句实现以上东东. MySQL不支持Select Into语句直接备份表结构和数据,一些种方法可以代替…
最近开始复习mysql,查漏补缺吧. 关于mysql 1.MySQL不区分大小写,但是在MySQL 4.1及之前的版本中,数据库名.表名.列名这些标识符默认是区分大小写的:在之后的版本中默认不区分大小写. 2.MySQL不需要在单条SQL语句后加上分号,但是在特定的DBMS(数据库管理系统)可能必须加分号以此结束.如果使用的是MySQL命令行,必须加上分号来结束SQL语句. SELECT语句简单使用 SELECT COLUMNS FROM TABLE; 同时检索多列,字段名之间用英文逗号",&q…
转自: http://www.maomao365.com/?p=10564 摘要: 下文讲述MySQL数据库查询重复数据时,只保留一条数据的方法 实现思路: 在MySQL数据库中没有row_number函数,所以我们需变向实现此功能.  --1.基础数据表查看 mysql> select * from `maomao365.com`; +-------+------------+ | keyId | infoB | +-------+------------+ | mysql test | |…
我这里总结了判断记录是否存在的常用方法: sql语句:select count(*) from tablename; 然后读取count(*)的值判断记录是否存在.对于这种方法性能上有些浪费,我们只是想判断记录记录是否存在,没有必要全部都查出来. 以下这个方法是我推荐的. sql语句:select 1 from tablename where col = col limit 1; 然后读取语句执行所影响的行数. 当然这里limit 1很重要.这要mysql找到一条记录后就不会在往下找了.这里执行…
修改方法 1.修改配置文件 可以编辑my.cnf来修改(windows下my.ini),在[mysqld]段或者mysql的server配置段进行修改. 代码如下: max_allowed_packet = 20M 如果找不到my.cnf可以通过 代码如下: mysql --help | grep my.cnf 去寻找my.cnf文件.linux下该文件在/etc/下. 2.在mysql命令行中修改 在mysql 命令行中运行: 代码如下: set global max_allowed_pack…
由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock (将整个资料表单给锁住). 举个例子: 假设有个表单products ,里面有id跟name二个栏位,id是主键. 例1: (明确指定主键,并且有此笔资料,row lock) SELECT * FROM products WHERE id='3' FOR UPDATE; SELECT * FROM produc…
项目中经常的需要使用批量操作语句对数据进行操作,使用批量语句的时候需要注意MySQL数据库的条件限制,这里主要是数据的大小限制,这里对批量插入.批量查找及批量更新的基础操作进行下简单的汇总. 1.批量insert插入语句,如下的语句在测试环境尝试过1W+的批量插入,具体数量跟表结构及字段内容有关系. <insert id=”addTextPushList”paramerterType = “java.util.List”> INSERT INTO SYS_TEXT_PUSH( PUSH_ID,…
引言 大家在开发中,还有很多童鞋在写查询语句的时候,习惯写下面这种不规范sql select * from table 而不写成下面的这种规范方式 select col1,col2,...,coln from table 我也知道,这些童鞋是图方便,毕竟再敲一堆的列名,嫌麻烦! 你们上班可以问问自己的同事 你:"xx,知道select *和select所有字段的区别么? 同事:"额..额..额.." 留下的只有尴尬的笑容! 我也知道,很多人至今都没有搞懂select *和se…