赞
踩
一共有十一个步骤,最先执行的是FROM操作,最后执行的是LIMIT操作。每个操作都会产生一个虚拟表,该虚拟表作为一个处理的输入,具体执行顺序如下:
(1) FROM:对FROM子句中的左表<left_table>和右表<right_table>执行笛卡儿积,产生虚拟表VT1;
(2) ON: 对虚拟表VT1进行ON筛选,只有那些符合<join_condition>的行才被插入虚拟表VT2;
(3) JOIN: 如果指定了OUTER JOIN(如LEFT OUTER JOIN、RIGHT OUTER JOIN),那么保留表中未匹配的行作为外部行添加到虚拟表VT2,产生虚拟表VT3。如果FROM子句包含两个以上的表,则对上一个连接生成的结果表VT3和下一个表重复执行步骤1~步骤3,直到处理完所有的表;
(4) WHERE: 对虚拟表VT3应用WHERE过滤条件,只有符合<where_condition>的记录才会被插入虚拟表VT4;
(5) GROUP By: 根据GROUP BY子句中的列,对VT4中的记录进行分组操作,产生VT5;
(6) CUBE|ROllUP: 对VT5进行CUBE或ROLLUP操作,产生表VT6;
(7) HAVING: 对虚拟表VT6应用HAVING过滤器,只有符合<having_condition>的记录才会被插入到VT7;
(8) SELECT: 执行SELECT操作,选择指定的列,插入到虚拟表VT8中;
(9) DISTINCT: 去除重复数据,产生虚拟表VT9;
(10) ORDER BY: 将虚拟表VT9中的记录按照<order_by_list>进行排序操作,产生虚拟表VT10;
(11) LIMIT: 取出指定行的记录,产生虚拟表VT11,并返回给查询用户。
设计数据库时,某一个字段属于一张表,但它同时出现另一个或多个表中,且完全等同于它在其本来所属表的意义表示
两张表,用户表、订单表,用户表中有字段name,而订单表中也存在字段name。
对字段建立索引可以大大提高查询速度
主键索引(primary key)
10.1.1 主键索引 (primary key)
一个表可以没有主键,但最多只能有一个主键,且主键值不能包含null
语法格式:即主键的格式
10.1.2唯一索引(unique)
唯一索引可以保证数据记录的唯一性。
语法格式:即唯一的格式
多了一个 create语句创建
create unique index 索引名 on 表名(列名(长度))
10.1.3 普通索引(index)
普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHERE column=)或排序条件(ORDERBY column)中的数据列创建索引。
create index 索引名 on 表名(列名[长度])
ALTER TABLE 表名 ADD INDEX 索引名 (列名)
create view 视图名 [column_list] as select语句;
#1. 先编写查询语句 #查询所有商品 和 商品的对应分类信息 SELECT * FROM products p LEFT JOIN category c ON p.`category_id` = c.`cid`; #2.基于上面的查询语句,创建一张视图 CREATE VIEW products_category_view AS SELECT * FROM products p LEFT JOIN category c ON p.`category_id` = c.`cid`;
SELECT * FROM products_category_view;
SELECT MAX(price) AS pricemax FROM products p LEFT JOIN category c ON p.`category_id` = c.`cid` WHERE c.`cname` = '鞋服'
SELECT * FROM p_c_view pcv WHERE pcv.cname = '鞋服' AND pcv.price = (SELECT MAX(price) FROM p_c_view WHERE cname = '鞋服')
数据准备
创建一个商品表,订单表
需求:编写一个存储过程,查询所有的商品数据
12.1方式1
12.2方式2
12.3方式3
SET @变量名=值
OUT 变量名 数据类型
当执行一条sql语句时,这条sql语句的执行会自动触发执行其他语句 即“连锁反应”
create uesr '用户名'@'主机名' identified by '密码'
-- 创建 admin1 用户,只能在 localhost -- 这个服务器登录 mysql 服务器,密码为 12345 CREATE USER 'admin1'@'localhost' IDENTIFIED BY '123456';
语法格式
grant 权限1,权限2... on 数据库名.表名 to '用户名'@'主机名'
语法格式
SHOW GRANTS FOR '用户名'@'主机名';
例如查看root用户的权限
SHOW GRANTS FOR 'root'@'localhost';
GRANT ALL PRIVILEGES 是表示所有权限
语法格式
DROP USER '用户名'@'主机名';
SELECT * FROM USER;
15命令行备份
语法格式
mysqldump -u 用户名 -p 密码 数据库 > 文件路
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。