Day 36 学习分享 - MySQL 查询功能

1. 基础查询
语法:
	select 列名1,列名2,列名3... from 表名 [Where 条件1 OR|AND 条件2...];
	
	如果没有条件, 查询整个表的数据!
	select * from 表名;

在这里插入图片描述

例子:
	查询学生名字和数学成绩:
		select name, math from student;
DISTINCT关键字:
	作用:
		去除重复的数据, 重复的数据只保留一条!
	例子:
		去除所有重复名字并显示
		select distinct(name) from student;
别名:
	select name 姓名, chinese 语文成绩 from student;
	这里的[姓名],[语文成绩]就是自定义的别名.
WHERE 关键字:
	作用:
		指定查询的特殊条件
	例子:
		查询数学成绩为88的学生信息
		select * from student where math=88;
BETWEEN... AND... 关键字:
	作用:
		代表限定条件在xxx之间
	例子:
		查找英语分数在80~90之间的学生信息
		select * from student where english between 80 and 90;
	
	注意:
		必须是小的数值在and前, 大的在and后.
IN 关键字:
	作用:
		代表限定条件在xxx里面
	例子:
		查找语文成绩为80,90,99的学生信息
		select * from student where chinese in (80,90,99);
2. 模糊查询
语法:
	select 列名1,列名2,列名3... from 表名 
	[where 列名 like 值];

通配符:	
	%: 匹配任意多个字符(0 或者1 或者多个).
	_: 匹配一个任意字符
	
例子:
	查询名字以小开头的学生信息
    select * from student where name like '小%';
    查询名字是两个字的学生信息
    select * from student where name like '__';
3. 排序查询
语法:
	select 列名1, 列名2, 列名3... from 表名
	[where 条件1 OR|AND 条件2]
	[order by 列名1 ASC|DESC, 列名2 ASC|DESC...];
	
	默认的排序方式是升序(可以省略ASC).
	
例子:
	查询所有学生的信息并以中文成绩降序表示:
	select * from student order by chinese desc;
4. 聚合查询
聚合查询函数:
sum(): 求总和

count(): 求总个数

avg(): 求平均值

max(): 求最大值

min(): 求最小值
5. 分页查询
语法:
	select 列名1, 列名2, 列名3... from 表名
	[where 条件1 OR|AND 条件2]
	[order by 列名1 ASC|DESC]
	[limit 开始查询的位置, 每页的条数];
	
注意:
	开始查询的位置是从 0 开始计算的!
	
例子:
	查询所有学生信息的前五条, 从第一条开始显示:
	select * from student limit 0,5;
6. 获取当前时间
在JAVA中, 我们可以通过new Data() 来获取时间
而在Mysql中, now()表示当前系统时间!

Date格式储存的时间只有年月日.
DateTime格式存储的是年月日, 时分秒.

Mysql日期时间计算函数:
	select date_add(new(), interval 100 day);
	代表当前时间一百天以后的时间.
7. 空或非空查询
语法:
	is null: 为空
	is not null: 非空
	
	select * from student where english is not null;
8. NOT关键字
作用:
	取反
	
not in():
	不在括号中的那些数据.
	select * from student where english not in(80,90,99);
	
not like:
	不包含的那些数据.
	select * from student where name not like (%张%);
9. 分组查询

在这里插入图片描述

语法:
	select 列名1, 列名2, 列名3... from 表名
	[where 条件1 OR|AND 条件2]
	[group by 分组的列...]
	[having 列名1...]
	[order by 列名1 ASC|DESC]
	[limit 开始查询的位置, 每页的条数];
	
例子:
	查询每个部门的平均薪资
	select avg(sal), deptno from emp group by deptno;
	
	查询每种职位的最高薪资和最低薪资
	select max(sal), min(sal), job from emp gourp by job;
	
	查询名字中包含o的员工的每种职位平均薪资,且是高于2000的平均薪资,并按照平均薪资降序排列
	select job, avg(sal) from emp where ename like '%o%' group by job having avg(sal)>2000 order by avg(sal) desc;
10. 子查询
例子:
	查询和SCOTT在同一部门下的所有员工
	
	select * from emp where deptno = (select deptno from emp where ename = 'scott');
	
将问题拆解! 分解成两部分来看, 再按步骤完成.
11. 外键约束
概念:
	主键Primary Key:
		是唯一标识一条记录, 不能有重复的, 不允许为空, 用来保证数据完整性.
	外键:
		是另一表的主键, 外键可以有重复的, 可以是空值,  用来和其他表建立联系用,
		所以说, 如果涉及到了外键, 一定是至少有两张表
		
	外键的作用:
		建立表之间的关系, 保证数据库的完整性, 准确性!
		
语法:
	alter table emp add foreign key(列名1) references department(列名2);
	
	alter table 表名1:
		在表名1中进行操作
	add foreign key(列名1):
		将表的列名1添加为外键
	references 表名2(列名2):
		映射到表名2中名字为列名2的列;
		
	如果在创建表的时候就设置外键的话, 必须确保想要映射的主表已经创建并且有主键.
	语法:
		foreign key(列名1) references 表名(列名2)
		
删除外键语句:
	alter table 表名 drop foreign key 外键名;
12. 表连接(join)
12.1 内连接
语法:
	SELECT... FROM 表名1
	INNER JOIN 表名2
	ON 连接条件
	[WHERE 判断条件]
	
	select 列名1, 列名2... from 表1
	inner join 表2 on 表1.字段=表2.字段
	[where 判断条件]

在这里插入图片描述

例子:
	查询薪资在2000-3000范围的的所有员工姓名和他所在的部门名字
	
	select e.name,d.name from employee e 
	inner join department d on e.dept_id = d.id
	where salary between 2000 and 3000; 
12.2 外连接
语法:	
	SELECT … FROM join_table1 (LEFT | RIGHT ) JOIN join_table2 ON join_condition WHERE where_definition; 

	LEFT(左外连接):
		左表列出全部,右表只列出匹配的记录
	RIGHT(右外连接):
    	右表列出全部,左表只列出匹配的记录

在这里插入图片描述

13. 多表连接
语法:
	SELECT * FROM 表名1
	INNER JOIN 表名2 ON join_condition1
	INNER JOIN 表名3 ON join_condition2;

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值