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 旧表名 |