mysql——查询语句——单表查询——(概念)

深碍√TFBOYSˉ_ 2023-10-02 08:52 61阅读 0赞
  1. 一、基本查询语句
  2. select的基本语法格式如下:
  3. select 属性列表 from 表名和视图列表
  4. [ where 条件表达式1 ]
  5. [ group by 属性名1 [ having 条件表达式2 ] ]
  6. [ order by 属性名2 [ asc | desc ] ]
  7. 属性列表参数表示需要查询的字段名;
  8. 表名和视图列表参数表示从此处指定的表或者视图中查询数据,表和视图可以有多个;
  9. 条件表达式1参数指定查询条件;
  10. 属性名1参数指按照该字段的数据进行分组;
  11. 条件表达式2参数满足该表达式的数据才能输出;
  12. 属性名2参数指按照该字段中的数据进行排序;排序方式由ascdesc这两个参数指出;
  13. asc参数表示升序,这是默认参数,desc表示降序;(升序表示从小到大)
  14. 对记录没有指定是asc或者desc,默认情况下是asc
  15. 如果有where子句,就按照“条件表达式1”指定的条件进行查询;如果没有where子句,就查询所有记录;
  16. 如果有group by子句,就按照“属性名1”指定的字段进行分组,如果group by后面带having关键字,那么只有
  17. 满足“条件表达式2”中知道的条件才能输出。group by子句通常和count()、sum()等聚合函数一起使用;
  18. 如果有order by子句,就按照“属性名2”指定的字段进行排序,排序方式由ascdesc两个参数指出;默认情况下是asc
  19. 二、单表查询
  20. 1、查询所有字段
  21. (1)列出表的所有字段
  22. 举例:select num_id,d_id,name,age from employee;
  23. (2)使用“*”查询所有字段
  24. 语法格式:select * from 表名;
  25. 注释:"*"可以表示所有的字段;
  26. 举例:select * from employee;
  27. 2、查询指定字段
  28. 查询数据时,可以在select语句的“属性列表”中列出所要查询的字段;
  29. 这种方式可以指定需要查询的字段,而不需要查询出所有字段;
  30. 举例:select name,age from employee;
  31. 3、查询指定记录
  32. where子句可以用来指定查询条件
  33. 语法格式:where 条件表达式
  34. 其中条件表达式参数指定select语句的查询条件;
  35. 举例:select * from employee where d_id=1001;
  36. where子句常用的查询条件又很多种,如下表示:
  37. 比较 =、<、>、<=、>=、……
  38. 指定范围 between andnot between and
  39. 指定集合 innot in
  40. 匹配字符 like not like
  41. 是否为空值 is null is not null
  42. 多个查询条件 andor
  43. 4、带in关键字的查询
  44. in关键字可以判断某个字段的值是否在指定的集合中。
  45. 语法格式:[not] in (元素1,元素2,……元素n);
  46. 注释:各个元素之间用逗号隔开
  47. 举例:select * from employee where d_id in(1001,1004);
  48. 注释:d_id字段的取值为10011004的记录都被查询出来;
  49. 举例:select * from employee where name not in('张三','李四');
  50. 注释:name字段取值为“张三”和“李四”的记录都被排除了;
  51. 5、带between and的范围查询
  52. between and关键字可以判断某个字段的值是否在指定范围内。
  53. 语法格式:[not] between 取值1 and 取值2;
  54. 其中not是可选参数,加上not表示不在指定范围内满足条件;
  55. “取值1”表示范围的起始值;“取值2”表示范围的终止值;
  56. 举例:select * from employee where age between 15 and 20;
  57. 注释:age取值大于等于15,且小于等于20的记录显示出来;
  58. 举例:select * from employee where age not between 15 and 20;
  59. 注释:年龄小于15或者大于20的记录显示出来;
  60. 6、带like的字符匹配查询
  61. like关键字可以匹配字符串是否相等。
  62. 语法格式:[not] like '字符串';
  63. not是可选参数,加上not表示与指定的字符串不匹配时满足条件;
  64. 字符串表示指定用来匹配的字符串,该字符串必须添加单引号或者双引号。
  65. 字符串参数的值可以是一个完整的字符串,也可以是包含%或者_的通配符;
  66. %可以代表任意长度的字符串,长度可以为0
  67. 举例:b%k表示以字母b开头,以字母k结尾的任意长度的字符串;该字符串可以代表bk,buk,book,break等字符串;
  68. _只能代表单个字符;
  69. 举例:b_k表示以字母b开头,以字母k结尾的长度为3的字符串。中间的_可以代表任意一个字符串;
  70. 举例:select * from employee where name like 'aric';
  71. 此处查询出name='aric'的记录,这里like相当于=
  72. 注意一个汉字是2个字符串,要用2个--
  73. 7、查询空值
  74. is null关键字可以用来判断字段的值是否为空值。
  75. 语法格式:is [not] null;
  76. 举例:select * from employee where info is null;
  77. 8、带and的多条件查询
  78. and关键字可以联合多个条件进行查询,使用and关键字时,只有同时满足所有查询条件的记录才会被查询出来;
  79. 语法格式:条件表达式1 and 条件表达式2 […… and 条件表达式n]
  80. 举例:select * from employee where d_id<1004 and age <26 and sex='男';
  81. 举例:select * from employee where num in(1,2,3) and age between 15 and 30 and homeaddr like '%北京市%';
  82. 9、带or的多条件查询
  83. 使用or关键字时,只要满足这几个查询条件中的一个,这样的记录将会被查询出来,如果不满足这些查询条件的任何一个,这样的记录将会被排除
  84. 语法格式:条件表达式1 or 条件表达式2 [ ……or 条件表达式n ]
  85. 举例:select * from employee where d_id=1001 or sex like '男';
  86. 使用or关键字来查询employee表中d_id1001,或者sex'男'的记录;
  87. 注意:and or 关键字一起使用时,andor要先运算,and关键字前后的条件先结合,然后再与or关键字的条件结合。
  88. 举例:
  89. select * from employee where num in(1,2,3) and age = 20 or sex='女';
  90. select * from employee where sex='女' or num in(1,2,3) and age = 20;
  91. 这两个select语句的执行结果是一样的,
  92. 10、查询结果不重复
  93. 如果表中的某些字段没有唯一性约束,这些字段可能存在着重复的值。
  94. select语句中可以使用distinct关键字来消除重复的记录;
  95. 语法格式: select distinct 属性名
  96. 举例:select distinct d_id from employee;
  97. 11、对查询结果排序
  98. 使用order by关键字对记录进行排序
  99. 语法格式:order by 属性名 [ asc|desc ]
  100. 属性名参数表示按照该字段进行排序;
  101. asc参数表示按照升序的顺序进行排序;
  102. desc参数表示按照降序的顺序进行排序;
  103. 默认情况下按照asc方式进行排序;
  104. 举例:select * from employee order by age desc;
  105. 注意:如果记录中存在一条记录,其age字段的值是空值(null),则这条记录将会显示为第一条记录,因为按照升序排序时,
  106. 含空值的记录将最先显示,可以理解为空值是该字段的最小值;而按照降序排序时,age字段为空值的记录将最后显示;
  107. MYSQL中,可以指定按照多个字段进行排序,
  108. 举例:select * from employee order by d_id asc,age desc;
  109. 查询employee表中的所有记录,按照d_id字段的升序方式和age字段的降序方式进行排序
  110. 查询结果排序时,先按照d_id字段的升序方式进行排序,如果有多个d_id字段的值相同,则这几个记录再按照age字段进行降序排列;
  111. 12、分组查询
  112. group by关键字可以将查询结果按照某个字段或多个字段进行分组,字段的值相等的为一组
  113. 语法格式:group by 属性名 [ having 条件表达式 ] [ with rollup ]
  114. 属性名参数是指按照该字段的值进行分组;
  115. having 条件表达式 用来限制分组后的显示,满足条件表达式的结果将被显示;
  116. with rollup关键字将会在所有记录的最后加上一条记录,该记录是上面所有记录的总和;
  117. 注意:group by关键字一般和聚合函数一起使用,如果不一起使用,那么查询结果就是字段取值的分组情况;
  118. 字段中取值相同的记录为一组,但只显示该组的第一条记录。
  119. (1)单独使用group by关键字来分组
  120. 如果单独使用group by关键字,查询结果只显示一个分组的一条记录;
  121. 举例:select * from employee group by sex;
  122. (2)group by关键字与group_concat()函数一起使用
  123. group by关键字与group_concat()函数一起使用时,每个分组中指定字段值都显示出来;
  124. 举例:select sex,group_concat(name) from employee group by sex;
  125. 查询结果分为两组,sex字段取值为“女”的记录是一组,取值为“男”的是一组;而男性的名字都会被列出来;
  126. (3)group by关键字与集合函数一起使用
  127. count()用来统计记录的条数;
  128. sum()用来计算记录的值的总和;
  129. avg()用来计算字段的值的平均值;
  130. max()用来查询字段的最大值;
  131. min()用来查询记录的最小值;
  132. 举例:select sex,count(sex) from employee group by sex;
  133. (4)group by关键字与having一起使用
  134. 如果加上having 条件表达式可以限制输出结果
  135. 举例:select sex ,count(sex) from employee group by sex having count(sex)>=3;
  136. 注释:"having 条件表达式""where 条件表达式"都是用来限制显示的,但是两者起的作用又不相同,
  137. "where 条件表达式"作用于表或者视图,是表和视图的查询条件;
  138. "having 条件表达式"作用于分组后的记录,用于选择满足条件的组;
  139. (5)按多个字段进行分组
  140. 举例:select * from employee group by d_id,sex;
  141. 查询结果显示,记录先按照d_id字段进行分组,因为有2条记录的d_id值为1001,所以这2条记录再按照sex字段的值进行分组。
  142. (6)group by关键字与rollup一起使用
  143. 使用rollup时,将会在所有记录的最后加上一条记录,这条记录是上面所有记录的总和;
  144. 举例:select sex,concat(name) from employee group by sex with rollup;
  145. 13、用limit限制查询结果的数量
  146. limit关键字可以指定查询结果从哪条记录开始显示,还可以指定一共可以显示多少条记录。
  147. limit关键字有两种使用方式。分别是不指定出事位置和指定初始位置。
  148. (1)不指定初始位置
  149. limit关键字不指定初始位置时,记录从第一条记录开始显示。显示的记录条数由limit关键字指定
  150. 语法格式:limit 记录数
  151. 记录数参数表示显示记录的条数
  152. 注释:如果“记录数”的值小于查询结果的总记录数,将会从第一条记录开始显示,显示指定条数的记录;
  153. 如果“记录数“的值大于查询结果的总记录数,数据库系统会显示查询出的所有记录
  154. 举例:select * from employee limit 2;
  155. 举例:select * from employee limit 10;
  156. 虽然limit关键字指定了10条记录,但是查询结果中只有4条记录,因此数据库系统会显示全部4条记录;
  157. (2)指定初始位置
  158. limit关键字可以指定从哪条记录开始显示,并且可以指定显示多少条记录
  159. 语法格式:limit 初始位置,记录数
  160. 初始位置指定从哪条记录开始显示;
  161. 记录数表示显示记录的条数;
  162. 第一条记录的位置是0,第二条记录的位置是1,后面以此类推;
  163. 举例:select * from employee limit 0,2;
  164. 三、使用聚合函数查询
  165. group by关键字通常和聚合函数一起使用
  166. 1count()函数
  167. count()函数用来统计记录的条数
  168. 举例:使用count()函数统计employee表的记录数
  169. select count(*) from employee;
  170. 举例:使用count()函数统计employee表中不同d_id值得记录数
  171. select d_id, count(*) from employee group by d_id;
  172. 注释:从这个例子可以看出,表中的记录先通过group by 关键字进行分组,然后再计算每个分组的记录数
  173. 2sum()函数
  174. sum()函数是求和函数
  175. 举例:使用sum()函数统计grade表中学号为1001的同学的总成绩
  176. select num,sum(score) from grade where num=1001;
  177. 举例:下面将grade表按照num字段进行分组,然后,使用sum()函数统计各分组的总成绩。即查询每一个同学的总成绩
  178. select num,sum(score) from grade group by num;
  179. 注释:grade表按num字段分为3组,num分别等于100110021003.然后分别计算出这三组的总成绩
  180. 注意:sum()函数只能计算数值类型的字段,不能计算字符类型。
  181. 3avg()函数
  182. avg()函数是求平均值的函数
  183. 举例:使用avg()函数计算employee表中的平均年龄
  184. select avg(age) from employee;
  185. 举例:使用avg()函数计算grade表中各个科目的平均成绩
  186. select course,avg(course) from grade group by course;
  187. 使用group by关键字将grade表的记录按照course字段进行分组,然后再计算出每一组的评价成绩
  188. 4max()函数
  189. max()函数是求最大值的函数
  190. 举例:使用max()函数查询employee表中的最大年龄
  191. select max(age) from employee;
  192. 举例:使用max()函数查询grade表中不同科目的最高成绩
  193. select course,max(score) from grade group by course;
  194. 先将grade表的记录按照course字段进行分组,然后查询出每一组的最高成绩
  195. 5min()函数
  196. min()函数是求最小值的函数
  197. 举例:使用min()函数查询出employee表中的最小年龄
  198. select min(age) from employee;
  199. 举例:使用min()函数查询出grade表中不同科目的最低成绩
  200. select course,min(course) from grade group by course;

发表评论

表情:
评论列表 (有 0 条评论,61人围观)

还没有评论,来说两句吧...

相关阅读

    相关 查询语句

    关系数据库基本概念   关系:整个二维表   关系名:表格名称   元祖:行数据(记录)   属性:列数据(字段)   属性名:列名称(字段名)   主键:唯一确定

    相关 MySQL查询

    本篇博客主要介绍了如何SELECT进行单表查询,怎样使用WHERE结合各种运算符对数据进行过滤,如何使用ORDER BY 子句 查询 概述:使用数据库保存数据