当前位置:   article > 正文

数据库查询语句

数据库查询语句

1.查询全表数据

写法1:

SELECT * FROM 表名;

写法2:

  1. select
  2. 字段名称1,
  3. 字段名称2,
  4. ...
  5. 字段名称n
  6. from
  7. 表名;

写法3:给表起别名,同时给字段起别名,as可以省略

  1. select
  2. 关键字段1 AS'别名1',
  3. 关键字段2 AS'别名2',
  4. ...
  5. 关键字段n AS'别名n'
  6. from
  7. 表名 AS'别名';

查询指定字段

  1. select
  2. 关键字段1,
  3. 关键字段2,
  4. 关键字段
  5. from
  6. 表名;

2.冗余数据去掉

  1. select
  2. distinct 关键字段
  3. from
  4. 表名;

3.查询时,可以将关键字段为整数类型进行求和

  1. select
  2. 关键字段1,
  3. 关键字段2,
  4. (关键字段3+关键字段4),
  5. ...
  6. from
  7. 表名;
  8. 如果关键字段的值为null,进行数据运算时,需要给他赋一个期望值,ifnull(字段名称,期望值)
  9. select
  10. 关键字段1,
  11. 关键字段2,
  12. (关键字段3+ifnull(关键字段4,0)),
  13. ...
  14. from
  15. 表名;

4.带条件查询

-- select指定字段名称 from 表名 where 条件;

-- where 后面可以使用 赋值运算符=,比较运算符<;<=,>,>=,!=

  1. -- 查询关键字段大于某个值的记录
  2. select
  3. 关键字段1,
  4. 关键字段2
  5. ...
  6. from
  7. 表名
  8. where
  9. 关键字段>值;
  10. -- mysql里面判断某个条件不等于,<>(不等于)
  11. --查询关键字段不等于某个值的记录
  12. select
  13. 关键字段1,
  14. 关键字段2
  15. ...
  16. from
  17. 表名
  18. where
  19. 关键字段<>值;

-- where后面跟多个条件,并列条件或或者的条件

-- 并列条件

  1. -- and 值1<关键字段的值<值2的记录
  2. select
  3. 关键字段1,
  4. 关键字段2
  5. ...
  6. from
  7. 表名
  8. where
  9. 关键字段>1 and 关键字段<2;
  10. -- && 值1<关键字段的值<值2的记录
  11. select
  12. 关键字段1,
  13. 关键字段2
  14. ...
  15. from
  16. 表名
  17. where
  18. 关键字段>1 && 关键字段<2;
  19. -- between and
  20. --关键字段的值在值1和值2之间的记录
  21. select
  22. 关键字段1,
  23. 关键字段2
  24. ...
  25. from
  26. 表名
  27. where
  28. 关键字段 between1 and2;

-- 或条件

  1. -- || 关键字段的值=值1或者=值2的记录
  2. select
  3. *
  4. from
  5. 表名
  6. where
  7. 关键字段=1 || 关键字段=2;
  8. -- or关键字段的值=值1或者=值2的记录
  9. select
  10. *
  11. from
  12. 表名
  13. where
  14. 关键字段=1 or 关键字段=2;
  15. -- in 关键字段的值=值1或者=值2的记录
  16. select
  17. *
  18. from
  19. 表名
  20. where
  21. 关键字段 in( 值1 , 值2);

-- where条件后面可以跟某个字段为null或者部位null的格式

  1. -- 关键字段=null的记录
  2. select
  3. *
  4. from
  5. 表名
  6. where
  7. 关键字段 is null;
  8. -- 关键字段!=null的记录
  9. select
  10. *
  11. from
  12. 表名
  13. where
  14. 关键字段 is not null;

5.模糊查询

关键字like

select 指定字段列表 from 表名 where 字段名称 like '%字符%';

%:就是匹配任意字符(代表多个字符),(使用最多)
_:一个下划线代表一个任意字符值 (包含关系)  ,使用不多

  1. -- 需求:模糊查询所有姓为马的学生所有信息
  2. SELECT
  3. *
  4. FROM
  5. student3
  6. WHERE
  7. NAME
  8. LIKE '%马%' ;
  9. -- 需求:查询出姓名是两个字符的学生的所有信息
  10. -- where 条件后面 字段名称 like '__' ;
  11. SELECT
  12. *
  13. FROM
  14. student3
  15. WHERE
  16. NAME LIKE '__' ;
  17. -- 需求:模糊查询 学生姓名中第二个字是化的学生所有信息
  18. SELECT
  19. *
  20. FROM
  21. student3
  22. WHERE
  23. NAME LIKE '%_化%';
  24. -- 需求:查询学生姓名是否三个字符的人
  25. SELECT
  26. *
  27. FROM
  28. student3
  29. WHERE
  30. NAME LIKE '___' ;

6.聚合函数查询

-- 语法 select 聚合函数(字段名称) from 表名;

  1. -- count(字段名称):查询当前表的记录数
  2. -- 一般非业务字段 id,如果业务字段的有些值null,数据存在漏洞的!
  3. select
  4. count(字段名称)
  5. from
  6. 表名;
  7. -- sum(字段名称):求和,针对某列字段值进行求和(整数)
  8. select
  9. sum(字段名称)
  10. from
  11. 表名;
  12. -- avg(字段名称):平均分函数
  13. select
  14. avg(字段名称)
  15. from
  16. 表名;
  17. --max(字段名称):最大值函数
  18. select
  19. max(字段名称)
  20. from
  21. 表名;
  22. -- min(字段名称):最小值函数
  23. select
  24. min(字段名称)
  25. from
  26. 表名;

-- 复杂查询和聚合函数一块使用

  1. -- 条件查询嵌套聚合函数,数学成绩大于平均分的记录
  2. SELECT
  3. *
  4. FROM
  5. student3
  6. WHERE
  7. math > (SELECT AVG(math) FROM student3) ;

7.排序查询

-- 关键字order by

--语法:select 字段列表 from 表名 order by 字段名称 排序规则

--排序规则:asc:升序(默认值)  desc:降序

  1. -- 数学成绩升序排序
  2. select
  3. *
  4. from
  5. student
  6. order by math asc;
  7. -- 英语成绩降序排序
  8. select
  9. *
  10. from
  11. student
  12. order by english desc;

 -- 多个字段排序
-- 语法:select 字段列表 from 表名 order by 字段名称1 排序规则1 ,字段名称2 排序规则2 ;
-- 需求:查询数学成绩降序,英语成绩是升序的所有学生信息
-- 如果数学成绩相同,按照英语成绩排序规则进行操作

  1. -- 数学成绩降序排序,英语成绩升序排序
  2. select
  3. *
  4. from
  5. student
  6. order by math desc,english asc;

8.字符编码格式

show variables like '%character%';

set character_set_client=gbk;

9.分组查询

分组查询的时候,使用select可以查询出分组的字段

select 字段列表(包括字段分组) from 表名 group by 分组字段名称;

按照性别分组,计算出他们组的数学平均分

select sex '性别',avg(math) '数学平均分' from student group by sex;

group by和where一块使用

--where 条件必须置于group by 之前,先满足条件,才能分组

-- group by的后面不能使用聚合函数

10.筛选having

-- having和group by:having 后面可以使用聚合函数,而且group by 不能使用聚合函数

-- where 在前面,下来group by,再是having筛选

数学成绩不大于70分的人不参与分组,筛选出总人数大于2的一组

select sex '性别' ,avg(math) '数学平均分',count(id) '总人数' from student

where math>70 group by sex having count(id)>2;

11.分页查询limit

-- select 字段列表 from 表名 limit 起始行数,每页显示的条数;

-- 起始行数=(当前页码-1)*每页显示的条数

已知参数:每页显示条数3条,查询第一页的数据

select * from student limit 0,3;

-- 第二页数据

select * from student limit 3,,3;

作业:

  1. USE ee_2204_02;
  2. CREATE TABLE student(
  3. id INT, -- id编号
  4. NAME VARCHAR(20), -- 姓名
  5. chinese INT, -- 语文
  6. english INT, -- 英语
  7. math INT -- 数学
  8. );
  9. INSERT INTO student(id,NAME,chinese,english,math) VALUES(1,'行哥',89,78,90);
  10. INSERT INTO student(id,NAME,chinese,english,math) VALUES(2,'潘金莲',67,53,95);
  11. INSERT INTO student(id,NAME,chinese,english,math) VALUES(3,'凤姐',87,78,77);
  12. INSERT INTO student(id,NAME,chinese,english,math) VALUES(4,'旺财',88,98,92);
  13. INSERT INTO student(id,NAME,chinese,english,math) VALUES(5,'白小黑',82,84,67);
  14. INSERT INTO student(id,NAME,chinese,english,math) VALUES(6,'白小黄',55,85,45);
  15. INSERT INTO student(id,NAME,chinese,english,math) VALUES(7,'范蹦蹦',75,65,30);
  16. -- 查询表中所有学生的信息
  17. SELECT* FROM student;
  18. -- 查询表中所有学生的姓名和英语成绩
  19. SELECT
  20. NAME,english
  21. FROM
  22. student;
  23. -- 过滤表中重复数据(去重关键字distinct)
  24. SELECT
  25. DISTINCT english
  26. FROM
  27. student;
  28. -- 统计每个学生的总分
  29. SELECT
  30. id '编号',
  31. NAME '姓名',
  32. (chinese+english+math)'总分'
  33. FROM
  34. student;
  35. -- 总分数上加上10分特长分
  36. SELECT
  37. id '编号',
  38. NAME '姓名',
  39. (chinese+english+math+10)'总分'
  40. FROM
  41. student;
  42. -- 使用别名表示学生分数
  43. SELECT
  44. s.`id` '编号',
  45. s.`name` '姓名',
  46. s.`chinese`'语文',
  47. s.`english` '英语',
  48. s.`math` '数学',
  49. (chinese+english+math+10)'总分'
  50. FROM
  51. student s;
  52. -- 查询姓名为行哥的学生成绩
  53. SELECT
  54. *
  55. FROM
  56. student
  57. WHERE NAME='行哥';
  58. -- 查询英语成绩大于90分的同学
  59. SELECT
  60. *
  61. FROM
  62. student
  63. WHERE
  64. english>90;
  65. -- 查询总分大于200分的所有同学
  66. SELECT
  67. *
  68. FROM
  69. student
  70. WHERE (chinese+english+math)>200;
  71. -- 查询英语分数在80-90之间的同学
  72. SELECT
  73. *
  74. FROM
  75. student
  76. WHERE
  77. english BETWEEN 80 AND 90;
  78. -- 查询数学分数为89,90,91的同学
  79. SELECT
  80. *
  81. FROM
  82. student
  83. WHERE
  84. math IN(89,90,91);
  85. -- 查询所有姓白的同学的英语成绩
  86. SELECT
  87. NAME '姓名',
  88. english '英语成绩'
  89. FROM
  90. student
  91. WHERE
  92. NAME LIKE '%白%' ;
  93. -- 查询数学分>80并且语文分>80的同学
  94. SELECT
  95. *
  96. FROM
  97. student
  98. WHERE
  99. math>80 AND chinese>80;
  100. -- 查询英语>80或者总分>200的同学
  101. SELECT
  102. *
  103. FROM
  104. student
  105. WHERE
  106. english>80 OR (chinese+english+math)>200;
  107. -- 对数学成绩升序排序
  108. SELECT
  109. *
  110. FROM
  111. student
  112. ORDER BY math ASC;
  113. -- 对总分降序排序,然后再按数学从高到低的顺序输出
  114. SELECT
  115. *
  116. FROM
  117. student
  118. ORDER BY (chinese+english+math) DESC,math DESC;
  119. -- 对姓白的学生成绩排序输出(排序规则自己定义)
  120. SELECT
  121. *
  122. FROM
  123. student
  124. WHERE NAME LIKE '%白%'
  125. ORDER BY math ASC;
  126. -- 查询数学成绩大于等于平均分的所有学生信息
  127. SELECT
  128. *
  129. FROM
  130. student
  131. WHERE
  132. math>=(SELECT AVG(math) FROM student);
  133. -- 查询出英语成绩最高分的学生信息
  134. SELECT
  135. *
  136. FROM
  137. student
  138. WHERE
  139. english=(SELECT MAX(english) FROM student);
  140. -- 模糊查询出学生姓名中第二个字是金的学生信息
  141. SELECT
  142. *
  143. FROM
  144. student
  145. WHERE
  146. NAME LIKE '%_金%';
  147. -- 查询出英语成绩平均分是多少
  148. SELECT
  149. AVG(english)
  150. FROM
  151. student;
  152. -- 查询出数学总分是多少
  153. SELECT
  154. SUM(math)
  155. FROM
  156. student;
  157. -- 查询学生表中有多少条记录
  158. SELECT
  159. COUNT(id)
  160. FROM
  161. student;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/164288
推荐阅读
相关标签
  

闽ICP备14008679号