0
点赞
收藏
分享

微信扫一扫

mysql学习笔记

Xin_So 2022-03-12 阅读 89

Where查询和模糊查询

作用:检索数据中符合条件的值

逻辑运算符

运算符语法描述
and &&a and b || a&&b逻辑与,两个都为真,结果为真
or ||a or b || a || b逻辑或,其中一个为真,则结果为真
Not !not a || !a逻辑非,取反操作

where语句举例

1.查找某个区间
select [tablecolumn1,...]  from tableName where [condition1 and condition2....] or [condition1 or condition2]
2.模糊查询
select [tablecolumn1,...] from tableName where tablecolumn between num and num
3.not查询
select [tablecolumn1,...] from tableName where not condition1

4.单一条件查询

select tablecolumn from tableNamewhere num>200

5.NULL条件查询

注意:表达式为"IS NULL",不能写出"=NULL",两个NULL只也不能判断相等,如:

select tablecolumn from tableName where condition is null

如果改成 = NULL, 则查询结果是空集但不会报错 (不熟悉SQL常犯错误)**

模糊查询

运算符语法描述
IS NULLa is null如果操作符为NULL,则结果为真
IS NOT NULLa is not null如果操作符为not null ,结果为真
BETWEENa between b and c若a在b和c之间则结果为真
Likea like bsql匹配,如果a匹配到b,则结果为真
Ina in (a1,a2,a3…)假设a在a1或者a2。。。

模糊查询举例

-- condition 为查询条件
-- like结合  %(代表0到任意个字符)    _(一个字符)
select tablecolumn1,tablecoumn2 from tableName
where condition like 'x%'


-- 查询***  查询后跟一个字
select tablecolumn1,tablecoumn2 from tableName
where condition like 'x_'


-- 查询编号在100,101,102的人
select tablecolumn1 from tableName 
where condition in (100,101,102)

联结查询对比

select * from Table1 join_type Table2 on join_condition  
#说明:join_type是连接类型,join_condition是关联条件
  • inner join:显示Table1和Table2中通过Relation建立关联的信息,多余的信息不显示。
  • left join:显示Table1和Table2中通过Relation建立关联的信息,并同时显示左表中所有信息
  • right join:Table1和Table2中通过Relation建立关联的信息,并同时显示右表中所有信息
举例

建立数据库表如下图所示:

  • 学生表
    studenttable

  • 课程表
    classtable

  • 分数表
    scoretable

查询结果
  • inner join 查询结果如下图所示:
 select * from T_Student inner join T_Score on T_Student.S_ID=T_Score.S_ID

innerjoinres

  • left join 查询结果如下图所示:
 select * from T_Student left join T_Score on T_Student.S_ID=T_Score.S_ID

leftjoinres

  • right join 查询结果如下图所示:
select * from T_Student right join T_Score on T_Student.S_ID=T_Score.S_ID

rightjoinres

子查询和嵌套查询

定义

子查询:嵌套在其他查询中的查询

有三张表分别如下:

  1. customers: 存储顾客信息
    customs
  2. orderitems:只存储订单信息,无客户信息
    orderitems
  3. orders:存储订单号和顾客id
    orders

注意: 一般在子查询中,程序先运行在嵌套在最内层的语句,再运行外层。因此在写子查询语句时,可以先测试下内层的子查询语句是否输出了想要的内容,再一层层往外测试,增加子查询正确率。否则多层的嵌套使语句可读性很低。

子查询例子

查询购买商品为TNT2的顾客信息

分步步骤:

  • orderItems表中找到TNT2的订单编号

    SELECT order_num FROM orderitems
    WHERE prod_id='TNT2';
    
  • 在**orders表 ** 里找出第一步找出的订单号对应的客户id

    SELECT cust_id FROM orders
    WHERE order_num
    IN (SELECT order_num FROM orderitems WHERE prod_id='TNT2');
    
  • customers中找出第二步对应客户的所有信息

 ```mysql
 SELECT * FROM customers
 WHERE cust_id
 IN (SELECT cust_id FROM orders WHERE order_num IN
 (SELECT order_num FROM orderitems WHERE prod_id='TNT2'));
 ```

聚合函数和分组过滤

常用的聚合函数

函数名称描述
COUNT()计数
SUM()求和
AVG()求平均值
MAX()求最大值
MIN()求最小值

聚合函数使用例子

  1. count()

    select count(column) from tableName   --count(指定列),会忽略所有的null值
    select count(*) from tableName        
    select count(1) from tableName        
    
    • count(*)包括了所以的列相当于行数,在统计结果的时候,不会忽略列值为NULL
    • count(1)包括了葫芦哦所以列,用1代表代码行,在统计的时候,不会忽略列值为NULL

    执行效率上:

    列名为主键,count(列名) 会比count(1)快

    列名不为主键,count(1)会比count(列名)快

    如果表有多个列且没有主键,则count(1)的执行效率优于count(*)

    如果有主键,则count(主键)的执行效率最优

    如果只有一个字段 则select count(*)最优

  2. sum()

    select sum('字段') as 总和 from result
    
  3. avg()

    select avg('字段') as 平均分 from result
    
  4. max()

    select max('字段') as 最高分 from result
    
  5. min()

    select min('字段') as 最低分 from result
    

分组查询

在对数据表中数据进行统计时,可能需要按照一定的类别分别进行统计,比如,分别统计student表中,gender字段值为na、nv和NULL的学生成绩grade之和

参数说明

指定的字段名1、字段名2,是对查询结果分组的依据
HAVING关键字,指定条件表达式,对分组后的内容进行过滤
GROUP BY,一般和聚合函数一起使用,如果,查询的字段出现在GROUP BY后,却没有包含在聚合函数中,该字段显示的是,分组后的第一条记录的值,这样,可能会导致查询结果不符合我们的预期

单独使用Group by分组

单独使用GROUP BY关键字,查询的是每个分组中的一条记录,

查询student表中的记录,安装gender字段值进行分组

group1

可以看出,返回了3条记录,分别是gender字段值为NULL、nv、na的记录,查询结果按照gender字段中不同的值进行了分类,然后,值显示每个分组中的一条记录,意义不大,一般情况下,GROUP BY都和聚合函数一起使用

GROUP BY和聚合函数,一起使用

GROUP BY和聚合函数,一起使用,可以统计出某个,或者某些字段在一个分组中的最大值、最小值、平均值

查询student表,按照gender字段值进行分组,计算出每个分组中各有多少名学生
group2

可以看出,GROUP BY对gender字段进行了分组,然后,通过COUNT()函数统计出了每组的数量

GROUP BY和HAVING关键字,一起使用

HAVING关键字和WHERE关键字的作用相同,都是用于设置条件表达式,对查询结果进行过滤。

两者的区别,HAVING关键字后,可以跟聚合函数,而WHERE关键字不能,通常情况下,HAVING关键字,都是和GROUP BY一起使用,用于对分组后的结果进行过滤

查询student表,按照gender字段进行分组,查询出grade字段值之和小于300的分组

group3

可以看出,只有gender字段值为NULL和nv的分组,grade字段值之和小于300

举报

相关推荐

MySQL(学习笔记)

Mysql学习笔记

【MySQL】学习笔记

MYSQL学习笔记

MySQL学习笔记

MySQL 学习笔记(一)

学习笔记:初识MySQL

0 条评论