SELECT (DISTINCT:去除重复记录)
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段
HAVING
分组后条件
ORDER BY
排序字段(ASC:默认升序,DESC降序)/*如果有多个排序条件,只有当前面的条件值一样时才会根据之后的条件进行排序*/
LIMIT
分页限定
| 符号 | 功能 |
|---|---|
| > | 大于 |
| < | 小于 |
| <= | 小于等于 |
| >= | 大于等于 |
| = | 等于 |
| <>或!= | 不等于 |
| BETWEEN…AND… | 在某个范围内 |
| IN(…) | 多选一 |
| LIKE 占位符 | 模糊查询”_“单个任意字符”%“多个任意字符 |
| IS NULL | 是NULL |
| IS NOT NULL | 非NULL |
| AND 或 && | 并 |
| OR或双竖线 | 或者 |
| NOT或! | 非 |
概念:将一列数据作为一个整体,进行纵向计算,(求平均值)
| 函数名 | 功能 |
|---|---|
| count(列名) | 计数(一般选用不为null的) |
| max(列名) | 最大值 |
| min(列名) | 最小值 |
| sum(列名) | 求和 |
| avg(列名) | 均值 |
null值不参与所有聚合函数运算
SELECT 聚合函数名(列名) FROM TABE_NAME;
SELECT ... FROM TABLE_NAME [WHERE 条件] GROUP BY 分组字段名[HAVING 分组后过滤条件]
eg:查询男女各自平均分
SELECT sex ,avg(math) from stu group by sex;
eg:查询男女各自平均分,及人数,分数低于70不参与计算,分组之后人数大于2人
select sex,count(*),avg(math) from stu where math >70 group by sex having count(*)>20;
where是在分组前进行限定,不满足条件不参与分组
having实在分组之后过滤结果
where无法对聚合函数进行判断,而having可以
执行顺序:where》聚合函数》having
eg:每页显示n条数据查询第m页
select * from table_name limit (m-1)*n,n;//起始索引(当前页码-1)* 每页数据条数
| 关键字 | 描述 |
|---|---|
| NOT NULL | 非空 :列中数据不为null |
| UNIQUE | 唯一:类中数据各有不同 |
| PRIMARY KEY | 主键 :一行数据的唯一标识(默认非空却唯一) |
| CHECK | 检查:保证列中数据满足某条件 |
| DEFAULT | 默认:保存数据是,未指定值则采用默认值 |
| FOREIGN KEY | 外键:建立两表之间的数据链接,保证数据的一致性和完整性 |
补充:列数据自动增长:auto_increment;
mysql不支持检查约束
建表时添加约束
creat table xxx(
... ...,
[CONSTRAINT] 外键名 FOREIGN KEY(外键列名) REFERENCES 主表名(主表列名)
);
建表后
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段) REFERENCES 主表名(主表列名)
ALTER TABLE 表名 DROP FOREIGN KEY 外键名
主表与从表:可以理解为主表为基础表,提供主键作为从表的外键
数据库设计概念:
实施步骤:
查询A,B交集数据
#隐式内连接
SELECT 字段列表 FROM 表1,表2... WHERE 条件
#显式内连接
SELECT 字段列表 FROM 表1[INNER] JOIN 表2 ON 条件
查询左表所有数据和交集部分数据
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;
查询右表所有数据和交集部分数据
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件
查询中嵌套查询
SELECT 字段列表 FROM * WHERE 字段名>(子查询);#单行单列
SELECT 字段列表 FROM * WHERE 字段名 in (子查询);#多行单列
SELECT 字段列表 FROM(子查询) WHERE 条件;#多行多列,虚拟表