MySql基本语法
🤣🤣🤣🤣🤣🤣🤣🤣🤣🤣
DDL
对表结构进行操作
创建
create table 表名 (列名1 类型(长度),…);
添加字段
alter table 表名 add 字段名 字段信息
修改表名
alter table 表名 rename 新表名
修改字段类型
alter table 表名 字段名 id 新的类型
删除字段
alter table 表名 drop 字段名
删除整张表
drop table 表名
🐱👤🐱👤🐱👤🐱👤🐱👤🐱👤🐱👤🐱👤🐱👤🐱👤🐱👤🐱👤
DML
对表中的数据进行管理 对数据进行增删改查
添加数据 insert
insert into 表名 (字段名1,字段名2…) value (字段1的值,字段2的值…)
修改 update
update 表名 set 字段名 = 值 where 条件
删除 delete
delete from 表名 where 条件
查询 select
select from 表名 where 条件
多表查询
内连接
select 要查询的字段 from 表1,表2
笛卡儿积
多张表没有连接条件,返回的结果是表中数据的组合,称为笛卡儿积
消除笛卡儿积
(隐式内连接)select表1.字段1,表2.字段1… from 表1,表2 where 条件
(显示内连接) inner join 通过外键来消除,外键是另一张表的主键
select 表1.字段1,表2.字段1… from 表1 inner join 表2 on 连接的条件
外连接
取并集 以查询方 为主分为
左外连接(以左表为准 右边的数据没有 以null代替) left join
select 表1.字段1,表2.字段1… from 表1 left join 表二 on 连接条件
右外连接(和左外连接相反)right join
select 表1.字段1,表2.字段1… from 表1 right join 表二 on 连接条件
自连接
我连我自己,语法不变,把自己一张表看作多张表使用
面试题:inner join right join left join区别?
相同点:都是作为表的连接使用
不同点:
inner join 取的是表与表的交集
right join 取的是并集,以左表为准,右表没有数据以null显示
left join 取的是并集,以右表为准,左表没有数据以null显示
😐子查询
一个查询嵌套另一个查询语句中,子查询作为一个条件或者视图
select id,name (select name from test where name = ‘测试’)
函数
聚集函数
1、count
2、sum
3、avg
4、max
5、min
cast函数
转换类型,将指定的值转化为指定的类型
cast (值 as 类型)
(‘123’ as SIGNED) 将字符型的123转换为整型
select cast (id as SIGNED) from student
decimal类型
MySQL DECIMAL数据类型用于在数据库中存储精确的数值。我们经常将DECIMAL数据类型用于保留准确精确度的列,例如会计系统中的货币数据。
要定义数据类型为DECIMAL的列,请使用以下语法:
column decimal(P,D)
在上面的语法中:
P是表示有效数字数的精度。 P范围为1〜65。
D是表示小数点后的位数。 D的范围是0~30。MySQL要求D小于或等于(<=)P。
DECIMAL(P,D)表示列可以存储D位小数的P位数。十进制列的实际范围取决于精度和刻度。
convert()函数
比cast更加简洁
convert (值,类型)
select convert(id , SIGNED) from student
IFNULL()
select ifnull(id,0) from test 将id为null的字段默认赋值为0
CONCAT
concat(str1,str2,…) 表示字符串连接,可以传递多个参数
大小写 替换 截取 去空格 反转
select upper(‘a’) 将a转换为A
select lower(‘A’) 将A转换为a
select replace (需要被转换的值,要转换哪一个,转换后的值) 替换功能
select substr(截取之前的值,起始位置,截取长度) 截取功能
select trim (‘ 你 好 ‘) 去空功能,去掉两端的空格
select rtrim (‘ 你 好 ‘) 去掉右边 select ltrim (‘ 你 好 ‘) 去掉左边
select reverse(‘我去玩’) 反转功能
Demo
1 | #创建表 |
数据库设计三范式
第一范式
1NF是对属性的原子性,要求属性具有原子性,不可再分解;
表:字段1、 字段2(字段2.1、字段2.2)、字段3 ……
如学生(学号,姓名,性别,出生年月日),如果认为最后一列还可以再分成(出生年,出生月,出生日),它就不是一范式了,否则就是;
比如
第二范式
2NF是对记录的惟一性,要求记录有惟一标识,即实体的惟一性,即不存在部分依赖;
表:学号、课程号、姓名、学分;
这个表明显说明了两个事务:学生信息, 课程信息;由于非主键字段必须依赖主键,这里学分依赖课程号,姓名依赖与学号,所以不符合二范式
第三范式
3NF是对字段的冗余性,要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖;
表: 学号, 姓名, 年龄, 学院名称, 学院电话
因为存在依赖传递: (学号) → (学生)→(所在学院) → (学院电话) 。
总结就是一句话:第一范式的关键词是列的原子性》第二范式的关键词是不能包含部分依赖》第三范式的关键词是不能包含传递依赖