2.SQL对表中数据进行CRUD(增删改查)操作

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);

结果
2.SQL对表中数据进行CRUD(增删改查)操作_第1张图片
插入数据时,中文乱码解决方案:
临时解决方案:使用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);

你可能感兴趣的:(数据库)