(2)查询数据语言DQL

查询数据语言DQL

结构

select 查询内容
from 表1 别名
inner/left/right/full join 表2 别名
on 连接条件
where 分组前筛选条件
group by 分组条件
having 分组后筛选条件
order by排序
limit 分页

执行顺序

from>join>on>where>group by>having>select>order by>limit

语句

select

查询结果可以是字段,表达式,常量,函数
后面跟distinct可以取唯一select distinct
查询的东西后面可以取别名在查询表中显示 select A as a

join

连接查询,可以连接两个表,有内连接,左连接,右连接,全连接
内连接必须满足on中的条件才可以显示 条件可以是等于或者between and
外连接可以是左连接,即左边为主表,显示所有数据,即使不满足条件也会显示
自然连接是不用写条件的内连接,自动匹配,不写条件 mysql不支持。

where

后面加关系表达式(大于等于不等于)或者是逻辑表达式(and or not)
加like() 里面用%表示任意多字符 用_表示一个字符 查这两个字符要加
in(a,b,c)是否在a,b,c中 not in()
any(a,b,c) all(a,b,c)
between a and b
is null查询是否为空 =可判断为一般值 <==>可判断普通值和null

group by

分组,对于一个表中满足某一个条件的结果进行分类筛选,后面跟字段

having

分组后筛选的条件 与where类似

order by

内容可以是字段,表达式,函数,列数,升序asc,降序desc

limit

limit (page-1)*number number

查看表

des 表名
show colunmns from 表名

函数

可以加到select后面
concat(s1,s2,s3)连为一个字符串
char_length(s)返回字符串的字符个数
length(s)返回字符串s的字节数,一个汉字UTF-8用3个字节,gbk用2个字节
insert(s,index,len,s2)将index开始的len长度的s换成s2
upper(s)将s中所有的字母转换为大写字母
lower(s)将s中的所有字母转成小写字母
left(s,n)返回s最左边的n个字符
right(s,n)返回s最右边的n个字符
trim(s)去掉s开头和结尾的空格
abs(x)返回x的绝对值
cell(s)向上取整
floor(s)向下取整
mod(x,y)模 x-(x/y)*b
rand( )返回0到1的随机值
round(x,y)返回x的四舍五入有y位小数的值
sqrt(x)返回x的平方根
pow(x,y)返回x的y次方
curdate()当前日期
curtime()当前时间
now()返回当前日期时间
datediff(date1,date2)
timediff(t1,t2)

聚合函数

sum(字段名)求和
avg(字段名)求平均值
max(字段名)最大
min(字段名)最小
count(字段名)计算非空字段的个数 一般放主键,也可搭配distinct做查重统计

子查询

在一个sql语句中嵌套一个查询语句,嵌套的那个句子为子查询,外面的为外查询
子查询一般放在小括号中,先于外查询进行如果出现在条件中,要写在右侧而不是左侧,比如要写A.id>(xx)而不是(xxx)<A.id
可以按照出现位置进行分类
(1)出现在select后面 则子查询结果必须为单行单列 一般不用,好像没啥用
(2)出现在from后面为多行多列 出现在from后面其实就是查询出了一个表,然后将一个表与查询结果进行连接查询 什么时候用它呢,就是需要两个及以上信息的时候,比如查部门平均工资的工资级别,首先要查出各个部门的平均工资,其实拿这个已经可以在工资级别表中找到对应的工资级别了,但是最后查出来还需要有部门id,不然不知道到底是哪个部门的,而工资级别表中又没有部门id,所以在一开始就需要查出来部门id和平均工资,形成一个表,然后内连接查询
(3)出现在where或者having后面为单列(可以多行或者单行)
如果是单行子查询 则出现的是一个东西,一般配合条件就是大于小于等于不等于之类的(标量子查询)
如果是多行 则会查出多行东西 ,一般配合使用为any/some判断是否满足其中任何一个,比如x>any(10,30,50) 其实就是大于min的
in 是否存在其中x in(10,30,50)
all 是否满足所有的x > all(10,30,50)其实就是大于max的
(4)出现在exists后面 必须为单列,称为相关子查询。
查询有无xx的信息 如果用普通查询查到了就有信息,没查到就没信息 而把这个写在select exists后面 最后就会输出1或者0 记得给查询信息起别名
用union可以将两个表的结果连起来,结果去重
union all 可以显示所有结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值