select 检索数据

 

Select检索数据

数据查询语言DQL

 

简单查询

Select语句语法

Select

 [distinct | all ]

查询的字段列表

 from 查询的表列表

 [where 条件语句]

 [group by 子语 ]

 [having 子语 ]

 [order by 排序条件 ]

 

创建一个比较简单的表来学习简单sql查询:

create table test

(

id int ,

Name varchar(50),

num int ,

Time datetime,

Date date

)

 

INSERT INTO  test  VALUES (2, '刘岗', 2, '2016-9-18 11:54:26', '2016-6-2');

INSERT INTO  test  VALUES (3, '李安平', 3, '2016-9-18 11:54:32', '2016-9-14');

INSERT INTO  test  VALUES (4, '吴平台', 4, '2016-9-18 11:54:36', '2016-7-15');

INSERT INTO  test  VALUES (5, '张可可', 5, '2016-9-18 11:54:40', '2016-6-16');

INSERT INTO  test  VALUES (6, '陈如', 6, '2016-9-18 11:54:51', '2016-6-24');

INSERT INTO  test  VALUES (1, '吴顺', 1, '2016-9-18 11:55:15', '2016-8-11');

INSERT INTO  test  VALUES (7, '李渐立', 7, '2016-9-18 11:55:41', '2016-9-25');

 

 

 

 

比较运算符

=

>

>=

<

<=

<>,!= 不等于

 

 

 

select * from test where num >3

查出456

 

 

日期比较

 

 

 

 

 

select * from test where date > '2016-08-01'

 

结果:

 

 

 

逻辑运算符

 

and

select * from test where date > '2016-08-01'  and date <'2016-08-15' and num = 1

 

结果:

 

And表示被查询的数据要满足所有的条件,才查出数据

 

 

Or

 

select * from test where date > '2016-08-01'  or num =2

结果:

 

Or表示只要一个条件成立就才查出相应的数据

 

 

()的运算优先级  

 

 

select * from test where  num > 2 or   date > '2016-06-13'   and date < '2016-08-11'

 

结果:

 

 

 

select * from test where  ( num > 2 or   date > '2016-06-13' )  and date < '2016-08-11'

 

结果:

 

 

以上两个sql 用了or ,但是加上 () 和没加  () 的结果有差别。

()的运算优先级高于and

Not  表示非,取反的意思。Not 放在哪个条件前面,表示后面的一个条件组成的结果取反

  select * from test where not  num =2

表示num=2 的结果取反

 

结果:

 

 

select * from test where num = 7 or not date > '2016-09-13'

 

表示date > '2016-09-13' 的结果取反,查出的是小于9.13的数据 而num=7没有not 就不取反,即便时间大于13,也查出来

 

结果:

 

 

 

范围查询in

select * from test where  num = 1 or num = 2 or num = 4

同等于:select * from test where  num in (1,2,4)

取反 select * from test where  not   num in (1,2,4)

Or表示是满足某些指定条件, 如果条件很多,那么or就过长冗长,此时用in () 就很方便。

 

like模糊查询

%表示通配

 

 

select * from test where  `name`  like '%'

 

结果:

 

 

 

 

select * from test where  `name`  like '%%'

 

结果:

 

 

 

 

 

_表示匹配一个字符

 

select * from test where  `name`  like '_'

结果:

 

 

select * from test where  `name`  like '__'

结果:

 

 

 

Null查询

先将一行数据设置为null

 update test set num = null where id = 1

 select * from test where  num is   null

结果:

 

Numnull的数据就会被查出

 

 

 select * from test where  num  is not  null

结果:

 

 

 

numnull的数据就不会被查出

 

范围查询betwwen ... And

 

select * from test where num BETWEEN 3 and 6

 

 

查出num的值从36的,包括36

同等于

select * from test where num >=3 and num <= 6

 

去重复字段查询distinct

先修改出一个相同的数据

update test set num =2 where id = 1

 

 

select num from test

 

以上结果中有两个2

使用DISTINCT 之后,重复的2就会不展示出来,这就是数据去重

 

 select DISTINCT num from test

结果:

 

 

 

as 别名

as 是给列名取别名

 

select  name as 名称 , num as 数量  from test

结果:

 

Order by 排序

order by .. desc 降序

order by .. asc  升序

 

select  * from test   order by num desc

 

num 降序

 

select  * from test   order by num asc

 

 

num 升序

 

注:1null值在排序时被当成是最小值

2,当order by 后不带desc asc时 默认是升序

如:select  * from test order by num

结果:

 

以列的位置来排序

 

select  name   , num  ,id   from test order by 3 asc  

 

表示以查出来的第3列来排序,这里的第3列是id, 就相当于以id来排序。

结果:

 

 

还可以以别名来排序

select  name as 名称 , num as 数量  from test order by 数量 desc  

 

结果:

使用多个字段排序

 

select  *   from test order by num,name asc  

 

 

按第一个字段进行排序,当第一个字段有重复的值时再对这些数据进行第二个字段排序。

嵌套查询

 

设计一个电商购物平台的案例来学习强大的select检索语句

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值