1 建表语法 : 建表就是一个声明列的过程
create table 表名(
列名1 列1参数,
列名2 列2参数
……
列名n 列n参数
)engine myisam/innodb/bdb charset utf8/gbk/latin1……;
2 修改表的语法
1)添加列
2)删除列
3)修改列类型
4) 修改列名以及列类型
3. 查询语法
1)where子句:条件查询
where 条件就是一个表达式,在哪一行上表达式微针,就把哪一行取出来
查询结果集:在结构上可以当做表来看
用count(*),count(1) 谁更好呢?
- 对于 myisam 引擎的表,没有区别。这种引擎内部有一计数器在维护着行数。
- Innodb 的表,用 count(*)直接读行数,效率很低,因为 innodb 真的要去数一遍。
2)group by 子句 :分组
严格的讲,以 group by a,b,c 为列,则 select 的列,只能在 a,b,c 里选择,语义上才没有矛盾。
3)having 子句 :分组后过滤
4)order by 子句 :排序
当最终结果集出来后,可以进行排序。
5)limit 子句 : 在语句的最后,起到限制条目的作用
Limit [offset,] N
- Offset: 偏移量,----跳过几行
- N: 取出条目
- Offset,如果不写,则相当于 limit 0,N
ps : 良好的理解模型
Where 表达式 : 把表达式放在行中,看表达式是否为真
列 : 理解成变量,可以运算
取出结果 : 可以理解成一张临时表
4. 子查询
1) Where 型子查询 : 把内层查询的结果作为外层查询的比较条件
- 如果 where 列=(内层 sql) , 则内层 sql 返回的必是单行单列,单个值
- 如果 where 列 in (内层 sql) , 则内层 sql 只返回单列,可以多行
2)From 型子查询 : 把内层的查询结果当成临时表,供外层 sql 再次查询
3)Exists 子查询 : 把外层的查询结果,拿到内层,看内层的查询是否成立
5. 连接查询
1) 左连接
A left join B on 条件 条件为真,则 B 表对应的行,取出
左右连接是可以互换的 : A left join B, 就等价于 B right join A
既然左右连接可以互换,尽量用左连接,出于移植时兼容性方面的考虑。
2) 内连接
如果从集合的角度考虑 A inner join B 和 left join /right join 的关系
答: 内连接是左右连接的交集
外连接是左右连接的并集,但是,在 mysql 中不支持外连接
6. 合并结果集
Union:合并 2 条或多条语句的结果
sql1 union sql2
union的使用条件 : 只要结果集中的列数一致就可以
内层的 order by 语句单独使用,不会影响结果集,仅排序 , 在执行期间,就被 Mysql 的代码分析器给优化掉了.
内层的 order by 必须能够影响结果集时,才有意义,比如 配合 limit 使用。
网友评论