select 查询列表 from 表名;
查询单个字段
查询多个字段
查询所有字段
查询常量
查询函数
查询表达式
起别名
去重
"+"号的含义
concat() 函数
select 字段 from 表名 where 筛选条件;
如果条件不成立,数据不会显示
简单条件的运算符
逻辑运算符
模糊查询
like
between and,
in, not in,
is null, is not null
is null 和 <=> 区别
普通类型数值 | null值 | 可读性 | |
---|---|---|---|
is null | × | √ | √ |
<=> | √ | √ | × |
select 字段 from 表名 where 条件 order by 排序列表【asc/desc】(默认 asc排序)
概念:类似于 编程语言 中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名
好处
调用
单行函数
分组函数
length()
concat()
upper()、lower()
substr(索引从“1”开始)
instr(返回字符第一次出现的索引)
trim(去前后空格)
lpad(左填充指定长度的)
rpad(右填充指定长度的)
replace(替换字符)
round(四舍五入)
ceil(向上取整,返回 >= 该参数最小整数)
floor(向下取整,返回 <= 该参数最大整数)
truncate(截断,小数点后保留几位)
mod(取余,取余公式:a-a/b*b)
rand(随机数)
now(返回当前系统日期+时间)
curdate(返回当前日期,不包含时间)
curtime(返回当前时间,不包含日期)
year、month(获取指定部分,年、月、日、时、分、秒)
str_to_date(将字符通过指定的格式转换成日期)
date_format(将日期转换成字符)
datediff(日期查计算)
version(查看数据库版本号)
database(查看当前数据库)
user(代表当前用户)
if函数
case函数
sum(求和)
avg(平均值)
max(最大值)
min(最小值)
count(计算个数)
select count(字段) from 表名;
select count(1) from 表名; 意思是:在查询时候 新建了一个虚拟表,对应实际表的行数,实际上统计的是 1 的行数。
效率:
和 distinct 关键字搭配使用
注意
和分组函数一同查询的字段要求是 group by 后的字段。
数据源 | 位置 | 关键字 | |
---|---|---|---|
分组前筛选 | 原始表 | group by子句的前面 | where |
分组后筛选 | 分组后的结果集 | group by子句的后面 | having |
group by (分组函数)
having(查询结果后的筛选函数)
注意
连接查询又称多表查询,当查询的字段来自于多个表时,就会用到连接查询
笛卡尔乘积的错误情况
select count(*) from a; 假设输出12行
select count(*) from b; 假设输出4行
最终结果:12×4=48(行)
内连接
外连接
交叉连接
简单示例
select a.id,b.age from user_info a,user_ageb where a.id= b.user_id
加筛选条件示例
select a.id,b.age from user_info a,user_ageb where a.id= b.user_id and b.age > 18;
总结
简单示例
job_grade:员工工资等级表,每个等级都用工资范围值
employess:员工表
select e.salary,g.grade_level from employess e, job_grade g
where e.salary between g.lowest_sal and g.highest_sal
简单示例
查询员工名和上级名称
select e.employee_id, e.last_name,a.employee_id,a.last_name
from employees e, employees a where e.manager_id = a.employee_id
select 查询列表
from 表1 别名【连接类型】join 表2 别名 on 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序列表】
内连接:inner
左外:left 【outer】
右外:right【outer】
全外:full【outer】
交叉连接:cross
语法
select * from user_info u inner join user_like ui on u.user_id = ui.user_id;
特点
select * from user_info u inner join user_like ui on u.user_id = ui.user_id;
job_grade:员工工资等级表,每个等级都用工资范围值
employess:员工表
select e.salary,g.grade_level from employess e inner join job_grade g
one.salary between g.lowest_sal and g.highest_sal
查询员工名和上级名称
select e.employee_id, e.last_name,a.employee_id,a.last_name
from employees e inner join employees a on e.manager_id = a.employee_id;
特点
特点
示例
select b.,bo. from beauty b full join boys bo on b.boyfriend_id = bo.id;
交叉连接
select a.,b. from A a cross join B b; 结果为:笛卡尔乘积
功能上
可读性
示例
inner join 图示:
left join图示:
right join图示:
左、右连接过滤字段为空行
全连接和交叉连接
出现在其它语句中的 select 查询,成为子查询或内查询,外部的查询语句,
成为主查询或外查询
简单示例
select * from user_info where user_id in (select user_id from user_info);
按子查询出现的位置:
select 后面:仅支持标量子查询
from 后面:支持表子查询
where 或 having后面:主要支持标量子查询、列子查询,也支持行子查询
exists后面(相关子查询):表子查询
按结果集行列数不同:
标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
行子查询(结果集有一行多列)
表子查询(结果集一般为多行多列)
where或having后面
特点:
select * from user where id = (select id from user where id = 12);
列子查询(多行子查询)
特点
select * from user where (user_id,user_name) = (
select user_id,user_name from user
where user_id = 10 and user_name like ‘%张%’;
);
select 后面
select o.,(select count() from user a where a.id = o.user_id) from user_order o;
from 后面
简介:将子查询的结果充当一张临时表,要求必须起别名
示例:
select u.*,ag.grade_level from (select avg(age) as age from user) user_age
inner join age_grades ag
on user_age.age between lowest_age and highest_age;
exists后面(相关子查询)
示例:
select exists(select * from user;) 结果:1
select exists(select * from user where id = 10000000000;) 结果:0
查询:
使用in:
select bo* from boys bo where bo.id not in (select boy_id from beauty);
使用 exists:
select bo* from boys bo where
not exists (select b.boy_id from beauty b where bo.id = b.boy_id));
分页查询
应用场景:
特点:
limit 语句放在查询语句的最后
公式:
语句
应用场景
要查询的结果来自于多个表,且多个表没有直接的连接关系,单查询信息一致时
特点
示例
select * from user where id = 1
union
select * from user where user_name like ‘%张三%’;
语法
select 查询列名 -------------------------- ⑥
from 表1 别名 ---------------------------- ①
连接类型 join 表2 别名 on 连接条件 - ②
where 筛选条件 ------------------------- ③
group by 分组列表 ---------------------- ④
having 筛选 ------------------------------ ⑤
order by 排序列表 ---------------------- ⑦
limit 起始条目索引, 条目数; ----------- ⑧