mysql的复杂查询
一、子查询
当使用的数据库表是关系表,借助另一个字段指明位置。使用多个表间的select 语句嵌套查询
二、联合查询
使用union语句连接两个select 语句进行合并联合查询(or)
select 列1,列2 … from 表明 where 条件 union select 列1 ,列2 … from 表名 where 条件;
1.union 必须包含两个或者两个以上select 语句
2.union 只能使用一个order by 语句
3.union 适用于对于不同表进行联合查询
三、全文本搜索
1.创建表时需要指定哪些字段为全文本搜索的列;
2.创建表时需要指明支持全文本搜索数据库引擎(MyISAM),速度快且智能;
3.格式:select 列名 from 表名 where match(列名) against(‘关键字’);
4.扩展查询
select 列名 from 表名 where match (列名)against(‘关键字’with query expansion);
5.布尔文本搜索
select 列名 from 表名 where match(列名) against(‘关键字’ in boolean mode);
四、连接查询
1.内连接又叫等值连接。使用inner join会使性能下降
2.交叉连接
在连接查询时候不通过where 子句指定条件,返回结果集成笛卡尔乘积
3.对表和列使用别名
4.自连接:不同于子查询,且快于子查询
5.外连接
5.1左外连接
5.2右外连接
五、函数
1.符合sql函数类型
2.计算字段
对数据库中的存储数据进行重新格式化,格式化之后的列被称为计算字段。
3.拼接字段
将值连接起来构成一个单一的更长的值
4.使用concat(),trim()函数创建拼接字段
5.加减乘除的运算符操作(±*/)
6.调用upper使供应商名称大写
7.调用soundex(),查询名字发音类似的联系人
8.调用date()查询某一时间的订单
9.聚合函数
9.1查询平均值
9.2查询customers中的客户总数
9.3查询表中最高价和最低价;
9.4去掉重复行的平均值
9.5组合聚合函数、
六、分组:group by 过滤: having
1.查询每个供应商提供的产品的数量
2.查询至少有两个订单的客户
3.查询拥有产品数大于或者等于2,且产品价大于或等于10的供应商(where 用于分组前的过滤,having 用于分组后的过滤)
4.查询订单号和所有订单中总价大于或等于50 的订单
总结:select … from … where… group by … having … order by … limit … ;