1.表中插入数据
格式:insert into 表名(列名1,列名2,列名3) values(对应值1,对应值2,对应值3);
注意:可以选择相应的列名,插入相应的值。
insert into student(sid,sname,sex,age) values(1,"zhangsan",1,23);
简单写法:insert into 表名 values(对应值1,对应值2,对应值3);
注意:省略列名时,默认对全部列名的表插入值。
insert into student values(1,"zhangsan",1,23);
查看表中的数据:
select *from student;
批量插入数据:
insert into student values
(2,"zhangsan",1,23),
(3,"zhangsan",1,23),
(4,"zhangsan",1,23),
(5,"zhangsan",1,23),
(6,"zhangsan",1,23);
结果:
插入数据时,中文乱码解决方案:
临时解决方案:使用set names gbk;相当于是高速mysql服务器软件,我们当前在命令行下输入的是gbk编码的内容,当命令行关闭后,会使用默认的编码,再输入中文就会出现问题。
永久解决方案:修改my.ini配置(在mysql软件安装路径里)
有以下几步:
暂停mysql服务;
在mysql安装路径中找到my.ini配置文件,在C:\Program Files\MySQL\MySQL Server 5.5;
将第57行的编码方式改成gbk;
保存文件并退出;
启动mysql服务;
2.表中删除数据
删除数据:
格式:delete from 表名 [where 条件];
注:这里中括号表示可选。
删除表中某一列:
delete from student where sid=10;
删除表中所有列:
delete from student;
面试问题:表中使用delete删除数据与使用truncate删除数据有什么差别?
delete: DML(数据操纵语言),一条一条删除表中的数据;
truncate:DDL(数据定义语言),先删除表,再重建表;
执行效率分析:看表中的数据量,如果数据比较少,使用delete比较高效,如果数据量巨大,使用truncate比较高效。
3.表中更新数据
格式:update 表名 set 列名=列的值,列名1=列1的值 [where 条件]
举例:
update student set sname=‘李四’ where sid=5; //将sid为5的学生的名字改为李四
update student set sname=‘张三’,sex=1; //将所有学生的名字改为李四,性别改为1
4.表中查询数据
查询所有商品:
select pname,price product;
查询商品名称和商品价格:
select pname,price product;
使用别名查询,"."和as关键字(as 关键字可以省略):
使用表别名:select p.pname,p.price product as p;
使用列别名:select pname as 商品名称,price as 商品价格 from product;
去掉重复的值:
select price from product;
select distinct price from product;
运算查询:仅仅在查询结果上做了简单运算:加减乘除
select *,price*0.8 from product;
select *,price*0.8 as 折后价 from product;
条件查询:
查询价格大于60的商品:
select * from product where price > 60;
查询价格在10-100之间的:两种方式
select *from product where price between 10 and 100;
select *from product where price > 10 and price < 100;
where后的条件写法:
关系运算符:>,>=, < ,<=, =, !=,<>
注:这里的<>等于!=,只不过<>是标准的SQL语法,而!=是非标准的SQL语法
逻辑运算符:and, or , not
模糊查询:like:
_ : 代表的是一个字符;
% :代表的是多个字符;
查询名字中带有“小”的所有商品:
select *from product where pname like '%小%';
查询名字中第三个字符为“小”的所有商品:
select *from product where pname like '__小%';
在某个范围中获取值:in
查询商品分类ID在(1,4,5)里的所有商品:
select *from product where cno in (1,4,5);
排序查询:order by 关键字
关键字:asc(ascend,升序,也即默认的排序方式)、desc(descend,降序)
查询所有商品,按照价格进行默认排序:
select *from product order by price;
查询所有商品,按照价格进行降序排序:
select *from product order by price desc;
查询名称中带有“小”的商品,并进行升序排序:
select *from product where pname like '%小%' order by price asc;
聚合函数:
sum():求和;
avg():求平均值;
count():统计数量;
max():最大值;
min():最小值。
获得所有商品价格的总和:
select sum(price) from product;
获得所有商品的平均价格:
select avg(price) from product;
获得所有商品的个数:
select count(*) from product;
注意:where后面不能接聚合函数
子查询:获得商品价格大于平均商品价格的所有商品:采用这样的方式避免在where后面直接使用聚合函数
select *from product where price > (select avg(price) from product);
分组:group by
根据cno字段分组,分组后统计商品的个数:
select cno,count(*) from product group by cno;
根据cno分组,分组统计每组商品的平均价格,并且商品价格大于60的商品:
select cno,avg(price) from product group by cno having avg(price) > 60;
having关键字:可以接聚合函数,出现在分组之后;
where关键字:不可以接聚合函数,出现在分组之前。
编写顺序:
S(select)…F(from)…W(where)…G(group)…H(having)…O(order);
指向顺序:
F(from)…W(where)…G(group)…H(having)…S(select)…O(order);