SQL基础语法
下述的table_name指表名称
SQL表内数据插入/新增语句
insert into table_name (field1,field2,…) values (value1,value2…)
use youzi; #声明使用youzi这个数据库
create table commoditytype( #创建一张表
ct_id int(11) primary key,
ct_name varchar(50) not null
)default charset=utf8;
#向表中插入一条数据
insert into commoditytype (ct_id,ct_name) values (1,'水果'),(2,'蔬菜');
SQL表内数据的修改/更新语句
update table_name set field1 = value1,field2 = value2… WHERE CONDITION;
注意:
1.WHERE CONDITION是条件判断,假如不使用这个,那么表中所有的数据都会被修改
2.使用WHERE CONDITION时,可以修改主键(下面代码中将演示)
#此处依旧使用上面所创建的表
update commoditytype set ct_name = '柚子' where ct_id = 1;
#当ct_id的值为1时,将其对应的ct_name值改为柚子
update commoditytype set ct_id = 3 where ct_name='蔬菜';
#当ct_name的值为蔬菜时,将其对应的ct_id修改为3
update commoditytype set ct_name = '橘子';
#此时没有加where condition条件,那么整张表的ct_name都会改为橘子
update commoditytype set ct_id = 5;
#此时mysql会报出一个异常 ERROR 1062 (23000): Duplicate entry '5' for key 'PRIMARY'
SQL表内删除数据语句
删除全部
delete from table_name;
删除指定数据
delete from table_name WHERE CONDITION;
#此处依旧使用上面所创建的表
delete from commoditytype;#删除整张表
delete from commoditytype where ct_id=1;#删除表中ct_id对应的数据
SQL表内数据查询语句
查询全部
select * from table_name
精确查询
select field1,field2 from table_name;
#此处依旧使用上面所创建的表
select * from commoditytype;#查询并显示commoditytype这张表的所有数据
select ct_id from commoditytype;#查询并显示这张表ct_id字段的所有信息
select ct_id,ct_name from commoditytype;#查询并显示ct_id 和 ct_name的信息
#多个字段用逗号隔开
SQL的单表查询语句
DISTINCT关键字 去除重复数据
select distinct field1,field2… from table_name;
另外MySQL还支持简单的四则运算和关系运算符、逻辑运算符
BETWEEN ADN关键字
IS NULL关键字
IN关键字
LIKE关键字
代码如下所示select * from commoditytype where ct_id>1 and ct_name='柚子';# 关系运算符和逻辑运算符 select * from commoditytype where ct_id between 1 and 3; #between and 关键字 select * from commoditytype where ct_id is null; #is null 关键字 select * from commoditytype where ct_id in (10,20,30); #in 关键字,取出ct_id的值等于10,20,30时 select * from commoditytype where ct_name like '%'; #like 关键字 用于模糊查询
between and 对应not between and
is null 对应 is not null
in 对应 not in
三个关键字都用各自对应的反关键字,取值与之相反
in 关键字类似于一个集合,你所要筛选的字段是否在集合内(上面的(10,20,30)就是集合);
like 关键字 后面用到的’%‘是通配符,表示匹配一个或者多个字符,还可以使用’_'表示匹配一个字符
SQL的简单方法
排序 ORDER BY
select field1,field2… from table_name ORDER BY field[ASC|DESC]; #不带条件的排序
select field1,field2… from table_name WHERE CONDITION ORDER BY field[ASC|DESC]; #带条件的排序select ct_name from commoditytype order by ct_id desc; #打印ct_name,排序方式是根据ct_id,desc表示倒序,不写或者写asc表示正序 select ct_name from commoditytype where ct_name='柚子' order by ct_id desc; #有条件的排序打印
LIMIT关键字
select field1,field2…from table_name limit 2; # limit 2 表示输出前两行数据
select field1,field2…from table_name limit 2,5; #limit 2,5表示从第3行开始,输出五行(从零开始计数)select * from commoditytype limit 2; #打印前两行 select * from commoditytype limit 2,5; #从第三行开始,打印五行 # # 与order by 连用可做排行榜 # select * from commoditytype order by ct_id limit 1; #升序排序之后,输出第一条数据
统计函数
COUNT()函数:统计记录数
AVG()函数:计算平均值
SUM()函数:求和
MAX()函数:取最大值
MIN()函数:取最小值
重点讲解COUNT()函数
select COUNT(*) from table_name: #*统计表中所有字段的数据,返回数量
select COUNT(field) from table_name; #统计表中field字段的数据,返回field字段的数量select count(*) from commoditytype; select count(ct_name) from commoditytype;
假如表中没有数据,那么返回0,不是null
count()函数通常与GROUP BY关键字一起使用,以达到分组查询统计的功能select count(*) from commoditytype group by ct_name;
对于分组之后的数据进一步查询的话 需要使用HAVING关键字
select avg(c_inprice),c_type from commodity group by c_type having avg(c_inprice)>100; #由于之前创的表数据不够使用,这边的commodity表是另一张表,c_inprice是商品进价 #语句解读:筛选出进价的平均值大于100的商品的种类和该商品进价的平均值
SQL优化
SQL优化,让搜索引擎使用索引进行查找数据,不要进行全表查找
1.在使用SQL语句时,优先考虑where和order by关键字
2.减少对null值的判断,否则搜索引擎会放弃使用索引而进行全表搜索
3.避免在where条件中使用!= < >,否则搜索引擎会放弃使用索引而进行全表搜索
4.避免使用like关键字,否则搜索引擎会放弃使用索引而进行全表搜索
5.避免在where条件中使用 or,否则搜索引擎会放弃使用索引而进行全表搜索
6.避免使用in 和 not in的使用,(使用exists代替)否则搜索引擎会放弃使用索引而进行全表搜索
7.在where中避免对字段的操作,否则搜索引擎会放弃使用索引而进行全表搜索
…