查询语法和执行顺序
select columnname1 as alien1,columnname2 as alien2(*)......
from tablename
where clause
group by columnname having clause
order by columnname desc/asc
limit index,count
1.列运算
- 数值类型(+ - * /)
- 字符串拼接(contact(str1,str2,…))
- null值转化(ifnull(cloumnname,defaultValue))
2.limit m,n
- m:查询的起始行数,第一行为0
- n:查询的行数
3.聚合函数
- count():计数,不为null的值才参与计数
- max():最大值
- min():最小值
- sum():求和
- avg():平均值
4.分组
- 查询的信息必须是列名称或者是聚合函数计算出来的组信息
- 分组前的条件用where
- 分组后的条件用having
连接(位置为表或者条件)
1.数据表准备
website.sql
CREATE TABLE `websites` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL DEFAULT '' COMMENT '站点名称',
`url` varchar(255) NOT NULL DEFAULT '',
`alexa` int(11) NOT NULL DEFAULT '0' COMMENT 'Alexa 排名',
`country` char(10) NOT NULL DEFAULT '' COMMENT '国家',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
access.log
CREATE TABLE `access_log` (
`aid` int(11) NOT NULL AUTO_INCREMENT,
`site_id` int(11) NOT NULL DEFAULT '0' COMMENT '网站id',
`count` int(11) NOT NULL DEFAULT '0' COMMENT '访问次数',
`date` date NOT NULL,
PRIMARY KEY (`aid`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
2.内连接
INNER JOIN返回2张表符合连接条件的部分。
3.左外连接
LEFT JOIN关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
4.右外连接
RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。
5.结果集合并
- 两个表的结果集相似,列数相同并且类型相似。
- union all与union的区别
6.子查询
- 单行单列(> < >= <=)
- 单行多列(in any all)
- 多行单列
- 多行多列