今天学了什么? 分页查询、分组查询、聚合函数、多表连查等等
基本查询语句dml:表的管理ddl:表的管理 基本查询语句:select后跟要查找的数据。from后为查找的来源 | SELECT | {*|〈字段列表〉} | FROM <表 <表 2>··· | [WHERE〈表达式〉] | [GROUP BY ] | [HAVING [{ }…]] | [ORDER BY ] | [LIMIT (, ) ) | SELECT [字段1, 字段2, …, 字段 n] | FROM [表或视图] | WHERE [查询条件]; | /* | | {*|<字段列表 }包含星号通配符和选字段列表,“*”表示查询所有的字段,“字段列表”表示查询指 | 定的字段,字段列至少包含一个字段名称,如果要查询多个字段,多个字段之间用逗号隔开,最后一个字 | 段后不要加逗号。 | FROM <表1> ,<表2 >…中,表1 和表2 表示查询数据的来源,可以是单个或者多个。 | WHERE 子句是可选项,如果选择该项, 查询条件 将限定查询行必须满足的查询条件。 | GROUP BY 子句告诉 MySQL 如何显示查询出来的数据,并按照指定的字段分组。 | ORDER BY 子句告诉 MySQ 按什么样的顺序显示查询出来的数据 可以进行的排序有升序 CASC )、 | 降序 DESC )。 | [LIMIT [< offset>,] < row count> 子句告诉 MySQL 每次显示查询出来的数据条数。 | | ?*/ 查找所有列 select * from 表名; select子句后也可以跟表达式
查询表中若干记录
select 字段名1,字段名2,字段名n... from 表名 where 查询条件
分页查询 limit [位置偏移量,] 行数 从第几行开始返回多少条
位置偏移量,指mtsql从哪一行开始显示,可选参数;不指定将会从表第一条记录开始;第一条位置偏移量是0开始。
行数,指返回的记录条数
聚合查询 就是利用聚合函数查询-_- 聚合函数: MAX 查询指定列的最大值 MIN 查询指定列的最小值 COUNT 统计查询结果的行数 SUM 求和,返回指定列的总和 AVG 求平均值,返回指定列数据的平均值
select 函数名(参数) from 表名;
于groub by连用
select 函数名(参数) from 表名[group by 字段] [having <条件表达式>];
注意:函数名(参数)前想要显示其他列要用','号隔开,但以函数查询为主。
分组查询和统计函数 [group by 字段] [having <条件表达式>] 字段 ,表示进行分组时所依据列的名称 having<表达式>,指定group by分组时需要满足的限定条件相当于where GROUP BY 键字通常和集合函数一起使用,例如 MAX()、 MIN()、 COUNT()、 SUM()、 AVG()。 count() 统计查询结果的函数
查看数据表结构 desc 表名;查看表结构(以表格形式展示表结构)
多表连查 | 多个表一起查询_ 交叉连接 select <字段名> from <表1> cross join <表2> [where子句] 或 select <字段名> from <表1>,<表2> [where子句] 字段名,需要查询的字段名称 <表1><表2>,需要交叉连接的表名 where子句,用来设置交叉连接的查询条件 注意:多个表交叉连接时,在from后连续使用cross join 或,号。第一个是标准的写法。不建议用,因为笛卡尔积返回的结果非常多。
内连接
| 内连接(INNER JOIN)主要通过设置连接条件的方式,来移除查询结果中某些数据行的交叉连接。简单来说,就是利用条件表达式来消除交叉连接的某些数据行。
使用inner join关键字连接两张表,并使用on子句来设置连接条件。如果没有连接条件,inner join和cross join在语法上时等同的,两者可互换。
select <字段名> from <表1> inner join <表2> [on 子句]
字段名:需要查询的字段名称。
<表1><表2>:需要内连接的表名。
INNER JOIN :内连接中可以省略 INNER 关键字,只用关键字 JOIN。
ON 子句:用来设置内连接的连接条件。
注意:多个表内连接,在from后连续使用inner join 或join即可。;多个表查询,要在select语句后制定字段来源(表名.列名)或(别名.列名)。
外连接
| 外连接可以分为左外连接和右外连接
内连接的查询结果都是符合连接条件的记录,而外连接会先将连接的表分为基表和参考表,再以基表为依据返回满足和不满足条件的记录。左连接,左边的表为基表;右连接,右边的表为基表。
左外连接
使用left outer join关键字连接两个表,on子句来设置连接条件。
select <字段名> from <表1> left outer join <表2><on子句>
字段名:需要查询的字段名称。
<表1><表2>:需要左连接的表名。左连接查询时,可以查询出“表1”中的所有记录和“表2”中匹配连接条件的记录。如果“表1”的某行在“表2”中没有匹配行,那么在返回结果中,“表2”的字段值均为空值(NULL)。
LEFT OUTER JOIN:左连接中可以省略 OUTER 关键字,只使用关键字 LEFT JOIN。
ON 子句:用来设置左连接的连接条件,不能省略。
右外连接
右连接是左连接的反向连接,使用right outer join 关键字连接两个表,并使用on子句设置连接条件
select <字段名> from <表1> right outer join <表2> <on子句>
字段名:需要查询的字段名称。
<表1><表2>:需要右连接的表名。与左连接相反,右连接以“表2”为基表,“表1”为参考表。右连接查询时,可以查询出“表2”中的所有记录和“表1”中匹配连接条件的记录。如果“表2”的某行在“表1”中没有匹配行,那么在返回结果中,“表1”的字段值均为空值(NULL)。
RIGHT OUTER JOIN:右连接中可以省略 OUTER 关键字,只使用关键字 RIGHT JOIN。
ON 子句:用来设置右连接的连接条件,不能省略。
子查询
将一个查询嵌套在另一个查询语句中。子查询可以在select、update和delete语句中使用,而且可以进行多层嵌套。
where <字段> <操作符>(子查询)
其中,操作符可以是比较运算符和in、ont in、exists、ont exists等关键字比较运算符 in和not in
注意:外层的 SELECT 查询称为父查询,圆括号中嵌入的查询称为子查询(子查询必须放在圆括号内)。MySQL 在处理上例的 SELECT 语句时,执行流程为:先执行子查询,再执行父查询。因为括号优先级最高。
多层嵌套子查询的最终数据集只包含父查询(即最外层的查询)的 SELECT 子句中出现的字段,而子查询的输出结果通常会作为其外层子查询数据源或用于数据判断匹配。
带any、some关键字的子查询
ANY SOME 键字是同义词,表示满足其中任一条件。它们允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中的任何一个比较条件就返回 个结果作为外层查询的条件。
where <字段> any/some(子查询)
带all 关键字的子查询
使用 ALL 时需要同时满足所有内层查询的条件。
where <字段> all(子查询)
EXISTS 关键字的子查询
EXISTS 关键字后面的参数是一个任意的子查询,系统对子查询进行运算以判断它是否返回行,如果至少返回一行,那么 EXISTS 返回的结果为 TRUE ,此时外层查询语句将进行查询:如果子查询没有返回任何行,那么 EXISTS 返回的结果为 FALSE ,此时外层语句将不进行查询。
where exists(子查询)
| 子查询返回一行就为true,否则false
自连接
使用表的别名实现表与其自身连接的查询方法。对自身进行筛选。
本质用第一张表的字段去对应第二张表去看例子吧
合并查询结果
union[all]关键字
查询语句1 union[all]查询语句2
使用all为不删除重复行不进行自动排序;不适用all为在执行时删除重复记录。
笛卡尔积 笛卡尔积(Cartesian product)指两个集合X和Y的乘积。
|