创建数据库
mysql>create school;
数据库中最基本的单元是表:table
查看数据库中的表
mysql>show tables;
什么是表?为什么用表存储数据?
excel表格数据就是表,数据库中存储数据是以表格形式表示数据的,因为表比较直观,任何一张表都有行和列。
行(row):被称为数据/记录。
列(column):被称为字段。
sql语句的分类
DQL:数据查询语句(凡是带有select关键字的都是查询语句)
DML:数据操作语言(凡是对表中的数据进行增删改查的都是)
insert 增
delete 删
update 改
DDL:数据定义语言(凡是带有create、drop、alter的都是)
DDL主要操作的是表的结构,不是表中的数据
create:增
drop:删除
alter:修改
查看表中的数据
mysql>select * from school;
只查看表的结构
mysql>desc school;
注意:mysql不见分号不执行!
简单查询
1、查询一个字段?
select 字段名 from 表名;
其中要注意:select和from都是关键字
字段名和表名都是标识符
2、查询两个字段或多个字段?
使用逗号隔开
查询所有 第一种方式:把每个字段都写上
第二种方式:select * from 表名
3、给查询的列起别名
mysql>select deptno,dname as deptname from dept;
使用as关键字起别名
注意:只是将显示查询结果列名显示为deptname,原列名还是叫:dname
记住:select语句是永远都不会进行修改操作的。(因为只负责查询)
条件查询
select 字段1,字段2,字段3 from 表名 where 条件;
between…and… 两个值之间,等同于>= and <=
select empno,ename,sal from emp where sal between 2450 and 3000;
注意:使用between and的时候必须遵循左小右大原则
为null is null
不为null is not null
and 和or同时出现,有优先级问题?
例如:查询工资大于2500,并且部门编号为10或20部门的员工?
select * from emp where sal>2500 and deptno=10 or deptno=20;
分析以上语句的问题?
and优先级比or高。
以上语句会先执行and,然后执行or
select * from emp where sal>2500 and (deptno=10 or deptno=20);
and和or同时出现,and优先级较高,如果想让or先执行,需要加“小括号”
in 包含,相当于多个or
like 称为模糊查询
支持%或者下划线匹配
%匹配任意多个字符
下划线:任意一个字符
排序
order by sal;//默认是升序
order by sal desc; //指定降序
order by sal asc;//指定升序
关键字顺序不能变:
select…
from…
where…
order by…
以上语句的执行顺序:
from
where
select
order by
分组函数(多行处理函数)
多行处理函数的特点:输入多行,最终输出一行。
5个:
count 计数
sum 求和
avg 平均值
max 最大值
min 最小值
注意:分组函数在使用的时候必须先进行分组,然后才能使用。
如果没分组,默认整张表是一组数据。
分组函数
第一点:分组函数自动忽略null,不需要提前对null进行处理。
第二点:分组函数中count(*)和count(具体字段)有什么区别?
count(具体字段):表示统计该字段所有不为null的元素的总数
count(*):统计表当中的总行数。(只要有一行数据count则++)
因为每一行记录不可能都为null,一行数据中有一列不为null,则该行数据就是有效的
第三点:分组函数不能够直接使用在where子句中
第四点:所有的分组函数可以组合起来一起用
分组查询
select…from…group by…
将之前的关键字全部组合在一起
select…
from…
where…
group by…
order by…
执行顺序:
1、from…
2、where…
3、group by…
4、select…
5、order by…
为什么分组函数不能直接使用在where后面?
因为分组函数在使用的时候必须分组之后才能使用。
where执行的时候,还没有分组,所以where后面不能出现分组函数。
select sum(sal) from emp;
这个没有分组,为啥sum()函数可以用呢?
因为select在group by之后执行。
重点结论:
在一条select语句当中,如果有group by语句的话,select后面只能跟参加分组的字段,以及分组函数,其它的一律不能跟。
使用having可以对分完组之后的数据进一步过滤。having不能单独使用,having不能代替where,having必须和group by联合使用。
单表查询总结
select…
from…
where…
group by…
having…
order by…
执行顺序:
1、from
2、where
3、group by
4、having
5 、select
6、order by
从某张表中查询数据,先经过where条件筛选出有价值的数据,对这些有价值 的数据进行分组,分组之后可以使用having继续筛选。select查询出来,最后排序输出。
注意:原表数据不会被修改,只是去除查询结果的重复记录。
去除重复需一个关键字:distinct
distinct只能出现在所有字段的最前方。