美文网首页
MySQL自学总结 (一到四章)

MySQL自学总结 (一到四章)

作者: Karvin | 来源:发表于2020-08-06 11:14 被阅读0次

    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表

    相关文章

      网友评论

          本文标题:MySQL自学总结 (一到四章)

          本文链接:https://www.haomeiwen.com/subject/zgyerktx.html