数据库查询
查询语言
查询的基本语法
select 字段列表 frmo 表名 where [条件]
- 查询所有:SELECT * FROM product;
- 查询部分字段:SELECT pname,price FROM product;
- 定义字段的别名:SELECT pname AS ‘品牌’ FROM product
- 去掉重复值:SELECT DISTINCT price FROM product
查询的执行顺序
- 编写顺序:select…from…
- 执行顺序是: 先frmo后select
条件查询—基本
select…from…where…
- 比较运算符:特别注意的是不等于的写法是“!=”或者“<>”
逻辑运算符
- and
- or
- not
范围查询:between…and… 在什么之间
- 多个值的等性条件:
- in([值…])相当于多个or
- 模糊查询:like
- %: 通配符 表示多个字符
- _:通配符 表示一个字符
- NULL 状态 查询
- 空:is null;
- 非空:is not null;
- 注意的是:空串(”“)和NULL是不一样的。以后空串使用NULL状态表示。
条件查询—排序
select …from …order by…
- order by..字段.{[asc]|[desc]}
- asc:升序(从小到大)
- desc:降序
- 多列排序:先是对第一个排序列排序,如果第一个排序列的值不同,就不按第二排序列排序,只有当第一排序列相同了才使用第二排序列进行排序。
聚合函数
select 聚合函数 from…where…
- count(字段):统计行数
- sum(字段):求和,数值类型
- max(字段):求最大值;数值类型、字符串、日期
- min(字段):求最小值
- avg(字段):求平均值
聚合函数的结果是“计算出来的结果”,与任何记录没有关系,可能跟某一个记录的这列的值相同,但不是这个值。
聚合函数查询结果中,只包含聚合函数的结果列,查询的结果和其他的字段(属性列)没有关系。
分组查询
查询每种的….
select …[聚合函数]…from …group by[字段1],[字段2]…
分组的意思是将同一数据内容的【字段】数据进行分组。
分组查询的查询结果中,最多只能出现分组字段、聚合字段其他字段没有意义。
- 执行过程:先分组在聚合。
对聚合后的结果进行筛选 Having
select …from…where…group by…order by…
执行顺序
- from
- where
- group by
- 聚合函数
- select
- order by
格式:
select …from…where…group by…having…order by…
执行顺序
- from
- where
- group by
- 聚合函数
- having 对聚合后的结果进行筛选
- select
- order by
多表查询
- 什么是主表:存放信息被其他表所引用;主键字段是被引用的字段
- 什么是从表:引用其他表的表;外键:引用主键字段
SQL语句建立外键的约束
alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键);
ALTER TABLE student ADD CONSTRAINT fk_student FOREIGN KEY (kmid) REFERENCES km (id);
从表往主表托。引用表是主表,
- 一对一
- 一对多
- 多对多
内连接查询
- 隐式内连接:select * from table1 t1,table2 t2 where t1.id=t2.id(两个表的等值条件);
- 显示内连接:select * frmo t1 INNER JION t2 ON t1.id=t2.id(两个表的等值条件)
外连接查询
- 左外连接:select * from t1 left join t2 on t1.id=t2.id;
- 右外连接:select * from t1 right join t2 on t1.id=t2.id;
三表查询
- 内连接查询
- 隐式内连接:select * from t1,t2,t3 where t1.id=t2.id(表1好中间表的等值关系) and t2.id=t3.id(中间表和表3的等值关系) and 其他查询条件
- 显示内连接:select * from 表一 INNER JOIN 中间表 ON 表一和中间表的等值关系 INNER JOIN 表2 ON 中间表和表2 的等值关系 and 其他查询条件
- 外连接查询
- 左外连接:select * from 表一 LEFT JOIN 中间表 ON 表一和中间表的等值关系 LEFT JOIN 表2 ON 中间表和表2 的等值关系 and 其他查询条件
- 右外连接:select * from 表一 RIGHT JOIN 中间表 ON 表一和中间表的等值关系 RIGHT JOIN 表2 ON 中间表和表2 的等值关系 and 其他查询条件
子查询
select * from t1 where fielt(字段)>(select fielt(字段) from 表 where 字段2 =‘条件’);
分页查询
select * from t_grade where gradeName like ‘%计%’ limit 0,10
select * from t_grade limit 0,10