in作为查询条件,一般典型有两种用法:
创新互联公司专注于秀屿网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供秀屿营销型网站建设,秀屿网站制作、秀屿网页设计、秀屿网站官网定制、成都小程序开发服务,打造秀屿网络公司原创品牌,更为您提供秀屿网站排名全网营销落地服务。
一是IN常量,例如下面语句查询一、三年级的学生:
SELECT * FROM student WHERE grade IN ('一','三');
二是使用子查询,也就是IN(SQL语句),例如下面的语句查询不及格的班级的所有学生:
SELECT * FROM student WHERE classno IN (
select classno from scores where score60
);
1
查询数据表除了前三条以外的数据。
起初我想到的是这条语句
SELECT
*
FROM
admin
WHERE
userid
NOT
IN
(SELECT
userid
FROM
admin
ORDER
BY
userid
LIMIT
3)
ORDER
BY
userid
DESC
但是运行的时候会报
This
version
of
MySQL
doesn't
yet
support
'LIMIT
IN/ALL/ANY/SOME
subquery
这个的意思是表示子查询的时候不支持limit
,还有一点我就是很二了
就是查询的时候用not
in
效率非常不高
最后的解决办法是
CREATE
VIEW
view_top3_admin
AS
SELECT
*
FROM
admin
ORDER
BY
userid
LIMIT
3;
先创建一个视图
将子查询条件放到视图里面
然后在用这条语句
SELECT
*
FROM
admin
a
WHERE
NOT
EXISTS
(SELECT
1
FROM
view_top3_admin
b
WHERE
b.userid=a.userid
)
ORDER
BY
a.userid
DESC
先来解释下这条语句
SELECT
1
FROM
view_top3_admin
b
WHERE
b.userid=a.userid
表示查询表里面的值
只要有数据都显示为 1,1表示不读取数据
这样的话就是提升了查询的性能,当然也可以把
里面的1
换成
null
性能是一致的。整条语句的意思是查询admin表值,
判断条件是值不在子查询表里的。
2
union
和
union
all
的使用
先来解释下这两个关键字在mysql数据库中提供了UNION和UNION
ALL关键字,这两个关键字都是将结果集合并为一个,但这两者从使用和效率上来说都有所不同
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
select
*
from
table
union
select
*
from
tabl
UNION
ALL只是简单的将两个结果合并后就返回
如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了
select
*
from
table
union
all
select
*
from
tabl
从效率上说,UNION
ALL
要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION
这两个关键字用做报表比较多
方法/步骤
第一步,双击打开MySQL Workbench,新建一个数据库worker,设置数据库编码格式是utf-8,点击“Apply”,创建数据库编码
CREATE SCHEMA `worker` DEFAULT CHARACTER SET utf8 ;
如下图所示:
第二步,使用worker数据库,查看数据库表情况,可以使用show命令,如下图所示:
第三步,新建一张worker信息表,创建数据库表SQL语句具体如下:
create table t_worker_info(
id int(8) primary key,
worker_id int(6) not null,
worker_name varchar(20) not null,
worker_age int(2),
worker_sex varchar(2),
worker_addr varchar(100)
);
如下图所示:
第四步,数据库表t_worker_info建好了后,向表里插入一些数据,插入数据SQL语句
insert into t_worker_info (id,worker_id,worker_name,worker_age,worker_sex,worker_addr)
values (20150101,100,'zhangsan',34,'M','hubei');
如下图所示:
第五步,创建数据库查询存储过程query_procedure,具体实现如下图所示:
第六步,编写完了存储过程后,在查询窗口调用存储过程
call query_procedure(30,'M');
如下图所示:
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款