数据库语句练习

一、select查询子句使用和注意事项:

1.where 

where后跟条件用来筛选我们所需的行。它后面可以跟的操作符有=、!=、<、>、<=、>=、 in、 like(可以和通配符%结合一起用,效果将会更好) 、between....and........ AND、OR 、NOT 

如:select id,name,score form student where score in (每组里面的最高分组合); 

2.group by(GROUP BY 语句用于结合合计函数(也叫聚合函数sum count avg max min),根据一个或多个列对结果集进行分组。否则没有多大的意义)

group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面
如:我们对文字的分类id进行分组,查询每组分类的文章数 select articlecategory_id,count(*) from article group by articlecategory_id;
再次提示:
如果你使用了group by,而没有相应的使用聚合函数那么结果就没有意义了,按照实际情况来思考的话就变成了一对多了(也就是一个分组对应多个对象(也就是多行),那么一个分组对应多行数据的显示就变成了分组和第一行数据进行显示了,
所以此时我们应该使用聚合函数(聚合函数就是把多个变成一),也就是对多行数据进行筛选,得到我们想要的数据,如:可以使用count计算论坛小组总帖子数,可以使用sum来计算
论坛小组帖子总回复数,可以使用max来计算论坛小组最多回复的帖子,可以使用min来计算论坛小组最少回复数(没有多大意义,商城最便宜的商品就意义了),可以使用avg来计算论坛每周的平均访问量(商城所有商品的平均价格)等。
 

3.having 这个是针对查询的结果进行作用,只能对结果拥有的列进行操作,与where不同的是where是针对原表(就是from后面的那张表的字段)发挥作用。其中having里面可以使用聚合函数。为group by子句设置条件,类似于where为select语句设置条件的方法。having的查找条件可以包括集合函数表达式。除此之外,它的查找条件与where查找条件相同。

 HAVING 子句中用到的列必须出现在 GROUP BY 子句或聚合函数中。

select articlecategory_id,count(*) from article group by articlecategory_id having count(*)<5;

4.order by 排序 (可以对多个字段进行排序)

可以针对字段进行排序,order by 字段1 [asc] 升序,[desc] 降序

5.limit是mysql的语法
select * from table limit m,n
其中m是指记录开始的index,从0开始,表示第一条记录
n是指从第m+1条开始,取n条。
select * from tablename limit 2,4
即取出第3条至第6条,4条记录

即取出第(m+1)至第(m+n)的数据

总结:where是针对from后面跟的表进行处理,而group by having order by limit则是针对select后面的字段进行处理。从它们的结构角度来看则:先整体后部分。

二、update和delete语句复杂使用需要注意的事项:

mysql的update的一些特点:

(1)、update 时,更新的表不能在set和where中用于子查询(只需要单张表的修改操作)

如:UPDATE a SET a.name = 'a' WHERE id IN (SELECT a.id FROM (SELECT * FROM a) AS a , b WHERE a)

(2)、update 时,可以对多个表进行更新(sqlserver不行);

         如:update ta a,tb b set a.Bid=b.id ,b.Aid=a.id;  

(3)、update 后面可以做任意的查询,这个作用等同于from,各种连接的查询:例如inner join,left join,还可以直接用逗号隔开(需要使用到多张表的修改操作)

例1:

UPDATE order_mall a,(SELECT order_mall.id FROM `order_mall`,`order_goods` WHERE order_mall.`id`=order_goods.`order_id` AND order_goods.order_status=8 AND order_goods.order_goods_type=3) b 
SET a.`status`=4
WHERE a.id=b.id

例2:

UPDATE `core_user` a,(SELECT message_push_conf.user_id,message_push_conf.`open_push` FROM `message_push_conf`) b 
SET a.`switch_push`=b.open_push
WHERE a.id=b.user_id

delete语句:

(1)删除的表不能在set和where中用于子查询,所以需要用到别名(单张表的删除操作)

delete from student where id = (select n.max_id from (select max(id) as max_id from student) as n);

(2)、delete from left join(需要使用到多张表的删除操作)

删除多表 DELETE q,pq from com_purchasequote q LEFT JOIN com_purchasequote_snapshoot pq on q.id=pq.id where q.id=84110;

删除一张表 DELETE q from com_purchasequote q LEFT JOIN com_purchasequote_snapshoot pq on q.id=pq.id where q.id=82347;

删除一张表 DELETE pq from com_purchasequote q LEFT JOIN com_purchasequote_snapshoot pq on q.id=pq.id where q.id=67710;

(3)、delete from A,B(需要使用到多张表的删除操作)

delete A from YSHA A , YSHB B whereA.code=b.code

相关联网址:https://www.cnblogs.com/daniell003/p/3860440.html

https://www.cnblogs.com/007sx/p/7404651.html

https://blog.csdn.net/xia_xing/article/details/47780091

原文地址:https://www.cnblogs.com/angelgril/p/9531533.html