MySQL
1.SQL,DB,DBMS分别是什么,他们之间的关系?
DB:
DataBase(数据库,数据库实际上在硬盘以文件的形式存在)
DBMS:
DataBase Management System(数据库管理系统,常见的有MYSQL Oracle DB2 Sybase sqlsever)
SQL:
结构化查询语言,是一门标准通用的语言
属于高级语言
在执行时先编译再执行sql(sql语句的编译由DBMS完成)
DBMS负责执行sql语句,通过执行sql语句来操作DB当中的数据。
DBMS--(执行)-->sql--(操作)-->DB
2.什么是表(table)
是数据库的基本组成单元,所有的数据都以表的形式组织,目的是可读性强
一个表包括行和列
行:被称为数据/记录(data)
列:被称为字段(column)
每个字段应该包括哪些属性?
字段名,数据类型,相关的约束
3.学习MYSQL主要还是学习通用的SQL语句,SQL语句的分类
DQL(数据查询语言):查询语句,凡是select语句都是DQL
DML(数据操作语言):insert delete update对表中的数据增删改
DDL(数据定义语言):create dorp alter,对表结构的增删改
TCL(事务控制语言):commit事务,rollbake回滚事务。
DCL(数据控制语言):grant授权,revoke撤销权限。
4.导入数据
1.登录MySQL数据管理系统
MySQL -uroot -proot
2.查看有哪些数据库(这句不是sql语句,属于MySQL的命令。)
show databases;
3.创建属于我们自己的数据库(use这句不是sql语句,属于MySQL的命令。)
create database <数据库名称> ;
4.使用数据库
use <数据库名称>;(这句不是sql语句,属于MySQL的命令。)
5.查看当前使用的数据库有哪些表?
show tables; (这句不是sql语句,属于MySQL的命令。)
6.初始化数据
mysql>source(加上文件地址)
5.以sql结尾,这样的文件被称为“sql脚本”。什么是sql脚本呢?
当一个文件的扩展名是.sql,并且该文件中编写了大量的sql文件,我们成为这样的文件为sql脚本。
注意:直接使用sourec命令可以执行sql脚本。
sql脚本中的数据量太大的时候,无法打开,请使用source命令完成初始化。
6.删除数据库:dorp database <库名>;
7.查看表的结构:
desc <表名>;
8.表中的数据:
查询表中的全部数据
select * from <表名>;
9.常用命令
select database(); 查看当前使用的是那个数据库。
select version(); 查看MySQL的版本号。
\c 结束一条语句
exit 退出MySQL
10.查看创建表的语句
show create table emp;
11.简单的查询语句
语法格式
select <字段名1,字段名2.....> from <表名>;
提示
1.任何一条sql语句以“;”结尾
2.sql语句不区分大小写。
3.字段可以参与数学运算。
给查询结果的列重命名?
select ename,<原来的列名> as <新的列名> from <表>;
别名中有中文?(字符串使用单引号括起来,双引号不通用)
select ename,<原来的列名> as <'中文'> from <表>;
as 关键字可以省略,但是最好写出来
查询所有字段?
select *from <表名>;(Java程序中不建议)
12.条件查询。
语法格式;
select
字段,字段.....
from
表名
where
条件;
1.between and(1.这个是闭区间
2.必须是左小右大
3.可以运用到字符串<左闭右开>)
2.在数据库当中NULL不是一个值,代表什么也没有,为空。
空不是一个值,不能用等号衡量。
必须使用 is NULL或者 is not NULL
3.and和or联合起来用:
优先于and
注意!!当优先级不确定的时候现加小括号。
4.in等同于or
in后面的值不是区间,是特定的值
in(1000,5000) <表示1000和5000>
where sal in(1000,5000);
5.not in:不在这几个值
6.模糊查询 like?
%代表任意多个字符
_代表任意一个字符
找出名字中含有o的?
select ename from emp where ename like '%o%';
找出名字中第二个字母是A的?
select ename from emp where ename like '_o%';
找出名字中下划线的?(用转义)
select ename from emp where ename like '%\_%';
找出名字中最后一个字母是T的
select ename from emp where ename like '%T';
13.排序(升序,降序)
order by <> asc/desc(默认升序)
asc表示升序
desc表示降序
按照工资的降序排,当工资一样的时候,按照名字的升序排列。
select ename,sal from emp order by sal desc,ename asc;
注意:越靠前的字段越能起到主导作用。只有当前边的无法排序了,
才会启用后边得到字段。
找出工作岗位是SALESMAN的员工,并且要求按照薪资的降序排列。
select
ename,job,sal----3
from
emp ----------------1
where
job='SALESMAN'------2
order by
sal desc; ----------4
14.分组函数?
count 计数
sum 求和
avg 平均值
max 最大值
min 最小值
记住:所有的分组函数都是对“某一组”数据进行操作的
分组函数还有一个名字:多行处理函数。
多行处理函数的特点:输入多行,输出单行。
1.注意!!!!!!!分组函数自动忽略NULL。!!!
select sum(comm) from emp;
2.找出工资高于平均工资的员工
select avg(sal) from emp;
select ename,sal from emp where sal>avg(sal);
错误的无效的使用了分组函数
原因:SQL语句中有一个语法规则
分组函数不能直接用于在where语句之中。
3.count(*)和count(具体的某个字段),他们之间有什么区别。
select count(*) from emp;
统计总记录条数
select count(comm) from emp;
表示统计字段中不为null的数据总数量。
4.分组函数也能组合起来用。
select avg(sal),max(sal),min(sal) from emp;
15.单行处理函数?
什么是单行处理函数?
输入一行,输出一行。
计算每个员工的年薪?
select ename,(sal*12+comm*12) from emp;
重点:所有数据库都是这样规定的,只要有NULL参与运算,结果为NULL
ifnull()空处理函数
ifnull(可能为null的函数,被当作什么处理):属于单行处理函数
select ename,(sal+ifnull(comm,0))*12 as yearsal from emp;
16.group by 和 having
group by:按照某个字段或者某些字段进行分组。
having:对分组之后的数据再次进行过滤。
格式
select 分组函数<字段名> from <表名> group by <分组>;
找出每个工作岗位的最高薪资。
select max(sal) from emp group by job;
注意:1.分组函数一般都会和group by同时使用,
这也就是他被称为分组函数的原因。
2.每一个分组函数都是在group by语句执行结束后才开始执行的。
3.当一条SQL语句没有group by 的话,这个表自成一组。