=================查:
查寻执行顺序:
1. FROM 2. WHERE 3. SELECT 4. GROUP BY 5. HAVING 6. ORDER BY
————————执行顺序:
from表,where条件,select字段,
SELECT * FROM 表名; // 查询所有字段
SELECT 字段1,字段2 FROM 表; //查询字段1字段2
SELECT DISTINCT 字段1 FROM 表; // 去除重复的值 distinct只拿第一次的
SELECT 字段1,字段2+10 FROM 表; // 仅做显示用
SELECT 字段 AS "姓名" FROM 表; // 做显示用 AS:别名
——————————————WHERE语句:
可以使用比较运算符:< > <= >= <> !=
BETWEEN 80 AND 100 值在80到100 之间
in(1,2,3) 值是1或2或3
LIKE "q%" q开头%表示可以跟随意多个字符 _表示跟一个字符
SELECT name,age FROM 表 WHERE age BETWEEN 10 AND 20; //显示name,age两个字段,并且年龄在10到20之间的
SELECT name,age FROM 表 WHERE age IN(10,20); // age为10或20的
SELECT name,age FROM 表 WHERE name LIKE "q%"; // name开头为q的
SELECT name,age FROM 表 WHERE age=10 AND name="qq"; // 同时满足这两个条件
-————值为null:
SELECT name,age FROM 表 WHERE age IS null; // 值为null
—————排序:
SELECT name,age FROM 表 ORDER BY age; // 按年龄由小到大排序 升序
SELECT name,age FROM 表 WHERE age>10 ORDER BY age; // 条件添加到表后
SELECT name,age FROM 表 ORDER BY age DESC; // 降序 DESC
—————查寻顺序:
select字段,form表,where条件,GROUP by分组,HAVING筛选,ORDER by排序,limit 限制条数
————————执行顺序:
from表,where条件,select字段
-------------—————分组:GROUP BY
按类显示:只显示分类的第一条信息
SELECT * FROM 表 GROUP BY name; // 按名字分类
SELECT * FROM 表 GROUP BY 2; // 按字段分类
聚合函数:
---sum():和
SELECT name,sum(age) FROM 表 GROUP BY name; // 一组内成员age的和
SELECT name,sum(age) FROM 表 GROUP BY name HAVING sum(age)>50; // HAVING过滤大于50的组显示
---COUNT(): 个数
SELECT COUNT(name) FROM 表 WHERE age>30;
SELECT COUNT(name) FROM 表 WHERE ifnull(age,0)>30;
----AVG(): 平均值
SELECT AVG(age) FROM 表; // 相当于 sum(age)/count(name)
*(按avg算的话,如果age为null不会被统计)
解决方法:ifnull(age,0) 如果碰到null按0算;
----MIN(): 最小; MAX():最大;
SELECT MIN(ifnull(age,0)) FROM 表; // 最小的age 碰到null变为0
SELECT MAX(age) FROM 表; // 最大值age
SELECT * FROM 表 LIMIT 2,4; // 跳过2条显示4条
SELECT * FROM 表 WHERE name REGEXP 'q$'; // 以q结尾
SELECT * FROM 表 WHERE name REGEXP 'n(3)'; // n出现3次的
内连接: inner join
外连接:left join ,right join
全连接: full join
SELECT * FROM 表1,表2; (显示 表1*表2 条记录)
内连接查询:
SELECT * FROM 表1,表2 WHERE 表1id=表2id;
SELECT 表1id,表2name,表1name FROM 表1,表2 WHERE 表1id=表2id;
SELECT * FROM 表1 INNER JOIN 表2 ON 表1id=表2id;
全连接:
左连接和右连接做拼接 字段全部显示 没有显示null
mysql 不支持full join
可以使用union进行连接 union all (区别union会去掉相同的记录)
================子查询:
SELECT * FROM 表1 WHERE id in(SELECT id FROM 表2); 将查询结果作为记录传入
完整复制表: CREATE TABLE 表名 (SELECT * FROM 表);
SELECT * FROM 表 WHERE EXISTS(SELECT name FROM WHERE id>9);
查寻执行顺序:
1. FROM 2. WHERE 3. SELECT 4. GROUP BY 5. HAVING 6. ORDER BY
————————执行顺序:
from表,where条件,select字段,
SELECT * FROM 表名; // 查询所有字段
SELECT 字段1,字段2 FROM 表; //查询字段1字段2
SELECT DISTINCT 字段1 FROM 表; // 去除重复的值 distinct只拿第一次的
SELECT 字段1,字段2+10 FROM 表; // 仅做显示用
SELECT 字段 AS "姓名" FROM 表; // 做显示用 AS:别名
——————————————WHERE语句:
可以使用比较运算符:< > <= >= <> !=
BETWEEN 80 AND 100 值在80到100 之间
in(1,2,3) 值是1或2或3
LIKE "q%" q开头%表示可以跟随意多个字符 _表示跟一个字符
SELECT name,age FROM 表 WHERE age BETWEEN 10 AND 20; //显示name,age两个字段,并且年龄在10到20之间的
SELECT name,age FROM 表 WHERE age IN(10,20); // age为10或20的
SELECT name,age FROM 表 WHERE name LIKE "q%"; // name开头为q的
SELECT name,age FROM 表 WHERE age=10 AND name="qq"; // 同时满足这两个条件
-————值为null:
SELECT name,age FROM 表 WHERE age IS null; // 值为null
—————排序:
SELECT name,age FROM 表 ORDER BY age; // 按年龄由小到大排序 升序
SELECT name,age FROM 表 WHERE age>10 ORDER BY age; // 条件添加到表后
SELECT name,age FROM 表 ORDER BY age DESC; // 降序 DESC
—————查寻顺序:
select字段,form表,where条件,GROUP by分组,HAVING筛选,ORDER by排序,limit 限制条数
————————执行顺序:
from表,where条件,select字段
-------------—————分组:GROUP BY
按类显示:只显示分类的第一条信息
SELECT * FROM 表 GROUP BY name; // 按名字分类
SELECT * FROM 表 GROUP BY 2; // 按字段分类
---------------分组后对组内数据操作:
HAVING: 分组后过滤聚合函数:
---sum():和
SELECT name,sum(age) FROM 表 GROUP BY name; // 一组内成员age的和
SELECT name,sum(age) FROM 表 GROUP BY name HAVING sum(age)>50; // HAVING过滤大于50的组显示
---COUNT(): 个数
SELECT COUNT(name) FROM 表 WHERE age>30;
SELECT COUNT(name) FROM 表 WHERE ifnull(age,0)>30;
----AVG(): 平均值
SELECT AVG(age) FROM 表; // 相当于 sum(age)/count(name)
*(按avg算的话,如果age为null不会被统计)
解决方法:ifnull(age,0) 如果碰到null按0算;
----MIN(): 最小; MAX():最大;
SELECT MIN(ifnull(age,0)) FROM 表; // 最小的age 碰到null变为0
SELECT MAX(age) FROM 表; // 最大值age
============= 分页
SELECT * FROM 表 LIMIT 2; //显示前两条SELECT * FROM 表 LIMIT 2,4; // 跳过2条显示4条
========== 正则(like更快)
SELECT * FROM 表 WHERE name REGEXP '^Q'; // Q开头的SELECT * FROM 表 WHERE name REGEXP 'q$'; // 以q结尾
SELECT * FROM 表 WHERE name REGEXP 'n(3)'; // n出现3次的
=================多表查询:(两张表不用键连接)
连接查询:内连接: inner join
外连接:left join ,right join
全连接: full join
SELECT * FROM 表1,表2; (显示 表1*表2 条记录)
内连接查询:
SELECT * FROM 表1,表2 WHERE 表1id=表2id;
SELECT 表1id,表2name,表1name FROM 表1,表2 WHERE 表1id=表2id;
SELECT * FROM 表1 INNER JOIN 表2 ON 表1id=表2id;
外连接:
SELECT * FROM 表1 LEFT JION 表2 ON 表1id=表2id;(左连接,左表全部显示,匹配不上显示null)
右连接以右表为主 字段全部显示 左表匹配不到显示null全连接:
左连接和右连接做拼接 字段全部显示 没有显示null
mysql 不支持full join
可以使用union进行连接 union all (区别union会去掉相同的记录)
================子查询:
SELECT * FROM 表1 WHERE id in(SELECT id FROM 表2); 将查询结果作为记录传入
完整复制表: CREATE TABLE 表名 (SELECT * FROM 表);
SELECT * FROM 表 WHERE EXISTS(SELECT name FROM WHERE id>9);
EXISTS:如有结果就返回true就执行查询,没有结果返回空;不会执行
模糊查询
%可以有随意多个字符 _下划线只能出现下划线个数
select * from cond where ti LIKE '%01';