MySQL之知识点(八)

一、HAVING的使用

HAVING:用来过滤数据。

#需求:查询学号中学号比1003大的学生

错误写法:
mysql>  select name,max(id) where max(id)>1003 from employees group by id;

mysql> select name,max(id) from employees having max(id)>1003 group by id;

正确写法:

mysql> select name,max(id) from employees group by id having max(id)>1003;

结论1:如果过滤条件中使用了聚合函数,则必须使用HAVING来代替WHERE。否则会报错

结论2:HAVING声明必须在group by的后面。

结论3:在开发中,我们使用HAVING的前提是SQL中使用了group by。

结论4:当过滤条件中有聚合函数时,则此过滤条件必须声明在HAVING中,当过滤条件中没有聚合函数时,则过滤条件声明在WHERE或HAVING中都行,但,建议声明在WHERE中。

注意:WHERE与HAVING的对比

区别1:WHERE可以直接使用表中的字段作为筛选条件,但不能使用分组中的计算函数作为筛选条件;HAVING必须要以GROUP BY配合使用,可以把分组计算的函数和分组字段作为筛选条件

区别2:如果需要通过连接从关联表中获取需要的数据,WHERE是先筛选后连接,而HAVING是先连接后筛选

SQL语句的执行过程:
FROM..... ->ON ->(LEFT/RIGHT  JOIN) ->WHERE ->GROUP BY ->HAVING ->SELECT ->DISTINCT ->ORDER BY ->LIMIT

二、子查询 

子查询指一个查询语句嵌套在另一个查询语句内部的查询

子查询的基本语法结构:

子查询(内查询)在主查询之前一次执行完成。

子查询的结果被主查询(外查询)使用

注意事项:

  • 将子查询放在比较条件的右侧
  • 单行操作符对应单行子查询,多行操作符对应多行子查询
  • 子查询要包含在括号内

多行子查询:也称为集合比较子查询,内查询返回多行,需要使用多行比较操作符。

多行比较操作符: 

 

三、数据库的创建、修改与删除

1,标识符命名规则:

  • 数据库名、表名不得超过30个字符,变量名限制为29个
  • 必须只能包含A-Z,a-z,0-9,_共63个字符
  • 数据库名、表名、字段名等对象名中间不要包含空格
  • 同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名
  • 必须保证你的字段没有和保留字、数据库系统或常用方法冲突,如果坚持使用,在SQL语句中使用引起来
  • 保持字段名和类型一致性:在命名字段并为其指定数据类型的时候一定要保证一致性,假如数据类型在一个表里是整数,那在另一个表里可就别变成其他数据类型

2,创建数据库

(1)方式1:创建数据库

create database 数据库名;#创建的此数据库使用的是默认的字符集

 

(2)方式2:创建数据库并指定字符集

 create database 数据库名 character set 字符集;#显示指明了要创建的数据库的字符集

 

(3)方式3:判断数据库是否存在,不存在则创建数据库

  create database if not exists 数据库名;

 注意:如果创建的数据库已经存在,则创建不成功,但是不会报错

如果MySQL中已经存在相关的数据库,则忽略创建语句,不再创建数据库。

注意:database不能改名,一些可视化工具可以改名,它是建新库,把所有表复制到新库,再删旧库完成的。 

3.管理数据库

(1)查看数据库

show databases;

(2)切换数据库

use 数据库名 ;

(3)查看数据库中保存的数据表

show tables;

(4)查看当前使用的数据库

select database() from dual;

 

(5)查看指定数据库下保存的数据表

show tables from mysql; 

4,修改数据库

(1)更改数据库字符集

show create database  数据库名 alter database 数据库名 character set ' 字符集类型';

5,删除数据库

(1)drop database 数据库名;

(2)drop database if exists 数据库名;(如果删除的数据库存在,则删除成功)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值