MySQL入门

2018-09-07  本文已影响0人  eRosicky

一、关于MySQL

MySQL(Structured Query Language)是一个关系型数据库管理系统,在数据库管理系统中“表(table)”表示某种特定类型数据的结构化清单,模式(schema)是关于数据库和表的布局及特性的信息,列(column)为表中的一个字段,数据类型(datatype) 为所容许的数据的类型,主键(primary key)是表中每一行可以唯一标识自己的一列或一组列。

二、检索数据

1.检索单个列

输入:SELECT prod_name

          FROM products;

2.检索多个列

输入:SELECT prod_id, prod_name, prod_price

          FROM products;
image.png

3.检索所有列

输入:SELECT *

          FROM products;

4.检索不同的行

输入:SELECT DISTINCT vend_id

          FROM products;
image.png

5.限制结果

输入:SELECT prod_name

          FROM products

          LIMIT 5; (不多于5行)

输入:SELECT prod_name

          FROM products

          LIMIT 5,5;(返回从行5开始的5行)

三、排序检索数据

1.排序数据

输入:SELECT prod_name

          FROM products

          ORDER BY prod_name;
image.png

2.按多个列排序

输入:SELECT prod_id,prod_price,prod_name

          FROM products

          ORDER BY prod_price,prod_name
image.png

3.指定排序方向

输入:SELECT prod_id,prod_price,prod_nam

          FROM products

          ORDER BY prod_price DESC;
image.png

如果是用多个列排序,第一个列用降序,第二个列用升序

输入:SELECT prod_id,prod_price,prod_name

FROM products

ORDER BY prod_price DESC,prod_name;

image.png

四、过滤数据

1.使用where子句

输入:SELECT prod_name,prod_price

          FROM products

          WHERE prod_price = 2.50;

                     WHERE 子句操作符
image.png

2.范围值检查

输入:SELECT prod_name,prod_price

          FROM products

          WHERE pro_price BETWEEN 5 AND 10;
image.png

3.AND操作符

输入:SELECT prod_id,prod_price,prod_name

          FROM products

          WHERE vend_id = 1003 AND prod_price <= 10;

4.OR操作符

输入:SELECT prod_id,prod_price,prod_name

          FROM products

          WHERE vend_id = 1003 OR prod_price <= 10;

5.IN操作符(指定条件范围)

输入:SELECT prod_name,prod_price

          FROM products

          WHERE vend_id IN (1002,1003)

          ORDER BY prod_name;

6.NOT操作符(WHERE子句中的NOT只能用来否定它之后所跟的任何条件)

输入:SELECT prod_name,prod_price

           FROM products

           WHERE vend_id NOT IN (1002,1003)

           ORDER BY prod_name;

五、用通配符进行过滤(通配符:用来匹配值的一部分的特殊字符)

1.LIKE操作符

LIKE指示MySQL,后跟的搜索模式利用通配符匹配而

不是直接相等匹配进行比较

2.百分号(%)通配符(%表示任何字符出现任意次数)

输入:SELECT prod_id,prod_name

          FROM products

          WHERE prod_name LIKE ‘ jet%’;
image.png image.png

3.下划线(_)通配符(用途与%一样,但下划线只匹配单个字符而不是多个字符)

输入:SELECT prod_id,prod_name

           FROM products

           WHERE prod_name LIKE ‘_ ton anvil’;
image.png

六、用正则表达式过滤数据(正则表达式是用来匹配文本的特殊的串(字符集合))

1.基本字符匹配

输入:SELECT prod_name

          FROM products

          WHERE prod_name REGEXP ‘1000’

          ORDER BY prod_name;
image.png

2.进行OR匹配

输入:SELECT prod_name

           FROM products

           WHERE prod_name REGEXP ‘1000 | 2000’

           ORDER BY prod_name;

3.匹配几个字符之一

输入:SELECT prod_name

           FROM products

           WHERE prod_name REGEXP ‘[123] Ton’

           ORDER BY prod_name;
image.png image.png
输入:SELECT prod_name

           FROM products

           WHERE prod_name REGEXP ‘\\([0-9] sticks?\\)’

           ORDER BY prod_name;  

![image.png](https://img.haomeiwen.com/i11287840/a7c27a4dfe925e32.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

分析:正则表达式\\([0-9] sticks?\\),\\(匹配(,[0-9]匹配任                           

意数字,sticks?匹配stick和sticks(s后的?使s可选,因         

为?匹配它前面的任何字符的0次或1次出现),\\)匹配)

输入:SELECT prod_name

           FROM products

           WHERE prod_name REGEXP ‘[[:dight:]]{4}’

           ORDER BY prod_name;
image.png
分析:[:dight:]匹配任意数字,{4}确切地要求它前面的字符出现四次,所以[[:dight:]]{4}匹配连在一起的任意4位数字

4.定位符

image.png
输入:SELECT prod_name

           FROM products

           WHERE prod_name REGEXP’^[0-9\\.]’

           ORDER BY prod_name
image.png

七、创建计算字段

1.拼接字段

拼接(concatenate,将值联结到一起构成单个值),这

个拼接的字段还需要用括号将vend_country括起来

SELECT Concat (vend_name,’(‘,vend_country,’)’)

FROM vendors

ORDER BY vend_name;

image.png

2.别名

别名(alias)是一个字段或值的替换名,别名用AS关键字赋予

输入:SELECT Concat(vend_name),’(‘,RTrim(vend_country),’)’) AS

          vend_title

          FROM vendors

          ORDER BY vend_name
image.png

3.执行计算

输入:SELECT prod_id,

                        quantity,

                        item_price,

                        quantity*item_price AS expanded_price

          FROM orderitems 

          WHERE order_num = 2005;   
image.png

八、数据处理函数

1.文本处理函数

输入:SELECT vend_name,Upper(vend_name) AS vend_name_upcase

          FROM vendors

          ORDER BY vend_name;
image.png image.png image.png
输入:SELECT cust_name,cust_contact

           FROM customers

           WHERE Soundex(cust_contact) = Soundex(‘Y Lie’);

![image.png](https://img.haomeiwen.com/i11287840/46e2405f32cc5d2a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

2.日期和时间处理函数

image.png
输入:SELECT cust_id,order_num

           FROM orders

           WHERE order_date = ‘2005-09-01’;  

![image.png](https://img.haomeiwen.com/i11287840/71dfec638e56c488.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

3.数值处理函数

image.png

九、汇总数据(汇总数据用到聚集函数,运行在行组上,计算和返回单个值的函数)

image.png

1.AVG()函数

输入:SELECT AVG(prod_price) AS avg_price

          FROM products;
image.png

2.COUNT()函数

输入:SELECT COUNT(*) AS num_cust

          FROM customers;
image.png

3.MAX()函数

输入:SELECT MAX(prod_price) AS max_price

          FROM products;

4.MIN()函数

MAX() MIN()函数都忽略为NULL的行

5.SUM()函数

输入:SELECT SUM(quantity) AS items_ordered

          FROM orderitems

          WHERE order_num = 2005;

输入:SELECT SUM(item_price*quantity) AS total_price

          FROM orderitems

          WHERE order_num = 2005

十、分组数据

  1. 创建分组

       输入:SELECT vend_id COUNT(*) AS num_prods
    
                  FROM products
    
                  GROUP BY vend_id;
    
     ![image.png](https://img.haomeiwen.com/i11287840/af753a069015b42d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
  2. 过滤分组

       输入:SELECT cust_id, count(*)  AS orders
    
                  FROM orders
    
                  GROUP BY cust_id
    
                  HAVING COUNT(*) >= 2;
    
      ![image.png](https://img.haomeiwen.com/i11287840/dabf83e43d717f53.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
  1. 分组和排序
image.png
  1. SELECT子句顺序
image.png image.png

十一、使用子查询

  1. 子查询过滤

       输入:SELECT cust_id
    
                  FROM orders
    
                  WHERE order_num IN (SELECT order_num
    
                                                        FROM orderitems
    
                                                        WHERE prod_id = 'TNT2’);
    

十二、联结表(联结分为:等值联结、自联结、自然联结和外部联结)

外键(foreign key),外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。

笛卡尔积,由没有联结条件的表关系返回的结果为笛卡尔积。

  1. 创建等值联结(内部联结)

       输入:SELECT vendor_name,prod_name,prod_price
    
                  FROM vendors, products
    
                  WHERE vendors.vend_id = products.vend_id
    
                  ORDER BY vend_name,prod_name;
    
      ![image.png](https://img.haomeiwen.com/i11287840/b95451a727b199de.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
  2. 使用表别名

       输入:SELECT cust_name,cust_contact
    
                  FROM customers AS c,orders AS o,orderitems AS oi
    
                  WHERE c.cust_id = o.cust_id
    
                        AND oi.order_num = o.order_num
    
                        AND prod_id = ’TNT2’;       
    
  3. 自联结

           假如你发现某物品(ID为DTNTR)存在问题,因此想知道生产该物品的供应商生产         
    
       的其他物品是否也存在这些问题。此查询要求首先找到ID为DTNTR的物品的供应商,
    
       然后找到这个供应商生产的其他物品。
    
       输入:SELECT prod_id,prod_name
    
                  FROM products
    
                  WHERE vend_id=(SELECT vend_id
    
                                                FROM products
    
                                                WHERE prod_id = ‘DTNTR’);
    
       ![image.png](https://img.haomeiwen.com/i11287840/53568557bdfe784e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    

使用自联结进行相同的查询:

       输入:SELECT p1.prod_id,p1.prod_name

                  FROM products AS p1,product AS p2

                  WHERE p1.vend_id = p2.vend_id

                       AND p2.prod_id = ‘DTNTR’;         

   ![image.png](https://img.haomeiwen.com/i11287840/1482c528c4059652.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  1. 自然联结

       无论何时对表进行联结,至少有一个列出现在不止一个表中,标准的联结返回所有的数据,甚至相同的列多次出现。自然联结排除多次出现,使每个列都只返回一次。自然联结是这样一种联结, 你只能选择那些唯一的列,这一般是通过对表使用通配符(SELECT*),对其他表的列使用明确的子集来完成的。
    
    ![image.png](https://img.haomeiwen.com/i11287840/9bcbaf84288408e4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
  2. 外部联结

        联结包含了那些在相关表中没有关联行的行,这种类型的联结称为外部联结
    
       输入:SELECT customers.cust_id,orders.order_num
    
                  FROM customers LEFT OUTER JOIN orders
    
                  ON customers.cust_id = orders.cust_id;
    
      ![image.png](https://img.haomeiwen.com/i11287840/f929b5ee276f9695.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
  1. 带聚集函数的联结

       输入:SELECT customers.cust_name,
    
                                customers .cust_id,
    
                                COUNT(orders.order_num) AS num_order
    
                  FROM customers INNER JOIN orders
    
                       ON customers.cust_id = orders.cust_id         
    
                  GROUP BY customers.cust_id;  
    
      ![image.png](https://img.haomeiwen.com/i11287840/58450a2a452c1083.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
      ![image.png](https://img.haomeiwen.com/i11287840/04eb9bf7fd9a917d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    

十三、组合查询

        输入:SELECT vend_id,prod_id,prod_price

                   FROM products

                   WHERE prod_price <= 5

                   UNION

                   SELECT vend_id,prod_id,prod_price

                   FROM products

                   WHERE vend_id IN (1001,1002);

        ![image.png](https://img.haomeiwen.com/i11287840/cd955e789f359677.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

         相同的查询使用WHERE语句时:

         输入:SELECT vend_id,prod_id,prod_price

                    FROM products

                    WHERE prod_price <= 5

                            OR vend_id IN(1001,1002)

十四、全文本搜索

  1. 全文本搜索

       输入:SELECT note_text
    
                  FROM productnotes 
    
                  WHERE Match(note_text) Against(‘rabbit’)
    
      ![image.png](https://img.haomeiwen.com/i11287840/4c37ba4ea9839667.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
       Match()指定被搜索的列    Against()指定要使用的搜索表达式   
    
  2. 布尔文本搜索

       输入:SELECT note_text
    
                  FROM productnotes
    
                  WHERE Match(note_text) Against(‘heavy -rope* IN BOOLEAN MODE);
    
       ![image.png](https://img.haomeiwen.com/i11287840/0b4bf906d2f26ccc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    

十五、插入数据

  1. 插入行

       SELECT INTO Customers
    
       VALUES(NULL,
    
                ‘Pep E. LaPew’,
    
                ‘100 Main Street’,
    
                ‘Los Angeles’,
    
                ‘CA’,
    
                ‘90046’
    
                NULL,
    
                NULL);
    
       更为安全的写法
    
    ![image.png](https://img.haomeiwen.com/i11287840/8046bcf5f8d1aa1e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
  2. 插入多行

       ![image.png](https://img.haomeiwen.com/i11287840/3fcb500a050c3af8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
       ![image.png](https://img.haomeiwen.com/i11287840/f164a2f618ea6377.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
       ![image.png](https://img.haomeiwen.com/i11287840/9e7f24b72758025e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
  3. 插入检索出的数据

十六、更新和删除数据

  1. 更新数据

       输入:UPDATE customers
    
                  SET cust_email = ‘[element@163.com](mailto:element@163.com)’
    
                  WHERE cust_id = 1005; 
    
  2. 删除数据

       输入:DELETE FROM customers
    
                  WHERE cust_id = 10006;   
    

十七、创建和操纵表

  1. 创建表

      ![image.png](https://img.haomeiwen.com/i11287840/37fe28007779ed84.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
  1. 各种引擎(外键不能跨引擎)
  1. 更新表

       输入:ALTER TABLE vendors
    
                  ADD vend_phone CHAR(20);
    
       输入:ALTER TABLE Vendors
    
                  DROP COLUM vend_phone;
    
       输入:RENAME TABLE customers TO customers;
    

十八、使用视图

       视图是虚拟的表,与包含数据的表不一样,视图只包含使用时动态检索数据的查询      

      ![image.png](https://img.haomeiwen.com/i11287840/dbea02c5d1c2c223.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  1. 创建视图

       输入:CREATE VIEW productcustomers AS
    
                  SELECT cust_name,cust_contact,prod_id
    
                  FROM customers, orders,orderitems
    
                  WHERE customers.cust_id = orders.cust_id
    
                        AND orderitems.order_num = orders.order_num;    
    
        检索视图的语句与检索表格相同
    
  2. 重用视图

       普通联结查询: 
    
       ![image.png](https://img.haomeiwen.com/i11287840/0d3296c2fb5c2cf8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
       创建重用视图:
    
       ![image.png](https://img.haomeiwen.com/i11287840/ece819662d7e212e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
       检索视图:
    
      ![image.png](https://img.haomeiwen.com/i11287840/40c9ec32d86e0667.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    

十九、使用存储

  存储过程简单来说,就是为以后的使用而保存起来的一条或多条MySQL语句的集合

   变量,内存中一个特定的位置,用来临时存储数据 
  1. 执行存储过程

       输入:CALL productpricing(@pricelow,
    
                                                    @pricehigh,
    
                                                    @priceaverage);
    
  1. 创建存储过程

       输入:CREATE PROCEDURE productpricing()
    
                  BEGIN
    
                          SELECT Avg(prod_price0 AS priceaverage
    
                          FROM products;
    
                   END;
    
  2. 删除存储过程

       输入:DROP PROCEDURE productpricing;
    
  1. 使用参数

     ![image.png](https://img.haomeiwen.com/i11287840/e680cfb7b6a61ea1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
  1. 检查存储过程

       输入:SHOW CREATE PROCEDURE ordertotal;
    

二十、使用游标

  1. 创建游标

       输入:CREATE PROCEDURE processorders() 
    
                  BEGIN
    
                        DECLARE ordernumbers  CURSOR 
    
                        FOR
    
                        SELECT order_num FROM orders;
    
                  END;  
    
  1. 打开、关闭游标

       输入:OPEN ordernumbers; 
    
       输入:CLOSE ordernumbers;
    
  1. 使用游标数据

       在游标被打开后,可以使用FETCH语句分别访问每一行 ,FETCH指定检索什么数据,检索出来的数据存储在什么地方
    
上一篇 下一篇

猜你喜欢

热点阅读