学习MySQL之DQL语言

select查询列表from表名;

特点:
①查询结果集是-一个虚拟表
②查询列表可以是单个字段、多个字段、常量、表达式、函数,可以是以上的组合

1 :起别名
select字段名as“别名" from表名;
select字段名"别名" from表名;

2 : +的作用
作用:加法运算
如果两个操作数都是数值型,则直接做加法运算
如果其中-一个为非数值型,则将强值转换成数值型,如果转换失败,则当做0
‘123’+4====>127
‘abc’+4====>4
如果其中一一个为null ,则结果直接为null

3 :去重
select distinct department id from employees;
引申4 :补充函数
select version();
select database();
select user();
select ifnul(字段名,表达式);
select concat(字符1 ,字符2,字符3);
select length(字符/字段);获取字节长度

2、条件查询

语法:
select查询列表
from表名
where筛选条件;

特点:
筛选条件的分类:
①按条件表达式筛选
关系运算符:>= < <= > <> =

②按逻辑表达式筛选
逻辑运算符: and or not

③模糊查询
like:一般和通配符搭配使用
_任意单个字符
%任意多个字符
between and : -般用于判断某字段是否在指定的区间
a between 10 and 100
in :一般用于判断某字段是否在指定的列表
a in(10,30,50)
is null:判断nul|值

3、排序查询
语法:
select查询列表
from表名
where筛选条件|
order by排序列表;

特点:
① 排序列表可以是单个字段、多个字段、函数、表达式、别名、列的索引,以及以上的组合
② 升序,通过asc 降序,通过desc

常见函数

说明: SQL中的函数分为单行函数和分组函数
调用语法: select函数名(实参列表);
①字符函数
concatstr1.,sr2…):拼接字符
substr(str,pos):截取从pos开始的所有字符,起始索引从1开始
substr(str,pos,len):截取len个从pos开始的字符,起始索引从1开始
length(str):获取字节个数
char.length(str):获取字符个数
upper(str):变大写
lower(str):变小写
trim( [substr from] str):去前后指定字符,默认是去空格
left(str,len):从左边截取指定len个数的字符
right(str,len):从右边截取指定len个数的字符
lpad(str,substr,len):左填充
rpad(str,substr,len) :右填充
strcmp(str1 ,str2):比较两个字符的大小
instr(str,substr):获取substr在str中第一次出现的索引

扫描二维码关注公众号,回复: 10716982 查看本文章

②数学函数
ceil(x):向.上取整
floor(x):向下取整
round(x,d):四舍五入
mod(x,y):取模/取余
truncate(x,d):截断,保留小数点后d位
abs(x):求绝对值

③日期函数
now():获取当前日期一一时间
curtime():只有时间
curdate(:只有日期
date_format(date,格式):格式日期为字符
str.to_date(str,格式):将字符转换成日期
datediff(gate1,date2):获取两个日期之间的天数差
year(date)
month(date)

④流程控制函数
1、if(条件,表达式1 ,表达式2) :如果条件成立,返回表达式1 ,否则返回表达式2
2、case表达式
when值1 then 结果1
when值2 then结果2
else结果n
end .
3、case I
when条件1 then结果1
when条件2 then结果2
else结果n
end

⑤分组函数
sum求和
avg平均
max最大
min最小
count个数
特点:
1、实参的字段的类型, sum和avg只支持数值型,其他三个可以支持任意类型
2、这五个函数都忽略null值
3、count可以支持以下参数I
count(字段) :查询该字段非空值的个数
count(*) : 查询结果集的行数
count(1) :查询结果集的行数
4、分组函数可以和distinct搭配使用,实现去重的统计
select count(distinct字段) from表;

分组查询

语法:
select分组函数分组的字段
from表名
where分组前的筛选条件
group by分组列表
having分组后的筛选条件
order by排序列表;

特点:
1》分组列表可以是单个字段、多个字段
2》筛选条件分为两类
筛选的基表 使用的关键字 位置
分组前筛选 原始表 where group by前面
分组后筛选 分组后的结果集 having group by后面

连接查询

说明:当查询中涉及到了多个字段,则需要通过多表连接
笛卡尔乘积: .
出现原因:没有有效的连接条件
解决办法:添加有效的连接条件
---------------------92语法----------------------
语法:
select查询列表①
from表1别名,表2别名…②.
where连接条件③
and筛选条件④
group by分组列表⑤
having分组后筛选⑥
order by排序列表;⑦

执行顺序:
②③④⑤⑥①⑦

---------------------99语法----------------------
内连接
语法:
select查询列表①
from表1别名②
[inner] join 表2别名on连接条件③
[inner] join 表3别名on连接条件
where筛选条件④
group by分组列表⑤
having分组后的筛选⑥
order by排序列表⑦

执行顺序:
②③④⑤⑥①⑦

外连接
语法:
select查询列表
from表1别名
left| right|full [outer] join 表2别名
on连接条件
where筛选条件
group by分组
having分组后筛选
order by排序列表
limit分页参数;

特点:
①外连接的查询结果=内连接的查询结果+主表有但从表没有的记录
②区分主从表:left join左边的是主表 right join右边的是主表
③一般来讲,外连接往往用于查询主表有但从表没有的记录

子查询

说明:
在一个select语句中,又嵌套了另-一个完整的select语句。
里面的select语句称为子查询或内查询,外面的select语句称为主查询或外查询
分类:
●放在select后面
●放在from后面
●放在where或having后面
●放在exists后面
特点:
①子查询最好用小括号括起来
②子查询一般放在条件的右侧
③子查询优先于主查询执行的,主查询使用到了子查询的结果
④放在where或having后面的子查询, 一般分两种
单行子查询:结果集为单行单列,一般搭配关系运算符使用(> < >= <= = <>)
多行子查询:结果集为多行单列,一般搭配多行操作符使用( any、some、all、in)

分页查询

语法:
select查询列表
from表各
where筛选条件
limit起始索引,条目数;
特点:
①表中条目索引默认从0开始
②如果limit子句中,起始索引为0 ,则可以不写
limit 5;等价于limit 0,5

语法:
select查询列表
from表名
where筛选条件
limit起始索引条目数;

特点:
①表中条目索引默认从0开始
②如果limit子句中,起始索引为0 ,则可以不写
limit 5;等价于limit 0,5;
③公式
显示第page页,每页size条
limit (page-1)*size,size;

union联合查询

语法:
完整的select语句1 union
完整的select语句2 union
完整的select语句3 union

完整的select语句n

特点:
①union默认去重,可以使用union all包含重复项
②多条待合并的查询语句的查询列数必须一致

发布了29 篇原创文章 · 获赞 3 · 访问量 862

猜你喜欢

转载自blog.csdn.net/My_name_PeterLiu/article/details/105092028