select [all | distinct] 字段或表达式列表 [from子句] [where子句] [group by子句] [having子句] [order by子句] [limit子句];
解释说明:
查的字段可以自定义一个名字,比如select sno as s,这个s就代表了查到的sno字段
[all | distinct]
用于设定所select出来的数据是否允许出现重复行(完全相同的数据行)
all:允许出现——默认不写就是All(允许的)。
distinct:不允许出现——就是所谓的“消除重复行”。
from子句
就是指定数据的来源,其实就是“表”,可以是一个表名,也可以是多个表——多表查询了
where子句
一个概念:where子句,相当于php或js中的if条件语句:其最终结果就是布尔值(true/false),
也可以说是限制在具体那个值
php:if($n % 4 == 0 && $n % 100 != 0 || $n % 400 == 0 ){}
则:
where true, where 1; where 1=1; 都表示true
where false, where 0; where 1<>1; 都表示false
比较运算符: > >= < <= =(等于) <>(不等于)
逻辑运算符: and(与) or(或) not(非)
in语法:XX in (1,2,3,4,5) XX not in () // in 和 = 一样
Xx = 1 or xx = 2 or xx =3...
XX in (值1,值2,.......);
含义:XX等于其中所列出的任何一个值都算成立,相当于:
XX = 值1 or XX = 值2 or XX = 值2
注意:其中的值1通常是“直接值”,但也可以是后面要学习的“查询结果值”
like语法(模糊查找)
语法形式: XX like ‘要查找字符’;
说明:
1,like语法(模糊查找)用于对字符类型的字段进行字符匹配查找
2,要查找的字符中,有2个特殊含义的字符:
2.1: % 其含义是:代表任意个数的任意字符
2.2:_ 代表一个字符
group by 分组子句
group by 字段1 排序方式1,字段2 排序方式2, .....
count(*): 统计一组中的数量,通常用“*”做参数
max(字段名):获取该字段中在该组中的最大值。
min(字段名):获取该字段中在该组中的最小值。
sum(字段名):获取该字段中在该组中的总和。
avg(字段名):获取该字段中在该组中的平均值。
group_concat(字段名):获取该分组内的这个字段所有信息,每条逗号分隔
having子句
和where原理一样,但是是专门给group by服务的条件,只能限制分组之后的数据
Order by子句
order by 排序字段1 [排序方式], 排序字段2 [排序方式], .....
正序: ASC(默认值),可以省略
倒序: DESC
如果指定多个字段排序(虽然不常见),则其含义是,在前一个字段排序中相同的那些数据里,再按后一字段的大小进行指定的排序。//如果第一个字段排序有重复的,再按第二个字段排序
limit子句
limit [起始行号start], 要取出的行数num
表示将前面取得的数据并前面排好之后(如果有),对之指定取得“局部连续的若干条”数据。
起始行号start:第一行的行号为0, 可以省略,则为默认行号(0)。
要取得的行数:如果结果集中从指定的行号开始到最后没有这么多行,则就只取到最后。
此子句非常有用——主要用于网页上最常见的一个需求(现象):分页。
分页原理:
分页的前提:人为指定每页显示的条数,$pageSize = 3;
显示(取得)第1页数据:select * from 表名 limit 0, $pageSize;
显示(取得)第2页数据:select * from 表名 limit 3, $pageSize;
显示(取得)第3页数据:select * from 表名 limit 6, $pageSize;
..................................................
$n:当前页码 $pageSize:每页显示多少条
显示(取得)第$n页数据:select * from 表名 limit ($n-1)*$pageSize, $pageSize;
$n 代表页码 1,2,3
$pageSize 代表每一页显示的条数
连接查询
from 表1 [连接方式] join 表2 [on 连接条件];
左[外]连接:以左边那张表为主:from 表1 left [outer] join 表2 on 连接条件
右[外]连接:以左边那张表为主:from 表1 right [outer] join 表2 on 连接条件
子查询
selelct 字段或表达式或(子查询1) [as 别名] from 表名或(子查询2) where 字段或表达式或(子查询3) 的条件判断
比如:select * from student where sno=(select sno from student sname='张三')
注意:
每个位置所放置的子查询结果,应该符合该位置的数据需求。
通常:
子查询1应该是一个“数据结果”。
子查询2可以是“任意结果”,此位置的查询结果,通常作为数据源,可以给一个别名
子查询3可以是一个数据或一列数据甚至是一行数据
联合查询
select 语句1
union [ALL | DISTINCT]
select 语句2;