mysql基础语法复习
1.mysql查询语句
where
条件运算符
大于,小于,等于,大于等于,与或非,between,in
列子如下图:
order by 排序
(1)order by price //默认升序排列 (2)order by price desc //降序排列 (3)order by price asc //升序排列,与默认一样 (4)order by rand() //随机排列,效率不高
列子如下图:
group by 分组
group by语句中select指定的字段必须是“分组依据字段”,其他字段若想出现在select中则必须包含在聚合函数中。
mysql中五种常用的聚合函数:
(1)max(列名):求最大值。
(2)min(列名):求最小值。
(2)sum(列名):求和。
(4)avg(列名):求平均值。
(5)count(列名):统计记录的条数。
列子如下图
limit 取行数
limit [offset,] N offset 偏移量,可选,不写则相当于limit 0,N N 取出条目
列子如下图
查询第0页,每页5条数据
2.mysql的查询语句的顺序
select子句顺序
子句 说明 是否必须使用 select 要返回的列或表示式 是 form 从中检索数据的表 仅在从表选择数据时使用 where 行级过滤 否 group by 分组说明 仅在按组计算聚集时使用 having 组级过滤 否 order by 输出排序顺序 否 limit 要检索的行数 否
3.mysql的子查询
where型子查询(把内层查询结果当作外层查询的比较条件)
from型子查询(把内层的查询结果当成临时表,供外层sql再次查询。查询结果集可以当成表看待。临时表要使用一个别名)
exists型子查询(把外层sql的结果,拿到内层sql去测试,如果内层的sql成立,则该行取出。内层查询是exists后的查询。)
4.连接查询
全相乘(不是全连接、连接查询),全相乘是作笛卡尔积,所有的情况都会被查询出来,十分的消耗内存
左连接查询 left join ... on ...,以左边的表为主
右连接查询 right join ... on ...,以右边的表为主
内连接查询 inner join ... on ...,内连接
全连接查询full join ... on ...,全连接
全连接会将两个表的所有数据查询出来,不满足条件的为NULL。
全连接查询跟全相乘查询的区别在于,如果某个项不匹配,全相乘不会查出来,全连接会查出来,而连接的另一边则为NULL。
5.union联合查询
联合查询 union
语法:
select A.field1 as f1, A.field2 as f2 from<table1> A union (select B.field3 as f1, field4 as f2 from<table2> B)union是求两个查询的并集。union合并的是结果集,不区分来自于哪一张表,所以可以合并多张表查询出来的数据。
将两张表的数据合并查询出来
SELECT id, content, userFROM comment UNION (SELECT id, msg AS content, userFROM feedback);
union查询,列名不一致时,以第一条sql语句的列名对齐
SELECT id, content, userFROM comment UNION (SELECT id, msg, userFROM feedback);
使用union查询会将重复的行过滤掉
SELECT content,userFROM comment UNION (SELECT msg, userFROM feedback);
使用union all查询所有,重复的行不会被过滤
SELECT content,userFROM comment UNIONALL (SELECT msg, userFROM feedback);
union查询,如果列数不相等,会报列数不相等错误
union 后的结果集还可以再做筛选
SELECT id,content,userFROM comment UNIONALL (SELECT id, msg, userFROM feedback) ORDERBY id DESC;
union查询时,order by放在内层sql中是不起作用的;因为union查出来的结果集再排序,内层的排序就没有意义了;因此,内层的order by排序,在执行期间,被mysql的代码分析器给优化掉了。
(SELECT id,content,userFROM comment ORDERBY id DESC) UNIONALL (SELECT id, msg, userFROM feedback ORDERBY id DESC);
order by 如果和limit一起使用,就显得有意义了,就不会被优化掉。
( SELECT goods_name,cat_id,shop_price FROM goods WHERE cat_id =3ORDERBY shop_price DESC LIMIT 3 ) UNION ( SELECT goods_name,cat_id,shop_price FROM goods WHERE cat_id =4ORDERBY shop_price DESC LIMIT 2 );