我的网站:欢迎大家访问
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
#创建表
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 = '四川';