基础查询
DQL语言学习
基础查询
语法
select 查询列表 from 表名;
特点:
1、查询列表可以是:表中的字段、常量值、表达式、函数
2、查询的结果是一个虚拟的表格
查询表中的单个字段
select 字段名 from 表名
查询表中的多个字段
select 字段名,字段名,... from 表名
查询表中所有字段
select * from 表名
着重号区分字段和关键字
查询常量值
select 100;
返回结果就是100
查询表达式
select 100*98;
返回计算结果
查询函数
select VERSION();
相当于调用函数 得到返回值
起别名
select 100*98 AS 结果;
别名就是返回的查询结果的字段名,便于理解。AS
可以省略。如果别名中有特殊符号, 加上 双引号 。
去重
select distinct 字段 from 表名
+号的作用,只有一个功能:运算符
两个操作数都为数值型,直接运算
一方为字符型,尝试将字符型转成数值型后运算,如果转换失败,将字符数值转换成0
只要其中一方为null
,则结果肯定为null
CONCAT();
实现拼接
select CONCAT(last_name,first_name) as 姓名
可以将字段的值拼接展示
显示表结构 DESC 表名
条件查询
语法
select
查询列表
from
表名
where
筛选条件
分类
1、按条件表达式筛选
条件运算符: > < = != <> >= <=
2、按逻辑表达式筛选
逻辑运算符 && || ! and or not
3、模糊查询
like between and in is null
like搭配 通配符 %
和 占位符_
使用
between
id>=100 and id<=210
id between 100 and 210
临界值不要调换位置
in
name = 'zhu' or name = 'xu' or name = 'hua'
name in ('zhu','xu','hua')
is null
name = null #= 或 <> 不能用于判断null值
name is null
name is not null
安全等于. <=>
可以用于判断 null 值
排序查询
语法,默认升序 asc
order by 排序列表 asc/desc
按别名排序
select salary as 年薪 from employees order by 年薪
按函数排序
select length(name) 字节长度
from employee
order by length(name)
多字段排序
order by salary asc,name desc;
总结
1、order by 子句中可以支持单个字段、多个字段、表达式、函数、别名
2、order by子句一半是放在查询语句的最后面,limit子句除外
常见函数
分类
1、单行函数 如concat、length、ifnull
2、分组函数:做统计使用,又称统计函数、聚合函数、组函数
字符函数
uper() 转大写
SUBSTR(). 截取字符
INSTR(); 返回子串第一次出现的所有
trim(); 去除前后空格
LPAD(); 用指定的字符左填充指定长度
数学函数
round 四舍五入
ceil 向上取整
floor 向下取整
truncate 截断
mod 取余
日期函数
now 返回当前系统日期时间
curdate 返回当前系统日期,不含时间
curtime 返回当前时间,不包含日期
流程控制函数
if函数 select IF(10<5,'大','小');
case函数
select salary 原始工资,department_id
case department_id
when 30 then salary*1.1
when 40 then salary*1.2
when 50 then salary*1.3
else salary
end as 新工资
from employees;
select salary
when salary>20000 then 'A'
when salary>15000 then 'B'
when salary>10000 then 'C'
else 'D'
end as 工资级别
from employees
分组函数
用作统计使用,有称聚合函数或统计函数或组函数
分类:
sum
求和、avg
平均值、max
最大值、min
最小值、count
计算个数,都对null值忽略
select
SUM(salary) 和,
AVG(salary) 平均, MAX(salary) 最大,
MIN(salary) 最小, COUNT(salary) 非空个数 from employees;
sum和avg对非数字型字段没有意义返回值为0
可以和distinct搭配,以上都支持
select sum(DISTINCT salary) from employees;
去重后求和
count中加一个常量值,统计总行数
和分组函数一同查询的字段要求是group by后的字段,否则没有意义
分组查询
语法
select 分组函数,字段(要求出现在group by的后面)
from 表
【where 筛选条件】
group by 字段
【order by 子句】
添加分组前筛选条件
分组后的筛选,关键字 HAVING
按多个字段分组,group by 后的字段顺序不影响结果
连接查询
又称多表查询,当查询的字段来自于多个表时,就会用到连接查询
笛卡尔乘积现象,没有有效的连接条件
等值连接
可以添加分组
非等值连接
自连接
sql 99
inner join
等值连接
非等值连接
自连接
外连接
详细参见 MySQL高级(上) #七种join理论
全外连接
交叉连接
笛卡尔乘积
join连接总结
七种join
子查询
where后面的标量子查询(一行一列)
案例4:查询最低工资大雨50号部门最低工资的部门id和其最低工资,HAVING
where后面的列子查询(一行多列)
ANY和ALL 可读性不高,可以被替代,很少使用,比如
a>any(1,2,3)
. 可以被 a>min(1,2,3)
替代
a>all(1,2,3)
可以被a>max(1,2,3)
替代
where 后面的行子查询(一行多列)用不到,了解就行
select 后面的子查询
from后面的子查询
将子查询的结果集冲当了一张临时表,这张表必须其别名
exists 后面的子查询(相关子查询)
exists(完整的查询语句)
结果 1或0,有其中的查询语句有返回值就返回1
分页查询
1、要求多条查询语句的列数一致
2、要求多条查询语句的查询的每一列的类型和顺序一致
3、默认相同的数据会被去重,使用 UNION ALL
不去重
union联合查询
DML语言学习
数据操作语言
插入:inser
修改:update
删除:delete
插入语句
修改语句
删除语句