二、MySQL之数据操作语句

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21918021/article/details/89216784

二、MySQL之数据操作语句

2.1、插入记录:insert

语法:

insert into(列名1,列名2,列名3..) values  (1,2,3..); -- 向表中插入某些列
insert intovalues (1,2,3..); --向表中插入所有列
insert into(列名1,列名2,列名3..) values select (列名1,列名2,列名3..) frominsert intovalues 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查询语法顺序

  1. SELECT
  2. FROM
  3. LEFT JOIN
  4. ON
  5. WHERE
  6. GROUP BY
  7. HAVING
  8. ORDER BY
  9. 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
  1. FROM(将最近的两张表,进行笛卡尔积)—VT1
  2. ON(将VT1按照它的条件进行过滤)—VT2
  3. LEFT JOIN(保留左表的记录)—VT3
  4. WHERE(过滤VT3中的记录)–VT4…VTn
  5. GROUP BY(对VT4的记录进行分组)—VT5
  6. HAVING(对VT5中的记录进行过滤)—VT6
  7. SELECT(对VT6中的记录,选取指定的列)–VT7
  8. ORDER BY(对VT7的记录进行排序)–游标
  9. LIMIT(对排序之后的值进行分页)

WHERE条件执行顺序(影响性能)

  • MYSQL:从左往右去执行WHERE条件的。
  • Oracle:从右往左去执行WHERE条件的。

结论:写WHERE条件的时候,优先级高的部分要去编写过滤力度最大的条件语句。

猜你喜欢

转载自blog.csdn.net/qq_21918021/article/details/89216784