数据库查询

查询语言

查询的基本语法

select 字段列表 frmo 表名 where [条件]

  1. 查询所有:SELECT * FROM product;
  2. 查询部分字段:SELECT pname,price FROM product;
  3. 定义字段的别名:SELECT pname AS ‘品牌’ FROM product
  4. 去掉重复值:SELECT DISTINCT price FROM product

查询的执行顺序

  • 编写顺序:select…from…
  • 执行顺序是: 先frmo后select

条件查询—基本

select…from…where…

  1. 比较运算符:特别注意的是不等于的写法是“!=”或者“<>”
  2. 逻辑运算符

    1. and
    2. or
    3. not
  3. 范围查询:between…and… 在什么之间

  4. 多个值的等性条件:
    1. in([值…])相当于多个or
  5. 模糊查询:like
    1. %: 通配符 表示多个字符
    2. _:通配符 表示一个字符
  6. NULL 状态 查询
    1. 空:is null;
    2. 非空:is not null;
    3. 注意的是:空串(”“)和NULL是不一样的。以后空串使用NULL状态表示。

条件查询—排序

select …from …order by…

  1. order by..字段.{[asc]|[desc]}
    1. asc:升序(从小到大)
    2. desc:降序
  2. 多列排序:先是对第一个排序列排序,如果第一个排序列的值不同,就不按第二排序列排序,只有当第一排序列相同了才使用第二排序列进行排序。

聚合函数

select 聚合函数 from…where…

  1. count(字段):统计行数
  2. sum(字段):求和,数值类型
  3. max(字段):求最大值;数值类型、字符串、日期
  4. min(字段):求最小值
  5. 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

多表查询

  1. 什么是主表:存放信息被其他表所引用;主键字段是被引用的字段
  2. 什么是从表:引用其他表的表;外键:引用主键字段

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;

三表查询

  1. 内连接查询
    1. 隐式内连接:select * from t1,t2,t3 where t1.id=t2.id(表1好中间表的等值关系) and t2.id=t3.id(中间表和表3的等值关系) and 其他查询条件
    2. 显示内连接:select * from 表一 INNER JOIN 中间表 ON 表一和中间表的等值关系 INNER JOIN 表2 ON 中间表和表2 的等值关系 and 其他查询条件
  2. 外连接查询
    1. 左外连接:select * from 表一 LEFT JOIN 中间表 ON 表一和中间表的等值关系 LEFT JOIN 表2 ON 中间表和表2 的等值关系 and 其他查询条件
    2. 右外连接: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


posted @ 2017-11-06 17:10  yinder  阅读(158)  评论(0编辑  收藏  举报