有时需要将表中的记录去掉重复后显示出来,可以用distinct关键字来实现,例如执行语句 SELECT * FROM user; 返回结果如下:
成都创新互联公司长期为成百上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为渭南企业提供专业的成都网站设计、成都网站建设,渭南网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。
此时看到id=2,3的记录username字段相同,如果想查询所有不重复的username,可以执行如下:
SELECT distinct username FROM user;
例如执行排序语句: SELECT * FROM user order by id asc; 得到三条升序的数据,如果想限制只显示2条,可以使用LIMIT关键字: SELECT * FROM user order by id asc limit 0,2; 。LIMIT后面跟着的表示起始偏移量和前N行记录,默认起始偏移量为0,所以这句话也可以写为: SELECT * FROM user order by id asc limit 2; 。 LIMIT经常和order by一起配合使用来进行分页显示。
聚合操作的语法涉及下面几个参数:
示例:
表连接从大类上分为内连接和外连接。二者区别在于内连接只选出两张表中互相匹配的记录,外连接会选出其他不匹配的记录。
示例:
创建一个雇员表deployee,有五个人:
再创建一个部门表,有4个部门:
某些情况下,查询的条件是另外一个select语句的结果,这时用到子查询。子查询关键字有in,not in,= ,!=,exists,not exists等。
如执行 select * from deployee where deployee.dep_id in (select dep_id from department); 也表示查询有部门的雇员。如果子查询记录数唯一,可以使用=代替in:
select * from deployee where deployee.dep_id in (select dep_id from department where dep_id = 'sale'); 由于子查询只有一条记录,所有可以用等号
如果要求将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示出来,需要使用union和union all关键字来实现。
union 和 union all的主要区别是union all是把结果集直接合并在一起,而union 是将union all后的结果进行一次distinct,去除重复的记录。
示例:
mysql中查询限定行的关键字是LIMIT。LIMIT关键字的使用查询数据时,可能会查询出很多的记录,而用户需要的记录可能只是很少的一部分,这样就需要来限制查询结果的数量。
假设有这样两条数据:
(表名为user)
1)
username=admin,password=000000
2)
username=admin,password=123456
我们要实现的效果是可以输入多个关键字查询,多个关键字间以逗号分隔。
使用上述表举例:输入单个关键字“admin”可查出这两条数据,输入“admin,000000”只查出第一条数据,可实现的sql语句是:
select
*
from
user
where
concat(username,
password)
like
'%admin%';
select
*
from
user
where
concat(username,
password)
like
'%admin%'
and
concat(username,
password)
like
'%000000%';
concat的作用是连接字符串,但这样有一个问题:如果你输入单个关键字“admin000000”也会查到第一条数据,这显然不是我们想要的结果,解决方法是:由于使用逗号分隔多个关键字,说明逗号永远不会成为关键字的一部分,所以我们在连接字符串时把每个字段以逗号分隔即可解决此问题,下面这个sql语句不会查询到第一条数据:
select
*
from
user
where
concat(username,
',',
password)
like
'%admin000000%';
如果分隔符是空格或其他符号,修改
','
为
'分隔符'
即可。
总结:
select
*
from
表名
where
concat(字段1,
'分隔符',
字段2,
'分隔符',
...字段n)
like
'%关键字1%'
and
concat(字段1,
'分隔符',
字段2,
'分隔符',
...字段n)
like
'%关键字2%'
......;
可以这样编写SQL语句
这里假设表结构如下:
t1(colToChk,col2)
t2(keyword)
列出待查关键字、t2中"colToChk"字段中含待查关键字的相关记录行。
select a.keyword,b.* from
(select distinct keyword from t2) a,
t1 b where b.colToChk
like concat('%',a.keyword,'%');
题主将上述SQL语句套上正确的表名和字段名就可以返回所需的效果。