查询数据
常用查询逻辑
书写顺序:SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段 HAVING 分组条件 ORDER BY 排序条件 LIMIT 分页条件<br>执行顺序: FROM --> WHERE --> GROUP BY --> HAVING --> SELECT --> ORDER BY
查询表中所有数据
select * from 表名;
查询表的指定列
select 列名1,列名2 from 表名;
指定别名查询
select 字段名 as 自定义名字 from 表名;
常量列查询
select 字段名 as 自定义名字,临时常量(例如总分)as 别名 from 表名;
合并列查询
select 字段名 as 自定义名字,(字段1+字段2)as 别名 from 表名;
条件查询(跟在where后面的关键字)
条件运算符<br>1.小于< 大于> 小于等于<= 大于等于>= 不等于<> 不等于!=(MySQl方言)<br>2.BETWEEN···AND 在···范围内<br>3.IN 包括<br>4.LIKE 模糊查询<br>5.IS NULL 是否为空<br>6.AND/&& 且<br>7.OR/|| 或<br>8.NOT/!非
模糊查询
select * from 表名 where 字段名 like 查询语法<br>%表示任意多个字符<br>_(下划线)表示单个字符
聚合查询
max():获取查询后结果的最大值 select max(字段名)from 表名;
min():获取查询后结果的最小值 select min(字段名)from 表名;
avg():获取查询后结果的平均值 select avg(字段名)from 表名;
sum():获取查询后结果的总和 select sum(字段名)from 表名;
count():获取查询后结果的总记录数 select count(字段名)from 表名;PS:字段名不建议用*
<b>注意:一般我们在使用统计函数的时候,要注意使用泛查询(*)和使用列查询(id),是有区别的<br>泛查询会记录空值列(NULL) 列查询则不会记录空值列<br>如果想让列查询也记录空值列 要使用IFNULL() SECELT COUNT(IFNULL(id,0))FROM 表名;<br>聚合函数可以连串使用 SECELT SUM(字段名)/COUNT(字段名)FROM 表名;</b>
分页查询<br>关键字:LIMIT(MySQL方言)
select * from 表名 limit 参数1,参数2;<br>参数1:从第几条数据开始查询(默认从0开始记录)<br>参数2:一次查询多少条
分页的计算规则<br>select * from 表名 limit (当前页码-1)*每页条数,每页条数;
排序查询<br>关键字:ORDER BY<br>默认是升序ASC,降序DESC
单列排序:针对一个列进行单词排序
组合排序:当第一个列数值一致的时候,可以组合N个列进行第N次排序
分组查询<br>关键字:GROUP BY
统计每个地区有多少人<br>select address count(*)from 表名 group by address;<br>统计地区人数大于2个人的地区<br>select address count(*)from 表名 group by address having count(*)>=2;<br>
多表查询
交叉连接查询<br>会产生笛卡尔积问题<br>解决方法:用主键外键进行限制
select 表1.字段名,表2.字段名 from 表1,表2;
内连接查询:两张表交叉后并且过滤后的数据查询(交集)<br>关键字:INNER JOIN
select * from a_table a inner join b_table b on a.a_id = b.b_id;
左(外)连接查询:左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录<br> 右表记录不足的地方均为NULL<br>关键字:LEFT JOIN
SELECT * FROM a_table a left join b_table b ON a.a_id = b.b_id;
右(外)连接查询:左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来<br> 左表记录不足的地方均为NULL<br>关键字:RIGHT JOIN
SELECT * FROM a_table a right outer join b_table b on a.a_id = b.b_id;
全连接查询:
(select colum1,colum2...columN from tableA ) union (select colum1,colum2...columN from tableB )
注意事项: 1.通过union连接的SQL它们分别单独取出的列数必须相同;<br> 2.不要求合并的表列名称相同时,以第一个sql 表列名为准;<br> 3.使用union 时,完全相等的行,将会被合并,由于合并比较耗时,一般不直接使用 union 进行合并,而是通常采用union all 进行合并;<br> 4.被union 连接的sql 子句,单个子句中不用写order by ,因为不会有排序的效果。但可以对最终的结果集进行排序;<br> (select id,name from A order by id) union all (select id,name from B order by id); //没有排序效果<br> (select id,name from A ) union all (select id,name from B ) order by id; //有排序效果<br>
子查询:将一个SQL语句的查询结果(单列数据)作为另一个SQL语句的查询条件