MySQL基础部分学习(一)
基本命令
| 常用命令 |
作用 |
| mysql -uroot -p |
登录 |
| show databases |
显示所有数据库 |
| use 库名 |
进入数据库 |
| show tables |
显示所有表 |
| selelct database() |
查看当前数据库 |
| desc 表名 |
查看表信息 |
| select version() |
查看mysql版本 |
| mysql –version |
查看mysql版本 |
简单查询相关命令
| 常用命令 |
作用 |
| select * from 表 |
查看所有数据 |
| select a as A |
给属性a起别名A(as可以省略) |
| select distinct 属性 from 表 |
去重查询 |
| select concat(属性1,属性2) from 表 |
属性连接(null和其他仍然为null) |
| select IFNULL(属性,默认值) from 表 |
属性为空则返回默认值 |
mysql属性相加的结果
| 种类 |
结果 |
| 数字+数字 |
数字 |
| 数字+‘666’ |
字符转换数字成功,加666 |
| 数字+‘aaa’ |
字符转化数字失败,加0 |
| null+其他 |
null |
条件查询
where后插入条件:
| 查询方式 |
举例 |
| 按条件表达式筛选 |
>、<、=、<>(!=) |
| 按逻辑表达式筛选 |
&& 、竖线、!、and、or、not |
| 模糊查询 |
like 、between and 、in、is null、is not null |
- like包括%(匹配多个)和 _(匹配一个),若匹配%和_时用转义字符 \\
- 转义字符也可以用escape来自定义
排序查询
一般放到SQL语句的最后
| 查询方式 |
举例 |
| 升序 |
order by 排序列表 asc |
| 降序 |
order by 排序列表 desc |
常见函数
- 单行函数
| 函数名称 |
作用 |
| concat(属性1,属性2…) |
拼接字符串 |
| length(属性) |
获取参数值字节长度 |
| upper(属性) |
参数大写 |
| lower(属性) |
参数大写 |
| substr(主串,start,length) |
获取主串从start位置开始的长度为length的子串 |
| instr(主串,子串) |
获取子串在主串中第一次出现的位置 |
| trim(属性) |
去掉前后空格 |
| lpad(属性,length,填充字符) |
用指定的字符实现左填充指定长度 |
| rpad(属性,length,填充字符) |
用指定的字符实现右填充指定长度 |
| replace(属性,“原字符”,“替换字符”) |
替换指定的字符 |
| 函数名称 |
作用 |
| round(值) |
四舍五入 |
| ceil(值) |
向上取整 |
| floor(值) |
向下取整 |
| truncate(值,截断位数) |
从小数某位开始截断 |
| mod(值,模) |
取余 |
| 函数名称 |
作用 |
| now() |
返回当前日期及时间 |
| curdate() |
返回当前日期 |
| curtime() |
返回当前时间 |
| year() |
获取年份 |
| month() |
获取月份 |
| str_to_date(‘字符串’,‘日期格式’) |
将字符串转换为日期 |
| date_formate(‘日期’,‘格式’) |
将日期转换为指定格式字符 |
| datediff(“日期1”,“日期2”) |
日期相减得到的天数 |
| 函数名称 |
作用 |
| version() |
返回当前数据库版本 |
| database() |
返回当前数据库的信息 |
| user() |
返回当前用户 |
if函数(类似于Java的三元运算符):
if(10>5,\'大\',\'小\')
case函数:
//类似于java的switch函数case 变量when x1 then 结果1when x2 then 结果2else 结果3end as 新变量//类似于java的if-else函数casewhen 条件1 then 结果1when 条件2 then 结果2else 结果3end
- 分组函数(聚合函数)
| 函数名称 |
作用 |
| sum(属性) |
求和函数 |
| avg(属性) |
求平均值 |
| max(属性) |
求最大值 |
| min(属性) |
求最小值 |
| count(属性) |
求数量 |
- 分组函数都忽略null值
- group by语句用于分组
- 和distinct可以结合使用,如sum(distinct money)
- select语句中若出现分组函数则不能有分组变量之外的其他变量
- having用于分组后的筛选,where用于分组前
多表查询
连接查询分类
| 分类 |
种类 |
| 内连接 |
等值连接、非等值连接、自连接 |
| 外连接 |
左外连接、右外连接、全外连接(mysql不支持) |
| 交叉连接 |
– |
- 等值连接(交集部分,n表连接需要n-1个连接条件)
sql92语法select *from 表1,表2where 表1.属性x=表2.属性x
sql99语法(推荐)select *from 表1 inner join 表2 on 表1.属性x=表2.属性x
sql92语法select *from 表1,表2where 表1.属性x<表2.属性x
sql99语法(推荐)select *from 表1 inner join 表2 on 表1.属性x<表2.属性x
sql92语法select *from 表1 A,表1 Bwhere A.属性x=B.属性y
sql99语法select *from 表1 A inner join 表1 B on A.属性x=B.属性y
select *from 表1 A left outer join 表1 B on A.属性x=B.属性y
select *from 表1 A right outer join 表1 B on A.属性x=B.属性y
select *from 表1 A full outer join 表1 B on A.属性x=B.属性y
相当于笛卡尔乘积select *from 表1 A cross join 表1 B
子查询
子查询结果集的形式:
- 标量子查询(一行一列):一般搭配>、<、=号使用
- 列子查询(多行一列):一般搭配 IN 、ALL、ANY
- 行子查询(一行多列)
- 表子查询(多行多列)
子查询出现的位置可以是:
- select 后面:仅仅支持标量子查询
- from 后面:支持表子查询
- where 后面:标量子查询、行子查询、列子查询
- exists 后面:表子查询(可以查看是否有值,返回Boolean值)
分页查询
语法: limit offset size,加到查询语句最后
offset:起始索引,从0开始(mysql的起始索引从1开始)
size:查询的条目个数
用法:limit (page-1)*size size
联合查询
将多个查询结果合并为一个结果,比如将以下代码1改为联合查询代码2。
要求:
- 要求多条查询语句的列数必须一致
- 要求每一列的类型和顺序也尽量一致
- 联合查询会自动去重,不去重则用union all关键字
代码1select * from 表A where id>10 and name=“tom”
代码2select * from 表A where id>10unionselect * from 表A where name=“tom”
DML语言(数据操作语言)
| 操作 |
语句 |
| 插入(方式一) |
insert into 表(属性1,属性2…) values(值1,值2…) |
| 插入(方式二) |
insert into 表 set 属性1=值1,属性2=值2… |
| 更新单表 |
update 表 set 属性1=值1,属性2=值2… where 条件 |
| 更新多表 |
update 表1 inner join 表2 on 连接条件 set 属性1=值1… where 条件 |
| 删除 |
delete from 表 where 条件 |
| 删除整个表的数据 |
truncate table 表名 |
- 插入方式一支持单次插入多行,支持子查询
- delete删除完后若再插入数据,id从断点开始,truncate删除后从1开始
- delete删除有返回值,truncate无返回值
- delete删除可以回滚,truncate不可回滚
DDL语言(数据定义语言)
-
操作数据库
| 操作 |
语句 |
| 建立数据库 |
create database (if not exists)库名 |
| 修改字符集 |
alter database 库名 character set 字符集名称 |
| 删除数据库 |
drop database (exists) 库名 |
-
操作表
| 操作 |
语句 |
| 创建表 |
create table 表名{ 属性1 类型1,属性2 类型2…} |
| 修改列名 |
alter table 表名 change column 属性名 新属性名 新类型 |
| 修改列类型 |
alter table 表名 modify column 属性名 新类型 |
| 添加新列 |
alter table 表名 add column 属性名 类型 |
| 删除列 |
alter table 表名 drop column 属性名 |
| 修改表名 |
alter table 表名 rename to 新表名 |
| 删除表 |
drop table if exists 表名 |
| 复制表结构 |
create table 新表名 like 旧表名 |
| 复制结构加内容 |
create table 新表名 select * from 旧表名 |