• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

MySQL基础

互联网 diligentman 6天前 5次浏览

这里写目录标题

  • Navicat初识
  • 数据库相关
  • 基础命令
    • SELECT 选择列
    • WHERE 结果集的条件
      • 一些判断符
      • 条件运算符 AND OR NOT
      • 其他运算符
        • IN
        • BETWEEN
        • LIKE
        • REGEXP
        • IS NULL
    • ORDER
    • LIMIT
    • JOIN
      • 连接本表
      • 连接多个表
      • 多个连接条件 AND
      • LEFT 与RIGHT JOIN
      • 使用USING简化
      • NATURAL JOIN
      • CROSS JOIN
    • UNION 联合多条SELECT
    • INSERT
    • LSAT_INSERT_ID()
    • CREATE TABLE xxx AS
    • UPDATE SET
    • DELECT

数据库,表,行列

大小写不敏感

Navicat初识

简洁明了

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

数据库相关

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

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

记得默认值DEFAULT 和 NULL

基础命令

SELECT 选择列
FROM 从哪个数据库
WHERE 选择条件
ORDER 排序原则
这几条语句顺序不能更改
MySQL基础

SELECT 选择列

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

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

MySQL基础
只显示不重复的部分DISTINCT
MySQL基础
SELECT * 选择全部
MySQL基础

WHERE 结果集的条件

一些判断符

注:<>为不等于

=
!=
>
>=
<
<=
<>

条件运算符 AND OR NOT

MySQL基础
建议利用换行使代码简洁
MySQL基础
当然也可以结合其他列进行运算
MySQL基础

其他运算符

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

IN

(选择state使VA或FL或GA的行)
MySQL基础
MySQL基础

BETWEEN

(1000<=points<=3000)
MySQL基础

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自己必须起别名
MySQL基础

连接多个表

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一般用主键作为条件连接选择条件
如果有复合主键存在,可以使用以下代码
MySQL基础

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 结果如下
MySQL基础
LEFT JOIN 结果如下
注:写的时候隐藏了OUTER,本为LEFT OUTER JOIN
MySQL基础
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

交叉连接,即笛卡尔连接,如图。
MySQL基础
显式写法

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会将他们按上下连接
MySQL基础

INSERT

MySQL基础

MySQL基础
name 插入的列
VALUES,插入数据
DEFAULT,使用默认值,
不指定的话,就是用默认值或者递增值

LSAT_INSERT_ID()

选中最后一条插入的列
MySQL基础

CREATE TABLE xxx AS

通过复制当前表创建新表,这种情况下,MySQL会忽略列的特性,如该列是主键,是自动增量等
MySQL基础
MySQL基础

UPDATE SET

MySQL基础
在WHERE中使用SEARCH
MySQL基础
MySQL基础
WHERE 适用于选择条件只有一种,如果有多种,如内部有WHERE <…等,要使用WHERE IN

DELECT

删除表中的某些列


程序员灯塔
转载请注明原文链接:https://www.wangt.cc/2020/11/mysql%e5%9f%ba%e7%a1%80/
喜欢 (0)