MySQL自学总结 (一到四章)

CodewithMosh MySQL课程

第二章

选择语句

1.sql命令不区分大小写,但最好还是语句大写

2.语句之间用分号表示结束,换行、大间隔、tab在执行sql语句时没有作用。最好每个子句单独一行

3.use使用数据表单
SELECT *从表单中选择,*代表通识符

SELECT *
FROM *\\选择子句
WHERE *\\数据筛选
ORDER BY *\\排列

注释在语句前加-- 注意两个--后有一个空格

4.子句有顺序的,先SELECT后FROM再WHERE再ORDER

5.SELECT后跟的对象可直接进行运算,需要遵守运算符优先级

6.AS可将计算的对象重命名,在输出结果中按照新的名字展示

7.AS命名中如果要加空格必须单或双引号包裹

8.使用Where语句来筛选数据 逻辑运算符中AND最优先,逻辑运算符不能连接不同数据类型,因此需要写上查询条件
in子句

WHERE state = 'va' OR state = 'fl' OR state = 'ga'
与 WHERE state IN ('va','fl','ga'')完全相同,IN子句是上述的简略形式

9.BETWEEN子句适用于筛选条件是范围之内

10.LIKE子句可以检索特定字符串模式
例如

WHERE last_name LIKE 'b%' \\百分号表示任何长度的任何字符,姓中以b开头的所有数据
或者
WHERE last_name LIKE '%b%' \\表示姓氏中有b的所有数据

_表示单字符,例如

WHERE last_name LIKE '__y' \\表示姓氏一共有三个字符,最后一个字符是y

11.正则表达式REGEXP
^表示字符串开头,$表示字符串结尾,|表示逻辑或,[]匹配任意在括号里并列的单字符,[a-f]使用-来表示范围,代表a到f

  1. IS NULL子句用来查询条件确实的数据

13.ORDER BY子句用来进行排序,条件后跟DESC表示降序

14.LIMIT子句用来限制显示的结果数量,比如LIMIT 3代表限制显示3条数据

第三章

1.inner join 内连接
将两个表连接起来用join子句
JOIN customers ON order.customer_id = customer.customer_id \\将customers表与order表连接,条件是基于两个表中customer_id是相同列
也可在SELECT中直接选择要显示的列,但如果选中了两个表的相同列会报错,需要在相同列上加上表格名前缀,例如:

SELECT order_id, orders.customer_id, first_name, last_name
FROM orders
JOIN customers
ON orders.customer_id = customers.customer_id
\\ customer_id列在两个表中都有,因此直接选择会报错,需要改成order.customer_id

另外为了简洁代码,可以将重复出现的字段写简写,例如

SELECT order_id, o.customer_id, first_name, last_name
FROM orders o
JOIN customers c
ON o.customer_id = c.customer_id
  1. 跨数据库连接,只需要给不在当前数据库的表前加前缀即可
  2. 多表连接只需多写JOIN子句链接就可以,但是要注意好表格的前缀标注
  3. 复合连接 在写条件时用AND连接即可
  4. 隐式链接 例如
SELECT *
FROM order o
JOIN customers c
  ON o.customer_id = c.customer_id
  
SELECT *
FROM order o, customer c
WHERE o.customer_id = c.customer_id
\\两个查询是完全一样的,第二个就是隐式连接,但不建议使用隐式连接,因为一旦忘记WHERE,就会造成交叉连接

6.外连接
分为LEFT JOINRIGHT JOIN两种,和内连接的区别在于,是把对应表格的所有信息都显示,而不是只显示符合条件的列
7.USING
USING用于在连接时,如果两个表连接的列名称完全相同,就可以用USING来简化代码,例如

SELECT *
FROM orders o
JOIN customers c
  ON o.customer_id = c.customer_id
  USING (customer_id)
 \\ 上面两行的作用是完全一样的,用USING可以简化代码

多主键连接时,在USING()里将多个主键写上即可
8.CROSS JOIN 交叉连接
交叉连接用于连接第一个表中的每条记录与第二个表中的每条记录,交叉连接也有显式和隐式两种写法
显式写法

SELECT *
FROM customers c
CROSS JOIN products p

隐式写法

SELECT *
FROM customers c, products p

两种是相同的,但显式代码看起来更清晰易懂
9.UNION 联合
UNION可以将多个查询的结果联合到一张表 ,也可以基于不同表写查询然后利用UNION将结果联合到一个结果集,例如

SELECT *
FROM orders
WHERE orders_id > 10
UNION
SELECT *
FROM products
WHERE product_id < 10

第四章

1.列属性

  • 数据类型
    INT 整数
    VARCHAR(50)可变字符,50代表最多可以容纳50个字符,如果不够50个会自动缩减空间
    CHAR(50)字符,不可变,如果不够50个字符会用空格来自动补齐到50个字符
  • 属性
    PK 主键 primary key
    NN 非空 not null 有该属性的列必须非空
    AI 自动递增 auto increment 通常被用在主键
    Default/Expression 每列的默认值

2.插入单行

INSERT INTO customers
VALUES ()
\\ VALUES子句中,添加插入行的各个数据,根据表格属性为NN的必须赋值,其他可用DEFAULT系统自动按照默认值

也可以采用这种形式
INSERT INTO customers ()
VALUES ()
括号中写上属性为NN的项,VALUES后直接赋值即可

3.插入多行

INSERT INTO shippers
VALUES ('shipper1'),
           ('shipper2')
\\ 插入多行只需要在VALUES后面用逗号将不同的值隔开即可

4.插入分层行
数据库中存在一个表中的一条数据可以对应另一表中的多条数据,类似于一笔订单可以有多个项目,也就是表之间的亲子关系,插入分层行也就是在亲子关系表单中插入数据。例如

INSERT INTO orders (customer_id, order_date, status)
VALUES (1, '2020-01-01', 1);
INSERT INTO order_items 
VALUES(LAST_INSERT_ID(), 1, 1, 2.95)
          (LAST_INSERT_ID(), 2, 1, 3.95)
\\ 为了获取新插入的列的id来在子表中插入数据,使用函数LAST_INSERT_ID(),就能获得刚刚插入的新列的id。
上面的例子展示了如何在母表中插入数据,又在对应子表中插入多行数据

5.创建表复制
快速将数据从一个表复制到另一个表

CREATE TABLE ordercopy AS
SELECT *
FROM orders

这就代表复制了orders表中的所有内容到一个新的表格ordercopy中,但需要注意的是,复制的表格属性是空的,没有PK 没有NN

我们也可以在CREATE句下进行数据筛选和链接,作为子查询来进行数据处理
6.更新单行

UPDATE invoices
SET payment_total = 0,
     payment_date = '2020-01-01'
WHERE invoice_id = 1
\\ 命令是将id为1的列的两项数据进行了更新

7.更新多行
与更新单行写法一样,只是注意筛选数据的条件。
MySQL中,默认在安全模式下运行,不允许一次更新多行数据
8.Update中使用子查询

UPDATE orders
SET comments = 'Gold customer'
WHERE customer_id IN
(SELECT customer_id 
FROM customers
WHERE points > 3000)

上面就是选中customers表中points大于3000的顾客将其订单数据更新为金牌顾客,注意的是,由于选择要更新的项有多个,第一个WHERE用IN来选择
9删除行

DELETE FROM invoices
WHERE client_id = (子查询)

如果不加WHERE就是直接删除整个invoices表

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352