最近在学习MySQL,看了一个的视频,以下是一点点笔记,希望对大家的学习有帮助。
1、建表语句
create table 表名(
列名1 列类型 列参数,
列名2 列类型 列参数,
....
列名n 列类型 列参数
)engine myisam charset utf8;
如上,除最后一行外,每行以逗号结尾,engine为引擎,charse为编码。
具体例子:
create table category (
cat_id smallint unsigned auto_increment primary key,
cat_name varchar(90) not null default '',
parent_id smallint unsigned
)engine myisam charset utf8;
2、修改表的语句:
- 添加列(添加在最后一列)
alter table 表名 add 列名 列类型 列参数;
具体例子:
alter table category add login_date datetime not null default '0000-00-00 00:00:00';
- 添加列(添加在指定列后面)
alter table 表名 add 列名 列类型 列声明 after 指定列名;
具体列子:
alter table category add login_date datetime not null default '0000-00-00 00:00:00' after cat_name;
- 添加列(添加在表的第一列)
alter table 表名 add 列名 列类型 列声明 first;
具体列子:
alter table category add login_date datetime not null default '0000-00-00 00:00:00' first;
- 删除列
alter table 表名 drop 列名;
具体例子:
alter table category drop login_date;
- 修改列(只修改列类型和列参数)
alter table 表名 modify 列名 新类型 新参数;
具体例子:
alter table category modify parent_id typeint not null default 0;
- 修改列(可同时修改列名)
alter table 表名 change 旧列名 新列名 新类型 新参数;
具体例子:
alter table category change parent_id father_id typeint not null default 0;
3、查询语句
查询语句有五种句子:
where 条件查询,
group by 分组,
having 筛选,
order by 排序 ,
limit 限制结果条数。
- where:直接对表进行操作(最基本操作)。
例如:
select * from category where parent_id = 2;
- group by:对表进行分组,对where后的结果操作,或直接对表进行操作。
例如:
select * from category group by parent_id;
- having:对得到的结果集进行再一次查询(即不是直接对原始表操作,一般是生成的结果集中存在新的列)
- order by:对得到的结果集进行排序
- limit:限制结果条数,同样数对结果集操作,limit offset num; offset表示偏移量,即跳过几条,num表示结果数目。
以上五种select语句必须严格按照上述顺序才能正常操作。
4、统计函数,得到的结果就是一个标量值。
max()、min()、avg()、count()、sum()
注意:count()函数知识计算非Null的个数,与参数字段无关。
5、关于null
在我们的建表语句中通常为加上not null default 值;
至于这么做的原因是null是一个空集,无法与其他值进行比较,例如:select * form 表名 where id != null;这样的查询语句是无法查询出结果的,要查询出非空的结果应该用 select * form 表名 where id is not null;这样的语句,使用起来十分费力,所以我们在建表时默认不为null有助于对表的操作。
6、子查询
子查询指的是把一个查询嵌套在另一个查询当中。
- where型子查询,也可以理解为标量子查询,返回的值是标量。
具体例子::找出商品列表中最新的商品(默认为id最大时商品最新)
select * from goods
where goods_id = (
select max(goods_id)
from goods
);
- from型子查询,将子查询视为一张临时表,然后对临时表进行外部查询(需要给临时表一个别名)。
具体例子:取出商品表中每一个栏目下的最新商品。
select * from
(select goods_id, cat_id, goods_name, shop_price
from goods
order by cat_id asc, goods_id desc) as temp
group by cat_id;
- exist型子查询,是指把外层sql的结果,拿到内层sql去测试,如果内层sql成立,则改行取出。
具体例子:
select * from A
where exists
(select * from B where B.id = A.id);
未完待续......