MySQL第二天--where条件查询、视图及函数

http://blog.csdn.net/zuosixiaonengshou/article/details/52997394


//把数据库导出到脚本文件
mysqldump -uroot -p1234 --databases abc > d:/a/abc.sql //--databases是需要两个--

 

Where子句:

Select 字段 From 表名where 条件 and  条件 or 条件 
Update tabletableName set .. Where 条件
Delete from tableName where ….

 

条件查询:

where关键字。(Name=‘dd’ and age=33) or addr=‘BJ’
 
between X and Y关键字。在什么之间
 
in关键字和not in. In(‘….’,’aafad’,’afasdf’);
 
and和or关键字。
 
使用like实现模糊查询。%
 
[sql]  view plain  copy
 print ?
  1. 通过is null判断是否为null。(要区分空字符串与null的区别)  
  2.   
  3. CREATE TABLE stud(  
  4.   id INT PRIMARY KEY,  
  5.   NAME VARCHAR(32) NOT NULL,  
  6.   score NUMERIC(4,1)  
  7. );  
  8. //把所有名字都设成"Mike"了  
  9. UPDATE stud SET NAME="Mike"  
  10.   
  11. //只设置分数>=70的记录的Name  
  12. UPDATE stud SET NAME="Exc" WHERE score>=70  
  13.   
  14. //同时修改多个字段(下面两种方式都可。字段值即使不是字符类型,也可以加引号---注意,字符类型的值必须加引号。因此为安全考虑,最好所有的值都加引号--单引号和又引号都可以)  
  15. UPDATE stud SET NAME="笨蛋",id=5 WHERE score<60  
  16. UPDATE stud SET NAME="笨蛋",id='5' WHERE score<60  
  17.   
  18.   
  19. where子句的句型  
  20. Select 字段列表  From 表名 where 条件 and  条件 or 条件   
  21. Update table tableName set .. Where 条件  
  22. Delete from tableName where ….  
  23.   
  24. //查询分数在[60,80]之间的学生  
  25. SELECT * FROM stud WHERE score>=60 AND score<=80;  
  26. SELECT NAME,score FROM stud WHERE score BETWEEN 60 AND 80; //between子句是包含边界的  
  27.   
  28. //查询分类正好是65和85的学生  
  29. SELECT * FROM stud WHERE score=65 OR score=85;  
  30. SELECT * FROM stud WHERE score IN(65,85); //in子句中的值是离散的  
  31.   
  32. //模糊查询: like    参数: %(任意匹配)  _(匹配单字符)  
  33. SELECT * FROM stud WHERE NAME LIKE '王%'; //姓王的学生  
  34. SELECT * FROM stud WHERE NAME LIKE '王_'; //姓王且名为单字的学生  
  35. SELECT * FROM stud WHERE NAME LIKE '王__'; //姓王且名为双字的学生  
  36. SELECT * FROM stud WHERE NAME LIKE '%王%';//姓名中包含"王"的学生  
  37.   
  38. //查询某字段值为空  
  39. SELECT * FROM stud WHERE score IS NULL; //注意,不能用"="号  

 

视图view:

视图是保存在数据库中的选择查询,相当于从一个或多个数据表中派生出来的虚拟表。它兼有查询和表的双重功能。
查询功能:视图保存一个完整的SQL查询命令,相当于给一个查询起了一个名字。简化数据查询和数据处理操作。提高数据的安全性。
表的功能:视图可以和表一样使用,即操作表的所有命令都可以使用在视图中,但是要注意:视图本身不含有任何数据,每次使用相当于从数据库表中重新查询。
创建视图的示例:
•Createviewview_name as select * from stud where id>3;
 

 

[sql]  view plain  copy
 print ?
  1. //视图View ---对视图的操作能够时时更新到物理表,只是操作范围只针对视图中的进行(效率更高)  
  2. CREATE VIEW studV AS SELECT * FROM stud WHERE score<60;  
  3. SELECT NAME FROM studV;  
  4. UPDATE studV SET score = score*1.1; //该句执行后: 1)如果分数及格则studV视图中不再包含该数据 2)物理表stud中的数据也更改了。  


 

 

使用聚合函数:

Count(*)行数量—不包含空行 null
avg平均。
Sum求和。
Max最大,
Min最小。
Distinct-去除相同的信息。
Exists存在判断
 
[sql]  view plain  copy
 print ?
  1. //聚合函数  
  2. SELECT COUNT(*) AS num FROM stud; //统计表中数据的行数  
  3. SELECT COUNT(score) AS num FROM stud; //统计score列中非NULL数据行的数量                                                                SELECT AVG(score) AS avgg FROM stud;//统计分数的平均值(不包含score值为null的记录)  
  4.    SELECT AVG(score) AS avgg FROM stud WHERE score IS NOT NULL;  
  5.   
  6. SELECT ROUND(AVG(score)) AS avgg FROM stud;//四舍五入,取整  
  7. SELECT ROUND(AVG(score),2) AS avgg FROM stud;//四舍五入,保留两位小数  
  8.   
  9. SELECT SUM(score) AS avgg FROM stud;//求和  
  10. SELECT MAX(score) AS avgg FROM stud; //最大值(最高分)  
  11. //查询出最高分学生的信息  
  12. SELECT * FROM stud WHERE score = (SELECT MAX(score) AS avgg FROM stud );  
  13. SELECT * FROM stud WHERE score INSELECT MAX(score) AS avgg FROM stud );  
  14.   
  15. //查询有哪些年龄段的学生(显示有哪些年龄值,即年龄值相同的只显示一个)---以后的显示有哪些专业、哪些部门 都用distinct  
  16. SELECT DISTINCT age FROM stud;  
  17. SELECT DISTINCT age FROM stud ORDER BY age ASC; //升序  
  18. SELECT DISTINCT age FROM stud ORDER BY age DESC; //降序  
  19.   
  20. //反模式--以下语句要么显示所有记录,要么一条也不显示。因为EXISTS()返回的是同一个结果  
  21. SELECT * FROM stud WHERE EXISTS( SELECT * FROM stud WHERE age=25 );  


 

 

使用group by对数据进行分组:

MySQL第二天--where条件查询、视图及函数_第1张图片

 

查询所有人考试的总分
Select sum(score),name from stud group by name;
查询考试总分大于50的人:下面使用了别名和having关键字。
Select sum(score) as c,name from stud group by name having c>50
Having:
Having关键字的作用是对已经使用了聚合函数的查询再进行过虑:
如:根据字段ID计算数量,然后只选择数据大于4的记录:
SELECT COUNT(*),func_role FROM func GROUP BY func_role
HAVING COUNT(*) >4
 
[sql]  view plain  copy
 print ?
  1. //句型: group by... having... ---把各年龄段学生的平均分显示出来  
  2. SELECT AVG(score) 平均分, age FROM stud GROUP BY age;    
  3. SELECT AVG(score) 平均分, age FROM stud GROUP BY age HAVING age>20;    
  4. SELECT AVG(score) 平均分, age FROM stud GROUP BY age HAVING AVG(score)>=70;  
  5.   
  6.   
  7.   
  8.   
  9. //字符串处理函数  
  10. Length(str) - 求字符串长度  
  11. Ltrim(str) - 去掉左边的空格  
  12. Rtrim(str) - 去掉右边的空格  
  13. Left(str,n); - 从左边取出n个字符  
  14. Right(str,n); - 从右边取出n个字符  
  15. Substring(str,begin,len) -返回子串, begin的序号从1开始 ※  
  16. Reverse(str) –返回颠倒的字符串  
  17. Lower(str) - 转成小写  
  18. Upper(str) - 转成大写  
  19. Concat(Str,str…..)串联字符串。  
  20. Instr(str,s) – 返回s在str中出面的位置,没有则返回0  
  21.   
  22. SELECT * FROM stud WHERE LENGTH(NAME)>3;  
  23. SELECT * FROM stud WHERE LENGTH(LTRIM(NAME))>3;  
  24.   
  25. SELECT SUBSTRING(NAME,1,2) FROM stud;  
  26. SELECT * FROM stud WHERE SUBSTRING(NAME,1,1)='王';//显示姓王的学生  

你可能感兴趣的:(MySQL第二天--where条件查询、视图及函数)