sql 关于查操作

=================查:
查寻执行顺序:
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就执行查询,没有结果返回空;不会执行


猜你喜欢

转载自blog.csdn.net/weixin_42100915/article/details/80574620