SQL.数据查询语言(DQL)

DQL语言(数据查询语言)

1、单表查询

(1)无条件查询	
查询所有行中信息

查询行中的所有字段

select * from 表名;

查询行中的部分字段

select 字段名,字段名,字段名 from 表名;

例如:
select name,sex from stu;

(2)有条件查询
1.比较运算符条件查询

> 大于

select * from 表名 where 字段>值;

< 小于 

select * from 表名 where 字段<值;

= 等于

select * from 表名 where 字段=值;



>= 大于等于
<= 小于等于 

!= 不等于

select * from 表名 where 字段 != 值; 

2.模糊查询 like

like实现模糊查询,需要 通配符 配合

% : 匹配任意长度的任意字符 '张%'

_ : 匹配单个任意字符 '张__'


模糊查询

select * from 表名 where 字段 like '%关键词'

select * from 表名 where 字段 like '_关键词_'

3.范围查询 between and

select * from 表名 where 字段 between 最小值 and 最大值;

注意: 包含最小值和最大值。

字段 >=最小值 and 字段 <=最大值

4.空值查询

查询字段值为null的数据

select * from 表名 where 字段 is null;


查询非空

select * from 表名 where 字段 is not null;

5.多条件查询

多条与 (多个条件必须同时满足) and

select * from 表名 where 条件1 and 条件2 and 条件3;


多条件或 (多个条件满足其一即可) or

select * from 表名 where 条件1 or 条件2 or 条件3;

(3)去除重复结果查询

distinct 去除重复结果

select distinct 字段 from 表名 where 条件;

注意:  如果distinct之后跟多个字段,
	  则判断的是 多个字段的组合 整体不重复.

(4)分组查询

分组:
根据group by之后指定的分组字段进行分组操作。
分组字段中值相同的划分为一组.

select 分组字段,聚合函数 from 表名 group by 分组字段;


查询:
分组之后进行条件筛选(对组进行筛选),使用having

select 分组字段,聚合函数 from 表名 group by 分组字段 having 条件;

注意:	  分组后,在select 之后只查 分组字段或聚合函数,
having之后的条件通过 分组字段或聚合函数设定。

(5)排序查询

order by 对查询结果进行排序(默认升序排序)

select * from 表名 order by 字段名;

select * from 表名 where 条件 order by 字段名;
降序排列 desc :

select * from 表名 order by 字段名 desc;

select * from 表名 where 条件 order by 字段名 desc;


多字段排序:

查询结果先按照第一个排序字段进行排序,
如果有相同的,则相同部分按照第二个排序字段排序,
如果还有相同部分,则相同部分继续按照第三个排序字段排序,
依次类推.

select * from 表名 order by 字段1,字段2,字段3;

注意:

如果排序字段要进行降序排序,则在对应排序字段之后使用desc

(6)分页查询

limit 分页查询:对查询结果进行分页查询.查询结果从0开始排序。

select * from 表名 limit 起始查询位置,查询的数量;

起始查询位置: (页码-1)*每页展示数量

查询数量: 每页展示数量

例如: 每页展示10行数据

则 第一个页

limit 0,10

第二页
limit 10,10

第三页

limit 20,10

(7)函数(即方法)查询

①聚合函数(通常配合分组使用的函数)

1、count统计函数:即统计组内数据的行数。

		count(*)

		count(字段名)

	以上两种方式的区别:

count(*) 通过全字段匹配来进行统计(避免某些字段下null值的影响)

count(字段名) 通过一个字段进行数据通,若该字段下有null,
则null会排除在统计之外。


2、max函数统计字段下的最大值

	max(字段名)

查询整表中该字段下的最大值

select max(字段名) from 表名;

查询每一组中指定字段下的最大值

select max(字段名) from 表名 group by 字段名;



3、min函数统计指定字段下的最小值

	min(字段名)

查询整表中该字段下的最小值

select min(字段名) from 表名;

查询每一组中指定字段下的最小值

select min(字段名) from 表名 group by 字段名;


4、sum函数统计指定字段下的值之和

	sum(字段名)

查询整表中该字段下的所有值之和

select sum(字段名) from 表名;

查询每组中指定字段下的所有值之和

select sum(字段名) from 表名 group by 字段名;


5、avg函数统计指定字段下的平均值

	avg(字段名)

查询整表中该字段下的平均值

select avg(字段名) from 表名;

查询每组中指定字段下的平均值

select avg(字段名) from 表名 group by 字段名;

②数学函数

1、向上取整

(只要有小数部分,则都进行+1操作。取大于或等于当前数字的最小整数)

	ceil(字段名)

	ceil(数字)


2、向下取整(舍弃小数部分。取小于等于当前数字的最大整数)

	floor(字段名)

	floor(数字)




3、四舍五入取整

	round(字段名)

	round(数字)


4、取模(即求余数) mod

	mod(数字1,数字2)

	mod(字段1,字段2)

5、次幂 pow

	pow(n,m)

即求数字 n 的m次方

例如:
	pow(2,3) --2的3次方 8

③字符串函数

提供对字符串值进行操作的函数

1、获取字符串长度(字符长度)

	char_length(字符串)

	char_length(字段名)

2、获取字符串的字节长度

	length(字符串)

	length(字段名)






3、截取字符串:起始位置从1开始计算

	substring(字符串,起始位置,截取长度)

	substring(字段名,起始位置,截取长度)

	substr(字符串,起始位置,截取长度)

	substr(字段名,起始位置,截取长度)


4、替换字符串中的内容

	replace(字符串,目标内容,新内容)

	replace(字段名,目标内容,新内容)


5、拼接字符串

	concat(字符串1,字符串2)

	concat(字段1,字段2) 


6、把英文字符全部转为大写形式

	upper(字符串)

	upper(字段名)


7、把英文字符全部转为小写形式

	lower(字符串)

	lower(字段名)

④日期函数

1、获取当前系统日期

	now()

2、获取日期中的具体属性信息

	获取年
	year(日期)

	year(字段名)

	获取月
	month(日期)

	month(字段名)

	获取日
	day(日期)

	day(字段名)


	获取时
	hour(日期)
	hour(字段名)


	获取分
	minute(日期)

	minute(字段名)

	获取秒
	second(日期)

	second(字段名)


3、计算日期之间相差的天数

	datediff(日期1, 日期2)

	datediff(字段1,字段2)

4、日期加减

	date_add(日期,interval 数字 类型 )

	date_add(字段名,interval 数字 类型 )

	adddate(日期,interval 数字 类型 )

	adddate(字段名,interval 数字 类型 )

	类型可以为:

	year : 年

	month :月

	day : 日

	hour:时

	minute:分
	second:秒

	数字为正数,则进行加
	数字为负数,则进行减

⑤转换函数

1、把日期类型的值转换为指定格式的字符串。

	date_format(日期值,'展示的格式')

	date_format(字段名,'展示的格式')


2、把日期字符串 解析成 日期值。

	str_to_date('日期字符串','字符解析的格式')

	str_to_date(字段名,'字符解析的格式')


	格式:    %Y 年        %m 月      %d 日

	%Y年%m月%d日
	%Y/%m%d
	%Y.%m.%d

⑥空值替换函数(把null用指定新值替代)

	ifnull(null,新值)

	ifnull(字段名,新值)

(8)算术运算符查询

+ - * / %

方式一:
select 21+32 from dual;

方式二:

select 字段名+值 from 表名;


方式三:
select * from 表名 where 字段+值=值;

例如:
select * from student where year(now())-year(birth) >=18

2、多表查询

(1)普通多表查询

1、在from之后书写多个表名,表名之间使用‘,’ 隔开

	select * from 表1,表2,表3;


2、设置多表之间数据连接的条件

	select * from 表1,表2 where 表1.字段 = 表2.字段;

	select * from 表1,表2,表3 where 表1.字段=表2.字段 and 表2.字段 = 表3.字段

(2)外连接查询

①左外连接查询 left join

	select * from 表1 left join 表2 on 表1.字段=表2.字段

左表部分数据全部展示,右表部分只展示根左表有关联的信息,无关联的右表信息不展示。如果左表信息在右表中无连接信息,则右表部分用 null 填充。


②右外连接查询 right join

	select * from 表1 right join 表2 on 表1.字段 = 表2.字段;

右表数据全部展示,左表部分只展示根右表有关联的信息,无关联的左表信息不展示。如果右表信息在左表中无连接信息,则左表部分用 null 填充。

(3)内连接查询 inner join(只查询两表中能够连接的信息)

select * from 表1 inner join 表2 on 表1.字段 = 表2.字段;

(4)子查询

一个查询语句中包含其它的查询语句
以内部查询语句产生的查询结果,作为外部查询语句条件字段值

select * from 表1 where 字段 = (select 字段 from 表2 where 条件);

		
		
把两个内部查询语句产生的结果作为临时表进行查询,
查询时需要给查询结果命名别名 作为临时表名。

select * from (select 字段,字段 from 表1 where 条件) 别名1,(select 字段,字段 from 表2 wher 条件) 别名2 where 别名1.字段 = 别名2.字段;

(5)别名

表别名: 给表命名一个别称.

形式:
表名 as 别名

简写 
表名 别名

select * from 表名1 别名1,表2 别名2 where 别名1.字段 = 别名2.字段;

字段别名:
给查询结果中的内容,指定一个别名,该别名只能在查询结果产生之后使用。

字段 as 别名

字段 别名

(6)in 查询

in 字段的值满足()中任意一个值,即满足条件

select * from 表名 where 字段 in (select 字段 from 表名);

注意:如果in () 中使用子查询语句,则该语句只能进行单字段查询。



not in 查询 不在指定范围之内

select * from 表名 where 字段 not in (select 字段 from 表名);

(7)exists 查询

替代 in

select * from 外表 where exists (select * from 内表 where 内表.字段 = 外表.字段);


替代not in

select * from 外表 where not exists (select * from 内表 where 内表.字段 = 外表.字段);
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值