开始打鸡血了
- 语法顺序
select distinct 字段1,字段1,字段3
from 库.左表
连接类型 join 库.右表
on 条件
where 条件
group by 分组条件
having 过滤
order by 排序字段1,排序字段2
limit n;
- 执行顺序
1. from 先找左表
2. on 筛选过滤
3. join 左右表根据连接类型形成新数据
4. where 过滤数据
5. group by 分组() [没有group by 整体算作一组]
6. having 分组过滤
7. select 执行select
8. distinct去重形成新数据
9 order by 数据排序
10.limit 限制查询数据条数
- group by 使用的聚合函数
max() 最大
min() 最小
count() 统计
avg() 平均
sum() 求和
group_concat() 分组后查看组内所有成员
select 分组字段,group_concat(表字段) from 表 group by 分组字段
- 设置group by 的 global sql_mode为严格分组模式
set global sql_mode="ONLY_FULL_GROUP_BY";
设置后 select 的字段只能取分组字段
select 分组字段 from table group by 分组字段
- order by排序
order by默认为升序(asc)排序
降序排序(desc)
order by 字段1,字段2
先按照字段1排序,字段1相同按照字段2排序
- limit 限制查询条数和分页
【查询 n 条 limit n】
用法示例:查询工资最高的员工信息
select * from employ order by salary desc limit 1
【分页 limit n,m】
n--页码 m--每页条数
符合分页的sql 格式为:
select * from table limit (n-1)*m,m
如每页十条数据
第一页 select * from table limit 0,10
第二页 select * from table limit 10,10
...
...
...
- 查看某一列外建被别的表引用
SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME='表名'
- 在现有字段基础上添加其他字符
UPDATE `us_stock_name` SET STOCKID=CONCAT('US',STOCKID) WHERE 条件
这个代表在所有STOCKID前加US,如果更新前STOCKID=BABA 更新后的STOCKID=USBABA
- only_full_group_by错误
详细错误可能如下:
which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
在mysql配置文件【ubuntu中位置/etc/mysql/mysql.conf.d/mysqld.cnf】添加配置
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
重启数据库【service mysql stop service mysql start】