一、数据库的定义
数据库(DataBase,DB),常见的数据库有:MySQL、Oracle、MS sqlServer。
数据管理系统(DataBaeseManagement,DBMS):用于管理数据库中的数据,可以对数据库中的数据进行增删改查。
SQL语言:结构化查询语言。
执行步骤:DBMS -> 执行 -> SQL -> 操作 -> MySQL
二、MySQL的基础知识
① 注:端口号(port):是应用的唯一代表,通常和IP地址放在一起,IP定位计算机,端口定位应有,具有唯一性。MySQL的默认端口号为3306。
②启动、关闭mysql服务
net start mysql; //打开mysql服务
net stop mysql; //关闭mysql服务
③本地登录mysql
mysql -u*** -p***; //-u后面为账号,-p后面为密码
mysql -uroot -p123; //自己使用的账号为root,密码为123;
④mysql常用命令
exit //退出mysql
show databases //查看mysql中有哪些数据库
use *** //使用***数据库
create database *** //创建***数据库
show tables //查看数据库中的表
select version() //查看版本号
select database() //查看当前使用的数据库
⑤导入".sql"文件
source ...(把文件拉进命令行窗口)
⑥数据库中最基本的单元: 表 -- table
任何一张表都有行和列:
行(row):数据/记录
列(column):字段
三、SQL语句的分类
DQL:查询语句(带有select关键字)
select ...
DML:操作语句(对表中的数据进行增、删、改)
insert(增)、delete(删)、update(改)
DDL:定义语句(操作表的结构,而非对表中的数据)
create(新建)、drop(删除)、alter(修改)
TCL:事务控制语句
commit(提交)、rollback(回滚)
DCL:数据控制语言
grant(授权)、revoke(撤销)
四、SQL语句的使用
1.查询一个字段
select 字段名 from 表名; //select和from是关键字,字段名和表名是标识符
2.查询两个或者多个字段,用','隔开
select 字段名,字段名 from 表名;
3.查询所有字段
select 字段名,...,字段名 form 表名; //把所有字段名都写上
select * from 表名: //使用*,表示所有。(但效率低,可读性差,开发不建议使用)
4.给查询的列起别名(原表名不变,更改的只是展示出来的)
select 旧字段名 as 新字段名 from 表名; //若新的字段名有空格,则用''标起
select 旧字段名 新字段名 from 表名: //旧字段名后面空格然后再写新字段名也可以
5.条件查询
select 字段名 from 表 where 条件;
5.1条件表示
= 等于 between...and... 在..和..之间
<> or != 不等于 is null null
< 小于 and 且
<= 小于等于 or 或
> 大于 in 包含
>= 大于等于 not is not null 或 not in
5.2模糊查询(like)
select xxx1 from xxx where xxx1 like '%A%';
'%A' 以A结尾 'A%' 以A开头
'%A%' 含有A '_A%' 第二个为A(下划线_有n个就查第n+1个)
6.排序(排序都在最后才执行)
①从低到高进行排序,升序(asc)
select xxx1 from XXX order by xxx1;
②从高到低进行排序,降序(desc)
select xxx1 from XXX order by xxx1 desc;
③多个排序
select xxx1,xxx2 from XXX order by xxx1 asc,xxx2 desc;
④根据字段位置进行排序
select xxx1,xxx2 from XXX order by 2; //按照第2列开始排序,但是通常不用,不健壮
五、数据处理函数
一、单行处理函数
特点:一个输入对应一个输出
1).常见的单行处理函数
- lower 转换小写
- upper 转换大写
- substr 取子串 (select substr(xx1,a,b) from XXX;) //下标从1开始,不是从0
- concat 字符串拼接
- length 取长度 (length(xxx))
- trim 去空格
- str_to_date 将字符串转换为日期
- data_format 格式化日期
- format 设置千分位
- round 四舍五入
- select round(1234.567,0) from XXX; 1235
- select round(1234.567,1) from XXX; 1234.6
- select round(1234.567,-1) from XXX; 1230 //'-'则往左,保留十位
- rand() 生成随机数
- ifnull 将null转换成一个具体值
- ifnull(数据,当作哪个值)
如:A有null,则:
select B,ifnull(A,0) *12 from XXX;
13. case ... when ... then .. when .. then .. else .. and
二、分组函数(多行处理函数) //自动忽略NULL
特点:多个输入一个输出
- count 计数 count(*) :总行数
- sum 求和
- avg 平均值
- max 最大值
- min 最小值
三、分组查询
select ... from ... group by ...;
关键字编写顺序: 执行顺序:
select from
from where
where group by
group by select
order by order by
having的使用:对已分完组的数据进一步过滤,与group by一起使用,不可单独使用。
select
xxx1,max(xx2)
from
XXX
group by
xxx1
having
max(xx2) > abc ; (abc为新的条件)
条件where的优化策略:优先优化where,实在不行再使用having。
查询语句的编写总结:
select .. from .. where .. group by .. having .. order by ..
(从左-右,顺序不可变,必须遵守)