未加星标

MySQL必知必会笔记

字体大小 | |
[数据库(mysql) 所属分类 数据库(mysql) | 发布者 店小二04 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏

温馨提示:本文代码全部以mysql 5.7实现。

第7课 创建计算字段

select concat(vend_name, '(', vend_country, ')')
as vend_title
from vendors
order by vend_name;
select prod_id,
quantity,
item_price,
quantity*item_price as expanded_price
from orderitems
where order_num=20008;

第13课 创建高级联结

自联结(SELF-JOIN)、自然联结(NATURAL JOIN)和外联结(OUTER JOIN)。

外联结有两种基本形式:左外联结和右外联结。

select customers.cust_id, orders.order_num
from customers left outer join orders
on customers.cust_id=orders.cust_id

小结:

本课是上一课的延续,首先讲授了如何以及为什么使用别名,然后讨论不同的联结类型以及每类联结所使用的语法。我们还介绍了如何与联结一起使用聚集函数,以及在使用联结时应该注意的问题。

第14课 组合查询

并(UNION)

select cust_name, cust_contact, cust_email
from customers
where cust_state in ('IL','IN','MI')
union
select cust_name, cust_contact, cust_email
from customers
where cust_name = 'Fun4All';
小结:

这一课讲授如何用UNION操作符来组合SELECT语句。利用UNION,可以把多条查询的结果作为一条组合查询返回,不管结果中有无重复。使用UNION可极大地简化复杂的WHERE子句,简化从多个表中检索数据的工作。

第15课 插入数据

插入(INSERT)

15.1.1 插入完整的行

insert into customers (cust_id,
cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)
value ('1000000006',
'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA', NULL, NULL);
提示:INSERT通常只插入一行。
15.2 从一个表复制到另一个表

SELECT INTO(MySQL不支持)

create table custcopy as
select * from customers;
小结:

这一课介绍如何将行插入到数据库中。我们学习了使用INSERT的几种方法,为什么要明确使用列名,如何用INSERT SELECT从其它表中导入行,如何用SELECT INTO将行导出到一个新表。下一课将讲述如何使用UPDATE和DELETE进一步操作数据。

第16课 更新和删除数据

16.1 更新数据(UPDATE)

#更新一列
update customers
set [email protected]'
where cust_id='1000000005';
#更新多列
update customers
set cust_contact='Sam Roberts', [email protected]'
where cust_id='1000000006';

16.2 删除数据(DELETE)

delete from customers
where cust_id='1000000006';
删除表中所有行(TRUNCATE TABLE)

小结:

这一课讲述了如何使用UPDATE和DELETE语句处理表中的数据。我们学习了这些语句的语法,知道了它们可能存在的危险,了解了为什么WHERE子句对UPDATE和DELETE语句很重要,还学习了为保证数据安全而应遵循的一些指导原则。

第17课 创建和操纵表

17.1 创建表(CREATE TABLE)

create table products
(
prod_id char(10) not null,
vend_id char(10) not null,
prod_name char(254) not null,
prod_price decimal(8,2) not null,
prod_desc text(1000) null
);
17.1.3 指定默认值(DEFAULT)
create table orderitems
(
order_num integer not null,
order_item integer not null,
prod_id char(10) not null,
quantity integer not null default 1,
item_price decimal(8,2) not null
);
将系统日期用作默认日期:DEFAULT CURRENT_DATE()

17.2 更新表(ALTER TABLE)

#增加列
alter table vendors
add vend_phone char(20);
# 删除列
alter table vendors
drop column vend_phone;

17.3 删除表(DROP TABLE)

drop table custcopy;
17.4 重命名表
重命名表(RENAME)

小结:

这一课介绍了几条新的SQL语句。CREATE TABLE用来创建新表,ALTER TABLE用来更改表列(或其他诸如约束或索引等对象),而DROP TABLE用来完整地删除一个表。这些语句必须小心使用,并且应该在备份后使用。由于这些语句的语法在不同的DBMS中有所不同,所以更详细的信息请参阅相应的DBMS文档。

第18课 使用视图

18.2 创建视图

创建视图(CREATE VIEW)

删除视图(DROP VIEW)

18.2.1 利用视图简化复杂的联结

创建一个名为ProductCustomers的视图:

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;
从视图中检索:
select cust_name, cust_contact
from productcustomers
where prod_id='RGAN01';
18.2.2 用视图重新格式化检索出的数据
拼接字段格式的例子
select concat(vend_name, '(', vend_country, ')')
as vend_title
from vendors
order by vend_name;
# 把拼接转换为视图
create view vendorlocations as
select concat(vend_name, '(', vend_country, ')')
as vend_title
from vendors;
# 从视图中检索
select *
from vendorlocations
18.2.3 用视图过滤不想要的数据
create view CustomerEmailList as
select cust_id, cust_name, cust_email
from customers
where cust_email is not null;
# 从视图中检索
select *
from CustomerEmailList;
18.2.4 使用视图与计算字段
create view OrderItemsExpanded as
select order_num,
prod_id,
quantity,
item_price,
quantity*item_price as expanded_price
from orderitems;
# 从视图中检索
select *
from OrderItemsExpanded
where order_num=20008;
小结:
视图为虚拟的表。它们包含的不是数据而是根据需要检索数据的查询。视图提供了一种封装SELECT语句的层次,可用来简化数据处理,重新格式化或保护基础数据。
第19课(第23课) 使用存储过程(《MySQL必知必会》)

23.2 为什么要使用存储过程

有三个主要好处,即简单、安全、高性能。

23.3 使用存储过程
23.3.1 执行存储过程(CALL PROCEDURE)
call productpricing(@pricelow,
@pricehigh,
@priceaverage);

23.3.2 创建存储过程(CREATE PROCEDURE)

-- mysql命令行客户机的分隔符
delimiter // -- 告诉命令行实用程序使用//作为新的语句结束分隔符
create procedure productpricing()
begin
select avg(prod_price) as priceaverage
from products;
end //
delimiter ; -- 恢复为原来的语句分隔符
-- 使用这个存储过程
call productpricing();
23.3.3 删除存储过程(DROP PROCEDURE)
drop procedure productpricing;
23.3.4 使用参数
-- 创建带参数的存储过程
delimiter //
create procedure productpricing(
out p1 decimal(8,2),
out ph decimal(8,2),
out pa decimal(8,2)
)
begin
select min(prod_price)
into p1
from products;
select max(prod_price)
into ph
from products;
select avg(prod_price)
into pa
from products;
end //
delimiter ;
-- 使用带参数的存储过程
call productpricing(@pricelow,
@pricehigh, @priceaverage);
-- 显示检索出的3个值
select @pricehigh, @pricelow, @priceaverage;
-- 使用in和out参数
delimiter //
create procedure ordertotal(
in onumber int,
out ototal decimal(8,2)
)
begin
select sum(item_price*quantity)
from orderitems
where order_num=onumber
into ototal;
end //
delimiter ;
-- 调用并显示
call ordertotal(20005, @total);
select @total;

23.3.5 建立智能存储过程

-- 建立存储过程:获得合计,把营业税有条件地添加到合计,返回合计
-- 先删除同名的存储过程
drop procedure ordertatal;
-- Name: ordertotal
-- Parameters: onumber = order number
-- taxable = 0 if not taxable, 1 if taxable
delimiter //
create procedure ordertotal(
in onumber int,
in taxable boolean,
out ototal decimal(8,2)
) comment 'Obtain order total, optionally adding tax'
begin
-- declare定义局部变量
-- declare variable for total
declare total decimal(8,2);
-- declare tax percentage
declare taxrate int default 6;
-- get the order total
select sum(item_price*quantity)
from orderitems
where order_num = onumber
into total;
-- is this taxable?
if taxable then
-- yes, so add taxrate to the total
select total+(total/100*taxrate) into total;
end if;
-- and finally, save to out variable
select total into ototal;
end //
delimiter ;
-- 调用并显示
call ordertotal(20005, 1, @total);
select @total;

23.3.6 检查存储过程(SHOW CREATE PROCEDURE)

show create procedure ordertotal;
-- 获得全部存储过程详细信息
show procedure status;
-- 获得该存储过程详细信息
show procedure status like 'ordertotal';

小结:

这一课介绍了什么是存储过程,为什么使用存储过程。我们介绍了招行存储过程的语法,使用存储过程的一些方法。存储过程是个相当重要的主题,一课内容无法全部涉及。各种DBMS对存储过程的实现不一,你使用的DBMS可能提供了一些这里提到的功能,也有其他未提及的功能,更详细的介绍请参阅具体的DBMS文档。

本文数据库(mysql)相关术语:navicat for mysql mysql workbench mysql数据库 mysql 存储过程 mysql安装图解 mysql教程 mysql 管理工具

主题: SQLMySQL数据存储过程删除DUAUCUUT营业税
分页:12
转载请注明
本文标题:MySQL必知必会笔记
本站链接:http://www.codesec.net/view/480180.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(mysql) | 评论(0) | 阅读(45)