MySql基本语法

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#创建表
CREATE TABLE student (
id INT ( 20 ),
NAME VARCHAR ( 255 ));#添加字段
ALTER TABLE student ADD (
age INT ( 20 ),
state VARCHAR ( 255 ));#DML
#添加数据
INSERT INTO student ( id, NAME, age, state )
VALUES
( 1, '山泥若', 28, '顶不住了' );
INSERT INTO student ( id, NAME, age, state )
VALUES
( 2, '电棍', 26, '拉了跨' );
INSERT INTO student ( id, NAME, age, state )
VALUES
( 3, '落日飞车', 26, '不知道' );
#修改数据
UPDATE student
SET age = 25
WHERE
NAME = '电棍';
#删除数据
DELETE
FROM
student
WHERE
id = 3;
#多表查询
SELECT
p.productName,
p.salePrice,
p.brand,
pr.id
FROM
product p
INNER JOIN productdir pr ON p.dir_id = pr.id;
SELECT
p.productName,
p.salePrice,
p.brand,
pr.id,
(p.salePrice - p.costPrice) profits
FROM
product p
INNER JOIN productdir pr
INNER JOIN product_stock ps ON p.dir_id = pr.id
AND pr.id = ps.id
ORDER BY
profits DESC;
#外连接
#左连接
SELECT
p.*
FROM
product p
LEFT JOIN product_stock ps ON p.dir_id = ps.id;
#自连接
SELECT
a.name,b.name
FROM
area a
INNER JOIN area b ON a.id = b.pr_id
WHERE
a.NAME = '四川';

数据库设计三范式

第一范式

1NF是对属性的原子性,要求属性具有原子性,不可再分解;

表:字段1、 字段2(字段2.1、字段2.2)、字段3 ……

如学生(学号,姓名,性别,出生年月日),如果认为最后一列还可以再分成(出生年,出生月,出生日),它就不是一范式了,否则就是;

比如

第二范式

2NF是对记录的惟一性,要求记录有惟一标识,即实体的惟一性,即不存在部分依赖;

表:学号、课程号、姓名、学分;

这个表明显说明了两个事务:学生信息, 课程信息;由于非主键字段必须依赖主键,这里学分依赖课程号姓名依赖与学号,所以不符合二范式

第三范式

3NF是对字段的冗余性,要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖;

表: 学号, 姓名, 年龄, 学院名称, 学院电话

因为存在依赖传递: (学号) → (学生)→(所在学院) → (学院电话) 。

总结就是一句话:第一范式的关键词是列的原子性》第二范式的关键词是不能包含部分依赖》第三范式的关键词是不能包含传递依赖

❤赏点钱让我买杯快乐水8❤