MySQL基础


数据库,表,行列
大小写不敏感

Navicat初识

简洁明了

  • Ctrl+` 进入命令行界面
  • 查询,新建查询,编写SQL文件
  • 查看DDL,表上右键,对象信息,选DDL,可以看主键

数据库相关

在这里插入图片描述
VARCHAR 比 CHAR 更优,因为当CHAR字符不足50时,CHAR会自动填充剩余空间剩余空字符,导致空间浪费
PK 是否为主键
NN not null 是否可以为 NULL
AI 自动增进,常用于主键
Dafult 默认值

虽然有时候SQL语句很长,但是不要忘了是 ; 结尾

记得默认值DEFAULT 和 NULL

基础命令

SELECT 选择列
FROM 从哪个数据库
WHERE 选择条件
ORDER 排序原则
这几条语句顺序不能更改
在这里插入图片描述

SELECT 选择列

可以用来对选择的列进行一些转换

SELECT
	*,
	(poinys+10)*100 AS another
-- 可以看到,虽然我们已经引入了*,但是为了引入别名,还是另写了一行

在这里插入图片描述
只显示不重复的部分DISTINCT
在这里插入图片描述
SELECT * 选择全部
在这里插入图片描述

WHERE 结果集的条件

一些判断符

注:<>为不等于

=
!=
>
>=
<
<=
<>

条件运算符 AND OR NOT

在这里插入图片描述
建议利用换行使代码简洁
在这里插入图片描述
当然也可以结合其他列进行运算
在这里插入图片描述

其他运算符

(我也不知道是不是叫这个)

IN

(选择state使VA或FL或GA的行)
在这里插入图片描述
在这里插入图片描述

BETWEEN

(1000<=points<=3000)
在这里插入图片描述

LIKE

匹配模式串

WHERE state LIKE 'b%'
-- b后跟了若干字符
WHERE state LIKE '_y'
-- y前面跟了一个字符
WHERE state LIKE 'b__y'
-- b后两个字符,然后是一个y
REGEXP

功能更为强大的正则表达式

-- ^ beginning
-- $ end
-- | logical or
-- [] [amd]
-- - [a-f]
WHERE last_name REGEXP '^fff'
-- 必须以fff开头
WHERE last_name REGEXP 'fff$'
-- 必须以fff结尾
WHERE last_name REGEXP '^fff|mac|rose'
-- 以ff开头,或包含mac,或包含rose
WHERE last_name REGEXP '[gim]e'
-- 含有e且e之一个是g或i或m
WHERE last_name REGEXP '[a-h]e'
-- 含有e且e之前是a-h中的任意一个字符
IS NULL
WHERE last_name IS NULL

ORDER

后跟算术表达式

-- DESC 降序
ORDER BY first_name DESC
-- 优先级排序,即使某一列没有SELECT也可以按照该列排序(mysql是这样,其他不一定)
ORDER BY state DESC, first_name, xxx DESC
-- 用数字表示按照选择的第x列,如按照选择的第一列查询
-- 实际使用中应避免
ORDER BY 1

LIMIT

限制结果集的个数(行数)

-- 不足300的话就返回全部,否则返回前300
LIMIT 300
--跳过6个,读取3个:7,8,9
LIMIT 63
-- 语句顺序,在ORDER之后
SELECT
FROM
WHERE
ORDER
LIMIT

JOIN

和其他表结合,链接满足某些条件的,几个表中的数据。
有INNER RIGHT LEFT CROSS 四种,默认为INNER(这部分还妹看太懂)

SELECT order_id,o.customer_id, first_name, last_name
FROM orders o
JOIN customers c
	ON o.customer_id = c.customer_id
-- orders中行A的customer_id和customers中行B的customer_id相等,则结果集中显示,o为orders的别名,c为customers的别名,定义别名之后无法使用原名,注意SELECT 语句中的o.customer_id,当两个表中有重名列时,必须精准定义

选择不属于当前数据库的表JOIN, 在表前加前缀

FROM sql_store.order_items oi

连接本表

reports_to:该用户属于哪个老板
employee_id:员工id
以下代码可以根据reports_to找到他的老板,并显示姓名
JOIN自己必须起别名
在这里插入图片描述

连接多个表

SELECT
	o.order_id,
	o.order_date,
	c.first_name,
	c.last_name,
	os.name AS status
FROM orders o
JOIN customers c
	ON o.customer_id = c.customer_id
JOIN order_statuses os
	ON o.status = os.order_status_id

多个连接条件 AND

JOIN一般用主键作为条件连接选择条件
如果有复合主键存在,可以使用以下代码
在这里插入图片描述

LEFT 与RIGHT JOIN

SELECT 
	c.customer_id,
	c.first_name,
	o.order_id
FROM customers c
JOIN orders o
	ON c.customer_id = o.customer_id
ORDER BY c.customer_id

INNER JOIN 结果如下
在这里插入图片描述
LEFT JOIN 结果如下
注:写的时候隐藏了OUTER,本为LEFT OUTER JOIN
在这里插入图片描述
JOIN的过程,就是对照着customerid,找到对应的orderd,将两行的结果放到一起,然后显示。如果找不到这样的两行,就不显示。
LEFT JOIN。就是,就算找不到右边那个orderid,也显示左表的数据,右表的数据显示为null。
尽量不适用RIGHT JOIN 否则会很乱

使用USING简化

FROM a
JOIN b
	ON a.x=b.x
-- 等同于
FROM a
JOIN b
	USING(x)
-- 适用于两个名字都一样的情况
--同样可以用于复合主键的清康
FROM a
JOIN b
	ON a.x=b.x AND 
	a.y=b.y
-- 等同于
FROM a
JOIN b
	USING(x,y)
-- 妙啊

NATURAL JOIN

数据库自行根据一些相同的列名进行联合,非常不推荐使用

CROSS JOIN

交叉连接,即笛卡尔连接,如图。
在这里插入图片描述
显式写法

SELECT
	c.first_name AS customer,
	p.name AS product
FROM customers c
CROSS JOIN products p
ORDER BY c.first_name

隐式写法

SELECT
	c.first_name AS customer,
	p.name AS product
FROM customers c, products p
ORDER BY c.first_name

UNION 联合多条SELECT

注意:SELECT 结果集的列数应该相等,UNION会将他们按上下连接
在这里插入图片描述

INSERT

在这里插入图片描述

在这里插入图片描述
name 插入的列
VALUES,插入数据
DEFAULT,使用默认值,
不指定的话,就是用默认值或者递增值

LSAT_INSERT_ID()

选中最后一条插入的列
在这里插入图片描述

CREATE TABLE xxx AS

通过复制当前表创建新表,这种情况下,MySQL会忽略列的特性,如该列是主键,是自动增量等
在这里插入图片描述
在这里插入图片描述

UPDATE SET

在这里插入图片描述
在WHERE中使用SEARCH
在这里插入图片描述
在这里插入图片描述
WHERE 适用于选择条件只有一种,如果有多种,如内部有WHERE <…等,要使用WHERE IN

DELECT

删除表中的某些列

  • 22
    点赞
  • 179
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值