《MySQL必知必会》总结2

三、SQL子查询

1.从内往外,查到的值作为条件输入
2.相关子查询,涉及到列名有多义性,需要用完全限定列名,如orders.cust_id
3.创建计算字段,并命名为orders

SELECT cust_name,
               (SELECT COUNT(*)
               FROM orders
               WHERE orders.cust_id = customers.cust_id) AS orders

四、SQL联结

1.关系型数据库,可伸缩性好
2.创建联结,一定要有WHERE语句
3.笛卡儿积:没有联结条件的返回值,等于第一个表行数乘以第二个表行数
4.叉联结:有联结条件的返回值
5.联结可以和子查询等价,比子查询速度快

SELECT cust_name,cust_contact
FROM customers,oders
WHERE customers.cust_id = orders.cust_id

6.联结的分类

  • 1)等值联结/内部联结

一个列在多个表中出现,返回所有数据,列会重复出现只返回有关联行的行

SELECT customers.cust_id,order.order_num
FROM customers INNER JOIN orders
ON customer.cust_id = order.cust_id;
  • 2)自联结

在同一张表中查询,表的多次命名

SELECT p1.prod_id,p1.prod_name
FROM products AS p1,products AS p2
WHERE p1.ven_id = p2.vend_id
              AND p2.prod_id = 'aaaa';
  • 3)自然联结

每一列只出现一次,排除重复列。只对第一个表所有列都列出,其他表明确列出列名

SELECT c.*,o.order_num,o.order_date
FROM customers AS c, orders AS o
WHERE c.cust_id = o.cust_id
  • 4)外联结

左外联结/右外联结,包括没有关联的行也列出,左/右可以通过颠倒FROM和WHERE进行转换

SELECT customers.cust_id,orders.order_num
FROM customers LEFT OUTER JOIN orders
ON customers.cust_id = order.cust_id;

五、SQL高级操作

1 UNION 复合查询

1)UNION在两条SELECT语句之间,包含相同的列/表达式/聚集函数,自动去除重复的行,相当于WHERE。
2)如果要返回所有行,用UNION ALL,能完成WHERE完成不了的工作。
3)只能在最后有一条ORDER BY,对所有SELECT排序

2 INSERT 插入数据

1)不产生输出,指定表名(若指明列名更准确)和被插入的值,没有值用NULL代替
2)将过滤后的数据重新插入表格中INSERT SELECT

扫描二维码关注公众号,回复: 11043427 查看本文章
INSERT INTO 表名(列名1,列名2)
VALUES(列值1,列值2);

3 UPDATE 更新数据

1)以表名开始,SET将新值赋值给更新的列,以WHERE结尾,否则更新所有的行
2)用NULL去掉列中的值

UPDATE 表名
SET 列名=更新列值
WHERE 查询条件;

4 DELETE 删除数据

DELETE FROM 表名
WHERE 删除的行

六、数据表的相关操作

1 CREATE TABLE 创建表

1)自动增量AUTO_INCREMENT,一个表只有一个,必须被索引
2)DEFAULT 1 表示默认值为1
3)PRIMARY KEY定义主键
4)引擎ENGINE,主要是一下几种:
a. InnoDB: 可靠的事务处理引擎,不支持全文本搜索
b.MEMORY:数据存储在内存中,速度快,适合临时表
c. MyISAM:支持全文本搜索,不支持事务处理

  CREATE TABLE 表名
        (
            列名  int NOT NULL AUTO_INCREMENT,
            列名 datetime NULL,
            列名 int NOT FULL DEFAULT 1,
            PRIMARY KEY(列名),
        )ENGINE=InnoDB;

七、视图

1.MYSQL5之后加入
2.包含的是动态查询语句,虚拟表,不包括任何列
3.创建视图CREATE VIEW,之后直接FROM 视图

CREATE VIEW 视图名 AS
SELECT 语句;

八、存储过程

1.执行存储过程CALL
可以有返回值,所有变量必须以@开始

CALL 存储名称(@变量名,@变量名);

2.创建存储过程
没有参数也要加(),
OUT参数从存储过程传出的值,
IN 传给存储过程,
INTO保存变量的关键字

CREATE PROCEDURE 存储名称(
        out pl DECIMAL(8,2),
        IN pa INT
)
BEGIN
     SELECT MIN(price)
     INTO pl
     FROM products;
     SELECT MAX(price)
     INTO pa
     FROM products;
 END;

3.删除存储过程

DROP PROCEDURE 存储名称;

4.检查存储过程

SHOW CREATE PROCEDURE 存储名称;

九、游标

1.定义:存储在MYSQL服务器上的数据库查询,被SELECT检索出来的结果集
2.使用原因:在检索出来的行中前进或后退一行或多行
3.创建游标DECLARE,打开游标OPEN,关闭游标CLOSE,从第一行开始检索变量FETCH
4.循环检索游标
在这里插入图片描述
在这里插入图片描述

5.查询游标

SELECT *
FROM 游标名;

十、SQL中的数据类型

1.串数据类型

定长字符串CHAR,变长字符串TEXT
电话号码/邮政编码这些有0的字段,应该存在字符串中,而不是数值字段里,用单引号括起来

在这里插入图片描述

2.数值数据类型

UNSIGNED表示非负,正向可以扩大两倍
货币类型用DECIMAL(8,2)

在这里插入图片描述

3.时间数据类型
在这里插入图片描述
4.二进制数据类型
可以存储各种类型的数据
在这里插入图片描述

发布了60 篇原创文章 · 获赞 55 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/MARY197011111/article/details/85697447
今日推荐