一、数据库的相关概念
DBMS、DB、SQL
DB:database数据库,存储一系列有组织数据的容器
DBMS:数据库管理系统,使用DBMS管理和维护DB
SQL:结构化查询语言,程序员用户和DBMS通信的语言
二、初始MySQL
1, MySql服务的启动和终止
方式一:图形化
计算机管理——服务——mysql服务
方式二:通过管理员身份运行dos
net start 服务名
net stop 服务名
2,MySQL服务的登录和退出
方式一:通过dos命令
mysql -h主机名 -p端口号 -u用户名 -p密码
注意:
①如果是本机,则-h可省略
②如果端口号是3306,则-p可省略
方式二:通过图形化界面登录客户端
通过sqlyog等输入用户名和密码登录
设置密码:set password=password(‘12345’);
3,MySQL的常见命令和语法规范
① 常见命令
show databases 显示当前连接下的所有数据库
show tables 显示当前库中的所有表
show tables from 库名 显示指定库中的所有表
show colums from 表名 显示当前表中的所有列
use 库名 打开/使用指定库
② 语法规范
不区分大小写
每条命令结尾建议使用分号
注释:
#单行注释
–单行注释
/多行注释
三、 DQL语言的学习
1、基础查询
select 查询列表 from 表名;
特点:
①查询结果是一个虚拟表
② 查询列表可以是单个字段、多个字段、常量、表达式、函数、可以上上述组合
引申1:起别名
引申2:加法运算
-
如果两个操作都是数值型,则直接做加法运算
-
如果其中一个为非数值型,则将强制转换为数值型,如果转换失败则当做0
‘123’+4===>127
‘abc’+4===>4
- 如果其中一个为null,则结果为null
引申3:去重
select distinct department_id from employees;
引申4:补充函数
select database();
select user();
select ifnull(字段名,表达式);
select concat(字符1,字符2,字符3,100);
select length(字符/字段);获取字节长度
2、条件查询
select 查询列表
from 表名
where 筛选条件
筛选条件的分类:
① 按条件表达式筛选
关系运算符:<, >, =, <=, >=, <>(!=)
② 按逻辑表达式筛选
逻辑运算符:and or not
③ 模糊筛选
like:一般和通配符搭配使用
-任意单个字符
%任意多个字符
between and:一般用于指定某字段是否在指定区间(包含临界值)
a between 10 and 20;
in:一般用于判断某字段是否在指定列表
a in(10,20,40);
3、排序查询
select 查询列表
from表名
where 筛选条件
order by 排序列表
特点:
① 排序列表可以是单个字段、多个字段、函数、表达式、别名、列的索引、以上组合
② 升序:通过asc
降序:通过desc
4、常见函数
说明:sql中的函数分为单行函数和分组函数
调用语法:select 函数名(实参列表);
1,字符函数
concat(str1,str2):拼接字符
substr(str,pos):截取从pos开始的字符,起始索引从1开始
substr(str,pos,len):截取len个从pos开始的字符,起始索引从1开始
length(str):获取字节个数
char_length():获取字符个数
upper(str):变大写
low(str):变小写
trim( 【substr from】str):去前后指定字符,默认是空格
left(str,len):从左边截取指定len个数的字符
right(str,len):从右边截取指定len个数的字符
lpad(str,substr,len):左填充
rpad(str,substr,len):右填充
strcmp(str1,str2):比较两个字符大学
instr(str, substr):获取substr中str第一次出现的索引
2,数学函数
ceil(x):向上取整
floor(x):向下取整
round(x,d):四舍五入
mod(x,y):取模/求余
truncate(x,d):截断,保留小数点后d位
abs(x):求绝对值
3,日期函数
now():获取当前时间
curtime():只有时间
curdate():只有日期
date_format(date,格式):格式日期为字符
str_to_date(str,格式 ):将字符转换为日期
datediff(date1,date2):获取两个日期之间的天数差
year(date)
month(date)
…
4,流程控制函数
①if(条件,表达式1,表达式2) :如果条件成立,返回表达式1,否则返回表达式2
②
case 表达式
when 值1 then 结果1
when 值2 then 结果2
…
else 结果n
end
③
case
when 条件1 then 结果1
when 条件2 then 结果2
…
else 结果n
end
5,分组函数
sum()求和
avg()平均
max()最大
min()
count()个数
特点:
1》实参的字段的类型,sum和avg只支持数值型,其他是三个可以支持任意类型
2》这5个函数都忽略null值
3》count可以支持一下参数
count(字段):查询该字段非空值的个数
count(*):查询结果集的行数
count(1):查询结果集的行数
4》分组函数也可以和distinct搭配使用,实现去重的统计
select count(distinct 字段) from 表;
6,分组查询
语法:
select 分组函数,分组的字段,
from 表名
where 分组前的筛选条件
group by 分组列表
having 分组后的筛选条件
order by排序列表
特点:
1》分组列表可以是单个字段、多个字段
2》筛选条件分为两类:
筛选的基表 使用的关键字 位置
分组前筛选: 原始表 where group by前面
分组后筛选: 分组后的结果集 having group by后面
7、连接查询 *
说明:当查询中涉及到多个字段 ,则需要通过多表连接
笛卡尔乘积:
出现原因:没有有效的连接条件
解决办法:添加有效的连接条件
------------------------sql92语法-----------------
语法:
select 查询列表 ①
from 表1 别名,表2 别名,表3 别名… ②
where 连接条件 ③
and 筛选条件 ④
group by 分组列表 ⑤
having 分组后筛选 ⑥
order by 排序列表;⑦
执行顺序:②,③,④,⑤,⑥,①,⑦
------------------------sql99语法-----------------
1》内连接
语法:
select 查询列表 ①
from 表1 别名 ②
【inner 】join 表2 别名 on 连接条件 ③
【inner 】join 表3 别名 on 连接条件
where 筛选条件 ④
group by 分组列表 ⑤
having 分组后的筛选条件 ⑥
order by 排序列表 ⑦
**执行顺序:**②,③,④,⑤,⑥ ,①,⑦
2》外连接
语法:
select 查询列表 ①
from 表1 别名 ②
right |left|full 【outer 】join 表2 别名 on 连接条件 ③
where 筛选条件 ④
group by 分组列表 ⑤
having 分组后的筛选条件 ⑥
order by 排序列表 ⑦
特点:
① 外连接的查询结果= 内连接才查询结果+主表有但从表没有的记录
② 区分主从表
left join 左边为主表
right join 右边为主表
③ 一般来讲,外连接往往用来查询主表有, 但从表没有的记录
案例:
查询哪个女生没有男朋友
查询哪个部门没有员工
8,子查询 √
说明:
在一个select语句中,又嵌套了另一个完整的select语句
里面的select语句成为内查询或子查询,外面的select语句称为外查询或主查询
分类:
-
放在select后面
-
放在from后面
-
放在where或having后面
-
放在exists后面