一、基础查询
1、语法
select 查询列表
from 表名;
2、特点
①、查询列表可以是字段、函数、常量、表达式一个或多个的组合
②、查询结果是一个虚拟表
3、示例
#1、查询单个字段
SELECT 字段 FROM 表名;
#2、查询多个字段
SELECT 字段1,字段2... FROM 表名;
#3、查询所有字段
SELECT * FROM 表名;
#4、查询常量值
SELECT 常量值;
#5、查询函数
SELECT 函数(实参); #mysql的函数都有返回值
#6、查询表达式
SELECT 1024*1024; #不支持的运算符有++、--、+=、三目运算符等
/*7、起别名
①、as
②、空格
别名可以加单双引号也可以不加
*/
#8、去重
SELECT DISTINCT 字段名 FROM 表名; #只能distinct单个字段
/*9、+
只能做运算,不能做字符拼接
①、数值+数值:直接运算
②、字符+数值:如果字符可以转换为数值则做加法运算;否则转换为0再运算
③、null+数值或字符:结果都为null
*/
#10、concat 字符拼接
SELECT CONCAT(str1,str2,...);
#11、ifnull函数
SELECT IFNULL(`manager_id`,0)FROM `employees`; #如果字段或表达式为null则返回指定值
/*12、isnull函数
ifnull的变形,如果字段或表达式为null则返回1*/
SELECT ISNULL(`manager_id`),`manager_id` FROM `employees`;
二、条件查询
1、语法
select 字段名
from 表名
where 筛选条件;
2、 筛选条件的分类
①、条件运算符
<>兼容于!=
<=>安全等于:为了特殊对待NULL
②、逻辑运算符
&& and
|| or
!not
③、模糊查询
like :通常和通配符搭配,%任意多个字符包括0个 _任意单个字符 escape转义字符
in
between and
is null / is not null
三、排序查询
1、语法
select 查询列表
from 表名
where 查询条件
order by 排序列表 asc/desc;
2、特点
①、可以不写asc/desc,默认是asc升序
②、可以嵌套排序
四、分组查询
1、语法
select 分组函数,分组列表
from 表名
where 分组前筛选
group by 分组列表
having 分组后筛选
order by 排序列表 asc/desc;
2、特点
①、两类筛选条件
数据源 位置 关键字 分组前筛选 原始表 group by的前面 where 分组后筛选 筛选后的结果集 group by的后面 having 分组函数一定出现在分组后筛选
②、group by 后面可以跟单个字段分组、多个字段分组、表达式或函数
五、连接查询
1、含义
当查询中出现多个表中的字段,就需要对多个表进行连接,如果不进行有效链接,就会出现笛卡尔乘积现象。
2、分类
内连接:等值连接、非等值连接、自连接
外连接:左外连接、右外连接、全外连接
交叉连接
3、语法
内连接:
①、等值连接
select 查询列表
from 表1 别名,表2 别名
where 表1.key = 表2.key (如果给表起了别名就必须使用别名,使用原来的表名编译器会不认识)
【and 筛选条件
group by 分组字段
having 分组后筛选
order by 排序字段 】;
②、不等值连接
select 查询列表
from 表1 别名,表2 别名
where 不等值连接条件;
③、自连接
select 查询列表
from 表 别名1,表 别名2 (同一张表,其实就是完全相同的两张表根据连接条件进行连接)
where 连接条件;
以上是sql92语法,新的sql99与sql92还是有一丁点的区别:
select 查询列表
from 表1 别名
inner join 表2 别名 on 连接条件
【inner join 表3 别名 on 连接条件
where 分组前筛选
group by 分组字段
having 分组后筛选
order by 排序】
外连接:
sql92是不支持的,只有sql99支持
①、左外连接
select 查询列表
from 主表
left 【outer】 join 从表
on 连接条件
【where 分组前筛选
group by 分组字段
having 分组后筛选
order by 排序】
②、右外连接
select 查询列表
from 从表
right 【outer】 join 主表
on 连接条件
③、全外连接
select 查询列表
from 主表1
full 【outer】 join 主表2
on 连接条件
外连接与内连接的差别在于:符合连接条件的从表与内连接一样,不符合连接条件的主表的能连接到,但值为NULL。
交叉连接:
也是只有sql99支持
select 查询列表
from 表1
cross join 表2;
查询结果为两个表的笛卡尔乘积