1.排序操作
ORDER BY column
在查询操作之前,我们可以根据查询的首字母,经过排序之后来让它尽可能的出现在前面
1.2 DESC 可以指定排序为降序
1.3对多列进行排序
例如ORDER BY column1,column2
它会先对第一列进行排序,将第一列排好序之后,如果第一列中存在相同行,再对第二列进行排序
2.限制性条件 LIMIT
2.1例如我们要找最后10个条目
则只需使用 ORDER BY column1 同时配合 LIMIT 10;就可以达到效果啦!
2.2例如 要找第10条,到15条的记录
使用 LIMIT 9,5;
注意 MSQL中的下标是从0开始的!
3.数据库中的事务
transaction
举个栗子来理解一下这个东西
当你建好一个购物网站!你有一个购物车的表和一个库存的表
当库存为10件商品
每次购买就减少一定的数量,
网站上可以显示的数据可以通过显示购物表单中的数量 ,来显示卖出去的数量
数据库的插入操作流程大致是这样:
每次买了之后:
购物表加1
然后库存表减1
;
当网站显示卖出去10个,也就是全部卖完之后,这时候如果有一个访问者访问的时候,他在库存表进行减去操作之前的话!这时候的库存就不是0而是1了!
这也就是我们要使用事务的原因了
3.1事务的操作在PHP中有一套函数
try{
$pdo->beginTransaction();
......
......
$pdo->commit();
}catch(PDOExcetion $e){
$pdo->rollBack();
}
在事务之中的sql语句同步执行,执行是在commit()之后!
rollBack()函数则是在出错之后回滚到,之前的操作!
使用ENGINE=InnoDb类型支持事务操作
4.表的别名 table as alias
假设你有一个航班表flight table 分别有每个航班,以及出发和飞往的城市的ID编号的列
还有一个城市的列表
当你想查询每条航班的出发以及目的地时候
在不使用ALIAS对城市表进行COPY就得用两条语句了
4.1找出发地
SELECT flight.id , city.name FROM flight INNER JOIN city
ON flight.origincityid=cityid
4.2找目的地
SELECT flight.id, city.name FROM flight INNER JOIN city
ON flight.destinationcityid=cityid
4.3如果我们使用数据库别名来试一下只需要一条语句就行啦!
SELEC flight.id ,origin.name destination.name FROM flight INNER JOIN city AS origin
ON flight.origincityid=origin.id
INNER JOIN city AS destination
ON flight.destinationid=destination.id
通过AS语句,感觉就行拷贝了一个副本一样
这个结果还可以改善一下,因为查询的结果最后两列的名字都是name啦
4.4那我们同样可以修改列明
SELECT flight.id ,origin.name AS originCity destination.name AS destionCity FROM
这样出来的结果每一列的名字都是 对的了
5.对SELECT结果进行分组
假如存在一个关的表,一个是joke内容和作者信息进行关联
我们来统计每个作者写的笑话的个数
SELECT joke.authorname COUNT(*) FROM joke INNER JOIN
author on joke.authorid=authot.id
GROUP BY author.id
整个流程:
GROUP BY 将查询的结果按作者的ID号进行分类,COUNT()函数则统计出每个分类中的数目
6.理解左连接
当我们有一个笑话表,和一个作者表的时候
我们使用例4中COUNT(*)+GROUP() 来统计作者写的joke的数目
然而还有一个问题,这并不能统计出joke数目为0的作者,
因为不存在这样的joke.authorid=author.id
接下来就是左连接发挥作用了
在JOIN的两列中会允许左边的表可以和空值对应
接下来上SQL语句:
SELECT author.name COUNT(*) FROM joke LEFEJOIN author
ON author.id=joke.authorid
GROUP BY author.id
敲黑板这里要注意啦!
6.1首先是COUNT()函数的问题,即使你的作者对应的joke数目为空,但是COUNT (*)在统计过程中把author.name +NULL 看成整体
所以那些没有写joke的作者数目还是为1的
我们在这里修改一下,统计具体的唯一的值,例如joke.id这一列
6.2接下来是GROUP啦!
你得确保那些没有写joke的作者信息也能被分组,这就需要包括所有的author信息啦
那就使用author.id 来进行分类
7.使用HAVING来限制结果
例如我们想输出joke数目为0的作者
就要利用到HAVING语句了!
例6中COUNT语句是发生在GROUP语句之后的,所有我们的筛选条件当然也得放在GROUP语句后
使用HAVING jokenum =0 进行筛选!