版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21918021/article/details/89216784
二、MySQL之数据操作语句
2.1、插入记录:insert
语法:
insert into 表 (列名1,列名2,列名3..) values (值1,值2,值3..); -- 向表中插入某些列
insert into 表 values (值1,值2,值3..); --向表中插入所有列
insert into 表 (列名1,列名2,列名3..) values select (列名1,列名2,列名3..) from 表
insert into 表 values select * from 表
注意:
1.列名数与values后面的值的个数相等
2.列的顺序与插入的值得顺序一致
3.列名的类型与插入的值要一致.
4.插入值得时候不能超过最大长度.
5.值如果是字符串或者日期需要加引号’’ (一般是单引号)
例如:
INSERT INTO sort(sid,sname) VALUES('s001', '电器');
INSERT INTO sort(sid,sname) VALUES('s002', '服饰');
INSERT INTO sort VALUES('s003', '化妆品');
INSERT INTO sort VALUES('s004','书籍');
2.2、删除记录:delete
语法:
delete from 表名 [where 条件];
面试题:
删除表中所有记录使用delete from 表名; 还是用truncate table 表名;
删除方式:delete 一条一条删除,不清空auto_increment记录数。
truncate 直接将表删除,重新建表,auto_increment将置为零,从新开始。
2.3、更新记录:update
语法:
update 表名 set 字段名=值,字段名=值;
update 表名 set 字段名=值,字段名=值 where 条件;
注意:
1.列名的类型与修改的值要一致.
2.修改值得时候不能超过最大长度.
3.值如果是字符串或者日期需要加’’.
2.4、SQL查询
查询语句,在开发中使用的次数最多,此处使用“products”商品表。
主键类型,本案例采用int类型,实际案例采用是varchar类型
时间类型,本案例采用date类型,实际案例采用datetime类型。
2.4.1、准备工作
创建商品表:
CREATE TABLE products (
pid INT PRIMARY KEY AUTO_INCREMENT, #自增加 AUTO_INCREMENT
pname VARCHAR(20),#商品名称
price DOUBLE, #商品价格
pdate DATE, # 日期
sid VARCHAR(20) #分类ID
);
INSERT INTO products VALUES(NULL,'泰国大榴莲', 98, NULL, 's001');
INSERT INTO products VALUES(NULL,'新疆大枣', 38, NULL, 's002');
INSERT INTO products VALUES(NULL,'新疆切糕', 68, NULL, 's001');
INSERT INTO products VALUES(NULL,'十三香', 10, NULL, 's002');
INSERT INTO products VALUES(NULL,'老干妈', 20, NULL, 's002');
2.4.2、查询语法
SELECT [DISTINCT]*[列名,列名] FROM 表 [WHERE 条件].
2.4.3、简单查询
SQL语法关键字:
- SELECT
- FROM
案例:
1.查询所有的商品. select * from product;
2.查询商品名和商品价格. select pname,price from product;
3.别名查询,使用的as关键字,as可以省略的.
3.1表别名: select * from product as p;
3.2列别名:select pname as pn from product;
4.去掉重复值. select distinct price from product;
5.查询结果是表达式(运算查询):将所有商品的价格+10元进行显示.
select pname,price+10 from product;
2.4.4、条件查询
SQL语法关键字:
- WHERE
案例:
1.查询商品名称为十三香的商品所有信息:
select * from product where pname = '十三香';
2.查询商品价格>60元的所有的商品信息:
select * from product where price > 60;
where后的条件写法:
> ,<,=,>=,<=,<>
like 使用占位符 _ 和 % _代表一个字符 %代表任意个字符.
select * from product where pname like '%新%';
in在某个范围中获得值(exists).
select * from product where pid in (2,5,8);
2.4.5、排序
SQL语法关键字:
- ORDER BY
- ASC(升序) DESC(降序)
案例:
1.查询所有的商品,按价格进行排序.(asc-升序,desc-降序)
select * from product order by price;
2.查询名称有新的商品的信息并且按价格降序排序.
select * from product where pname like '%新%' order by price desc;
2.4.6、聚合函数(组函数)
特点:只对单列进行操作
常用的聚合函数:
sum():求某一列的和
avg():求某一列的平均值
max():求某一列的最大值
min():求某一列的最小值
count():求某一列的元素个数
案例:
1.获得所有商品的价格的总和:select sum(price) from product;
2.获得所有商品的平均价格:select avg(price) from product;
3.获得所有商品的个数:select count(*) from product;
2.4.7、分组
SQL语法关键字:
- GROUP BY
- HAVING
案例:
1.根据cno字段分组,分组后统计商品的个数.
select cid,count(*) from product group by cid;
2.根据cno分组,分组统计每组商品的平均价格,并且平均价格> 60;
select cid,avg(price) from product group by cid having avg(price)>60;
注意事项:
1.select语句中的列(非聚合函数列),必须出现在group by子句中
2.group by子句中的列,不一定要出现在select语句中
3.聚合函数只能出现select语句中或者having语句中,一定不能出现在where语句中。
2.4.8、其他查询语句
union 集合的并集(不包含重复记录)
unionall集合的并集(包含重复记录)
2.4.9、SQL查询之语法顺序和执行顺序(重要)
MySQL查询语法顺序
- SELECT
- FROM
- LEFT JOIN
- ON
- WHERE
- GROUP BY
- HAVING
- ORDER BY
- LIMIT
执行顺序
示例SQL:
SELECT * FROM user LEFT JOIN order ON user.id = order.uid
WHERE order.price > 1000 GROUP BY user.name HAVING count(1) > 5 ORDER BY user.name LIMIT 0,10
- FROM(将最近的两张表,进行笛卡尔积)—VT1
- ON(将VT1按照它的条件进行过滤)—VT2
- LEFT JOIN(保留左表的记录)—VT3
- WHERE(过滤VT3中的记录)–VT4…VTn
- GROUP BY(对VT4的记录进行分组)—VT5
- HAVING(对VT5中的记录进行过滤)—VT6
- SELECT(对VT6中的记录,选取指定的列)–VT7
- ORDER BY(对VT7的记录进行排序)–游标
- LIMIT(对排序之后的值进行分页)
WHERE条件执行顺序(影响性能)
- MYSQL:从左往右去执行WHERE条件的。
- Oracle:从右往左去执行WHERE条件的。
结论:写WHERE条件的时候,优先级高的部分要去编写过滤力度最大的条件语句。