AI智能
改变未来

MySQL基础部分学习(一)


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
常见函数
  1. 单行函数
  • 字符函数
函数名称 作用
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
  1. 分组函数(聚合函数)
函数名称 作用
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
  • 全外连接(mysql不支持)
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 旧表名
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » MySQL基础部分学习(一)